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