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