OSDN Git Service

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