Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * INET         An implementation of the TCP/IP protocol suite for the LINUX
  3  *              operating system.  INET is implemented using the  BSD Socket
  4  *              interface as the means of communication with the user level.
  5  *
  6  *              Generic socket support routines. Memory allocators, socket lock/release
  7  *              handler for protocols to use and generic option handler.
  8  *
  9  *
 10  * Authors:     Ross Biro
 11  *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 12  *              Florian La Roche, <flla@stud.uni-sb.de>
 13  *              Alan Cox, <A.Cox@swansea.ac.uk>
 14  *
 15  * Fixes:
 16  *              Alan Cox        :       Numerous verify_area() problems
 17  *              Alan Cox        :       Connecting on a connecting socket
 18  *                                      now returns an error for tcp.
 19  *              Alan Cox        :       sock->protocol is set correctly.
 20  *                                      and is not sometimes left as 0.
 21  *              Alan Cox        :       connect handles icmp errors on a
 22  *                                      connect properly. Unfortunately there
 23  *                                      is a restart syscall nasty there. I
 24  *                                      can't match BSD without hacking the C
 25  *                                      library. Ideas urgently sought!
 26  *              Alan Cox        :       Disallow bind() to addresses that are
 27  *                                      not ours - especially broadcast ones!!
 28  *              Alan Cox        :       Socket 1024 _IS_ ok for users. (fencepost)
 29  *              Alan Cox        :       sock_wfree/sock_rfree don't destroy sockets,
 30  *                                      instead they leave that for the DESTROY timer.
 31  *              Alan Cox        :       Clean up error flag in accept
 32  *              Alan Cox        :       TCP ack handling is buggy, the DESTROY timer
 33  *                                      was buggy. Put a remove_sock() in the handler
 34  *                                      for memory when we hit 0. Also altered the timer
 35  *                                      code. The ACK stuff can wait and needs major
 36  *                                      TCP layer surgery.
 37  *              Alan Cox        :       Fixed TCP ack bug, removed remove sock
 38  *                                      and fixed timer/inet_bh race.
 39  *              Alan Cox        :       Added zapped flag for TCP
 40  *              Alan Cox        :       Move kfree_skb into skbuff.c and tidied up surplus code
 41  *              Alan Cox        :       for new sk_buff allocations wmalloc/rmalloc now call alloc_skb
 42  *              Alan Cox        :       kfree_s calls now are kfree_skbmem so we can track skb resources
 43  *              Alan Cox        :       Supports socket option broadcast now as does udp. Packet and raw need fixing.
 44  *              Alan Cox        :       Added RCVBUF,SNDBUF size setting. It suddenly occurred to me how easy it was so...
 45  *              Rick Sladkey    :       Relaxed UDP rules for matching packets.
 46  *              C.E.Hawkins     :       IFF_PROMISC/SIOCGHWADDR support
 47  *      Pauline Middelink       :       identd support
 48  *              Alan Cox        :       Fixed connect() taking signals I think.
 49  *              Alan Cox        :       SO_LINGER supported
 50  *              Alan Cox        :       Error reporting fixes
 51  *              Anonymous       :       inet_create tidied up (sk->reuse setting)
 52  *              Alan Cox        :       inet sockets don't set sk->type!
 53  *              Alan Cox        :       Split socket option code
 54  *              Alan Cox        :       Callbacks
 55  *              Alan Cox        :       Nagle flag for Charles & Johannes stuff
 56  *              Alex            :       Removed restriction on inet fioctl
 57  *              Alan Cox        :       Splitting INET from NET core
 58  *              Alan Cox        :       Fixed bogus SO_TYPE handling in getsockopt()
 59  *              Adam Caldwell   :       Missing return in SO_DONTROUTE/SO_DEBUG code
 60  *              Alan Cox        :       Split IP from generic code
 61  *              Alan Cox        :       New kfree_skbmem()
 62  *              Alan Cox        :       Make SO_DEBUG superuser only.
 63  *              Alan Cox        :       Allow anyone to clear SO_DEBUG
 64  *                                      (compatibility fix)
 65  *              Alan Cox        :       Added optimistic memory grabbing for AF_UNIX throughput.
 66  *              Alan Cox        :       Allocator for a socket is settable.
 67  *              Alan Cox        :       SO_ERROR includes soft errors.
 68  *              Alan Cox        :       Allow NULL arguments on some SO_ opts
 69  *              Alan Cox        :       Generic socket allocation to make hooks
 70  *                                      easier (suggested by Craig Metz).
 71  *              Michael Pall    :       SO_ERROR returns positive errno again
 72  *              Steve Whitehouse:       Added default destructor to free
 73  *                                      protocol private data.
 74  *              Steve Whitehouse:       Added various other default routines
 75  *                                      common to several socket families.
 76  *              Chris Evans     :       Call suser() check last on F_SETOWN
 77  *              Jay Schulist    :       Added SO_ATTACH_FILTER and SO_DETACH_FILTER.
 78  *              Andi Kleen      :       Add sock_kmalloc()/sock_kfree_s()
 79  *              Andi Kleen      :       Fix write_space callback
 80  *              Chris Evans     :       Security fixes - signedness again
 81  *              Arnaldo C. Melo :       cleanups, use skb_queue_purge
 82  *
 83  * To Fix:
 84  *
 85  *
 86  *              This program is free software; you can redistribute it and/or
 87  *              modify it under the terms of the GNU General Public License
 88  *              as published by the Free Software Foundation; either version
 89  *              2 of the License, or (at your option) any later version.
 90  */
 91 
 92 #include <linux/capability.h>
 93 #include <linux/errno.h>
 94 #include <linux/types.h>
 95 #include <linux/socket.h>
 96 #include <linux/in.h>
 97 #include <linux/kernel.h>
 98 #include <linux/module.h>
 99 #include <linux/proc_fs.h>
100 #include <linux/seq_file.h>
101 #include <linux/sched.h>
102 #include <linux/timer.h>
103 #include <linux/string.h>
104 #include <linux/sockios.h>
105 #include <linux/net.h>
106 #include <linux/mm.h>
107 #include <linux/slab.h>
108 #include <linux/interrupt.h>
109 #include <linux/poll.h>
110 #include <linux/tcp.h>
111 #include <linux/init.h>
112 #include <linux/highmem.h>
113 
114 #include <asm/uaccess.h>
115 #include <asm/system.h>
116 
117 #include <linux/netdevice.h>
118 #include <net/protocol.h>
119 #include <linux/skbuff.h>
120 #include <net/net_namespace.h>
121 #include <net/request_sock.h>
122 #include <net/sock.h>
123 #include <linux/net_tstamp.h>
124 #include <net/xfrm.h>
125 #include <linux/ipsec.h>
126 
127 #include <linux/filter.h>
128 
129 #ifdef CONFIG_INET
130 #include <net/tcp.h>
131 #endif
132 
133 /*
134  * Each address family might have different locking rules, so we have
135  * one slock key per address family:
136  */
137 static struct lock_class_key af_family_keys[AF_MAX];
138 static struct lock_class_key af_family_slock_keys[AF_MAX];
139 
140 /*
141  * Make lock validator output more readable. (we pre-construct these
142  * strings build-time, so that runtime initialization of socket
143  * locks is fast):
144  */
145 static const char *af_family_key_strings[AF_MAX+1] = {
146   "sk_lock-AF_UNSPEC", "sk_lock-AF_UNIX"     , "sk_lock-AF_INET"     ,
147   "sk_lock-AF_AX25"  , "sk_lock-AF_IPX"      , "sk_lock-AF_APPLETALK",
148   "sk_lock-AF_NETROM", "sk_lock-AF_BRIDGE"   , "sk_lock-AF_ATMPVC"   ,
149   "sk_lock-AF_X25"   , "sk_lock-AF_INET6"    , "sk_lock-AF_ROSE"     ,
150   "sk_lock-AF_DECnet", "sk_lock-AF_NETBEUI"  , "sk_lock-AF_SECURITY" ,
151   "sk_lock-AF_KEY"   , "sk_lock-AF_NETLINK"  , "sk_lock-AF_PACKET"   ,
152   "sk_lock-AF_ASH"   , "sk_lock-AF_ECONET"   , "sk_lock-AF_ATMSVC"   ,
153   "sk_lock-AF_RDS"   , "sk_lock-AF_SNA"      , "sk_lock-AF_IRDA"     ,
154   "sk_lock-AF_PPPOX" , "sk_lock-AF_WANPIPE"  , "sk_lock-AF_LLC"      ,
155   "sk_lock-27"       , "sk_lock-28"          , "sk_lock-AF_CAN"      ,
156   "sk_lock-AF_TIPC"  , "sk_lock-AF_BLUETOOTH", "sk_lock-IUCV"        ,
157   "sk_lock-AF_RXRPC" , "sk_lock-AF_ISDN"     , "sk_lock-AF_PHONET"   ,
158   "sk_lock-AF_IEEE802154",
159   "sk_lock-AF_MAX"
160 };
161 static const char *af_family_slock_key_strings[AF_MAX+1] = {
162   "slock-AF_UNSPEC", "slock-AF_UNIX"     , "slock-AF_INET"     ,
163   "slock-AF_AX25"  , "slock-AF_IPX"      , "slock-AF_APPLETALK",
164   "slock-AF_NETROM", "slock-AF_BRIDGE"   , "slock-AF_ATMPVC"   ,
165   "slock-AF_X25"   , "slock-AF_INET6"    , "slock-AF_ROSE"     ,
166   "slock-AF_DECnet", "slock-AF_NETBEUI"  , "slock-AF_SECURITY" ,
167   "slock-AF_KEY"   , "slock-AF_NETLINK"  , "slock-AF_PACKET"   ,
168   "slock-AF_ASH"   , "slock-AF_ECONET"   , "slock-AF_ATMSVC"   ,
169   "slock-AF_RDS"   , "slock-AF_SNA"      , "slock-AF_IRDA"     ,
170   "slock-AF_PPPOX" , "slock-AF_WANPIPE"  , "slock-AF_LLC"      ,
171   "slock-27"       , "slock-28"          , "slock-AF_CAN"      ,
172   "slock-AF_TIPC"  , "slock-AF_BLUETOOTH", "slock-AF_IUCV"     ,
173   "slock-AF_RXRPC" , "slock-AF_ISDN"     , "slock-AF_PHONET"   ,
174   "slock-AF_IEEE802154",
175   "slock-AF_MAX"
176 };
177 static const char *af_family_clock_key_strings[AF_MAX+1] = {
178   "clock-AF_UNSPEC", "clock-AF_UNIX"     , "clock-AF_INET"     ,
179   "clock-AF_AX25"  , "clock-AF_IPX"      , "clock-AF_APPLETALK",
180   "clock-AF_NETROM", "clock-AF_BRIDGE"   , "clock-AF_ATMPVC"   ,
181   "clock-AF_X25"   , "clock-AF_INET6"    , "clock-AF_ROSE"     ,
182   "clock-AF_DECnet", "clock-AF_NETBEUI"  , "clock-AF_SECURITY" ,
183   "clock-AF_KEY"   , "clock-AF_NETLINK"  , "clock-AF_PACKET"   ,
184   "clock-AF_ASH"   , "clock-AF_ECONET"   , "clock-AF_ATMSVC"   ,
185   "clock-AF_RDS"   , "clock-AF_SNA"      , "clock-AF_IRDA"     ,
186   "clock-AF_PPPOX" , "clock-AF_WANPIPE"  , "clock-AF_LLC"      ,
187   "clock-27"       , "clock-28"          , "clock-AF_CAN"      ,
188   "clock-AF_TIPC"  , "clock-AF_BLUETOOTH", "clock-AF_IUCV"     ,
189   "clock-AF_RXRPC" , "clock-AF_ISDN"     , "clock-AF_PHONET"   ,
190   "clock-AF_IEEE802154",
191   "clock-AF_MAX"
192 };
193 
194 /*
195  * sk_callback_lock locking rules are per-address-family,
196  * so split the lock classes by using a per-AF key:
197  */
198 static struct lock_class_key af_callback_keys[AF_MAX];
199 
200 /* Take into consideration the size of the struct sk_buff overhead in the
201  * determination of these values, since that is non-constant across
202  * platforms.  This makes socket queueing behavior and performance
203  * not depend upon such differences.
204  */
205 #define _SK_MEM_PACKETS         256
206 #define _SK_MEM_OVERHEAD        (sizeof(struct sk_buff) + 256)
207 #define SK_WMEM_MAX             (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS)
208 #define SK_RMEM_MAX             (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS)
209 
210 /* Run time adjustable parameters. */
211 __u32 sysctl_wmem_max __read_mostly = SK_WMEM_MAX;
212 __u32 sysctl_rmem_max __read_mostly = SK_RMEM_MAX;
213 __u32 sysctl_wmem_default __read_mostly = SK_WMEM_MAX;
214 __u32 sysctl_rmem_default __read_mostly = SK_RMEM_MAX;
215 
216 /* Maximal space eaten by iovec or ancilliary data plus some space */
217 int sysctl_optmem_max __read_mostly = sizeof(unsigned long)*(2*UIO_MAXIOV+512);
218 EXPORT_SYMBOL(sysctl_optmem_max);
219 
220 static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen)
221 {
222         struct timeval tv;
223 
224         if (optlen < sizeof(tv))
225                 return -EINVAL;
226         if (copy_from_user(&tv, optval, sizeof(tv)))
227                 return -EFAULT;
228         if (tv.tv_usec < 0 || tv.tv_usec >= USEC_PER_SEC)
229                 return -EDOM;
230 
231         if (tv.tv_sec < 0) {
232                 static int warned __read_mostly;
233 
234                 *timeo_p = 0;
235                 if (warned < 10 && net_ratelimit()) {
236                         warned++;
237                         printk(KERN_INFO "sock_set_timeout: `%s' (pid %d) "
238                                "tries to set negative timeout\n",
239                                 current->comm, task_pid_nr(current));
240                 }
241                 return 0;
242         }
243         *timeo_p = MAX_SCHEDULE_TIMEOUT;
244         if (tv.tv_sec == 0 && tv.tv_usec == 0)
245                 return 0;
246         if (tv.tv_sec < (MAX_SCHEDULE_TIMEOUT/HZ - 1))
247                 *timeo_p = tv.tv_sec*HZ + (tv.tv_usec+(1000000/HZ-1))/(1000000/HZ);
248         return 0;
249 }
250 
251 static void sock_warn_obsolete_bsdism(const char *name)
252 {
253         static int warned;
254         static char warncomm[TASK_COMM_LEN];
255         if (strcmp(warncomm, current->comm) && warned < 5) {
256                 strcpy(warncomm,  current->comm);
257                 printk(KERN_WARNING "process `%s' is using obsolete "
258                        "%s SO_BSDCOMPAT\n", warncomm, name);
259                 warned++;
260         }
261 }
262 
263 static void sock_disable_timestamp(struct sock *sk, int flag)
264 {
265         if (sock_flag(sk, flag)) {
266                 sock_reset_flag(sk, flag);
267                 if (!sock_flag(sk, SOCK_TIMESTAMP) &&
268                     !sock_flag(sk, SOCK_TIMESTAMPING_RX_SOFTWARE)) {
269                         net_disable_timestamp();
270                 }
271         }
272 }
273 
274 
275 int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
276 {
277         int err = 0;
278         int skb_len;
279 
280         /* Cast sk->rcvbuf to unsigned... It's pointless, but reduces
281            number of warnings when compiling with -W --ANK
282          */
283         if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
284             (unsigned)sk->sk_rcvbuf) {
285                 err = -ENOMEM;
286                 goto out;
287         }
288 
289         err = sk_filter(sk, skb);
290         if (err)
291                 goto out;
292 
293         if (!sk_rmem_schedule(sk, skb->truesize)) {
294                 err = -ENOBUFS;
295                 goto out;
296         }
297 
298         skb->dev = NULL;
299         skb_set_owner_r(skb, sk);
300 
301         /* Cache the SKB length before we tack it onto the receive
302          * queue.  Once it is added it no longer belongs to us and
303          * may be freed by other threads of control pulling packets
304          * from the queue.
305          */
306         skb_len = skb->len;
307 
308         skb_queue_tail(&sk->sk_receive_queue, skb);
309 
310         if (!sock_flag(sk, SOCK_DEAD))
311                 sk->sk_data_ready(sk, skb_len);
312 out:
313         return err;
314 }
315 EXPORT_SYMBOL(sock_queue_rcv_skb);
316 
317 int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
318 {
319         int rc = NET_RX_SUCCESS;
320 
321         if (sk_filter(sk, skb))
322                 goto discard_and_relse;
323 
324         skb->dev = NULL;
325 
326         if (nested)
327                 bh_lock_sock_nested(sk);
328         else
329                 bh_lock_sock(sk);
330         if (!sock_owned_by_user(sk)) {
331                 /*
332                  * trylock + unlock semantics:
333                  */
334                 mutex_acquire(&sk->sk_lock.dep_map, 0, 1, _RET_IP_);
335 
336                 rc = sk_backlog_rcv(sk, skb);
337 
338                 mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
339         } else
340                 sk_add_backlog(sk, skb);
341         bh_unlock_sock(sk);
342 out:
343         sock_put(sk);
344         return rc;
345 discard_and_relse:
346         kfree_skb(skb);
347         goto out;
348 }
349 EXPORT_SYMBOL(sk_receive_skb);
350 
351 struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
352 {
353         struct dst_entry *dst = sk->sk_dst_cache;
354 
355         if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
356                 sk->sk_dst_cache = NULL;
357                 dst_release(dst);
358                 return NULL;
359         }
360 
361         return dst;
362 }
363 EXPORT_SYMBOL(__sk_dst_check);
364 
365 struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie)
366 {
367         struct dst_entry *dst = sk_dst_get(sk);
368 
369         if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
370                 sk_dst_reset(sk);
371                 dst_release(dst);
372                 return NULL;
373         }
374 
375         return dst;
376 }
377 EXPORT_SYMBOL(sk_dst_check);
378 
379 static int sock_bindtodevice(struct sock *sk, char __user *optval, int optlen)
380 {
381         int ret = -ENOPROTOOPT;
382 #ifdef CONFIG_NETDEVICES
383         struct net *net = sock_net(sk);
384         char devname[IFNAMSIZ];
385         int index;
386 
387         /* Sorry... */
388         ret = -EPERM;
389         if (!capable(CAP_NET_RAW))
390                 goto out;
391 
392         ret = -EINVAL;
393         if (optlen < 0)
394                 goto out;
395 
396         /* Bind this socket to a particular device like "eth0",
397          * as specified in the passed interface name. If the
398          * name is "" or the option length is zero the socket
399          * is not bound.
400          */
401         if (optlen > IFNAMSIZ - 1)
402                 optlen = IFNAMSIZ - 1;
403         memset(devname, 0, sizeof(devname));
404 
405         ret = -EFAULT;
406         if (copy_from_user(devname, optval, optlen))
407                 goto out;
408 
409         if (devname[0] == '\0') {
410                 index = 0;
411         } else {
412                 struct net_device *dev = dev_get_by_name(net, devname);
413 
414                 ret = -ENODEV;
415                 if (!dev)
416                         goto out;
417 
418                 index = dev->ifindex;
419                 dev_put(dev);
420         }
421 
422         lock_sock(sk);
423         sk->sk_bound_dev_if = index;
424         sk_dst_reset(sk);
425         release_sock(sk);
426 
427         ret = 0;
428 
429 out:
430 #endif
431 
432         return ret;
433 }
434 
435 static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool)
436 {
437         if (valbool)
438                 sock_set_flag(sk, bit);
439         else
440                 sock_reset_flag(sk, bit);
441 }
442 
443 /*
444  *      This is meant for all protocols to use and covers goings on
445  *      at the socket level. Everything here is generic.
446  */
447 
448 int sock_setsockopt(struct socket *sock, int level, int optname,
449                     char __user *optval, int optlen)
450 {
451         struct sock *sk = sock->sk;
452         int val;
453         int valbool;
454         struct linger ling;
455         int ret = 0;
456 
457         /*
458          *      Options without arguments
459          */
460 
461         if (optname == SO_BINDTODEVICE)
462                 return sock_bindtodevice(sk, optval, optlen);
463 
464         if (optlen < sizeof(int))
465                 return -EINVAL;
466 
467         if (get_user(val, (int __user *)optval))
468                 return -EFAULT;
469 
470         valbool = val ? 1 : 0;
471 
472         lock_sock(sk);
473 
474         switch (optname) {
475         case SO_DEBUG:
476                 if (val && !capable(CAP_NET_ADMIN))
477                         ret = -EACCES;
478                 else
479                         sock_valbool_flag(sk, SOCK_DBG, valbool);
480                 break;
481         case SO_REUSEADDR:
482                 sk->sk_reuse = valbool;
483                 break;
484         case SO_TYPE:
485         case SO_ERROR:
486                 ret = -ENOPROTOOPT;
487                 break;
488         case SO_DONTROUTE:
489                 sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool);
490                 break;
491         case SO_BROADCAST:
492                 sock_valbool_flag(sk, SOCK_BROADCAST, valbool);
493                 break;
494         case SO_SNDBUF:
495                 /* Don't error on this BSD doesn't and if you think
496                    about it this is right. Otherwise apps have to
497                    play 'guess the biggest size' games. RCVBUF/SNDBUF
498                    are treated in BSD as hints */
499 
500                 if (val > sysctl_wmem_max)
501                         val = sysctl_wmem_max;
502 set_sndbuf:
503                 sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
504                 if ((val * 2) < SOCK_MIN_SNDBUF)
505                         sk->sk_sndbuf = SOCK_MIN_SNDBUF;
506                 else
507                         sk->sk_sndbuf = val * 2;
508 
509                 /*
510                  *      Wake up sending tasks if we
511                  *      upped the value.
512                  */
513                 sk->sk_write_space(sk);
514                 break;
515 
516         case SO_SNDBUFFORCE:
517                 if (!capable(CAP_NET_ADMIN)) {
518                         ret = -EPERM;
519                         break;
520                 }
521                 goto set_sndbuf;
522 
523         case SO_RCVBUF:
524                 /* Don't error on this BSD doesn't and if you think
525                    about it this is right. Otherwise apps have to
526                    play 'guess the biggest size' games. RCVBUF/SNDBUF
527                    are treated in BSD as hints */
528 
529                 if (val > sysctl_rmem_max)
530                         val = sysctl_rmem_max;
531 set_rcvbuf:
532                 sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
533                 /*
534                  * We double it on the way in to account for
535                  * "struct sk_buff" etc. overhead.   Applications
536                  * assume that the SO_RCVBUF setting they make will
537                  * allow that much actual data to be received on that
538                  * socket.
539                  *
540                  * Applications are unaware that "struct sk_buff" and
541                  * other overheads allocate from the receive buffer
542                  * during socket buffer allocation.
543                  *
544                  * And after considering the possible alternatives,
545                  * returning the value we actually used in getsockopt
546                  * is the most desirable behavior.
547                  */
548                 if ((val * 2) < SOCK_MIN_RCVBUF)
549                         sk->sk_rcvbuf = SOCK_MIN_RCVBUF;
550                 else
551                         sk->sk_rcvbuf = val * 2;
552                 break;
553 
554         case SO_RCVBUFFORCE:
555                 if (!capable(CAP_NET_ADMIN)) {
556                         ret = -EPERM;
557                         break;
558                 }
559                 goto set_rcvbuf;
560 
561         case SO_KEEPALIVE:
562 #ifdef CONFIG_INET
563                 if (sk->sk_protocol == IPPROTO_TCP)
564                         tcp_set_keepalive(sk, valbool);
565 #endif
566                 sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
567                 break;
568 
569         case SO_OOBINLINE:
570                 sock_valbool_flag(sk, SOCK_URGINLINE, valbool);
571                 break;
572 
573         case SO_NO_CHECK:
574                 sk->sk_no_check = valbool;
575                 break;
576 
577         case SO_PRIORITY:
578                 if ((val >= 0 && val <= 6) || capable(CAP_NET_ADMIN))
579                         sk->sk_priority = val;
580                 else
581                         ret = -EPERM;
582                 break;
583 
584         case SO_LINGER:
585                 if (optlen < sizeof(ling)) {
586                         ret = -EINVAL;  /* 1003.1g */
587                         break;
588                 }
589                 if (copy_from_user(&ling, optval, sizeof(ling))) {
590                         ret = -EFAULT;
591                         break;
592                 }
593                 if (!ling.l_onoff)
594                         sock_reset_flag(sk, SOCK_LINGER);
595                 else {
596 #if (BITS_PER_LONG == 32)
597                         if ((unsigned int)ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ)
598                                 sk->sk_lingertime = MAX_SCHEDULE_TIMEOUT;
599                         else
600 #endif
601                                 sk->sk_lingertime = (unsigned int)ling.l_linger * HZ;
602                         sock_set_flag(sk, SOCK_LINGER);
603                 }
604                 break;
605 
606         case SO_BSDCOMPAT:
607                 sock_warn_obsolete_bsdism("setsockopt");
608                 break;
609 
610         case SO_PASSCRED:
611                 if (valbool)
612                         set_bit(SOCK_PASSCRED, &sock->flags);
613                 else
614                         clear_bit(SOCK_PASSCRED, &sock->flags);
615                 break;
616 
617         case SO_TIMESTAMP:
618         case SO_TIMESTAMPNS:
619                 if (valbool)  {
620                         if (optname == SO_TIMESTAMP)
621                                 sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
622                         else
623                                 sock_set_flag(sk, SOCK_RCVTSTAMPNS);
624                         sock_set_flag(sk, SOCK_RCVTSTAMP);
625                         sock_enable_timestamp(sk, SOCK_TIMESTAMP);
626                 } else {
627                         sock_reset_flag(sk, SOCK_RCVTSTAMP);
628                         sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
629                 }
630                 break;
631 
632         case SO_TIMESTAMPING:
633                 if (val & ~SOF_TIMESTAMPING_MASK) {
634                         ret = -EINVAL;
635                         break;
636                 }
637                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE,
638                                   val & SOF_TIMESTAMPING_TX_HARDWARE);
639                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE,
640                                   val & SOF_TIMESTAMPING_TX_SOFTWARE);
641                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_RX_HARDWARE,
642                                   val & SOF_TIMESTAMPING_RX_HARDWARE);
643                 if (val & SOF_TIMESTAMPING_RX_SOFTWARE)
644                         sock_enable_timestamp(sk,
645                                               SOCK_TIMESTAMPING_RX_SOFTWARE);
646                 else
647                         sock_disable_timestamp(sk,
648                                                SOCK_TIMESTAMPING_RX_SOFTWARE);
649                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_SOFTWARE,
650                                   val & SOF_TIMESTAMPING_SOFTWARE);
651                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE,
652                                   val & SOF_TIMESTAMPING_SYS_HARDWARE);
653                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE,
654                                   val & SOF_TIMESTAMPING_RAW_HARDWARE);
655                 break;
656 
657         case SO_RCVLOWAT:
658                 if (val < 0)
659                         val = INT_MAX;
660                 sk->sk_rcvlowat = val ? : 1;
661                 break;
662 
663         case SO_RCVTIMEO:
664                 ret = sock_set_timeout(&sk->sk_rcvtimeo, optval, optlen);
665                 break;
666 
667         case SO_SNDTIMEO:
668                 ret = sock_set_timeout(&sk->sk_sndtimeo, optval, optlen);
669                 break;
670 
671         case SO_ATTACH_FILTER:
672                 ret = -EINVAL;
673                 if (optlen == sizeof(struct sock_fprog)) {
674                         struct sock_fprog fprog;
675 
676                         ret = -EFAULT;
677                         if (copy_from_user(&fprog, optval, sizeof(fprog)))
678                                 break;
679 
680                         ret = sk_attach_filter(&fprog, sk);
681                 }
682                 break;
683 
684         case SO_DETACH_FILTER:
685                 ret = sk_detach_filter(sk);
686                 break;
687 
688         case SO_PASSSEC:
689                 if (valbool)
690                         set_bit(SOCK_PASSSEC, &sock->flags);
691                 else
692                         clear_bit(SOCK_PASSSEC, &sock->flags);
693                 break;
694         case SO_MARK:
695                 if (!capable(CAP_NET_ADMIN))
696                         ret = -EPERM;
697                 else
698                         sk->sk_mark = val;
699                 break;
700 
701                 /* We implement the SO_SNDLOWAT etc to
702                    not be settable (1003.1g 5.3) */
703         default:
704                 ret = -ENOPROTOOPT;
705                 break;
706         }
707         release_sock(sk);
708         return ret;
709 }
710 EXPORT_SYMBOL(sock_setsockopt);
711 
712 
713 int sock_getsockopt(struct socket *sock, int level, int optname,
714                     char __user *optval, int __user *optlen)
715 {
716         struct sock *sk = sock->sk;
717 
718         union {
719                 int val;
720                 struct linger ling;
721                 struct timeval tm;
722         } v;
723 
724         unsigned int lv = sizeof(int);
725         int len;
726 
727         if (get_user(len, optlen))
728                 return -EFAULT;
729         if (len < 0)
730                 return -EINVAL;
731 
732         memset(&v, 0, sizeof(v));
733 
734         switch (optname) {
735         case SO_DEBUG:
736                 v.val = sock_flag(sk, SOCK_DBG);
737                 break;
738 
739         case SO_DONTROUTE:
740                 v.val = sock_flag(sk, SOCK_LOCALROUTE);
741                 break;
742 
743         case SO_BROADCAST:
744                 v.val = !!sock_flag(sk, SOCK_BROADCAST);
745                 break;
746 
747         case SO_SNDBUF:
748                 v.val = sk->sk_sndbuf;
749                 break;
750 
751         case SO_RCVBUF:
752                 v.val = sk->sk_rcvbuf;
753                 break;
754 
755         case SO_REUSEADDR:
756                 v.val = sk->sk_reuse;
757                 break;
758 
759         case SO_KEEPALIVE:
760                 v.val = !!sock_flag(sk, SOCK_KEEPOPEN);
761                 break;
762 
763         case SO_TYPE:
764                 v.val = sk->sk_type;
765                 break;
766 
767         case SO_ERROR:
768                 v.val = -sock_error(sk);
769                 if (v.val == 0)
770                         v.val = xchg(&sk->sk_err_soft, 0);
771                 break;
772 
773         case SO_OOBINLINE:
774                 v.val = !!sock_flag(sk, SOCK_URGINLINE);
775                 break;
776 
777         case SO_NO_CHECK:
778                 v.val = sk->sk_no_check;
779                 break;
780 
781         case SO_PRIORITY:
782                 v.val = sk->sk_priority;
783                 break;
784 
785         case SO_LINGER:
786                 lv              = sizeof(v.ling);
787                 v.ling.l_onoff  = !!sock_flag(sk, SOCK_LINGER);
788                 v.ling.l_linger = sk->sk_lingertime / HZ;
789                 break;
790 
791         case SO_BSDCOMPAT:
792                 sock_warn_obsolete_bsdism("getsockopt");
793                 break;
794 
795         case SO_TIMESTAMP:
796                 v.val = sock_flag(sk, SOCK_RCVTSTAMP) &&
797                                 !sock_flag(sk, SOCK_RCVTSTAMPNS);
798                 break;
799 
800         case SO_TIMESTAMPNS:
801                 v.val = sock_flag(sk, SOCK_RCVTSTAMPNS);
802                 break;
803 
804         case SO_TIMESTAMPING:
805                 v.val = 0;
806                 if (sock_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE))
807                         v.val |= SOF_TIMESTAMPING_TX_HARDWARE;
808                 if (sock_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE))
809                         v.val |= SOF_TIMESTAMPING_TX_SOFTWARE;
810                 if (sock_flag(sk, SOCK_TIMESTAMPING_RX_HARDWARE))
811                         v.val |= SOF_TIMESTAMPING_RX_HARDWARE;
812                 if (sock_flag(sk, SOCK_TIMESTAMPING_RX_SOFTWARE))
813                         v.val |= SOF_TIMESTAMPING_RX_SOFTWARE;
814                 if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE))
815                         v.val |= SOF_TIMESTAMPING_SOFTWARE;
816                 if (sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE))
817                         v.val |= SOF_TIMESTAMPING_SYS_HARDWARE;
818                 if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE))
819                         v.val |= SOF_TIMESTAMPING_RAW_HARDWARE;
820                 break;
821 
822         case SO_RCVTIMEO:
823                 lv = sizeof(struct timeval);
824                 if (sk->sk_rcvtimeo == MAX_SCHEDULE_TIMEOUT) {
825                         v.tm.tv_sec = 0;
826                         v.tm.tv_usec = 0;
827                 } else {
828                         v.tm.tv_sec = sk->sk_rcvtimeo / HZ;
829                         v.tm.tv_usec = ((sk->sk_rcvtimeo % HZ) * 1000000) / HZ;
830                 }
831                 break;
832 
833         case SO_SNDTIMEO:
834                 lv = sizeof(struct timeval);
835                 if (sk->sk_sndtimeo == MAX_SCHEDULE_TIMEOUT) {
836                         v.tm.tv_sec = 0;
837                         v.tm.tv_usec = 0;
838                 } else {
839                         v.tm.tv_sec = sk->sk_sndtimeo / HZ;
840                         v.tm.tv_usec = ((sk->sk_sndtimeo % HZ) * 1000000) / HZ;
841                 }
842                 break;
843 
844         case SO_RCVLOWAT:
845                 v.val = sk->sk_rcvlowat;
846                 break;
847 
848         case SO_SNDLOWAT:
849                 v.val = 1;
850                 break;
851 
852         case SO_PASSCRED:
853                 v.val = test_bit(SOCK_PASSCRED, &sock->flags) ? 1 : 0;
854                 break;
855 
856         case SO_PEERCRED:
857                 if (len > sizeof(sk->sk_peercred))
858                         len = sizeof(sk->sk_peercred);
859                 if (copy_to_user(optval, &sk->sk_peercred, len))
860                         return -EFAULT;
861                 goto lenout;
862 
863         case SO_PEERNAME:
864         {
865                 char address[128];
866 
867                 if (sock->ops->getname(sock, (struct sockaddr *)address, &lv, 2))
868                         return -ENOTCONN;
869                 if (lv < len)
870                         return -EINVAL;
871                 if (copy_to_user(optval, address, len))
872                         return -EFAULT;
873                 goto lenout;
874         }
875 
876         /* Dubious BSD thing... Probably nobody even uses it, but
877          * the UNIX standard wants it for whatever reason... -DaveM
878          */
879         case SO_ACCEPTCONN:
880                 v.val = sk->sk_state == TCP_LISTEN;
881                 break;
882 
883         case SO_PASSSEC:
884                 v.val = test_bit(SOCK_PASSSEC, &sock->flags) ? 1 : 0;
885                 break;
886 
887         case SO_PEERSEC:
888                 return security_socket_getpeersec_stream(sock, optval, optlen, len);
889 
890         case SO_MARK:
891                 v.val = sk->sk_mark;
892                 break;
893 
894         default:
895                 return -ENOPROTOOPT;
896         }
897 
898         if (len > lv)
899                 len = lv;
900         if (copy_to_user(optval, &v, len))
901                 return -EFAULT;
902 lenout:
903         if (put_user(len, optlen))
904                 return -EFAULT;
905         return 0;
906 }
907 
908 /*
909  * Initialize an sk_lock.
910  *
911  * (We also register the sk_lock with the lock validator.)
912  */
913 static inline void sock_lock_init(struct sock *sk)
914 {
915         sock_lock_init_class_and_name(sk,
916                         af_family_slock_key_strings[sk->sk_family],
917                         af_family_slock_keys + sk->sk_family,
918                         af_family_key_strings[sk->sk_family],
919                         af_family_keys + sk->sk_family);
920 }
921 
922 /*
923  * Copy all fields from osk to nsk but nsk->sk_refcnt must not change yet,
924  * even temporarly, because of RCU lookups. sk_node should also be left as is.
925  */
926 static void sock_copy(struct sock *nsk, const struct sock *osk)
927 {
928 #ifdef CONFIG_SECURITY_NETWORK
929         void *sptr = nsk->sk_security;
930 #endif
931         BUILD_BUG_ON(offsetof(struct sock, sk_copy_start) !=
932                      sizeof(osk->sk_node) + sizeof(osk->sk_refcnt));
933         memcpy(&nsk->sk_copy_start, &osk->sk_copy_start,
934                osk->sk_prot->obj_size - offsetof(struct sock, sk_copy_start));
935 #ifdef CONFIG_SECURITY_NETWORK
936         nsk->sk_security = sptr;
937         security_sk_clone(osk, nsk);
938 #endif
939 }
940 
941 static struct sock *sk_prot_alloc(struct proto *prot, gfp_t priority,
942                 int family)
943 {
944         struct sock *sk;
945         struct kmem_cache *slab;
946 
947         slab = prot->slab;
948         if (slab != NULL) {
949                 sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO);
950                 if (!sk)
951                         return sk;
952                 if (priority & __GFP_ZERO) {
953                         /*
954                          * caches using SLAB_DESTROY_BY_RCU should let
955                          * sk_node.next un-modified. Special care is taken
956                          * when initializing object to zero.
957                          */
958                         if (offsetof(struct sock, sk_node.next) != 0)
959                                 memset(sk, 0, offsetof(struct sock, sk_node.next));
960                         memset(&sk->sk_node.pprev, 0,
961                                prot->obj_size - offsetof(struct sock,
962                                                          sk_node.pprev));
963                 }
964         }
965         else
966                 sk = kmalloc(prot->obj_size, priority);
967 
968         if (sk != NULL) {
969                 kmemcheck_annotate_bitfield(sk, flags);
970 
971                 if (security_sk_alloc(sk, family, priority))
972                         goto out_free;
973 
974                 if (!try_module_get(prot->owner))
975                         goto out_free_sec;
976         }
977 
978         return sk;
979 
980 out_free_sec:
981         security_sk_free(sk);
982 out_free:
983         if (slab != NULL)
984                 kmem_cache_free(slab, sk);
985         else
986                 kfree(sk);
987         return NULL;
988 }
989 
990 static void sk_prot_free(struct proto *prot, struct sock *sk)
991 {
992         struct kmem_cache *slab;
993         struct module *owner;
994 
995         owner = prot->owner;
996         slab = prot->slab;
997 
998         security_sk_free(sk);
999         if (slab != NULL)
1000                 kmem_cache_free(slab, sk);
1001         else
1002                 kfree(sk);
1003         module_put(owner);
1004 }
1005 
1006 /**
1007  *      sk_alloc - All socket objects are allocated here
1008  *      @net: the applicable net namespace
1009  *      @family: protocol family
1010  *      @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
1011  *      @prot: struct proto associated with this new sock instance
1012  */
1013 struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
1014                       struct proto *prot)
1015 {
1016         struct sock *sk;
1017 
1018         sk = sk_prot_alloc(prot, priority | __GFP_ZERO, family);
1019         if (sk) {
1020                 sk->sk_family = family;
1021                 /*
1022                  * See comment in struct sock definition to understand
1023                  * why we need sk_prot_creator -acme
1024                  */
1025                 sk->sk_prot = sk->sk_prot_creator = prot;
1026                 sock_lock_init(sk);
1027                 sock_net_set(sk, get_net(net));
1028                 atomic_set(&sk->sk_wmem_alloc, 1);
1029         }
1030 
1031         return sk;
1032 }
1033 EXPORT_SYMBOL(sk_alloc);
1034 
1035 static void __sk_free(struct sock *sk)
1036 {
1037         struct sk_filter *filter;
1038 
1039         if (sk->sk_destruct)
1040                 sk->sk_destruct(sk);
1041 
1042         filter = rcu_dereference(sk->sk_filter);
1043         if (filter) {
1044                 sk_filter_uncharge(sk, filter);
1045                 rcu_assign_pointer(sk->sk_filter, NULL);
1046         }
1047 
1048         sock_disable_timestamp(sk, SOCK_TIMESTAMP);
1049         sock_disable_timestamp(sk, SOCK_TIMESTAMPING_RX_SOFTWARE);
1050 
1051         if (atomic_read(&sk->sk_omem_alloc))
1052                 printk(KERN_DEBUG "%s: optmem leakage (%d bytes) detected.\n",
1053                        __func__, atomic_read(&sk->sk_omem_alloc));
1054 
1055         put_net(sock_net(sk));
1056         sk_prot_free(sk->sk_prot_creator, sk);
1057 }
1058 
1059 void sk_free(struct sock *sk)
1060 {
1061         /*
1062          * We substract one from sk_wmem_alloc and can know if
1063          * some packets are still in some tx queue.
1064          * If not null, sock_wfree() will call __sk_free(sk) later
1065          */
1066         if (atomic_dec_and_test(&sk->sk_wmem_alloc))
1067                 __sk_free(sk);
1068 }
1069 EXPORT_SYMBOL(sk_free);
1070 
1071 /*
1072  * Last sock_put should drop referrence to sk->sk_net. It has already
1073  * been dropped in sk_change_net. Taking referrence to stopping namespace
1074  * is not an option.
1075  * Take referrence to a socket to remove it from hash _alive_ and after that
1076  * destroy it in the context of init_net.
1077  */
1078 void sk_release_kernel(struct sock *sk)
1079 {
1080         if (sk == NULL || sk->sk_socket == NULL)
1081                 return;
1082 
1083         sock_hold(sk);
1084         sock_release(sk->sk_socket);
1085         release_net(sock_net(sk));
1086         sock_net_set(sk, get_net(&init_net));
1087         sock_put(sk);
1088 }
1089 EXPORT_SYMBOL(sk_release_kernel);
1090 
1091 struct sock *sk_clone(const struct sock *sk, const gfp_t priority)
1092 {
1093         struct sock *newsk;
1094 
1095         newsk = sk_prot_alloc(sk->sk_prot, priority, sk->sk_family);
1096         if (newsk != NULL) {
1097                 struct sk_filter *filter;
1098 
1099                 sock_copy(newsk, sk);
1100 
1101                 /* SANITY */
1102                 get_net(sock_net(newsk));
1103                 sk_node_init(&newsk->sk_node);
1104                 sock_lock_init(newsk);
1105                 bh_lock_sock(newsk);
1106                 newsk->sk_backlog.head  = newsk->sk_backlog.tail = NULL;
1107 
1108                 atomic_set(&newsk->sk_rmem_alloc, 0);
1109                 /*
1110                  * sk_wmem_alloc set to one (see sk_free() and sock_wfree())
1111                  */
1112                 atomic_set(&newsk->sk_wmem_alloc, 1);
1113                 atomic_set(&newsk->sk_omem_alloc, 0);
1114                 skb_queue_head_init(&newsk->sk_receive_queue);
1115                 skb_queue_head_init(&newsk->sk_write_queue);
1116 #ifdef CONFIG_NET_DMA
1117                 skb_queue_head_init(&newsk->sk_async_wait_queue);
1118 #endif
1119 
1120                 rwlock_init(&newsk->sk_dst_lock);
1121                 rwlock_init(&newsk->sk_callback_lock);
1122                 lockdep_set_class_and_name(&newsk->sk_callback_lock,
1123                                 af_callback_keys + newsk->sk_family,
1124                                 af_family_clock_key_strings[newsk->sk_family]);
1125 
1126                 newsk->sk_dst_cache     = NULL;
1127                 newsk->sk_wmem_queued   = 0;
1128                 newsk->sk_forward_alloc = 0;
1129                 newsk->sk_send_head     = NULL;
1130                 newsk->sk_userlocks     = sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
1131 
1132                 sock_reset_flag(newsk, SOCK_DONE);
1133                 skb_queue_head_init(&newsk->sk_error_queue);
1134 
1135                 filter = newsk->sk_filter;
1136                 if (filter != NULL)
1137                         sk_filter_charge(newsk, filter);
1138 
1139                 if (unlikely(xfrm_sk_clone_policy(newsk))) {
1140                         /* It is still raw copy of parent, so invalidate
1141                          * destructor and make plain sk_free() */
1142                         newsk->sk_destruct = NULL;
1143                         sk_free(newsk);
1144                         newsk = NULL;
1145                         goto out;
1146                 }
1147 
1148                 newsk->sk_err      = 0;
1149                 newsk->sk_priority = 0;
1150                 /*
1151                  * Before updating sk_refcnt, we must commit prior changes to memory
1152                  * (Documentation/RCU/rculist_nulls.txt for details)
1153                  */
1154                 smp_wmb();
1155                 atomic_set(&newsk->sk_refcnt, 2);
1156 
1157                 /*
1158                  * Increment the counter in the same struct proto as the master
1159                  * sock (sk_refcnt_debug_inc uses newsk->sk_prot->socks, that
1160                  * is the same as sk->sk_prot->socks, as this field was copied
1161                  * with memcpy).
1162                  *
1163                  * This _changes_ the previous behaviour, where
1164                  * tcp_create_openreq_child always was incrementing the
1165                  * equivalent to tcp_prot->socks (inet_sock_nr), so this have
1166                  * to be taken into account in all callers. -acme
1167                  */
1168                 sk_refcnt_debug_inc(newsk);
1169                 sk_set_socket(newsk, NULL);
1170                 newsk->sk_sleep  = NULL;
1171 
1172                 if (newsk->sk_prot->sockets_allocated)
1173                         percpu_counter_inc(newsk->sk_prot->sockets_allocated);
1174         }
1175 out:
1176         return newsk;
1177 }
1178 EXPORT_SYMBOL_GPL(sk_clone);
1179 
1180 void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
1181 {
1182         __sk_dst_set(sk, dst);
1183         sk->sk_route_caps = dst->dev->features;
1184         if (sk->sk_route_caps & NETIF_F_GSO)
1185                 sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE;
1186         if (sk_can_gso(sk)) {
1187                 if (dst->header_len) {
1188                         sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
1189                 } else {
1190                         sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM;
1191                         sk->sk_gso_max_size = dst->dev->gso_max_size;
1192                 }
1193         }
1194 }
1195 EXPORT_SYMBOL_GPL(sk_setup_caps);
1196 
1197 void __init sk_init(void)
1198 {
1199         if (totalram_pages <= 4096) {
1200                 sysctl_wmem_max = 32767;
1201                 sysctl_rmem_max = 32767;
1202                 sysctl_wmem_default = 32767;
1203                 sysctl_rmem_default = 32767;
1204         } else if (totalram_pages >= 131072) {
1205                 sysctl_wmem_max = 131071;
1206                 sysctl_rmem_max = 131071;
1207         }
1208 }
1209 
1210 /*
1211  *      Simple resource managers for sockets.
1212  */
1213 
1214 
1215 /*
1216  * Write buffer destructor automatically called from kfree_skb.
1217  */
1218 void sock_wfree(struct sk_buff *skb)
1219 {
1220         struct sock *sk = skb->sk;
1221         unsigned int len = skb->truesize;
1222 
1223         if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) {
1224                 /*
1225                  * Keep a reference on sk_wmem_alloc, this will be released
1226                  * after sk_write_space() call
1227                  */
1228                 atomic_sub(len - 1, &sk->sk_wmem_alloc);
1229                 sk->sk_write_space(sk);
1230                 len = 1;
1231         }
1232         /*
1233          * if sk_wmem_alloc reaches 0, we must finish what sk_free()
1234          * could not do because of in-flight packets
1235          */
1236         if (atomic_sub_and_test(len, &sk->sk_wmem_alloc))
1237                 __sk_free(sk);
1238 }
1239 EXPORT_SYMBOL(sock_wfree);
1240 
1241 /*
1242  * Read buffer destructor automatically called from kfree_skb.
1243  */
1244 void sock_rfree(struct sk_buff *skb)
1245 {
1246         struct sock *sk = skb->sk;
1247 
1248         atomic_sub(skb->truesize, &sk->sk_rmem_alloc);
1249         sk_mem_uncharge(skb->sk, skb->truesize);
1250 }
1251 EXPORT_SYMBOL(sock_rfree);
1252 
1253 
1254 int sock_i_uid(struct sock *sk)
1255 {
1256         int uid;
1257 
1258         read_lock(&sk->sk_callback_lock);
1259         uid = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_uid : 0;
1260         read_unlock(&sk->sk_callback_lock);
1261         return uid;
1262 }
1263 EXPORT_SYMBOL(sock_i_uid);
1264 
1265 unsigned long sock_i_ino(struct sock *sk)
1266 {
1267         unsigned long ino;
1268 
1269         read_lock(&sk->sk_callback_lock);
1270         ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0;
1271         read_unlock(&sk->sk_callback_lock);
1272         return ino;
1273 }
1274 EXPORT_SYMBOL(sock_i_ino);
1275 
1276 /*
1277  * Allocate a skb from the socket's send buffer.
1278  */
1279 struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force,
1280                              gfp_t priority)
1281 {
1282         if (force || atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) {
1283                 struct sk_buff *skb = alloc_skb(size, priority);
1284                 if (skb) {
1285                         skb_set_owner_w(skb, sk);
1286                         return skb;
1287                 }
1288         }
1289         return NULL;
1290 }
1291 EXPORT_SYMBOL(sock_wmalloc);
1292 
1293 /*
1294  * Allocate a skb from the socket's receive buffer.
1295  */
1296 struct sk_buff *sock_rmalloc(struct sock *sk, unsigned long size, int force,
1297                              gfp_t priority)
1298 {
1299         if (force || atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf) {
1300                 struct sk_buff *skb = alloc_skb(size, priority);
1301                 if (skb) {
1302                         skb_set_owner_r(skb, sk);
1303                         return skb;
1304                 }
1305         }
1306         return NULL;
1307 }
1308 
1309 /*
1310  * Allocate a memory block from the socket's option memory buffer.
1311  */
1312 void *sock_kmalloc(struct sock *sk, int size, gfp_t priority)
1313 {
1314         if ((unsigned)size <= sysctl_optmem_max &&
1315             atomic_read(&sk->sk_omem_alloc) + size < sysctl_optmem_max) {
1316                 void *mem;
1317                 /* First do the add, to avoid the race if kmalloc
1318                  * might sleep.
1319                  */
1320                 atomic_add(size, &sk->sk_omem_alloc);
1321                 mem = kmalloc(size, priority);
1322                 if (mem)
1323                         return mem;
1324                 atomic_sub(size, &sk->sk_omem_alloc);
1325         }
1326         return NULL;
1327 }
1328 EXPORT_SYMBOL(sock_kmalloc);
1329 
1330 /*
1331  * Free an option memory block.
1332  */
1333 void sock_kfree_s(struct sock *sk, void *mem, int size)
1334 {
1335         kfree(mem);
1336         atomic_sub(size, &sk->sk_omem_alloc);
1337 }
1338 EXPORT_SYMBOL(sock_kfree_s);
1339 
1340 /* It is almost wait_for_tcp_memory minus release_sock/lock_sock.
1341    I think, these locks should be removed for datagram sockets.
1342  */
1343 static long sock_wait_for_wmem(struct sock *sk, long timeo)
1344 {
1345         DEFINE_WAIT(wait);
1346 
1347         clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
1348         for (;;) {
1349                 if (!timeo)
1350                         break;
1351                 if (signal_pending(current))
1352                         break;
1353                 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
1354                 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
1355                 if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf)
1356                         break;
1357                 if (sk->sk_shutdown & SEND_SHUTDOWN)
1358                         break;
1359                 if (sk->sk_err)
1360                         break;
1361                 timeo = schedule_timeout(timeo);
1362         }
1363         finish_wait(sk->sk_sleep, &wait);
1364         return timeo;
1365 }
1366 
1367 
1368 /*
1369  *      Generic send/receive buffer handlers
1370  */
1371 
1372 struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
1373                                      unsigned long data_len, int noblock,
1374                                      int *errcode)
1375 {
1376         struct sk_buff *skb;
1377         gfp_t gfp_mask;
1378         long timeo;
1379         int err;
1380 
1381         gfp_mask = sk->sk_allocation;
1382         if (gfp_mask & __GFP_WAIT)
1383                 gfp_mask |= __GFP_REPEAT;
1384 
1385         timeo = sock_sndtimeo(sk, noblock);
1386         while (1) {
1387                 err = sock_error(sk);
1388                 if (err != 0)
1389                         goto failure;
1390 
1391                 err = -EPIPE;
1392                 if (sk->sk_shutdown & SEND_SHUTDOWN)
1393                         goto failure;
1394 
1395                 if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) {
1396                         skb = alloc_skb(header_len, gfp_mask);
1397                         if (skb) {
1398                                 int npages;
1399                                 int i;
1400 
1401                                 /* No pages, we're done... */
1402                                 if (!data_len)
1403                                         break;
1404 
1405                                 npages = (data_len + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
1406                                 skb->truesize += data_len;
1407                                 skb_shinfo(skb)->nr_frags = npages;
1408                                 for (i = 0; i < npages; i++) {
1409                                         struct page *page;
1410                                         skb_frag_t *frag;
1411 
1412                                         page = alloc_pages(sk->sk_allocation, 0);
1413                                         if (!page) {
1414                                                 err = -ENOBUFS;
1415                                                 skb_shinfo(skb)->nr_frags = i;
1416                                                 kfree_skb(skb);
1417                                                 goto failure;
1418                                         }
1419 
1420                                         frag = &skb_shinfo(skb)->frags[i];
1421                                         frag->page = page;
1422                                         frag->page_offset = 0;
1423                                         frag->size = (data_len >= PAGE_SIZE ?
1424                                                       PAGE_SIZE :
1425                                                       data_len);
1426                                         data_len -= PAGE_SIZE;
1427                                 }
1428 
1429                                 /* Full success... */
1430                                 break;
1431                         }
1432                         err = -ENOBUFS;
1433                         goto failure;
1434                 }
1435                 set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
1436                 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
1437                 err = -EAGAIN;
1438                 if (!timeo)
1439                         goto failure;
1440                 if (signal_pending(current))
1441                         goto interrupted;
1442                 timeo = sock_wait_for_wmem(sk, timeo);
1443         }
1444 
1445         skb_set_owner_w(skb, sk);
1446         return skb;
1447 
1448 interrupted:
1449         err = sock_intr_errno(timeo);
1450 failure:
1451         *errcode = err;
1452         return NULL;
1453 }
1454 EXPORT_SYMBOL(sock_alloc_send_pskb);
1455 
1456 struct sk_buff *sock_alloc_send_skb(struct sock *sk, unsigned long size,
1457                                     int noblock, int *errcode)
1458 {
1459         return sock_alloc_send_pskb(sk, size, 0, noblock, errcode);
1460 }
1461 EXPORT_SYMBOL(sock_alloc_send_skb);
1462 
1463 static void __lock_sock(struct sock *sk)
1464 {
1465         DEFINE_WAIT(wait);
1466 
1467         for (;;) {
1468                 prepare_to_wait_exclusive(&sk->sk_lock.wq, &wait,
1469                                         TASK_UNINTERRUPTIBLE);
1470                 spin_unlock_bh(&sk->sk_lock.slock);
1471                 schedule();
1472                 spin_lock_bh(&sk->sk_lock.slock);
1473                 if (!sock_owned_by_user(sk))
1474                         break;
1475         }
1476         finish_wait(&sk->sk_lock.wq, &wait);
1477 }
1478 
1479 static void __release_sock(struct sock *sk)
1480 {
1481         struct sk_buff *skb = sk->sk_backlog.head;
1482 
1483         do {
1484                 sk->sk_backlog.head = sk->sk_backlog.tail = NULL;
1485                 bh_unlock_sock(sk);
1486 
1487                 do {
1488                         struct sk_buff *next = skb->next;
1489 
1490                         skb->next = NULL;
1491                         sk_backlog_rcv(sk, skb);
1492 
1493                         /*
1494                          * We are in process context here with softirqs
1495                          * disabled, use cond_resched_softirq() to preempt.
1496                          * This is safe to do because we've taken the backlog
1497                          * queue private:
1498                          */
1499                         cond_resched_softirq();
1500 
1501                         skb = next;
1502                 } while (skb != NULL);
1503 
1504                 bh_lock_sock(sk);
1505         } while ((skb = sk->sk_backlog.head) != NULL);
1506 }
1507 
1508 /**
1509  * sk_wait_data - wait for data to arrive at sk_receive_queue
1510  * @sk:    sock to wait on
1511  * @timeo: for how long
1512  *
1513  * Now socket state including sk->sk_err is changed only under lock,
1514  * hence we may omit checks after joining wait queue.
1515  * We check receive queue before schedule() only as optimization;
1516  * it is very likely that release_sock() added new data.
1517  */
1518 int sk_wait_data(struct sock *sk, long *timeo)
1519 {
1520         int rc;
1521         DEFINE_WAIT(wait);
1522 
1523         prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
1524         set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
1525         rc = sk_wait_event(sk, timeo, !skb_queue_empty(&sk->sk_receive_queue));
1526         clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
1527         finish_wait(sk->sk_sleep, &wait);
1528         return rc;
1529 }
1530 EXPORT_SYMBOL(sk_wait_data);
1531 
1532 /**
1533  *      __sk_mem_schedule - increase sk_forward_alloc and memory_allocated
1534  *      @sk: socket
1535  *      @size: memory size to allocate
1536  *      @kind: allocation type
1537  *
1538  *      If kind is SK_MEM_SEND, it means wmem allocation. Otherwise it means
1539  *      rmem allocation. This function assumes that protocols which have
1540  *      memory_pressure use sk_wmem_queued as write buffer accounting.
1541  */
1542 int __sk_mem_schedule(struct sock *sk, int size, int kind)
1543 {
1544         struct proto *prot = sk->sk_prot;
1545         int amt = sk_mem_pages(size);
1546         int allocated;
1547 
1548         sk->sk_forward_alloc += amt * SK_MEM_QUANTUM;
1549         allocated = atomic_add_return(amt, prot->memory_allocated);
1550 
1551         /* Under limit. */
1552         if (allocated <= prot->sysctl_mem[0]) {
1553                 if (prot->memory_pressure && *prot->memory_pressure)
1554                         *prot->memory_pressure = 0;
1555                 return 1;
1556         }
1557 
1558         /* Under pressure. */
1559         if (allocated > prot->sysctl_mem[1])
1560                 if (prot->enter_memory_pressure)
1561                         prot->enter_memory_pressure(sk);
1562 
1563         /* Over hard limit. */
1564         if (allocated > prot->sysctl_mem[2])
1565                 goto suppress_allocation;
1566 
1567         /* guarantee minimum buffer size under pressure */
1568         if (kind == SK_MEM_RECV) {
1569                 if (atomic_read(&sk->sk_rmem_alloc) < prot->sysctl_rmem[0])
1570                         return 1;
1571         } else { /* SK_MEM_SEND */
1572                 if (sk->sk_type == SOCK_STREAM) {
1573                         if (sk->sk_wmem_queued < prot->sysctl_wmem[0])
1574                                 return 1;
1575                 } else if (atomic_read(&sk->sk_wmem_alloc) <
1576                            prot->sysctl_wmem[0])
1577                                 return 1;
1578         }
1579 
1580         if (prot->memory_pressure) {
1581                 int alloc;
1582 
1583                 if (!*prot->memory_pressure)
1584                         return 1;
1585                 alloc = percpu_counter_read_positive(prot->sockets_allocated);
1586                 if (prot->sysctl_mem[2] > alloc *
1587                     sk_mem_pages(sk->sk_wmem_queued +
1588                                  atomic_read(&sk->sk_rmem_alloc) +
1589                                  sk->sk_forward_alloc))
1590                         return 1;
1591         }
1592 
1593 suppress_allocation:
1594 
1595         if (kind == SK_MEM_SEND && sk->sk_type == SOCK_STREAM) {
1596                 sk_stream_moderate_sndbuf(sk);
1597 
1598                 /* Fail only if socket is _under_ its sndbuf.
1599                  * In this case we cannot block, so that we have to fail.
1600                  */
1601                 if (sk->sk_wmem_queued + size >= sk->sk_sndbuf)
1602                         return 1;
1603         }
1604 
1605         /* Alas. Undo changes. */
1606         sk->sk_forward_alloc -= amt * SK_MEM_QUANTUM;
1607         atomic_sub(amt, prot->memory_allocated);
1608         return 0;
1609 }
1610 EXPORT_SYMBOL(__sk_mem_schedule);
1611 
1612 /**
1613  *      __sk_reclaim - reclaim memory_allocated
1614  *      @sk: socket
1615  */
1616 void __sk_mem_reclaim(struct sock *sk)
1617 {
1618         struct proto *prot = sk->sk_prot;
1619 
1620         atomic_sub(sk->sk_forward_alloc >> SK_MEM_QUANTUM_SHIFT,
1621                    prot->memory_allocated);
1622         sk->sk_forward_alloc &= SK_MEM_QUANTUM - 1;
1623 
1624         if (prot->memory_pressure && *prot->memory_pressure &&
1625             (atomic_read(prot->memory_allocated) < prot->sysctl_mem[0]))
1626                 *prot->memory_pressure = 0;
1627 }
1628 EXPORT_SYMBOL(__sk_mem_reclaim);
1629 
1630 
1631 /*
1632  * Set of default routines for initialising struct proto_ops when
1633  * the protocol does not support a particular function. In certain
1634  * cases where it makes no sense for a protocol to have a "do nothing"
1635  * function, some default processing is provided.
1636  */
1637 
1638 int sock_no_bind(struct socket *sock, struct sockaddr *saddr, int len)
1639 {
1640         return -EOPNOTSUPP;
1641 }
1642 EXPORT_SYMBOL(sock_no_bind);
1643 
1644 int sock_no_connect(struct socket *sock, struct sockaddr *saddr,
1645                     int len, int flags)
1646 {
1647         return -EOPNOTSUPP;
1648 }
1649 EXPORT_SYMBOL(sock_no_connect);
1650 
1651 int sock_no_socketpair(struct socket *sock1, struct socket *sock2)
1652 {
1653         return -EOPNOTSUPP;
1654 }
1655 EXPORT_SYMBOL(sock_no_socketpair);
1656 
1657 int sock_no_accept(struct socket *sock, struct socket *newsock, int flags)
1658 {
1659         return -EOPNOTSUPP;
1660 }
1661 EXPORT_SYMBOL(sock_no_accept);
1662 
1663 int sock_no_getname(struct socket *sock, struct sockaddr *saddr,
1664                     int *len, int peer)
1665 {
1666         return -EOPNOTSUPP;
1667 }
1668 EXPORT_SYMBOL(sock_no_getname);
1669 
1670 unsigned int sock_no_poll(struct file *file, struct socket *sock, poll_table *pt)
1671 {
1672         return 0;
1673 }
1674 EXPORT_SYMBOL(sock_no_poll);
1675 
1676 int sock_no_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1677 {
1678         return -EOPNOTSUPP;
1679 }
1680 EXPORT_SYMBOL(sock_no_ioctl);
1681 
1682 int sock_no_listen(struct socket *sock, int backlog)
1683 {
1684         return -EOPNOTSUPP;
1685 }
1686 EXPORT_SYMBOL(sock_no_listen);
1687 
1688 int sock_no_shutdown(struct socket *sock, int how)
1689 {
1690         return -EOPNOTSUPP;
1691 }
1692 EXPORT_SYMBOL(sock_no_shutdown);
1693 
1694 int sock_no_setsockopt(struct socket *sock, int level, int optname,
1695                     char __user *optval, int optlen)
1696 {
1697         return -EOPNOTSUPP;
1698 }
1699 EXPORT_SYMBOL(sock_no_setsockopt);
1700 
1701 int sock_no_getsockopt(struct socket *sock, int level, int optname,
1702                     char __user *optval, int __user *optlen)
1703 {
1704         return -EOPNOTSUPP;
1705 }
1706 EXPORT_SYMBOL(sock_no_getsockopt);
1707 
1708 int sock_no_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
1709                     size_t len)
1710 {
1711         return -EOPNOTSUPP;
1712 }
1713 EXPORT_SYMBOL(sock_no_sendmsg);
1714 
1715 int sock_no_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
1716                     size_t len, int flags)
1717 {
1718         return -EOPNOTSUPP;
1719 }
1720 EXPORT_SYMBOL(sock_no_recvmsg);
1721 
1722 int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma)
1723 {
1724         /* Mirror missing mmap method error code */
1725         return -ENODEV;
1726 }
1727 EXPORT_SYMBOL(sock_no_mmap);
1728 
1729 ssize_t sock_no_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags)
1730 {
1731         ssize_t res;
1732         struct msghdr msg = {.msg_flags = flags};
1733         struct kvec iov;
1734         char *kaddr = kmap(page);
1735         iov.iov_base = kaddr + offset;
1736         iov.iov_len = size;
1737         res = kernel_sendmsg(sock, &msg, &iov, 1, size);
1738         kunmap(page);
1739         return res;
1740 }
1741 EXPORT_SYMBOL(sock_no_sendpage);
1742 
1743 /*
1744  *      Default Socket Callbacks
1745  */
1746 
1747 static void sock_def_wakeup(struct sock *sk)
1748 {
1749         read_lock(&sk->sk_callback_lock);
1750         if (sk_has_sleeper(sk))
1751                 wake_up_interruptible_all(sk->sk_sleep);
1752         read_unlock(&sk->sk_callback_lock);
1753 }
1754 
1755 static void sock_def_error_report(struct sock *sk)
1756 {
1757         read_lock(&sk->sk_callback_lock);
1758         if (sk_has_sleeper(sk))
1759                 wake_up_interruptible_poll(sk->sk_sleep, POLLERR);
1760         sk_wake_async(sk, SOCK_WAKE_IO, POLL_ERR);
1761         read_unlock(&sk->sk_callback_lock);
1762 }
1763 
1764 static void sock_def_readable(struct sock *sk, int len)
1765 {
1766         read_lock(&sk->sk_callback_lock);
1767         if (sk_has_sleeper(sk))
1768                 wake_up_interruptible_sync_poll(sk->sk_sleep, POLLIN |
1769                                                 POLLRDNORM | POLLRDBAND);
1770         sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN);
1771         read_unlock(&sk->sk_callback_lock);
1772 }
1773 
1774 static void sock_def_write_space(struct sock *sk)
1775 {
1776         read_lock(&sk->sk_callback_lock);
1777 
1778         /* Do not wake up a writer until he can make "significant"
1779          * progress.  --DaveM
1780          */
1781         if ((atomic_read(&sk->sk_wmem_alloc) << 1) <= sk->sk_sndbuf) {
1782                 if (sk_has_sleeper(sk))
1783                         wake_up_interruptible_sync_poll(sk->sk_sleep, POLLOUT |
1784                                                 POLLWRNORM | POLLWRBAND);
1785 
1786                 /* Should agree with poll, otherwise some programs break */
1787                 if (sock_writeable(sk))
1788                         sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
1789         }
1790 
1791         read_unlock(&sk->sk_callback_lock);
1792 }
1793 
1794 static void sock_def_destruct(struct sock *sk)
1795 {
1796         kfree(sk->sk_protinfo);
1797 }
1798 
1799 void sk_send_sigurg(struct sock *sk)
1800 {
1801         if (sk->sk_socket && sk->sk_socket->file)
1802                 if (send_sigurg(&sk->sk_socket->file->f_owner))
1803                         sk_wake_async(sk, SOCK_WAKE_URG, POLL_PRI);
1804 }
1805 EXPORT_SYMBOL(sk_send_sigurg);
1806 
1807 void sk_reset_timer(struct sock *sk, struct timer_list* timer,
1808                     unsigned long expires)
1809 {
1810         if (!mod_timer(timer, expires))
1811                 sock_hold(sk);
1812 }
1813 EXPORT_SYMBOL(sk_reset_timer);
1814 
1815 void sk_stop_timer(struct sock *sk, struct timer_list* timer)
1816 {
1817         if (timer_pending(timer) && del_timer(timer))
1818                 __sock_put(sk);
1819 }
1820 EXPORT_SYMBOL(sk_stop_timer);
1821 
1822 void sock_init_data(struct socket *sock, struct sock *sk)
1823 {
1824         skb_queue_head_init(&sk->sk_receive_queue);
1825         skb_queue_head_init(&sk->sk_write_queue);
1826         skb_queue_head_init(&sk->sk_error_queue);
1827 #ifdef CONFIG_NET_DMA
1828         skb_queue_head_init(&sk->sk_async_wait_queue);
1829 #endif
1830 
1831         sk->sk_send_head        =       NULL;
1832 
1833         init_timer(&sk->sk_timer);
1834 
1835         sk->sk_allocation       =       GFP_KERNEL;
1836         sk->sk_rcvbuf           =       sysctl_rmem_default;
1837         sk->sk_sndbuf           =       sysctl_wmem_default;
1838         sk->sk_state            =       TCP_CLOSE;
1839         sk_set_socket(sk, sock);
1840 
1841         sock_set_flag(sk, SOCK_ZAPPED);
1842 
1843         if (sock) {
1844                 sk->sk_type     =       sock->type;
1845                 sk->sk_sleep    =       &sock->wait;
1846                 sock->sk        =       sk;
1847         } else
1848                 sk->sk_sleep    =       NULL;
1849 
1850         rwlock_init(&sk->sk_dst_lock);
1851         rwlock_init(&sk->sk_callback_lock);
1852         lockdep_set_class_and_name(&sk->sk_callback_lock,
1853                         af_callback_keys + sk->sk_family,
1854                         af_family_clock_key_strings[sk->sk_family]);
1855 
1856         sk->sk_state_change     =       sock_def_wakeup;
1857         sk->sk_data_ready       =       sock_def_readable;
1858         sk->sk_write_space      =       sock_def_write_space;
1859         sk->sk_error_report     =       sock_def_error_report;
1860         sk->sk_destruct         =       sock_def_destruct;
1861 
1862         sk->sk_sndmsg_page      =       NULL;
1863         sk->sk_sndmsg_off       =       0;
1864 
1865         sk->sk_peercred.pid     =       0;
1866         sk->sk_peercred.uid     =       -1;
1867         sk->sk_peercred.gid     =       -1;
1868         sk->sk_write_pending    =       0;
1869         sk->sk_rcvlowat         =       1;
1870         sk->sk_rcvtimeo         =       MAX_SCHEDULE_TIMEOUT;
1871         sk->sk_sndtimeo         =       MAX_SCHEDULE_TIMEOUT;
1872 
1873         sk->sk_stamp = ktime_set(-1L, 0);
1874 
1875         /*
1876          * Before updating sk_refcnt, we must commit prior changes to memory
1877          * (Documentation/RCU/rculist_nulls.txt for details)
1878          */
1879         smp_wmb();
1880         atomic_set(&sk->sk_refcnt, 1);
1881         atomic_set(&sk->sk_drops, 0);
1882 }
1883 EXPORT_SYMBOL(sock_init_data);
1884 
1885 void lock_sock_nested(struct sock *sk, int subclass)
1886 {
1887         might_sleep();
1888         spin_lock_bh(&sk->sk_lock.slock);
1889         if (sk->sk_lock.owned)
1890                 __lock_sock(sk);
1891         sk->sk_lock.owned = 1;
1892         spin_unlock(&sk->sk_lock.slock);
1893         /*
1894          * The sk_lock has mutex_lock() semantics here:
1895          */
1896         mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
1897         local_bh_enable();
1898 }
1899 EXPORT_SYMBOL(lock_sock_nested);
1900 
1901 void release_sock(struct sock *sk)
1902 {
1903         /*
1904          * The sk_lock has mutex_unlock() semantics:
1905          */
1906         mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
1907 
1908         spin_lock_bh(&sk->sk_lock.slock);
1909         if (sk->sk_backlog.tail)
1910                 __release_sock(sk);
1911         sk->sk_lock.owned = 0;
1912         if (waitqueue_active(&sk->sk_lock.wq))
1913                 wake_up(&sk->sk_lock.wq);
1914         spin_unlock_bh(&sk->sk_lock.slock);
1915 }
1916 EXPORT_SYMBOL(release_sock);
1917 
1918 int sock_get_timestamp(struct sock *sk, struct timeval __user *userstamp)
1919 {
1920         struct timeval tv;
1921         if (!sock_flag(sk, SOCK_TIMESTAMP))
1922                 sock_enable_timestamp(sk, SOCK_TIMESTAMP);
1923         tv = ktime_to_timeval(sk->sk_stamp);
1924         if (tv.tv_sec == -1)
1925                 return -ENOENT;
1926         if (tv.tv_sec == 0) {
1927                 sk->sk_stamp = ktime_get_real();
1928                 tv = ktime_to_timeval(sk->sk_stamp);
1929         }
1930         return copy_to_user(userstamp, &tv, sizeof(tv)) ? -EFAULT : 0;
1931 }
1932 EXPORT_SYMBOL(sock_get_timestamp);
1933 
1934 int sock_get_timestampns(struct sock *sk, struct timespec __user *userstamp)
1935 {
1936         struct timespec ts;
1937         if (!sock_flag(sk, SOCK_TIMESTAMP))
1938                 sock_enable_timestamp(sk, SOCK_TIMESTAMP);
1939         ts = ktime_to_timespec(sk->sk_stamp);
1940         if (ts.tv_sec == -1)
1941                 return -ENOENT;
1942         if (ts.tv_sec == 0) {
1943                 sk->sk_stamp = ktime_get_real();
1944                 ts = ktime_to_timespec(sk->sk_stamp);
1945         }
1946         return copy_to_user(userstamp, &ts, sizeof(ts)) ? -EFAULT : 0;
1947 }
1948 EXPORT_SYMBOL(sock_get_timestampns);
1949 
1950 void sock_enable_timestamp(struct sock *sk, int flag)
1951 {
1952         if (!sock_flag(sk, flag)) {
1953                 sock_set_flag(sk, flag);
1954                 /*
1955                  * we just set one of the two flags which require net
1956                  * time stamping, but time stamping might have been on
1957                  * already because of the other one
1958                  */
1959                 if (!sock_flag(sk,
1960                                 flag == SOCK_TIMESTAMP ?
1961                                 SOCK_TIMESTAMPING_RX_SOFTWARE :
1962                                 SOCK_TIMESTAMP))
1963                         net_enable_timestamp();
1964         }
1965 }
1966 
1967 /*
1968  *      Get a socket option on an socket.
1969  *
1970  *      FIX: POSIX 1003.1g is very ambiguous here. It states that
1971  *      asynchronous errors should be reported by getsockopt. We assume
1972  *      this means if you specify SO_ERROR (otherwise whats the point of it).
1973  */
1974 int sock_common_getsockopt(struct socket *sock, int level, int optname,
1975                            char __user *optval, int __user *optlen)
1976 {
1977         struct sock *sk = sock->sk;
1978 
1979         return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
1980 }
1981 EXPORT_SYMBOL(sock_common_getsockopt);
1982 
1983 #ifdef CONFIG_COMPAT
1984 int compat_sock_common_getsockopt(struct socket *sock, int level, int optname,
1985                                   char __user *optval, int __user *optlen)
1986 {
1987         struct sock *sk = sock->sk;
1988 
1989         if (sk->sk_prot->compat_getsockopt != NULL)
1990                 return sk->sk_prot->compat_getsockopt(sk, level, optname,
1991                                                       optval, optlen);
1992         return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
1993 }
1994 EXPORT_SYMBOL(compat_sock_common_getsockopt);
1995 #endif
1996 
1997 int sock_common_recvmsg(struct kiocb *iocb, struct socket *sock,
1998                         struct msghdr *msg, size_t size, int flags)
1999 {
2000         struct sock *sk = sock->sk;
2001         int addr_len = 0;
2002         int err;
2003 
2004         err = sk->sk_prot->recvmsg(iocb, sk, msg, size, flags & MSG_DONTWAIT,
2005                                    flags & ~MSG_DONTWAIT, &addr_len);
2006         if (err >= 0)
2007                 msg->msg_namelen = addr_len;
2008         return err;
2009 }
2010 EXPORT_SYMBOL(sock_common_recvmsg);
2011 
2012 /*
2013  *      Set socket options on an inet socket.
2014  */
2015 int sock_common_setsockopt(struct socket *sock, int level, int optname,
2016                            char __user *optval, int optlen)
2017 {
2018         struct sock *sk = sock->sk;
2019 
2020         return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
2021 }
2022 EXPORT_SYMBOL(sock_common_setsockopt);
2023 
2024 #ifdef CONFIG_COMPAT
2025 int compat_sock_common_setsockopt(struct socket *sock, int level, int optname,
2026                                   char __user *optval, int optlen)
2027 {
2028         struct sock *sk = sock->sk;
2029 
2030         if (sk->sk_prot->compat_setsockopt != NULL)
2031                 return sk->sk_prot->compat_setsockopt(sk, level, optname,
2032                                                       optval, optlen);
2033         return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
2034 }
2035 EXPORT_SYMBOL(compat_sock_common_setsockopt);
2036 #endif
2037 
2038 void sk_common_release(struct sock *sk)
2039 {
2040         if (sk->sk_prot->destroy)
2041                 sk->sk_prot->destroy(sk);
2042 
2043         /*
2044          * Observation: when sock_common_release is called, processes have
2045          * no access to socket. But net still has.
2046          * Step one, detach it from networking:
2047          *
2048          * A. Remove from hash tables.
2049          */
2050 
2051         sk->sk_prot->unhash(sk);
2052 
2053         /*
2054          * In this point socket cannot receive new packets, but it is possible
2055          * that some packets are in flight because some CPU runs receiver and
2056          * did hash table lookup before we unhashed socket. They will achieve
2057          * receive queue and will be purged by socket destructor.
2058          *
2059          * Also we still have packets pending on receive queue and probably,
2060          * our own packets waiting in device queues. sock_destroy will drain
2061          * receive queue, but transmitted packets will delay socket destruction
2062          * until the last reference will be released.
2063          */
2064 
2065         sock_orphan(sk);
2066 
2067         xfrm_sk_free_policy(sk);
2068 
2069         sk_refcnt_debug_release(sk);
2070         sock_put(sk);
2071 }
2072 EXPORT_SYMBOL(sk_common_release);
2073 
2074 static DEFINE_RWLOCK(proto_list_lock);
2075 static LIST_HEAD(proto_list);
2076 
2077 #ifdef CONFIG_PROC_FS
2078 #define PROTO_INUSE_NR  64      /* should be enough for the first time */
2079 struct prot_inuse {
2080         int val[PROTO_INUSE_NR];
2081 };
2082 
2083 static DECLARE_BITMAP(proto_inuse_idx, PROTO_INUSE_NR);
2084 
2085 #ifdef CONFIG_NET_NS
2086 void sock_prot_inuse_add(struct net *net, struct proto *prot, int val)
2087 {
2088         int cpu = smp_processor_id();
2089         per_cpu_ptr(net->core.inuse, cpu)->val[prot->inuse_idx] += val;
2090 }
2091 EXPORT_SYMBOL_GPL(sock_prot_inuse_add);
2092 
2093 int sock_prot_inuse_get(struct net *net, struct proto *prot)
2094 {
2095         int cpu, idx = prot->inuse_idx;
2096         int res = 0;
2097 
2098         for_each_possible_cpu(cpu)
2099                 res += per_cpu_ptr(net->core.inuse, cpu)->val[idx];
2100 
2101         return res >= 0 ? res : 0;
2102 }
2103 EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
2104 
2105 static int sock_inuse_init_net(struct net *net)
2106 {
2107         net->core.inuse = alloc_percpu(struct prot_inuse);
2108         return net->core.inuse ? 0 : -ENOMEM;
2109 }
2110 
2111 static void sock_inuse_exit_net(struct net *net)
2112 {
2113         free_percpu(net->core.inuse);
2114 }
2115 
2116 static struct pernet_operations net_inuse_ops = {
2117         .init = sock_inuse_init_net,
2118         .exit = sock_inuse_exit_net,
2119 };
2120 
2121 static __init int net_inuse_init(void)
2122 {
2123         if (register_pernet_subsys(&net_inuse_ops))
2124                 panic("Cannot initialize net inuse counters");
2125 
2126         return 0;
2127 }
2128 
2129 core_initcall(net_inuse_init);
2130 #else
2131 static DEFINE_PER_CPU(struct prot_inuse, prot_inuse);
2132 
2133 void sock_prot_inuse_add(struct net *net, struct proto *prot, int val)
2134 {
2135         __get_cpu_var(prot_inuse).val[prot->inuse_idx] += val;
2136 }
2137 EXPORT_SYMBOL_GPL(sock_prot_inuse_add);
2138 
2139 int sock_prot_inuse_get(struct net *net, struct proto *prot)
2140 {
2141         int cpu, idx = prot->inuse_idx;
2142         int res = 0;
2143 
2144         for_each_possible_cpu(cpu)
2145                 res += per_cpu(prot_inuse, cpu).val[idx];
2146 
2147         return res >= 0 ? res : 0;
2148 }
2149 EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
2150 #endif
2151 
2152 static void assign_proto_idx(struct proto *prot)
2153 {
2154         prot->inuse_idx = find_first_zero_bit(proto_inuse_idx, PROTO_INUSE_NR);
2155 
2156         if (unlikely(prot->inuse_idx == PROTO_INUSE_NR - 1)) {
2157                 printk(KERN_ERR "PROTO_INUSE_NR exhausted\n");
2158                 return;
2159         }
2160 
2161         set_bit(prot->inuse_idx, proto_inuse_idx);
2162 }
2163 
2164 static void release_proto_idx(struct proto *prot)
2165 {
2166         if (prot->inuse_idx != PROTO_INUSE_NR - 1)
2167                 clear_bit(prot->inuse_idx, proto_inuse_idx);
2168 }
2169 #else
2170 static inline void assign_proto_idx(struct proto *prot)
2171 {
2172 }
2173 
2174 static inline void release_proto_idx(struct proto *prot)
2175 {
2176 }
2177 #endif
2178 
2179 int proto_register(struct proto *prot, int alloc_slab)
2180 {
2181         if (alloc_slab) {
2182                 prot->slab = kmem_cache_create(prot->name, prot->obj_size, 0,
2183                                         SLAB_HWCACHE_ALIGN | prot->slab_flags,
2184                                         NULL);
2185 
2186                 if (prot->slab == NULL) {
2187                         printk(KERN_CRIT "%s: Can't create sock SLAB cache!\n",
2188                                prot->name);
2189                         goto out;
2190                 }
2191 
2192                 if (prot->rsk_prot != NULL) {
2193                         static const char mask[] = "request_sock_%s";
2194 
2195                         prot->rsk_prot->slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL);
2196                         if (prot->rsk_prot->slab_name == NULL)
2197                                 goto out_free_sock_slab;
2198 
2199                         sprintf(prot->rsk_prot->slab_name, mask, prot->name);
2200                         prot->rsk_prot->slab = kmem_cache_create(prot->rsk_prot->slab_name,
2201                                                                  prot->rsk_prot->obj_size, 0,
2202                                                                  SLAB_HWCACHE_ALIGN, NULL);
2203 
2204                         if (prot->rsk_prot->slab == NULL) {
2205                                 printk(KERN_CRIT "%s: Can't create request sock SLAB cache!\n",
2206                                        prot->name);
2207                                 goto out_free_request_sock_slab_name;
2208                         }
2209                 }
2210 
2211                 if (prot->twsk_prot != NULL) {
2212                         static const char mask[] = "tw_sock_%s";
2213 
2214                         prot->twsk_prot->twsk_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL);
2215 
2216                         if (prot->twsk_prot->twsk_slab_name == NULL)
2217                                 goto out_free_request_sock_slab;
2218 
2219                         sprintf(prot->twsk_prot->twsk_slab_name, mask, prot->name);
2220                         prot->twsk_prot->twsk_slab =
2221                                 kmem_cache_create(prot->twsk_prot->twsk_slab_name,
2222                                                   prot->twsk_prot->twsk_obj_size,
2223                                                   0,
2224                                                   SLAB_HWCACHE_ALIGN |
2225                                                         prot->slab_flags,
2226                                                   NULL);
2227                         if (prot->twsk_prot->twsk_slab == NULL)
2228                                 goto out_free_timewait_sock_slab_name;
2229                 }
2230         }
2231 
2232         write_lock(&proto_list_lock);
2233         list_add(&prot->node, &proto_list);
2234         assign_proto_idx(prot);
2235         write_unlock(&proto_list_lock);
2236         return 0;
2237 
2238 out_free_timewait_sock_slab_name:
2239         kfree(prot->twsk_prot->twsk_slab_name);
2240 out_free_request_sock_slab:
2241         if (prot->rsk_prot && prot->rsk_prot->slab) {
2242                 kmem_cache_destroy(prot->rsk_prot->slab);
2243                 prot->rsk_prot->slab = NULL;
2244         }
2245 out_free_request_sock_slab_name:
2246         kfree(prot->rsk_prot->slab_name);
2247 out_free_sock_slab:
2248         kmem_cache_destroy(prot->slab);
2249         prot->slab = NULL;
2250 out:
2251         return -ENOBUFS;
2252 }
2253 EXPORT_SYMBOL(proto_register);
2254 
2255 void proto_unregister(struct proto *prot)
2256 {
2257         write_lock(&proto_list_lock);
2258         release_proto_idx(prot);
2259         list_del(&prot->node);
2260         write_unlock(&proto_list_lock);
2261 
2262         if (prot->slab != NULL) {
2263                 kmem_cache_destroy(prot->slab);
2264                 prot->slab = NULL;
2265         }
2266 
2267         if (prot->rsk_prot != NULL && prot->rsk_prot->slab != NULL) {
2268                 kmem_cache_destroy(prot->rsk_prot->slab);
2269                 kfree(prot->rsk_prot->slab_name);
2270                 prot->rsk_prot->slab = NULL;
2271         }
2272 
2273         if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) {
2274                 kmem_cache_destroy(prot->twsk_prot->twsk_slab);
2275                 kfree(prot->twsk_prot->twsk_slab_name);
2276                 prot->twsk_prot->twsk_slab = NULL;
2277         }
2278 }
2279 EXPORT_SYMBOL(proto_unregister);
2280 
2281 #ifdef CONFIG_PROC_FS
2282 static void *proto_seq_start(struct seq_file *seq, loff_t *pos)
2283         __acquires(proto_list_lock)
2284 {
2285         read_lock(&proto_list_lock);
2286         return seq_list_start_head(&proto_list, *pos);
2287 }
2288 
2289 static void *proto_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2290 {
2291         return seq_list_next(v, &proto_list, pos);
2292 }
2293 
2294 static void proto_seq_stop(struct seq_file *seq, void *v)
2295         __releases(proto_list_lock)
2296 {
2297         read_unlock(&proto_list_lock);
2298 }
2299 
2300 static char proto_method_implemented(const void *method)
2301 {
2302         return method == NULL ? 'n' : 'y';
2303 }
2304 
2305 static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
2306 {
2307         seq_printf(seq, "%-9s %4u %6d  %6d   %-3s %6u   %-3s  %-10s "
2308                         "%2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c\n",
2309                    proto->name,
2310                    proto->obj_size,
2311                    sock_prot_inuse_get(seq_file_net(seq), proto),
2312                    proto->memory_allocated != NULL ? atomic_read(proto->memory_allocated) : -1,
2313                    proto->memory_pressure != NULL ? *proto->memory_pressure ? "yes" : "no" : "NI",
2314                    proto->max_header,
2315                    proto->slab == NULL ? "no" : "yes",
2316                    module_name(proto->owner),
2317                    proto_method_implemented(proto->close),
2318                    proto_method_implemented(proto->connect),
2319                    proto_method_implemented(proto->disconnect),
2320                    proto_method_implemented(proto->accept),
2321                    proto_method_implemented(proto->ioctl),
2322                    proto_method_implemented(proto->init),
2323                    proto_method_implemented(proto->destroy),
2324                    proto_method_implemented(proto->shutdown),
2325                    proto_method_implemented(proto->setsockopt),
2326                    proto_method_implemented(proto->getsockopt),
2327                    proto_method_implemented(proto->sendmsg),
2328                    proto_method_implemented(proto->recvmsg),
2329                    proto_method_implemented(proto->sendpage),
2330                    proto_method_implemented(proto->bind),
2331                    proto_method_implemented(proto->backlog_rcv),
2332                    proto_method_implemented(proto->hash),
2333                    proto_method_implemented(proto->unhash),
2334                    proto_method_implemented(proto->get_port),
2335                    proto_method_implemented(proto->enter_memory_pressure));
2336 }
2337 
2338 static int proto_seq_show(struct seq_file *seq, void *v)
2339 {
2340         if (v == &proto_list)
2341                 seq_printf(seq, "%-9s %-4s %-8s %-6s %-5s %-7s %-4s %-10s %s",
2342                            "protocol",
2343                            "size",
2344                            "sockets",
2345                            "memory",
2346                            "press",
2347                            "maxhdr",
2348                            "slab",
2349                            "module",
2350                            "cl co di ac io in de sh ss gs se re sp bi br ha uh gp em\n");
2351         else
2352                 proto_seq_printf(seq, list_entry(v, struct proto, node));
2353         return 0;
2354 }
2355 
2356 static const struct seq_operations proto_seq_ops = {
2357         .start  = proto_seq_start,
2358         .next   = proto_seq_next,
2359         .stop   = proto_seq_stop,
2360         .show   = proto_seq_show,
2361 };
2362 
2363 static int proto_seq_open(struct inode *inode, struct file *file)
2364 {
2365         return seq_open_net(inode, file, &proto_seq_ops,
2366                             sizeof(struct seq_net_private));
2367 }
2368 
2369 static const struct file_operations proto_seq_fops = {
2370         .owner          = THIS_MODULE,
2371         .open           = proto_seq_open,
2372         .read           = seq_read,
2373         .llseek         = seq_lseek,
2374         .release        = seq_release_net,
2375 };
2376 
2377 static __net_init int proto_init_net(struct net *net)
2378 {
2379         if (!proc_net_fops_create(net, "protocols", S_IRUGO, &proto_seq_fops))
2380                 return -ENOMEM;
2381 
2382         return 0;
2383 }
2384 
2385 static __net_exit void proto_exit_net(struct net *net)
2386 {
2387         proc_net_remove(net, "protocols");
2388 }
2389 
2390 
2391 static __net_initdata struct pernet_operations proto_net_ops = {
2392         .init = proto_init_net,
2393         .exit = proto_exit_net,
2394 };
2395 
2396 static int __init proto_init(void)
2397 {
2398         return register_pernet_subsys(&proto_net_ops);
2399 }
2400 
2401 subsys_initcall(proto_init);
2402 
2403 #endif /* PROC_FS */
2404 
  This page was automatically generated by the LXR engine.