Revert "af_packet: add interframe drop cmsg (v6)"
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / socket.c
CommitLineData
1da177e4
LT
1/*
2 * NET An implementation of the SOCKET network access protocol.
3 *
4 * Version: @(#)socket.c 1.1.93 18/02/95
5 *
6 * Authors: Orest Zborowski, <obz@Kodak.COM>
02c30a84 7 * Ross Biro
1da177e4
LT
8 * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
9 *
10 * Fixes:
11 * Anonymous : NOTSOCK/BADF cleanup. Error fix in
12 * shutdown()
13 * Alan Cox : verify_area() fixes
14 * Alan Cox : Removed DDI
15 * Jonathan Kamens : SOCK_DGRAM reconnect bug
16 * Alan Cox : Moved a load of checks to the very
17 * top level.
18 * Alan Cox : Move address structures to/from user
19 * mode above the protocol layers.
20 * Rob Janssen : Allow 0 length sends.
21 * Alan Cox : Asynchronous I/O support (cribbed from the
22 * tty drivers).
23 * Niibe Yutaka : Asynchronous I/O for writes (4.4BSD style)
24 * Jeff Uphoff : Made max number of sockets command-line
25 * configurable.
26 * Matti Aarnio : Made the number of sockets dynamic,
27 * to be allocated when needed, and mr.
28 * Uphoff's max is used as max to be
29 * allowed to allocate.
30 * Linus : Argh. removed all the socket allocation
31 * altogether: it's in the inode now.
32 * Alan Cox : Made sock_alloc()/sock_release() public
33 * for NetROM and future kernel nfsd type
34 * stuff.
35 * Alan Cox : sendmsg/recvmsg basics.
36 * Tom Dyas : Export net symbols.
37 * Marcin Dalecki : Fixed problems with CONFIG_NET="n".
38 * Alan Cox : Added thread locking to sys_* calls
39 * for sockets. May have errors at the
40 * moment.
41 * Kevin Buhr : Fixed the dumb errors in the above.
42 * Andi Kleen : Some small cleanups, optimizations,
43 * and fixed a copy_from_user() bug.
44 * Tigran Aivazian : sys_send(args) calls sys_sendto(args, NULL, 0)
89bddce5 45 * Tigran Aivazian : Made listen(2) backlog sanity checks
1da177e4
LT
46 * protocol-independent
47 *
48 *
49 * This program is free software; you can redistribute it and/or
50 * modify it under the terms of the GNU General Public License
51 * as published by the Free Software Foundation; either version
52 * 2 of the License, or (at your option) any later version.
53 *
54 *
55 * This module is effectively the top level interface to the BSD socket
89bddce5 56 * paradigm.
1da177e4
LT
57 *
58 * Based upon Swansea University Computer Society NET3.039
59 */
60
1da177e4 61#include <linux/mm.h>
1da177e4
LT
62#include <linux/socket.h>
63#include <linux/file.h>
64#include <linux/net.h>
65#include <linux/interrupt.h>
aaca0bdc 66#include <linux/thread_info.h>
55737fda 67#include <linux/rcupdate.h>
1da177e4
LT
68#include <linux/netdevice.h>
69#include <linux/proc_fs.h>
70#include <linux/seq_file.h>
4a3e2f71 71#include <linux/mutex.h>
1da177e4
LT
72#include <linux/wanrouter.h>
73#include <linux/if_bridge.h>
20380731
ACM
74#include <linux/if_frad.h>
75#include <linux/if_vlan.h>
1da177e4
LT
76#include <linux/init.h>
77#include <linux/poll.h>
78#include <linux/cache.h>
79#include <linux/module.h>
80#include <linux/highmem.h>
1da177e4
LT
81#include <linux/mount.h>
82#include <linux/security.h>
83#include <linux/syscalls.h>
84#include <linux/compat.h>
85#include <linux/kmod.h>
3ec3b2fb 86#include <linux/audit.h>
d86b5e0e 87#include <linux/wireless.h>
1b8d7ae4 88#include <linux/nsproxy.h>
1fd7317d 89#include <linux/magic.h>
1da177e4
LT
90
91#include <asm/uaccess.h>
92#include <asm/unistd.h>
93
94#include <net/compat.h>
87de87d5 95#include <net/wext.h>
1da177e4
LT
96
97#include <net/sock.h>
98#include <linux/netfilter.h>
99
100static int sock_no_open(struct inode *irrelevant, struct file *dontcare);
027445c3
BP
101static ssize_t sock_aio_read(struct kiocb *iocb, const struct iovec *iov,
102 unsigned long nr_segs, loff_t pos);
103static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov,
104 unsigned long nr_segs, loff_t pos);
89bddce5 105static int sock_mmap(struct file *file, struct vm_area_struct *vma);
1da177e4
LT
106
107static int sock_close(struct inode *inode, struct file *file);
108static unsigned int sock_poll(struct file *file,
109 struct poll_table_struct *wait);
89bddce5 110static long sock_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
89bbfc95
SP
111#ifdef CONFIG_COMPAT
112static long compat_sock_ioctl(struct file *file,
89bddce5 113 unsigned int cmd, unsigned long arg);
89bbfc95 114#endif
1da177e4 115static int sock_fasync(int fd, struct file *filp, int on);
1da177e4
LT
116static ssize_t sock_sendpage(struct file *file, struct page *page,
117 int offset, size_t size, loff_t *ppos, int more);
9c55e01c
JA
118static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
119 struct pipe_inode_info *pipe, size_t len,
120 unsigned int flags);
1da177e4 121
1da177e4
LT
122/*
123 * Socket files have a set of 'special' operations as well as the generic file ones. These don't appear
124 * in the operation structures but are done directly via the socketcall() multiplexor.
125 */
126
da7071d7 127static const struct file_operations socket_file_ops = {
1da177e4
LT
128 .owner = THIS_MODULE,
129 .llseek = no_llseek,
130 .aio_read = sock_aio_read,
131 .aio_write = sock_aio_write,
132 .poll = sock_poll,
133 .unlocked_ioctl = sock_ioctl,
89bbfc95
SP
134#ifdef CONFIG_COMPAT
135 .compat_ioctl = compat_sock_ioctl,
136#endif
1da177e4
LT
137 .mmap = sock_mmap,
138 .open = sock_no_open, /* special open code to disallow open via /proc */
139 .release = sock_close,
140 .fasync = sock_fasync,
5274f052
JA
141 .sendpage = sock_sendpage,
142 .splice_write = generic_splice_sendpage,
9c55e01c 143 .splice_read = sock_splice_read,
1da177e4
LT
144};
145
146/*
147 * The protocol list. Each protocol is registered in here.
148 */
149
1da177e4 150static DEFINE_SPINLOCK(net_family_lock);
f0fd27d4 151static const struct net_proto_family *net_families[NPROTO] __read_mostly;
1da177e4 152
1da177e4
LT
153/*
154 * Statistics counters of the socket lists
155 */
156
157static DEFINE_PER_CPU(int, sockets_in_use) = 0;
158
159/*
89bddce5
SH
160 * Support routines.
161 * Move socket addresses back and forth across the kernel/user
162 * divide and look after the messy bits.
1da177e4
LT
163 */
164
89bddce5 165#define MAX_SOCK_ADDR 128 /* 108 for Unix domain -
1da177e4
LT
166 16 for IP, 16 for IPX,
167 24 for IPv6,
89bddce5 168 about 80 for AX.25
1da177e4
LT
169 must be at least one bigger than
170 the AF_UNIX size (see net/unix/af_unix.c
89bddce5 171 :unix_mkname()).
1da177e4 172 */
89bddce5 173
1da177e4
LT
174/**
175 * move_addr_to_kernel - copy a socket address into kernel space
176 * @uaddr: Address in user space
177 * @kaddr: Address in kernel space
178 * @ulen: Length in user space
179 *
180 * The address is copied into kernel space. If the provided address is
181 * too long an error code of -EINVAL is returned. If the copy gives
182 * invalid addresses -EFAULT is returned. On a success 0 is returned.
183 */
184
230b1839 185int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr)
1da177e4 186{
230b1839 187 if (ulen < 0 || ulen > sizeof(struct sockaddr_storage))
1da177e4 188 return -EINVAL;
89bddce5 189 if (ulen == 0)
1da177e4 190 return 0;
89bddce5 191 if (copy_from_user(kaddr, uaddr, ulen))
1da177e4 192 return -EFAULT;
3ec3b2fb 193 return audit_sockaddr(ulen, kaddr);
1da177e4
LT
194}
195
196/**
197 * move_addr_to_user - copy an address to user space
198 * @kaddr: kernel space address
199 * @klen: length of address in kernel
200 * @uaddr: user space address
201 * @ulen: pointer to user length field
202 *
203 * The value pointed to by ulen on entry is the buffer length available.
204 * This is overwritten with the buffer space used. -EINVAL is returned
205 * if an overlong buffer is specified or a negative buffer size. -EFAULT
206 * is returned if either the buffer or the length field are not
207 * accessible.
208 * After copying the data up to the limit the user specifies, the true
209 * length of the data is written over the length limit the user
210 * specified. Zero is returned for a success.
211 */
89bddce5 212
230b1839 213int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr,
89bddce5 214 int __user *ulen)
1da177e4
LT
215{
216 int err;
217 int len;
218
89bddce5
SH
219 err = get_user(len, ulen);
220 if (err)
1da177e4 221 return err;
89bddce5
SH
222 if (len > klen)
223 len = klen;
230b1839 224 if (len < 0 || len > sizeof(struct sockaddr_storage))
1da177e4 225 return -EINVAL;
89bddce5 226 if (len) {
d6fe3945
SG
227 if (audit_sockaddr(klen, kaddr))
228 return -ENOMEM;
89bddce5 229 if (copy_to_user(uaddr, kaddr, len))
1da177e4
LT
230 return -EFAULT;
231 }
232 /*
89bddce5
SH
233 * "fromlen shall refer to the value before truncation.."
234 * 1003.1g
1da177e4
LT
235 */
236 return __put_user(klen, ulen);
237}
238
e18b890b 239static struct kmem_cache *sock_inode_cachep __read_mostly;
1da177e4
LT
240
241static struct inode *sock_alloc_inode(struct super_block *sb)
242{
243 struct socket_alloc *ei;
89bddce5 244
e94b1766 245 ei = kmem_cache_alloc(sock_inode_cachep, GFP_KERNEL);
1da177e4
LT
246 if (!ei)
247 return NULL;
248 init_waitqueue_head(&ei->socket.wait);
89bddce5 249
1da177e4
LT
250 ei->socket.fasync_list = NULL;
251 ei->socket.state = SS_UNCONNECTED;
252 ei->socket.flags = 0;
253 ei->socket.ops = NULL;
254 ei->socket.sk = NULL;
255 ei->socket.file = NULL;
1da177e4
LT
256
257 return &ei->vfs_inode;
258}
259
260static void sock_destroy_inode(struct inode *inode)
261{
262 kmem_cache_free(sock_inode_cachep,
263 container_of(inode, struct socket_alloc, vfs_inode));
264}
265
51cc5068 266static void init_once(void *foo)
1da177e4 267{
89bddce5 268 struct socket_alloc *ei = (struct socket_alloc *)foo;
1da177e4 269
a35afb83 270 inode_init_once(&ei->vfs_inode);
1da177e4 271}
89bddce5 272
1da177e4
LT
273static int init_inodecache(void)
274{
275 sock_inode_cachep = kmem_cache_create("sock_inode_cache",
89bddce5
SH
276 sizeof(struct socket_alloc),
277 0,
278 (SLAB_HWCACHE_ALIGN |
279 SLAB_RECLAIM_ACCOUNT |
280 SLAB_MEM_SPREAD),
20c2df83 281 init_once);
1da177e4
LT
282 if (sock_inode_cachep == NULL)
283 return -ENOMEM;
284 return 0;
285}
286
b87221de 287static const struct super_operations sockfs_ops = {
1da177e4
LT
288 .alloc_inode = sock_alloc_inode,
289 .destroy_inode =sock_destroy_inode,
290 .statfs = simple_statfs,
291};
292
454e2398 293static int sockfs_get_sb(struct file_system_type *fs_type,
89bddce5
SH
294 int flags, const char *dev_name, void *data,
295 struct vfsmount *mnt)
1da177e4 296{
454e2398
DH
297 return get_sb_pseudo(fs_type, "socket:", &sockfs_ops, SOCKFS_MAGIC,
298 mnt);
1da177e4
LT
299}
300
ba89966c 301static struct vfsmount *sock_mnt __read_mostly;
1da177e4
LT
302
303static struct file_system_type sock_fs_type = {
304 .name = "sockfs",
305 .get_sb = sockfs_get_sb,
306 .kill_sb = kill_anon_super,
307};
89bddce5 308
1da177e4
LT
309static int sockfs_delete_dentry(struct dentry *dentry)
310{
304e61e6
ED
311 /*
312 * At creation time, we pretended this dentry was hashed
313 * (by clearing DCACHE_UNHASHED bit in d_flags)
314 * At delete time, we restore the truth : not hashed.
315 * (so that dput() can proceed correctly)
316 */
317 dentry->d_flags |= DCACHE_UNHASHED;
318 return 0;
1da177e4 319}
c23fbb6b
ED
320
321/*
322 * sockfs_dname() is called from d_path().
323 */
324static char *sockfs_dname(struct dentry *dentry, char *buffer, int buflen)
325{
326 return dynamic_dname(dentry, buffer, buflen, "socket:[%lu]",
327 dentry->d_inode->i_ino);
328}
329
3ba13d17 330static const struct dentry_operations sockfs_dentry_operations = {
89bddce5 331 .d_delete = sockfs_delete_dentry,
c23fbb6b 332 .d_dname = sockfs_dname,
1da177e4
LT
333};
334
335/*
336 * Obtains the first available file descriptor and sets it up for use.
337 *
39d8c1b6
DM
338 * These functions create file structures and maps them to fd space
339 * of the current process. On success it returns file descriptor
1da177e4
LT
340 * and file struct implicitly stored in sock->file.
341 * Note that another thread may close file descriptor before we return
342 * from this function. We use the fact that now we do not refer
343 * to socket after mapping. If one day we will need it, this
344 * function will increment ref. count on file by 1.
345 *
346 * In any case returned fd MAY BE not valid!
347 * This race condition is unavoidable
348 * with shared fd spaces, we cannot solve it inside kernel,
349 * but we take care of internal coherence yet.
350 */
351
a677a039 352static int sock_alloc_fd(struct file **filep, int flags)
1da177e4
LT
353{
354 int fd;
1da177e4 355
a677a039 356 fd = get_unused_fd_flags(flags);
39d8c1b6 357 if (likely(fd >= 0)) {
1da177e4
LT
358 struct file *file = get_empty_filp();
359
39d8c1b6
DM
360 *filep = file;
361 if (unlikely(!file)) {
1da177e4 362 put_unused_fd(fd);
39d8c1b6 363 return -ENFILE;
1da177e4 364 }
39d8c1b6
DM
365 } else
366 *filep = NULL;
367 return fd;
368}
1da177e4 369
77d27200 370static int sock_attach_fd(struct socket *sock, struct file *file, int flags)
39d8c1b6 371{
ce8d2cdf 372 struct dentry *dentry;
c23fbb6b 373 struct qstr name = { .name = "" };
39d8c1b6 374
ce8d2cdf
DH
375 dentry = d_alloc(sock_mnt->mnt_sb->s_root, &name);
376 if (unlikely(!dentry))
39d8c1b6
DM
377 return -ENOMEM;
378
ce8d2cdf 379 dentry->d_op = &sockfs_dentry_operations;
304e61e6
ED
380 /*
381 * We dont want to push this dentry into global dentry hash table.
382 * We pretend dentry is already hashed, by unsetting DCACHE_UNHASHED
383 * This permits a working /proc/$pid/fd/XXX on sockets
384 */
ce8d2cdf
DH
385 dentry->d_flags &= ~DCACHE_UNHASHED;
386 d_instantiate(dentry, SOCK_INODE(sock));
39d8c1b6
DM
387
388 sock->file = file;
ce8d2cdf
DH
389 init_file(file, sock_mnt, dentry, FMODE_READ | FMODE_WRITE,
390 &socket_file_ops);
391 SOCK_INODE(sock)->i_fop = &socket_file_ops;
77d27200 392 file->f_flags = O_RDWR | (flags & O_NONBLOCK);
39d8c1b6
DM
393 file->f_pos = 0;
394 file->private_data = sock;
1da177e4 395
39d8c1b6
DM
396 return 0;
397}
398
a677a039 399int sock_map_fd(struct socket *sock, int flags)
39d8c1b6
DM
400{
401 struct file *newfile;
a677a039 402 int fd = sock_alloc_fd(&newfile, flags);
39d8c1b6
DM
403
404 if (likely(fd >= 0)) {
77d27200 405 int err = sock_attach_fd(sock, newfile, flags);
39d8c1b6
DM
406
407 if (unlikely(err < 0)) {
408 put_filp(newfile);
1da177e4 409 put_unused_fd(fd);
39d8c1b6 410 return err;
1da177e4 411 }
39d8c1b6 412 fd_install(fd, newfile);
1da177e4 413 }
1da177e4
LT
414 return fd;
415}
416
6cb153ca
BL
417static struct socket *sock_from_file(struct file *file, int *err)
418{
6cb153ca
BL
419 if (file->f_op == &socket_file_ops)
420 return file->private_data; /* set in sock_map_fd */
421
23bb80d2
ED
422 *err = -ENOTSOCK;
423 return NULL;
6cb153ca
BL
424}
425
1da177e4
LT
426/**
427 * sockfd_lookup - Go from a file number to its socket slot
428 * @fd: file handle
429 * @err: pointer to an error code return
430 *
431 * The file handle passed in is locked and the socket it is bound
432 * too is returned. If an error occurs the err pointer is overwritten
433 * with a negative errno code and NULL is returned. The function checks
434 * for both invalid handles and passing a handle which is not a socket.
435 *
436 * On a success the socket object pointer is returned.
437 */
438
439struct socket *sockfd_lookup(int fd, int *err)
440{
441 struct file *file;
1da177e4
LT
442 struct socket *sock;
443
89bddce5
SH
444 file = fget(fd);
445 if (!file) {
1da177e4
LT
446 *err = -EBADF;
447 return NULL;
448 }
89bddce5 449
6cb153ca
BL
450 sock = sock_from_file(file, err);
451 if (!sock)
1da177e4 452 fput(file);
6cb153ca
BL
453 return sock;
454}
1da177e4 455
6cb153ca
BL
456static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed)
457{
458 struct file *file;
459 struct socket *sock;
460
3672558c 461 *err = -EBADF;
6cb153ca
BL
462 file = fget_light(fd, fput_needed);
463 if (file) {
464 sock = sock_from_file(file, err);
465 if (sock)
466 return sock;
467 fput_light(file, *fput_needed);
1da177e4 468 }
6cb153ca 469 return NULL;
1da177e4
LT
470}
471
472/**
473 * sock_alloc - allocate a socket
89bddce5 474 *
1da177e4
LT
475 * Allocate a new inode and socket object. The two are bound together
476 * and initialised. The socket is then returned. If we are out of inodes
477 * NULL is returned.
478 */
479
480static struct socket *sock_alloc(void)
481{
89bddce5
SH
482 struct inode *inode;
483 struct socket *sock;
1da177e4
LT
484
485 inode = new_inode(sock_mnt->mnt_sb);
486 if (!inode)
487 return NULL;
488
489 sock = SOCKET_I(inode);
490
29a020d3 491 kmemcheck_annotate_bitfield(sock, type);
89bddce5 492 inode->i_mode = S_IFSOCK | S_IRWXUGO;
8192b0c4
DH
493 inode->i_uid = current_fsuid();
494 inode->i_gid = current_fsgid();
1da177e4 495
4e69489a 496 percpu_add(sockets_in_use, 1);
1da177e4
LT
497 return sock;
498}
499
500/*
501 * In theory you can't get an open on this inode, but /proc provides
502 * a back door. Remember to keep it shut otherwise you'll let the
503 * creepy crawlies in.
504 */
89bddce5 505
1da177e4
LT
506static int sock_no_open(struct inode *irrelevant, struct file *dontcare)
507{
508 return -ENXIO;
509}
510
4b6f5d20 511const struct file_operations bad_sock_fops = {
1da177e4
LT
512 .owner = THIS_MODULE,
513 .open = sock_no_open,
514};
515
516/**
517 * sock_release - close a socket
518 * @sock: socket to close
519 *
520 * The socket is released from the protocol stack if it has a release
521 * callback, and the inode is then released if the socket is bound to
89bddce5 522 * an inode not a file.
1da177e4 523 */
89bddce5 524
1da177e4
LT
525void sock_release(struct socket *sock)
526{
527 if (sock->ops) {
528 struct module *owner = sock->ops->owner;
529
530 sock->ops->release(sock);
531 sock->ops = NULL;
532 module_put(owner);
533 }
534
535 if (sock->fasync_list)
536 printk(KERN_ERR "sock_release: fasync list not empty!\n");
537
4e69489a 538 percpu_sub(sockets_in_use, 1);
1da177e4
LT
539 if (!sock->file) {
540 iput(SOCK_INODE(sock));
541 return;
542 }
89bddce5 543 sock->file = NULL;
1da177e4
LT
544}
545
20d49473
PO
546int sock_tx_timestamp(struct msghdr *msg, struct sock *sk,
547 union skb_shared_tx *shtx)
548{
549 shtx->flags = 0;
550 if (sock_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE))
551 shtx->hardware = 1;
552 if (sock_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE))
553 shtx->software = 1;
554 return 0;
555}
556EXPORT_SYMBOL(sock_tx_timestamp);
557
89bddce5 558static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock,
1da177e4
LT
559 struct msghdr *msg, size_t size)
560{
561 struct sock_iocb *si = kiocb_to_siocb(iocb);
562 int err;
563
564 si->sock = sock;
565 si->scm = NULL;
566 si->msg = msg;
567 si->size = size;
568
569 err = security_socket_sendmsg(sock, msg, size);
570 if (err)
571 return err;
572
573 return sock->ops->sendmsg(iocb, sock, msg, size);
574}
575
576int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
577{
578 struct kiocb iocb;
579 struct sock_iocb siocb;
580 int ret;
581
582 init_sync_kiocb(&iocb, NULL);
583 iocb.private = &siocb;
584 ret = __sock_sendmsg(&iocb, sock, msg, size);
585 if (-EIOCBQUEUED == ret)
586 ret = wait_on_sync_kiocb(&iocb);
587 return ret;
588}
589
590int kernel_sendmsg(struct socket *sock, struct msghdr *msg,
591 struct kvec *vec, size_t num, size_t size)
592{
593 mm_segment_t oldfs = get_fs();
594 int result;
595
596 set_fs(KERNEL_DS);
597 /*
598 * the following is safe, since for compiler definitions of kvec and
599 * iovec are identical, yielding the same in-core layout and alignment
600 */
89bddce5 601 msg->msg_iov = (struct iovec *)vec;
1da177e4
LT
602 msg->msg_iovlen = num;
603 result = sock_sendmsg(sock, msg, size);
604 set_fs(oldfs);
605 return result;
606}
607
20d49473
PO
608static int ktime2ts(ktime_t kt, struct timespec *ts)
609{
610 if (kt.tv64) {
611 *ts = ktime_to_timespec(kt);
612 return 1;
613 } else {
614 return 0;
615 }
616}
617
92f37fd2
ED
618/*
619 * called from sock_recv_timestamp() if sock_flag(sk, SOCK_RCVTSTAMP)
620 */
621void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
622 struct sk_buff *skb)
623{
20d49473
PO
624 int need_software_tstamp = sock_flag(sk, SOCK_RCVTSTAMP);
625 struct timespec ts[3];
626 int empty = 1;
627 struct skb_shared_hwtstamps *shhwtstamps =
628 skb_hwtstamps(skb);
629
630 /* Race occurred between timestamp enabling and packet
631 receiving. Fill in the current time for now. */
632 if (need_software_tstamp && skb->tstamp.tv64 == 0)
633 __net_timestamp(skb);
634
635 if (need_software_tstamp) {
636 if (!sock_flag(sk, SOCK_RCVTSTAMPNS)) {
637 struct timeval tv;
638 skb_get_timestamp(skb, &tv);
639 put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP,
640 sizeof(tv), &tv);
641 } else {
642 struct timespec ts;
643 skb_get_timestampns(skb, &ts);
644 put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMPNS,
645 sizeof(ts), &ts);
646 }
647 }
648
649
650 memset(ts, 0, sizeof(ts));
651 if (skb->tstamp.tv64 &&
652 sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) {
653 skb_get_timestampns(skb, ts + 0);
654 empty = 0;
655 }
656 if (shhwtstamps) {
657 if (sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE) &&
658 ktime2ts(shhwtstamps->syststamp, ts + 1))
659 empty = 0;
660 if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE) &&
661 ktime2ts(shhwtstamps->hwtstamp, ts + 2))
662 empty = 0;
92f37fd2 663 }
20d49473
PO
664 if (!empty)
665 put_cmsg(msg, SOL_SOCKET,
666 SCM_TIMESTAMPING, sizeof(ts), &ts);
92f37fd2
ED
667}
668
7c81fd8b
ACM
669EXPORT_SYMBOL_GPL(__sock_recv_timestamp);
670
89bddce5 671static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock,
1da177e4
LT
672 struct msghdr *msg, size_t size, int flags)
673{
674 int err;
675 struct sock_iocb *si = kiocb_to_siocb(iocb);
676
677 si->sock = sock;
678 si->scm = NULL;
679 si->msg = msg;
680 si->size = size;
681 si->flags = flags;
682
683 err = security_socket_recvmsg(sock, msg, size, flags);
684 if (err)
685 return err;
686
687 return sock->ops->recvmsg(iocb, sock, msg, size, flags);
688}
689
89bddce5 690int sock_recvmsg(struct socket *sock, struct msghdr *msg,
1da177e4
LT
691 size_t size, int flags)
692{
693 struct kiocb iocb;
694 struct sock_iocb siocb;
695 int ret;
696
89bddce5 697 init_sync_kiocb(&iocb, NULL);
1da177e4
LT
698 iocb.private = &siocb;
699 ret = __sock_recvmsg(&iocb, sock, msg, size, flags);
700 if (-EIOCBQUEUED == ret)
701 ret = wait_on_sync_kiocb(&iocb);
702 return ret;
703}
704
89bddce5
SH
705int kernel_recvmsg(struct socket *sock, struct msghdr *msg,
706 struct kvec *vec, size_t num, size_t size, int flags)
1da177e4
LT
707{
708 mm_segment_t oldfs = get_fs();
709 int result;
710
711 set_fs(KERNEL_DS);
712 /*
713 * the following is safe, since for compiler definitions of kvec and
714 * iovec are identical, yielding the same in-core layout and alignment
715 */
89bddce5 716 msg->msg_iov = (struct iovec *)vec, msg->msg_iovlen = num;
1da177e4
LT
717 result = sock_recvmsg(sock, msg, size, flags);
718 set_fs(oldfs);
719 return result;
720}
721
722static void sock_aio_dtor(struct kiocb *iocb)
723{
724 kfree(iocb->private);
725}
726
ce1d4d3e
CH
727static ssize_t sock_sendpage(struct file *file, struct page *page,
728 int offset, size_t size, loff_t *ppos, int more)
1da177e4 729{
1da177e4
LT
730 struct socket *sock;
731 int flags;
732
ce1d4d3e
CH
733 sock = file->private_data;
734
735 flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
736 if (more)
737 flags |= MSG_MORE;
738
e6949583 739 return kernel_sendpage(sock, page, offset, size, flags);
ce1d4d3e 740}
1da177e4 741
9c55e01c
JA
742static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
743 struct pipe_inode_info *pipe, size_t len,
744 unsigned int flags)
745{
746 struct socket *sock = file->private_data;
747
997b37da
RDC
748 if (unlikely(!sock->ops->splice_read))
749 return -EINVAL;
750
9c55e01c
JA
751 return sock->ops->splice_read(sock, ppos, pipe, len, flags);
752}
753
ce1d4d3e 754static struct sock_iocb *alloc_sock_iocb(struct kiocb *iocb,
89bddce5 755 struct sock_iocb *siocb)
ce1d4d3e
CH
756{
757 if (!is_sync_kiocb(iocb)) {
758 siocb = kmalloc(sizeof(*siocb), GFP_KERNEL);
759 if (!siocb)
760 return NULL;
1da177e4
LT
761 iocb->ki_dtor = sock_aio_dtor;
762 }
1da177e4 763
ce1d4d3e 764 siocb->kiocb = iocb;
ce1d4d3e
CH
765 iocb->private = siocb;
766 return siocb;
1da177e4
LT
767}
768
ce1d4d3e 769static ssize_t do_sock_read(struct msghdr *msg, struct kiocb *iocb,
027445c3
BP
770 struct file *file, const struct iovec *iov,
771 unsigned long nr_segs)
ce1d4d3e
CH
772{
773 struct socket *sock = file->private_data;
774 size_t size = 0;
775 int i;
1da177e4 776
89bddce5
SH
777 for (i = 0; i < nr_segs; i++)
778 size += iov[i].iov_len;
1da177e4 779
ce1d4d3e
CH
780 msg->msg_name = NULL;
781 msg->msg_namelen = 0;
782 msg->msg_control = NULL;
783 msg->msg_controllen = 0;
89bddce5 784 msg->msg_iov = (struct iovec *)iov;
ce1d4d3e
CH
785 msg->msg_iovlen = nr_segs;
786 msg->msg_flags = (file->f_flags & O_NONBLOCK) ? MSG_DONTWAIT : 0;
787
788 return __sock_recvmsg(iocb, sock, msg, size, msg->msg_flags);
789}
790
027445c3
BP
791static ssize_t sock_aio_read(struct kiocb *iocb, const struct iovec *iov,
792 unsigned long nr_segs, loff_t pos)
ce1d4d3e
CH
793{
794 struct sock_iocb siocb, *x;
795
1da177e4
LT
796 if (pos != 0)
797 return -ESPIPE;
027445c3
BP
798
799 if (iocb->ki_left == 0) /* Match SYS5 behaviour */
1da177e4
LT
800 return 0;
801
027445c3
BP
802
803 x = alloc_sock_iocb(iocb, &siocb);
ce1d4d3e
CH
804 if (!x)
805 return -ENOMEM;
027445c3 806 return do_sock_read(&x->async_msg, iocb, iocb->ki_filp, iov, nr_segs);
1da177e4
LT
807}
808
ce1d4d3e 809static ssize_t do_sock_write(struct msghdr *msg, struct kiocb *iocb,
027445c3
BP
810 struct file *file, const struct iovec *iov,
811 unsigned long nr_segs)
1da177e4 812{
ce1d4d3e
CH
813 struct socket *sock = file->private_data;
814 size_t size = 0;
815 int i;
1da177e4 816
89bddce5
SH
817 for (i = 0; i < nr_segs; i++)
818 size += iov[i].iov_len;
1da177e4 819
ce1d4d3e
CH
820 msg->msg_name = NULL;
821 msg->msg_namelen = 0;
822 msg->msg_control = NULL;
823 msg->msg_controllen = 0;
89bddce5 824 msg->msg_iov = (struct iovec *)iov;
ce1d4d3e
CH
825 msg->msg_iovlen = nr_segs;
826 msg->msg_flags = (file->f_flags & O_NONBLOCK) ? MSG_DONTWAIT : 0;
827 if (sock->type == SOCK_SEQPACKET)
828 msg->msg_flags |= MSG_EOR;
1da177e4 829
ce1d4d3e 830 return __sock_sendmsg(iocb, sock, msg, size);
1da177e4
LT
831}
832
027445c3
BP
833static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov,
834 unsigned long nr_segs, loff_t pos)
ce1d4d3e
CH
835{
836 struct sock_iocb siocb, *x;
1da177e4 837
ce1d4d3e
CH
838 if (pos != 0)
839 return -ESPIPE;
027445c3 840
027445c3 841 x = alloc_sock_iocb(iocb, &siocb);
ce1d4d3e
CH
842 if (!x)
843 return -ENOMEM;
1da177e4 844
027445c3 845 return do_sock_write(&x->async_msg, iocb, iocb->ki_filp, iov, nr_segs);
1da177e4
LT
846}
847
1da177e4
LT
848/*
849 * Atomic setting of ioctl hooks to avoid race
850 * with module unload.
851 */
852
4a3e2f71 853static DEFINE_MUTEX(br_ioctl_mutex);
881d966b 854static int (*br_ioctl_hook) (struct net *, unsigned int cmd, void __user *arg) = NULL;
1da177e4 855
881d966b 856void brioctl_set(int (*hook) (struct net *, unsigned int, void __user *))
1da177e4 857{
4a3e2f71 858 mutex_lock(&br_ioctl_mutex);
1da177e4 859 br_ioctl_hook = hook;
4a3e2f71 860 mutex_unlock(&br_ioctl_mutex);
1da177e4 861}
89bddce5 862
1da177e4
LT
863EXPORT_SYMBOL(brioctl_set);
864
4a3e2f71 865static DEFINE_MUTEX(vlan_ioctl_mutex);
881d966b 866static int (*vlan_ioctl_hook) (struct net *, void __user *arg);
1da177e4 867
881d966b 868void vlan_ioctl_set(int (*hook) (struct net *, void __user *))
1da177e4 869{
4a3e2f71 870 mutex_lock(&vlan_ioctl_mutex);
1da177e4 871 vlan_ioctl_hook = hook;
4a3e2f71 872 mutex_unlock(&vlan_ioctl_mutex);
1da177e4 873}
89bddce5 874
1da177e4
LT
875EXPORT_SYMBOL(vlan_ioctl_set);
876
4a3e2f71 877static DEFINE_MUTEX(dlci_ioctl_mutex);
89bddce5 878static int (*dlci_ioctl_hook) (unsigned int, void __user *);
1da177e4 879
89bddce5 880void dlci_ioctl_set(int (*hook) (unsigned int, void __user *))
1da177e4 881{
4a3e2f71 882 mutex_lock(&dlci_ioctl_mutex);
1da177e4 883 dlci_ioctl_hook = hook;
4a3e2f71 884 mutex_unlock(&dlci_ioctl_mutex);
1da177e4 885}
89bddce5 886
1da177e4
LT
887EXPORT_SYMBOL(dlci_ioctl_set);
888
889/*
890 * With an ioctl, arg may well be a user mode pointer, but we don't know
891 * what to do with it - that's up to the protocol still.
892 */
893
894static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
895{
896 struct socket *sock;
881d966b 897 struct sock *sk;
1da177e4
LT
898 void __user *argp = (void __user *)arg;
899 int pid, err;
881d966b 900 struct net *net;
1da177e4 901
b69aee04 902 sock = file->private_data;
881d966b 903 sk = sock->sk;
3b1e0a65 904 net = sock_net(sk);
1da177e4 905 if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
881d966b 906 err = dev_ioctl(net, cmd, argp);
1da177e4 907 } else
3d23e349 908#ifdef CONFIG_WEXT_CORE
1da177e4 909 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
881d966b 910 err = dev_ioctl(net, cmd, argp);
1da177e4 911 } else
3d23e349 912#endif
89bddce5 913 switch (cmd) {
1da177e4
LT
914 case FIOSETOWN:
915 case SIOCSPGRP:
916 err = -EFAULT;
917 if (get_user(pid, (int __user *)argp))
918 break;
919 err = f_setown(sock->file, pid, 1);
920 break;
921 case FIOGETOWN:
922 case SIOCGPGRP:
609d7fa9 923 err = put_user(f_getown(sock->file),
89bddce5 924 (int __user *)argp);
1da177e4
LT
925 break;
926 case SIOCGIFBR:
927 case SIOCSIFBR:
928 case SIOCBRADDBR:
929 case SIOCBRDELBR:
930 err = -ENOPKG;
931 if (!br_ioctl_hook)
932 request_module("bridge");
933
4a3e2f71 934 mutex_lock(&br_ioctl_mutex);
89bddce5 935 if (br_ioctl_hook)
881d966b 936 err = br_ioctl_hook(net, cmd, argp);
4a3e2f71 937 mutex_unlock(&br_ioctl_mutex);
1da177e4
LT
938 break;
939 case SIOCGIFVLAN:
940 case SIOCSIFVLAN:
941 err = -ENOPKG;
942 if (!vlan_ioctl_hook)
943 request_module("8021q");
944
4a3e2f71 945 mutex_lock(&vlan_ioctl_mutex);
1da177e4 946 if (vlan_ioctl_hook)
881d966b 947 err = vlan_ioctl_hook(net, argp);
4a3e2f71 948 mutex_unlock(&vlan_ioctl_mutex);
1da177e4 949 break;
1da177e4
LT
950 case SIOCADDDLCI:
951 case SIOCDELDLCI:
952 err = -ENOPKG;
953 if (!dlci_ioctl_hook)
954 request_module("dlci");
955
7512cbf6
PE
956 mutex_lock(&dlci_ioctl_mutex);
957 if (dlci_ioctl_hook)
1da177e4 958 err = dlci_ioctl_hook(cmd, argp);
7512cbf6 959 mutex_unlock(&dlci_ioctl_mutex);
1da177e4
LT
960 break;
961 default:
962 err = sock->ops->ioctl(sock, cmd, arg);
b5e5fa5e
CH
963
964 /*
965 * If this ioctl is unknown try to hand it down
966 * to the NIC driver.
967 */
968 if (err == -ENOIOCTLCMD)
881d966b 969 err = dev_ioctl(net, cmd, argp);
1da177e4 970 break;
89bddce5 971 }
1da177e4
LT
972 return err;
973}
974
975int sock_create_lite(int family, int type, int protocol, struct socket **res)
976{
977 int err;
978 struct socket *sock = NULL;
89bddce5 979
1da177e4
LT
980 err = security_socket_create(family, type, protocol, 1);
981 if (err)
982 goto out;
983
984 sock = sock_alloc();
985 if (!sock) {
986 err = -ENOMEM;
987 goto out;
988 }
989
1da177e4 990 sock->type = type;
7420ed23
VY
991 err = security_socket_post_create(sock, family, type, protocol, 1);
992 if (err)
993 goto out_release;
994
1da177e4
LT
995out:
996 *res = sock;
997 return err;
7420ed23
VY
998out_release:
999 sock_release(sock);
1000 sock = NULL;
1001 goto out;
1da177e4
LT
1002}
1003
1004/* No kernel lock held - perfect */
89bddce5 1005static unsigned int sock_poll(struct file *file, poll_table *wait)
1da177e4
LT
1006{
1007 struct socket *sock;
1008
1009 /*
89bddce5 1010 * We can't return errors to poll, so it's either yes or no.
1da177e4 1011 */
b69aee04 1012 sock = file->private_data;
1da177e4
LT
1013 return sock->ops->poll(file, sock, wait);
1014}
1015
89bddce5 1016static int sock_mmap(struct file *file, struct vm_area_struct *vma)
1da177e4 1017{
b69aee04 1018 struct socket *sock = file->private_data;
1da177e4
LT
1019
1020 return sock->ops->mmap(file, sock, vma);
1021}
1022
20380731 1023static int sock_close(struct inode *inode, struct file *filp)
1da177e4
LT
1024{
1025 /*
89bddce5
SH
1026 * It was possible the inode is NULL we were
1027 * closing an unfinished socket.
1da177e4
LT
1028 */
1029
89bddce5 1030 if (!inode) {
1da177e4
LT
1031 printk(KERN_DEBUG "sock_close: NULL inode\n");
1032 return 0;
1033 }
1da177e4
LT
1034 sock_release(SOCKET_I(inode));
1035 return 0;
1036}
1037
1038/*
1039 * Update the socket async list
1040 *
1041 * Fasync_list locking strategy.
1042 *
1043 * 1. fasync_list is modified only under process context socket lock
1044 * i.e. under semaphore.
1045 * 2. fasync_list is used under read_lock(&sk->sk_callback_lock)
1046 * or under socket lock.
1047 * 3. fasync_list can be used from softirq context, so that
1048 * modification under socket lock have to be enhanced with
1049 * write_lock_bh(&sk->sk_callback_lock).
1050 * --ANK (990710)
1051 */
1052
1053static int sock_fasync(int fd, struct file *filp, int on)
1054{
89bddce5 1055 struct fasync_struct *fa, *fna = NULL, **prev;
1da177e4
LT
1056 struct socket *sock;
1057 struct sock *sk;
1058
89bddce5 1059 if (on) {
8b3a7005 1060 fna = kmalloc(sizeof(struct fasync_struct), GFP_KERNEL);
89bddce5 1061 if (fna == NULL)
1da177e4
LT
1062 return -ENOMEM;
1063 }
1064
b69aee04 1065 sock = filp->private_data;
1da177e4 1066
89bddce5
SH
1067 sk = sock->sk;
1068 if (sk == NULL) {
1da177e4
LT
1069 kfree(fna);
1070 return -EINVAL;
1071 }
1072
1073 lock_sock(sk);
1074
76398425
JC
1075 spin_lock(&filp->f_lock);
1076 if (on)
1077 filp->f_flags |= FASYNC;
1078 else
1079 filp->f_flags &= ~FASYNC;
1080 spin_unlock(&filp->f_lock);
1081
89bddce5 1082 prev = &(sock->fasync_list);
1da177e4 1083
89bddce5
SH
1084 for (fa = *prev; fa != NULL; prev = &fa->fa_next, fa = *prev)
1085 if (fa->fa_file == filp)
1da177e4
LT
1086 break;
1087
89bddce5
SH
1088 if (on) {
1089 if (fa != NULL) {
1da177e4 1090 write_lock_bh(&sk->sk_callback_lock);
89bddce5 1091 fa->fa_fd = fd;
1da177e4
LT
1092 write_unlock_bh(&sk->sk_callback_lock);
1093
1094 kfree(fna);
1095 goto out;
1096 }
89bddce5
SH
1097 fna->fa_file = filp;
1098 fna->fa_fd = fd;
1099 fna->magic = FASYNC_MAGIC;
1100 fna->fa_next = sock->fasync_list;
1da177e4 1101 write_lock_bh(&sk->sk_callback_lock);
89bddce5 1102 sock->fasync_list = fna;
bcdce719 1103 sock_set_flag(sk, SOCK_FASYNC);
1da177e4 1104 write_unlock_bh(&sk->sk_callback_lock);
89bddce5
SH
1105 } else {
1106 if (fa != NULL) {
1da177e4 1107 write_lock_bh(&sk->sk_callback_lock);
89bddce5 1108 *prev = fa->fa_next;
bcdce719
ED
1109 if (!sock->fasync_list)
1110 sock_reset_flag(sk, SOCK_FASYNC);
1da177e4
LT
1111 write_unlock_bh(&sk->sk_callback_lock);
1112 kfree(fa);
1113 }
1114 }
1115
1116out:
1117 release_sock(sock->sk);
1118 return 0;
1119}
1120
1121/* This function may be called only under socket lock or callback_lock */
1122
1123int sock_wake_async(struct socket *sock, int how, int band)
1124{
1125 if (!sock || !sock->fasync_list)
1126 return -1;
89bddce5 1127 switch (how) {
8d8ad9d7 1128 case SOCK_WAKE_WAITD:
1da177e4
LT
1129 if (test_bit(SOCK_ASYNC_WAITDATA, &sock->flags))
1130 break;
1131 goto call_kill;
8d8ad9d7 1132 case SOCK_WAKE_SPACE:
1da177e4
LT
1133 if (!test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags))
1134 break;
1135 /* fall through */
8d8ad9d7 1136 case SOCK_WAKE_IO:
89bddce5 1137call_kill:
1da177e4
LT
1138 __kill_fasync(sock->fasync_list, SIGIO, band);
1139 break;
8d8ad9d7 1140 case SOCK_WAKE_URG:
1da177e4
LT
1141 __kill_fasync(sock->fasync_list, SIGURG, band);
1142 }
1143 return 0;
1144}
1145
1b8d7ae4 1146static int __sock_create(struct net *net, int family, int type, int protocol,
89bddce5 1147 struct socket **res, int kern)
1da177e4
LT
1148{
1149 int err;
1150 struct socket *sock;
55737fda 1151 const struct net_proto_family *pf;
1da177e4
LT
1152
1153 /*
89bddce5 1154 * Check protocol is in range
1da177e4
LT
1155 */
1156 if (family < 0 || family >= NPROTO)
1157 return -EAFNOSUPPORT;
1158 if (type < 0 || type >= SOCK_MAX)
1159 return -EINVAL;
1160
1161 /* Compatibility.
1162
1163 This uglymoron is moved from INET layer to here to avoid
1164 deadlock in module load.
1165 */
1166 if (family == PF_INET && type == SOCK_PACKET) {
89bddce5 1167 static int warned;
1da177e4
LT
1168 if (!warned) {
1169 warned = 1;
89bddce5
SH
1170 printk(KERN_INFO "%s uses obsolete (PF_INET,SOCK_PACKET)\n",
1171 current->comm);
1da177e4
LT
1172 }
1173 family = PF_PACKET;
1174 }
1175
1176 err = security_socket_create(family, type, protocol, kern);
1177 if (err)
1178 return err;
89bddce5 1179
55737fda
SH
1180 /*
1181 * Allocate the socket and allow the family to set things up. if
1182 * the protocol is 0, the family is instructed to select an appropriate
1183 * default.
1184 */
1185 sock = sock_alloc();
1186 if (!sock) {
1187 if (net_ratelimit())
1188 printk(KERN_WARNING "socket: no more sockets\n");
1189 return -ENFILE; /* Not exactly a match, but its the
1190 closest posix thing */
1191 }
1192
1193 sock->type = type;
1194
95a5afca 1195#ifdef CONFIG_MODULES
89bddce5
SH
1196 /* Attempt to load a protocol module if the find failed.
1197 *
1198 * 12/09/1996 Marcin: But! this makes REALLY only sense, if the user
1da177e4
LT
1199 * requested real, full-featured networking support upon configuration.
1200 * Otherwise module support will break!
1201 */
55737fda 1202 if (net_families[family] == NULL)
89bddce5 1203 request_module("net-pf-%d", family);
1da177e4
LT
1204#endif
1205
55737fda
SH
1206 rcu_read_lock();
1207 pf = rcu_dereference(net_families[family]);
1208 err = -EAFNOSUPPORT;
1209 if (!pf)
1210 goto out_release;
1da177e4
LT
1211
1212 /*
1213 * We will call the ->create function, that possibly is in a loadable
1214 * module, so we have to bump that loadable module refcnt first.
1215 */
55737fda 1216 if (!try_module_get(pf->owner))
1da177e4
LT
1217 goto out_release;
1218
55737fda
SH
1219 /* Now protected by module ref count */
1220 rcu_read_unlock();
1221
1b8d7ae4 1222 err = pf->create(net, sock, protocol);
55737fda 1223 if (err < 0)
1da177e4 1224 goto out_module_put;
a79af59e 1225
1da177e4
LT
1226 /*
1227 * Now to bump the refcnt of the [loadable] module that owns this
1228 * socket at sock_release time we decrement its refcnt.
1229 */
55737fda
SH
1230 if (!try_module_get(sock->ops->owner))
1231 goto out_module_busy;
1232
1da177e4
LT
1233 /*
1234 * Now that we're done with the ->create function, the [loadable]
1235 * module can have its refcnt decremented
1236 */
55737fda 1237 module_put(pf->owner);
7420ed23
VY
1238 err = security_socket_post_create(sock, family, type, protocol, kern);
1239 if (err)
3b185525 1240 goto out_sock_release;
55737fda 1241 *res = sock;
1da177e4 1242
55737fda
SH
1243 return 0;
1244
1245out_module_busy:
1246 err = -EAFNOSUPPORT;
1da177e4 1247out_module_put:
55737fda
SH
1248 sock->ops = NULL;
1249 module_put(pf->owner);
1250out_sock_release:
1da177e4 1251 sock_release(sock);
55737fda
SH
1252 return err;
1253
1254out_release:
1255 rcu_read_unlock();
1256 goto out_sock_release;
1da177e4
LT
1257}
1258
1259int sock_create(int family, int type, int protocol, struct socket **res)
1260{
1b8d7ae4 1261 return __sock_create(current->nsproxy->net_ns, family, type, protocol, res, 0);
1da177e4
LT
1262}
1263
1264int sock_create_kern(int family, int type, int protocol, struct socket **res)
1265{
1b8d7ae4 1266 return __sock_create(&init_net, family, type, protocol, res, 1);
1da177e4
LT
1267}
1268
3e0fa65f 1269SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
1da177e4
LT
1270{
1271 int retval;
1272 struct socket *sock;
a677a039
UD
1273 int flags;
1274
e38b36f3
UD
1275 /* Check the SOCK_* constants for consistency. */
1276 BUILD_BUG_ON(SOCK_CLOEXEC != O_CLOEXEC);
1277 BUILD_BUG_ON((SOCK_MAX | SOCK_TYPE_MASK) != SOCK_TYPE_MASK);
1278 BUILD_BUG_ON(SOCK_CLOEXEC & SOCK_TYPE_MASK);
1279 BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
1280
a677a039 1281 flags = type & ~SOCK_TYPE_MASK;
77d27200 1282 if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
a677a039
UD
1283 return -EINVAL;
1284 type &= SOCK_TYPE_MASK;
1da177e4 1285
aaca0bdc
UD
1286 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1287 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1288
1da177e4
LT
1289 retval = sock_create(family, type, protocol, &sock);
1290 if (retval < 0)
1291 goto out;
1292
77d27200 1293 retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK));
1da177e4
LT
1294 if (retval < 0)
1295 goto out_release;
1296
1297out:
1298 /* It may be already another descriptor 8) Not kernel problem. */
1299 return retval;
1300
1301out_release:
1302 sock_release(sock);
1303 return retval;
1304}
1305
1306/*
1307 * Create a pair of connected sockets.
1308 */
1309
3e0fa65f
HC
1310SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
1311 int __user *, usockvec)
1da177e4
LT
1312{
1313 struct socket *sock1, *sock2;
1314 int fd1, fd2, err;
db349509 1315 struct file *newfile1, *newfile2;
a677a039
UD
1316 int flags;
1317
1318 flags = type & ~SOCK_TYPE_MASK;
77d27200 1319 if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
a677a039
UD
1320 return -EINVAL;
1321 type &= SOCK_TYPE_MASK;
1da177e4 1322
aaca0bdc
UD
1323 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1324 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1325
1da177e4
LT
1326 /*
1327 * Obtain the first socket and check if the underlying protocol
1328 * supports the socketpair call.
1329 */
1330
1331 err = sock_create(family, type, protocol, &sock1);
1332 if (err < 0)
1333 goto out;
1334
1335 err = sock_create(family, type, protocol, &sock2);
1336 if (err < 0)
1337 goto out_release_1;
1338
1339 err = sock1->ops->socketpair(sock1, sock2);
89bddce5 1340 if (err < 0)
1da177e4
LT
1341 goto out_release_both;
1342
a677a039 1343 fd1 = sock_alloc_fd(&newfile1, flags & O_CLOEXEC);
bf3c23d1
DM
1344 if (unlikely(fd1 < 0)) {
1345 err = fd1;
db349509 1346 goto out_release_both;
bf3c23d1 1347 }
1da177e4 1348
a677a039 1349 fd2 = sock_alloc_fd(&newfile2, flags & O_CLOEXEC);
db349509 1350 if (unlikely(fd2 < 0)) {
bf3c23d1 1351 err = fd2;
db349509
AV
1352 put_filp(newfile1);
1353 put_unused_fd(fd1);
1da177e4 1354 goto out_release_both;
db349509 1355 }
1da177e4 1356
77d27200 1357 err = sock_attach_fd(sock1, newfile1, flags & O_NONBLOCK);
db349509
AV
1358 if (unlikely(err < 0)) {
1359 goto out_fd2;
1360 }
1361
77d27200 1362 err = sock_attach_fd(sock2, newfile2, flags & O_NONBLOCK);
db349509
AV
1363 if (unlikely(err < 0)) {
1364 fput(newfile1);
1365 goto out_fd1;
1366 }
1367
157cf649 1368 audit_fd_pair(fd1, fd2);
db349509
AV
1369 fd_install(fd1, newfile1);
1370 fd_install(fd2, newfile2);
1da177e4
LT
1371 /* fd1 and fd2 may be already another descriptors.
1372 * Not kernel problem.
1373 */
1374
89bddce5 1375 err = put_user(fd1, &usockvec[0]);
1da177e4
LT
1376 if (!err)
1377 err = put_user(fd2, &usockvec[1]);
1378 if (!err)
1379 return 0;
1380
1381 sys_close(fd2);
1382 sys_close(fd1);
1383 return err;
1384
1da177e4 1385out_release_both:
89bddce5 1386 sock_release(sock2);
1da177e4 1387out_release_1:
89bddce5 1388 sock_release(sock1);
1da177e4
LT
1389out:
1390 return err;
db349509
AV
1391
1392out_fd2:
1393 put_filp(newfile1);
1394 sock_release(sock1);
1395out_fd1:
1396 put_filp(newfile2);
1397 sock_release(sock2);
db349509
AV
1398 put_unused_fd(fd1);
1399 put_unused_fd(fd2);
1400 goto out;
1da177e4
LT
1401}
1402
1da177e4
LT
1403/*
1404 * Bind a name to a socket. Nothing much to do here since it's
1405 * the protocol's responsibility to handle the local address.
1406 *
1407 * We move the socket address to kernel space before we call
1408 * the protocol layer (having also checked the address is ok).
1409 */
1410
20f37034 1411SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
1da177e4
LT
1412{
1413 struct socket *sock;
230b1839 1414 struct sockaddr_storage address;
6cb153ca 1415 int err, fput_needed;
1da177e4 1416
89bddce5 1417 sock = sockfd_lookup_light(fd, &err, &fput_needed);
e71a4783 1418 if (sock) {
230b1839 1419 err = move_addr_to_kernel(umyaddr, addrlen, (struct sockaddr *)&address);
89bddce5
SH
1420 if (err >= 0) {
1421 err = security_socket_bind(sock,
230b1839 1422 (struct sockaddr *)&address,
89bddce5 1423 addrlen);
6cb153ca
BL
1424 if (!err)
1425 err = sock->ops->bind(sock,
89bddce5 1426 (struct sockaddr *)
230b1839 1427 &address, addrlen);
1da177e4 1428 }
6cb153ca 1429 fput_light(sock->file, fput_needed);
89bddce5 1430 }
1da177e4
LT
1431 return err;
1432}
1433
1da177e4
LT
1434/*
1435 * Perform a listen. Basically, we allow the protocol to do anything
1436 * necessary for a listen, and if that works, we mark the socket as
1437 * ready for listening.
1438 */
1439
3e0fa65f 1440SYSCALL_DEFINE2(listen, int, fd, int, backlog)
1da177e4
LT
1441{
1442 struct socket *sock;
6cb153ca 1443 int err, fput_needed;
b8e1f9b5 1444 int somaxconn;
89bddce5
SH
1445
1446 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1447 if (sock) {
8efa6e93 1448 somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn;
b8e1f9b5
PE
1449 if ((unsigned)backlog > somaxconn)
1450 backlog = somaxconn;
1da177e4
LT
1451
1452 err = security_socket_listen(sock, backlog);
6cb153ca
BL
1453 if (!err)
1454 err = sock->ops->listen(sock, backlog);
1da177e4 1455
6cb153ca 1456 fput_light(sock->file, fput_needed);
1da177e4
LT
1457 }
1458 return err;
1459}
1460
1da177e4
LT
1461/*
1462 * For accept, we attempt to create a new socket, set up the link
1463 * with the client, wake up the client, then return the new
1464 * connected fd. We collect the address of the connector in kernel
1465 * space and move it to user at the very end. This is unclean because
1466 * we open the socket then return an error.
1467 *
1468 * 1003.1g adds the ability to recvmsg() to query connection pending
1469 * status to recvmsg. We need to add that support in a way thats
1470 * clean when we restucture accept also.
1471 */
1472
20f37034
HC
1473SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
1474 int __user *, upeer_addrlen, int, flags)
1da177e4
LT
1475{
1476 struct socket *sock, *newsock;
39d8c1b6 1477 struct file *newfile;
6cb153ca 1478 int err, len, newfd, fput_needed;
230b1839 1479 struct sockaddr_storage address;
1da177e4 1480
77d27200 1481 if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
aaca0bdc
UD
1482 return -EINVAL;
1483
1484 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1485 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1486
6cb153ca 1487 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4
LT
1488 if (!sock)
1489 goto out;
1490
1491 err = -ENFILE;
89bddce5 1492 if (!(newsock = sock_alloc()))
1da177e4
LT
1493 goto out_put;
1494
1495 newsock->type = sock->type;
1496 newsock->ops = sock->ops;
1497
1da177e4
LT
1498 /*
1499 * We don't need try_module_get here, as the listening socket (sock)
1500 * has the protocol module (sock->ops->owner) held.
1501 */
1502 __module_get(newsock->ops->owner);
1503
aaca0bdc 1504 newfd = sock_alloc_fd(&newfile, flags & O_CLOEXEC);
39d8c1b6
DM
1505 if (unlikely(newfd < 0)) {
1506 err = newfd;
9a1875e6
DM
1507 sock_release(newsock);
1508 goto out_put;
39d8c1b6
DM
1509 }
1510
77d27200 1511 err = sock_attach_fd(newsock, newfile, flags & O_NONBLOCK);
39d8c1b6 1512 if (err < 0)
79f4f642 1513 goto out_fd_simple;
39d8c1b6 1514
a79af59e
FF
1515 err = security_socket_accept(sock, newsock);
1516 if (err)
39d8c1b6 1517 goto out_fd;
a79af59e 1518
1da177e4
LT
1519 err = sock->ops->accept(sock, newsock, sock->file->f_flags);
1520 if (err < 0)
39d8c1b6 1521 goto out_fd;
1da177e4
LT
1522
1523 if (upeer_sockaddr) {
230b1839 1524 if (newsock->ops->getname(newsock, (struct sockaddr *)&address,
89bddce5 1525 &len, 2) < 0) {
1da177e4 1526 err = -ECONNABORTED;
39d8c1b6 1527 goto out_fd;
1da177e4 1528 }
230b1839
YH
1529 err = move_addr_to_user((struct sockaddr *)&address,
1530 len, upeer_sockaddr, upeer_addrlen);
1da177e4 1531 if (err < 0)
39d8c1b6 1532 goto out_fd;
1da177e4
LT
1533 }
1534
1535 /* File flags are not inherited via accept() unlike another OSes. */
1536
39d8c1b6
DM
1537 fd_install(newfd, newfile);
1538 err = newfd;
1da177e4 1539
1da177e4 1540out_put:
6cb153ca 1541 fput_light(sock->file, fput_needed);
1da177e4
LT
1542out:
1543 return err;
79f4f642
AD
1544out_fd_simple:
1545 sock_release(newsock);
1546 put_filp(newfile);
1547 put_unused_fd(newfd);
1548 goto out_put;
39d8c1b6 1549out_fd:
9606a216 1550 fput(newfile);
39d8c1b6 1551 put_unused_fd(newfd);
1da177e4
LT
1552 goto out_put;
1553}
1554
20f37034
HC
1555SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr,
1556 int __user *, upeer_addrlen)
aaca0bdc 1557{
de11defe 1558 return sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0);
aaca0bdc
UD
1559}
1560
1da177e4
LT
1561/*
1562 * Attempt to connect to a socket with the server address. The address
1563 * is in user space so we verify it is OK and move it to kernel space.
1564 *
1565 * For 1003.1g we need to add clean support for a bind to AF_UNSPEC to
1566 * break bindings
1567 *
1568 * NOTE: 1003.1g draft 6.3 is broken with respect to AX.25/NetROM and
1569 * other SEQPACKET protocols that take time to connect() as it doesn't
1570 * include the -EINPROGRESS status for such sockets.
1571 */
1572
20f37034
HC
1573SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
1574 int, addrlen)
1da177e4
LT
1575{
1576 struct socket *sock;
230b1839 1577 struct sockaddr_storage address;
6cb153ca 1578 int err, fput_needed;
1da177e4 1579
6cb153ca 1580 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4
LT
1581 if (!sock)
1582 goto out;
230b1839 1583 err = move_addr_to_kernel(uservaddr, addrlen, (struct sockaddr *)&address);
1da177e4
LT
1584 if (err < 0)
1585 goto out_put;
1586
89bddce5 1587 err =
230b1839 1588 security_socket_connect(sock, (struct sockaddr *)&address, addrlen);
1da177e4
LT
1589 if (err)
1590 goto out_put;
1591
230b1839 1592 err = sock->ops->connect(sock, (struct sockaddr *)&address, addrlen,
1da177e4
LT
1593 sock->file->f_flags);
1594out_put:
6cb153ca 1595 fput_light(sock->file, fput_needed);
1da177e4
LT
1596out:
1597 return err;
1598}
1599
1600/*
1601 * Get the local address ('name') of a socket object. Move the obtained
1602 * name to user space.
1603 */
1604
20f37034
HC
1605SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
1606 int __user *, usockaddr_len)
1da177e4
LT
1607{
1608 struct socket *sock;
230b1839 1609 struct sockaddr_storage address;
6cb153ca 1610 int len, err, fput_needed;
89bddce5 1611
6cb153ca 1612 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4
LT
1613 if (!sock)
1614 goto out;
1615
1616 err = security_socket_getsockname(sock);
1617 if (err)
1618 goto out_put;
1619
230b1839 1620 err = sock->ops->getname(sock, (struct sockaddr *)&address, &len, 0);
1da177e4
LT
1621 if (err)
1622 goto out_put;
230b1839 1623 err = move_addr_to_user((struct sockaddr *)&address, len, usockaddr, usockaddr_len);
1da177e4
LT
1624
1625out_put:
6cb153ca 1626 fput_light(sock->file, fput_needed);
1da177e4
LT
1627out:
1628 return err;
1629}
1630
1631/*
1632 * Get the remote address ('name') of a socket object. Move the obtained
1633 * name to user space.
1634 */
1635
20f37034
HC
1636SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
1637 int __user *, usockaddr_len)
1da177e4
LT
1638{
1639 struct socket *sock;
230b1839 1640 struct sockaddr_storage address;
6cb153ca 1641 int len, err, fput_needed;
1da177e4 1642
89bddce5
SH
1643 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1644 if (sock != NULL) {
1da177e4
LT
1645 err = security_socket_getpeername(sock);
1646 if (err) {
6cb153ca 1647 fput_light(sock->file, fput_needed);
1da177e4
LT
1648 return err;
1649 }
1650
89bddce5 1651 err =
230b1839 1652 sock->ops->getname(sock, (struct sockaddr *)&address, &len,
89bddce5 1653 1);
1da177e4 1654 if (!err)
230b1839 1655 err = move_addr_to_user((struct sockaddr *)&address, len, usockaddr,
89bddce5 1656 usockaddr_len);
6cb153ca 1657 fput_light(sock->file, fput_needed);
1da177e4
LT
1658 }
1659 return err;
1660}
1661
1662/*
1663 * Send a datagram to a given address. We move the address into kernel
1664 * space and check the user space data area is readable before invoking
1665 * the protocol.
1666 */
1667
3e0fa65f
HC
1668SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
1669 unsigned, flags, struct sockaddr __user *, addr,
1670 int, addr_len)
1da177e4
LT
1671{
1672 struct socket *sock;
230b1839 1673 struct sockaddr_storage address;
1da177e4
LT
1674 int err;
1675 struct msghdr msg;
1676 struct iovec iov;
6cb153ca 1677 int fput_needed;
6cb153ca 1678
de0fa95c
PE
1679 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1680 if (!sock)
4387ff75 1681 goto out;
6cb153ca 1682
89bddce5
SH
1683 iov.iov_base = buff;
1684 iov.iov_len = len;
1685 msg.msg_name = NULL;
1686 msg.msg_iov = &iov;
1687 msg.msg_iovlen = 1;
1688 msg.msg_control = NULL;
1689 msg.msg_controllen = 0;
1690 msg.msg_namelen = 0;
6cb153ca 1691 if (addr) {
230b1839 1692 err = move_addr_to_kernel(addr, addr_len, (struct sockaddr *)&address);
1da177e4
LT
1693 if (err < 0)
1694 goto out_put;
230b1839 1695 msg.msg_name = (struct sockaddr *)&address;
89bddce5 1696 msg.msg_namelen = addr_len;
1da177e4
LT
1697 }
1698 if (sock->file->f_flags & O_NONBLOCK)
1699 flags |= MSG_DONTWAIT;
1700 msg.msg_flags = flags;
1701 err = sock_sendmsg(sock, &msg, len);
1702
89bddce5 1703out_put:
de0fa95c 1704 fput_light(sock->file, fput_needed);
4387ff75 1705out:
1da177e4
LT
1706 return err;
1707}
1708
1709/*
89bddce5 1710 * Send a datagram down a socket.
1da177e4
LT
1711 */
1712
3e0fa65f
HC
1713SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len,
1714 unsigned, flags)
1da177e4
LT
1715{
1716 return sys_sendto(fd, buff, len, flags, NULL, 0);
1717}
1718
1719/*
89bddce5 1720 * Receive a frame from the socket and optionally record the address of the
1da177e4
LT
1721 * sender. We verify the buffers are writable and if needed move the
1722 * sender address from kernel to user space.
1723 */
1724
3e0fa65f
HC
1725SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
1726 unsigned, flags, struct sockaddr __user *, addr,
1727 int __user *, addr_len)
1da177e4
LT
1728{
1729 struct socket *sock;
1730 struct iovec iov;
1731 struct msghdr msg;
230b1839 1732 struct sockaddr_storage address;
89bddce5 1733 int err, err2;
6cb153ca
BL
1734 int fput_needed;
1735
de0fa95c 1736 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4 1737 if (!sock)
de0fa95c 1738 goto out;
1da177e4 1739
89bddce5
SH
1740 msg.msg_control = NULL;
1741 msg.msg_controllen = 0;
1742 msg.msg_iovlen = 1;
1743 msg.msg_iov = &iov;
1744 iov.iov_len = size;
1745 iov.iov_base = ubuf;
230b1839
YH
1746 msg.msg_name = (struct sockaddr *)&address;
1747 msg.msg_namelen = sizeof(address);
1da177e4
LT
1748 if (sock->file->f_flags & O_NONBLOCK)
1749 flags |= MSG_DONTWAIT;
89bddce5 1750 err = sock_recvmsg(sock, &msg, size, flags);
1da177e4 1751
89bddce5 1752 if (err >= 0 && addr != NULL) {
230b1839
YH
1753 err2 = move_addr_to_user((struct sockaddr *)&address,
1754 msg.msg_namelen, addr, addr_len);
89bddce5
SH
1755 if (err2 < 0)
1756 err = err2;
1da177e4 1757 }
de0fa95c
PE
1758
1759 fput_light(sock->file, fput_needed);
4387ff75 1760out:
1da177e4
LT
1761 return err;
1762}
1763
1764/*
89bddce5 1765 * Receive a datagram from a socket.
1da177e4
LT
1766 */
1767
89bddce5
SH
1768asmlinkage long sys_recv(int fd, void __user *ubuf, size_t size,
1769 unsigned flags)
1da177e4
LT
1770{
1771 return sys_recvfrom(fd, ubuf, size, flags, NULL, NULL);
1772}
1773
1774/*
1775 * Set a socket option. Because we don't know the option lengths we have
1776 * to pass the user mode parameter for the protocols to sort out.
1777 */
1778
20f37034
HC
1779SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
1780 char __user *, optval, int, optlen)
1da177e4 1781{
6cb153ca 1782 int err, fput_needed;
1da177e4
LT
1783 struct socket *sock;
1784
1785 if (optlen < 0)
1786 return -EINVAL;
89bddce5
SH
1787
1788 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1789 if (sock != NULL) {
1790 err = security_socket_setsockopt(sock, level, optname);
6cb153ca
BL
1791 if (err)
1792 goto out_put;
1da177e4
LT
1793
1794 if (level == SOL_SOCKET)
89bddce5
SH
1795 err =
1796 sock_setsockopt(sock, level, optname, optval,
1797 optlen);
1da177e4 1798 else
89bddce5
SH
1799 err =
1800 sock->ops->setsockopt(sock, level, optname, optval,
1801 optlen);
6cb153ca
BL
1802out_put:
1803 fput_light(sock->file, fput_needed);
1da177e4
LT
1804 }
1805 return err;
1806}
1807
1808/*
1809 * Get a socket option. Because we don't know the option lengths we have
1810 * to pass a user mode parameter for the protocols to sort out.
1811 */
1812
20f37034
HC
1813SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
1814 char __user *, optval, int __user *, optlen)
1da177e4 1815{
6cb153ca 1816 int err, fput_needed;
1da177e4
LT
1817 struct socket *sock;
1818
89bddce5
SH
1819 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1820 if (sock != NULL) {
6cb153ca
BL
1821 err = security_socket_getsockopt(sock, level, optname);
1822 if (err)
1823 goto out_put;
1da177e4
LT
1824
1825 if (level == SOL_SOCKET)
89bddce5
SH
1826 err =
1827 sock_getsockopt(sock, level, optname, optval,
1828 optlen);
1da177e4 1829 else
89bddce5
SH
1830 err =
1831 sock->ops->getsockopt(sock, level, optname, optval,
1832 optlen);
6cb153ca
BL
1833out_put:
1834 fput_light(sock->file, fput_needed);
1da177e4
LT
1835 }
1836 return err;
1837}
1838
1da177e4
LT
1839/*
1840 * Shutdown a socket.
1841 */
1842
754fe8d2 1843SYSCALL_DEFINE2(shutdown, int, fd, int, how)
1da177e4 1844{
6cb153ca 1845 int err, fput_needed;
1da177e4
LT
1846 struct socket *sock;
1847
89bddce5
SH
1848 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1849 if (sock != NULL) {
1da177e4 1850 err = security_socket_shutdown(sock, how);
6cb153ca
BL
1851 if (!err)
1852 err = sock->ops->shutdown(sock, how);
1853 fput_light(sock->file, fput_needed);
1da177e4
LT
1854 }
1855 return err;
1856}
1857
89bddce5 1858/* A couple of helpful macros for getting the address of the 32/64 bit
1da177e4
LT
1859 * fields which are the same type (int / unsigned) on our platforms.
1860 */
1861#define COMPAT_MSG(msg, member) ((MSG_CMSG_COMPAT & flags) ? &msg##_compat->member : &msg->member)
1862#define COMPAT_NAMELEN(msg) COMPAT_MSG(msg, msg_namelen)
1863#define COMPAT_FLAGS(msg) COMPAT_MSG(msg, msg_flags)
1864
1da177e4
LT
1865/*
1866 * BSD sendmsg interface
1867 */
1868
3e0fa65f 1869SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)
1da177e4 1870{
89bddce5
SH
1871 struct compat_msghdr __user *msg_compat =
1872 (struct compat_msghdr __user *)msg;
1da177e4 1873 struct socket *sock;
230b1839 1874 struct sockaddr_storage address;
1da177e4 1875 struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
b9d717a7 1876 unsigned char ctl[sizeof(struct cmsghdr) + 20]
89bddce5
SH
1877 __attribute__ ((aligned(sizeof(__kernel_size_t))));
1878 /* 20 is size of ipv6_pktinfo */
1da177e4
LT
1879 unsigned char *ctl_buf = ctl;
1880 struct msghdr msg_sys;
1881 int err, ctl_len, iov_size, total_len;
6cb153ca 1882 int fput_needed;
89bddce5 1883
1da177e4
LT
1884 err = -EFAULT;
1885 if (MSG_CMSG_COMPAT & flags) {
1886 if (get_compat_msghdr(&msg_sys, msg_compat))
1887 return -EFAULT;
89bddce5
SH
1888 }
1889 else if (copy_from_user(&msg_sys, msg, sizeof(struct msghdr)))
1da177e4
LT
1890 return -EFAULT;
1891
6cb153ca 1892 sock = sockfd_lookup_light(fd, &err, &fput_needed);
89bddce5 1893 if (!sock)
1da177e4
LT
1894 goto out;
1895
1896 /* do not move before msg_sys is valid */
1897 err = -EMSGSIZE;
1898 if (msg_sys.msg_iovlen > UIO_MAXIOV)
1899 goto out_put;
1900
89bddce5 1901 /* Check whether to allocate the iovec area */
1da177e4
LT
1902 err = -ENOMEM;
1903 iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
1904 if (msg_sys.msg_iovlen > UIO_FASTIOV) {
1905 iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
1906 if (!iov)
1907 goto out_put;
1908 }
1909
1910 /* This will also move the address data into kernel space */
1911 if (MSG_CMSG_COMPAT & flags) {
230b1839
YH
1912 err = verify_compat_iovec(&msg_sys, iov,
1913 (struct sockaddr *)&address,
1914 VERIFY_READ);
1da177e4 1915 } else
230b1839
YH
1916 err = verify_iovec(&msg_sys, iov,
1917 (struct sockaddr *)&address,
1918 VERIFY_READ);
89bddce5 1919 if (err < 0)
1da177e4
LT
1920 goto out_freeiov;
1921 total_len = err;
1922
1923 err = -ENOBUFS;
1924
1925 if (msg_sys.msg_controllen > INT_MAX)
1926 goto out_freeiov;
89bddce5 1927 ctl_len = msg_sys.msg_controllen;
1da177e4 1928 if ((MSG_CMSG_COMPAT & flags) && ctl_len) {
89bddce5
SH
1929 err =
1930 cmsghdr_from_user_compat_to_kern(&msg_sys, sock->sk, ctl,
1931 sizeof(ctl));
1da177e4
LT
1932 if (err)
1933 goto out_freeiov;
1934 ctl_buf = msg_sys.msg_control;
8920e8f9 1935 ctl_len = msg_sys.msg_controllen;
1da177e4 1936 } else if (ctl_len) {
89bddce5 1937 if (ctl_len > sizeof(ctl)) {
1da177e4 1938 ctl_buf = sock_kmalloc(sock->sk, ctl_len, GFP_KERNEL);
89bddce5 1939 if (ctl_buf == NULL)
1da177e4
LT
1940 goto out_freeiov;
1941 }
1942 err = -EFAULT;
1943 /*
1944 * Careful! Before this, msg_sys.msg_control contains a user pointer.
1945 * Afterwards, it will be a kernel pointer. Thus the compiler-assisted
1946 * checking falls down on this.
1947 */
89bddce5
SH
1948 if (copy_from_user(ctl_buf, (void __user *)msg_sys.msg_control,
1949 ctl_len))
1da177e4
LT
1950 goto out_freectl;
1951 msg_sys.msg_control = ctl_buf;
1952 }
1953 msg_sys.msg_flags = flags;
1954
1955 if (sock->file->f_flags & O_NONBLOCK)
1956 msg_sys.msg_flags |= MSG_DONTWAIT;
1957 err = sock_sendmsg(sock, &msg_sys, total_len);
1958
1959out_freectl:
89bddce5 1960 if (ctl_buf != ctl)
1da177e4
LT
1961 sock_kfree_s(sock->sk, ctl_buf, ctl_len);
1962out_freeiov:
1963 if (iov != iovstack)
1964 sock_kfree_s(sock->sk, iov, iov_size);
1965out_put:
6cb153ca 1966 fput_light(sock->file, fput_needed);
89bddce5 1967out:
1da177e4
LT
1968 return err;
1969}
1970
1971/*
1972 * BSD recvmsg interface
1973 */
1974
3e0fa65f
HC
1975SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg,
1976 unsigned int, flags)
1da177e4 1977{
89bddce5
SH
1978 struct compat_msghdr __user *msg_compat =
1979 (struct compat_msghdr __user *)msg;
1da177e4
LT
1980 struct socket *sock;
1981 struct iovec iovstack[UIO_FASTIOV];
89bddce5 1982 struct iovec *iov = iovstack;
1da177e4
LT
1983 struct msghdr msg_sys;
1984 unsigned long cmsg_ptr;
1985 int err, iov_size, total_len, len;
6cb153ca 1986 int fput_needed;
1da177e4
LT
1987
1988 /* kernel mode address */
230b1839 1989 struct sockaddr_storage addr;
1da177e4
LT
1990
1991 /* user mode address pointers */
1992 struct sockaddr __user *uaddr;
1993 int __user *uaddr_len;
89bddce5 1994
1da177e4
LT
1995 if (MSG_CMSG_COMPAT & flags) {
1996 if (get_compat_msghdr(&msg_sys, msg_compat))
1997 return -EFAULT;
89bddce5
SH
1998 }
1999 else if (copy_from_user(&msg_sys, msg, sizeof(struct msghdr)))
2000 return -EFAULT;
1da177e4 2001
6cb153ca 2002 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4
LT
2003 if (!sock)
2004 goto out;
2005
2006 err = -EMSGSIZE;
2007 if (msg_sys.msg_iovlen > UIO_MAXIOV)
2008 goto out_put;
89bddce5
SH
2009
2010 /* Check whether to allocate the iovec area */
1da177e4
LT
2011 err = -ENOMEM;
2012 iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
2013 if (msg_sys.msg_iovlen > UIO_FASTIOV) {
2014 iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
2015 if (!iov)
2016 goto out_put;
2017 }
2018
2019 /*
89bddce5
SH
2020 * Save the user-mode address (verify_iovec will change the
2021 * kernel msghdr to use the kernel address space)
1da177e4 2022 */
89bddce5 2023
cfcabdcc 2024 uaddr = (__force void __user *)msg_sys.msg_name;
1da177e4
LT
2025 uaddr_len = COMPAT_NAMELEN(msg);
2026 if (MSG_CMSG_COMPAT & flags) {
230b1839
YH
2027 err = verify_compat_iovec(&msg_sys, iov,
2028 (struct sockaddr *)&addr,
2029 VERIFY_WRITE);
1da177e4 2030 } else
230b1839
YH
2031 err = verify_iovec(&msg_sys, iov,
2032 (struct sockaddr *)&addr,
2033 VERIFY_WRITE);
1da177e4
LT
2034 if (err < 0)
2035 goto out_freeiov;
89bddce5 2036 total_len = err;
1da177e4
LT
2037
2038 cmsg_ptr = (unsigned long)msg_sys.msg_control;
4a19542e 2039 msg_sys.msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT);
89bddce5 2040
1da177e4
LT
2041 if (sock->file->f_flags & O_NONBLOCK)
2042 flags |= MSG_DONTWAIT;
2043 err = sock_recvmsg(sock, &msg_sys, total_len, flags);
2044 if (err < 0)
2045 goto out_freeiov;
2046 len = err;
2047
2048 if (uaddr != NULL) {
230b1839
YH
2049 err = move_addr_to_user((struct sockaddr *)&addr,
2050 msg_sys.msg_namelen, uaddr,
89bddce5 2051 uaddr_len);
1da177e4
LT
2052 if (err < 0)
2053 goto out_freeiov;
2054 }
37f7f421
DM
2055 err = __put_user((msg_sys.msg_flags & ~MSG_CMSG_COMPAT),
2056 COMPAT_FLAGS(msg));
1da177e4
LT
2057 if (err)
2058 goto out_freeiov;
2059 if (MSG_CMSG_COMPAT & flags)
89bddce5 2060 err = __put_user((unsigned long)msg_sys.msg_control - cmsg_ptr,
1da177e4
LT
2061 &msg_compat->msg_controllen);
2062 else
89bddce5 2063 err = __put_user((unsigned long)msg_sys.msg_control - cmsg_ptr,
1da177e4
LT
2064 &msg->msg_controllen);
2065 if (err)
2066 goto out_freeiov;
2067 err = len;
2068
2069out_freeiov:
2070 if (iov != iovstack)
2071 sock_kfree_s(sock->sk, iov, iov_size);
2072out_put:
6cb153ca 2073 fput_light(sock->file, fput_needed);
1da177e4
LT
2074out:
2075 return err;
2076}
2077
2078#ifdef __ARCH_WANT_SYS_SOCKETCALL
2079
2080/* Argument list sizes for sys_socketcall */
2081#define AL(x) ((x) * sizeof(unsigned long))
aaca0bdc 2082static const unsigned char nargs[19]={
89bddce5
SH
2083 AL(0),AL(3),AL(3),AL(3),AL(2),AL(3),
2084 AL(3),AL(3),AL(4),AL(4),AL(4),AL(6),
aaca0bdc 2085 AL(6),AL(2),AL(5),AL(5),AL(3),AL(3),
de11defe 2086 AL(4)
89bddce5
SH
2087};
2088
1da177e4
LT
2089#undef AL
2090
2091/*
89bddce5 2092 * System call vectors.
1da177e4
LT
2093 *
2094 * Argument checking cleaned up. Saved 20% in size.
2095 * This function doesn't need to set the kernel lock because
89bddce5 2096 * it is set by the callees.
1da177e4
LT
2097 */
2098
3e0fa65f 2099SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args)
1da177e4
LT
2100{
2101 unsigned long a[6];
89bddce5 2102 unsigned long a0, a1;
1da177e4 2103 int err;
47379052 2104 unsigned int len;
1da177e4 2105
de11defe 2106 if (call < 1 || call > SYS_ACCEPT4)
1da177e4
LT
2107 return -EINVAL;
2108
47379052
AV
2109 len = nargs[call];
2110 if (len > sizeof(a))
2111 return -EINVAL;
2112
1da177e4 2113 /* copy_from_user should be SMP safe. */
47379052 2114 if (copy_from_user(a, args, len))
1da177e4 2115 return -EFAULT;
3ec3b2fb 2116
f3298dc4 2117 audit_socketcall(nargs[call] / sizeof(unsigned long), a);
3ec3b2fb 2118
89bddce5
SH
2119 a0 = a[0];
2120 a1 = a[1];
2121
2122 switch (call) {
2123 case SYS_SOCKET:
2124 err = sys_socket(a0, a1, a[2]);
2125 break;
2126 case SYS_BIND:
2127 err = sys_bind(a0, (struct sockaddr __user *)a1, a[2]);
2128 break;
2129 case SYS_CONNECT:
2130 err = sys_connect(a0, (struct sockaddr __user *)a1, a[2]);
2131 break;
2132 case SYS_LISTEN:
2133 err = sys_listen(a0, a1);
2134 break;
2135 case SYS_ACCEPT:
de11defe
UD
2136 err = sys_accept4(a0, (struct sockaddr __user *)a1,
2137 (int __user *)a[2], 0);
89bddce5
SH
2138 break;
2139 case SYS_GETSOCKNAME:
2140 err =
2141 sys_getsockname(a0, (struct sockaddr __user *)a1,
2142 (int __user *)a[2]);
2143 break;
2144 case SYS_GETPEERNAME:
2145 err =
2146 sys_getpeername(a0, (struct sockaddr __user *)a1,
2147 (int __user *)a[2]);
2148 break;
2149 case SYS_SOCKETPAIR:
2150 err = sys_socketpair(a0, a1, a[2], (int __user *)a[3]);
2151 break;
2152 case SYS_SEND:
2153 err = sys_send(a0, (void __user *)a1, a[2], a[3]);
2154 break;
2155 case SYS_SENDTO:
2156 err = sys_sendto(a0, (void __user *)a1, a[2], a[3],
2157 (struct sockaddr __user *)a[4], a[5]);
2158 break;
2159 case SYS_RECV:
2160 err = sys_recv(a0, (void __user *)a1, a[2], a[3]);
2161 break;
2162 case SYS_RECVFROM:
2163 err = sys_recvfrom(a0, (void __user *)a1, a[2], a[3],
2164 (struct sockaddr __user *)a[4],
2165 (int __user *)a[5]);
2166 break;
2167 case SYS_SHUTDOWN:
2168 err = sys_shutdown(a0, a1);
2169 break;
2170 case SYS_SETSOCKOPT:
2171 err = sys_setsockopt(a0, a1, a[2], (char __user *)a[3], a[4]);
2172 break;
2173 case SYS_GETSOCKOPT:
2174 err =
2175 sys_getsockopt(a0, a1, a[2], (char __user *)a[3],
2176 (int __user *)a[4]);
2177 break;
2178 case SYS_SENDMSG:
2179 err = sys_sendmsg(a0, (struct msghdr __user *)a1, a[2]);
2180 break;
2181 case SYS_RECVMSG:
2182 err = sys_recvmsg(a0, (struct msghdr __user *)a1, a[2]);
2183 break;
de11defe
UD
2184 case SYS_ACCEPT4:
2185 err = sys_accept4(a0, (struct sockaddr __user *)a1,
2186 (int __user *)a[2], a[3]);
aaca0bdc 2187 break;
89bddce5
SH
2188 default:
2189 err = -EINVAL;
2190 break;
1da177e4
LT
2191 }
2192 return err;
2193}
2194
89bddce5 2195#endif /* __ARCH_WANT_SYS_SOCKETCALL */
1da177e4 2196
55737fda
SH
2197/**
2198 * sock_register - add a socket protocol handler
2199 * @ops: description of protocol
2200 *
1da177e4
LT
2201 * This function is called by a protocol handler that wants to
2202 * advertise its address family, and have it linked into the
55737fda
SH
2203 * socket interface. The value ops->family coresponds to the
2204 * socket system call protocol family.
1da177e4 2205 */
f0fd27d4 2206int sock_register(const struct net_proto_family *ops)
1da177e4
LT
2207{
2208 int err;
2209
2210 if (ops->family >= NPROTO) {
89bddce5
SH
2211 printk(KERN_CRIT "protocol %d >= NPROTO(%d)\n", ops->family,
2212 NPROTO);
1da177e4
LT
2213 return -ENOBUFS;
2214 }
55737fda
SH
2215
2216 spin_lock(&net_family_lock);
2217 if (net_families[ops->family])
2218 err = -EEXIST;
2219 else {
89bddce5 2220 net_families[ops->family] = ops;
1da177e4
LT
2221 err = 0;
2222 }
55737fda
SH
2223 spin_unlock(&net_family_lock);
2224
89bddce5 2225 printk(KERN_INFO "NET: Registered protocol family %d\n", ops->family);
1da177e4
LT
2226 return err;
2227}
2228
55737fda
SH
2229/**
2230 * sock_unregister - remove a protocol handler
2231 * @family: protocol family to remove
2232 *
1da177e4
LT
2233 * This function is called by a protocol handler that wants to
2234 * remove its address family, and have it unlinked from the
55737fda
SH
2235 * new socket creation.
2236 *
2237 * If protocol handler is a module, then it can use module reference
2238 * counts to protect against new references. If protocol handler is not
2239 * a module then it needs to provide its own protection in
2240 * the ops->create routine.
1da177e4 2241 */
f0fd27d4 2242void sock_unregister(int family)
1da177e4 2243{
f0fd27d4 2244 BUG_ON(family < 0 || family >= NPROTO);
1da177e4 2245
55737fda 2246 spin_lock(&net_family_lock);
89bddce5 2247 net_families[family] = NULL;
55737fda
SH
2248 spin_unlock(&net_family_lock);
2249
2250 synchronize_rcu();
2251
89bddce5 2252 printk(KERN_INFO "NET: Unregistered protocol family %d\n", family);
1da177e4
LT
2253}
2254
77d76ea3 2255static int __init sock_init(void)
1da177e4
LT
2256{
2257 /*
89bddce5 2258 * Initialize sock SLAB cache.
1da177e4 2259 */
89bddce5 2260
1da177e4
LT
2261 sk_init();
2262
1da177e4 2263 /*
89bddce5 2264 * Initialize skbuff SLAB cache
1da177e4
LT
2265 */
2266 skb_init();
1da177e4
LT
2267
2268 /*
89bddce5 2269 * Initialize the protocols module.
1da177e4
LT
2270 */
2271
2272 init_inodecache();
2273 register_filesystem(&sock_fs_type);
2274 sock_mnt = kern_mount(&sock_fs_type);
77d76ea3
AK
2275
2276 /* The real protocol initialization is performed in later initcalls.
1da177e4
LT
2277 */
2278
2279#ifdef CONFIG_NETFILTER
2280 netfilter_init();
2281#endif
cbeb321a
DM
2282
2283 return 0;
1da177e4
LT
2284}
2285
77d76ea3
AK
2286core_initcall(sock_init); /* early initcall */
2287
1da177e4
LT
2288#ifdef CONFIG_PROC_FS
2289void socket_seq_show(struct seq_file *seq)
2290{
2291 int cpu;
2292 int counter = 0;
2293
6f912042 2294 for_each_possible_cpu(cpu)
89bddce5 2295 counter += per_cpu(sockets_in_use, cpu);
1da177e4
LT
2296
2297 /* It can be negative, by the way. 8) */
2298 if (counter < 0)
2299 counter = 0;
2300
2301 seq_printf(seq, "sockets: used %d\n", counter);
2302}
89bddce5 2303#endif /* CONFIG_PROC_FS */
1da177e4 2304
89bbfc95
SP
2305#ifdef CONFIG_COMPAT
2306static long compat_sock_ioctl(struct file *file, unsigned cmd,
89bddce5 2307 unsigned long arg)
89bbfc95
SP
2308{
2309 struct socket *sock = file->private_data;
2310 int ret = -ENOIOCTLCMD;
87de87d5
DM
2311 struct sock *sk;
2312 struct net *net;
2313
2314 sk = sock->sk;
2315 net = sock_net(sk);
89bbfc95
SP
2316
2317 if (sock->ops->compat_ioctl)
2318 ret = sock->ops->compat_ioctl(sock, cmd, arg);
2319
87de87d5
DM
2320 if (ret == -ENOIOCTLCMD &&
2321 (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST))
2322 ret = compat_wext_handle_ioctl(net, cmd, arg);
2323
89bbfc95
SP
2324 return ret;
2325}
2326#endif
2327
ac5a488e
SS
2328int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen)
2329{
2330 return sock->ops->bind(sock, addr, addrlen);
2331}
2332
2333int kernel_listen(struct socket *sock, int backlog)
2334{
2335 return sock->ops->listen(sock, backlog);
2336}
2337
2338int kernel_accept(struct socket *sock, struct socket **newsock, int flags)
2339{
2340 struct sock *sk = sock->sk;
2341 int err;
2342
2343 err = sock_create_lite(sk->sk_family, sk->sk_type, sk->sk_protocol,
2344 newsock);
2345 if (err < 0)
2346 goto done;
2347
2348 err = sock->ops->accept(sock, *newsock, flags);
2349 if (err < 0) {
2350 sock_release(*newsock);
fa8705b0 2351 *newsock = NULL;
ac5a488e
SS
2352 goto done;
2353 }
2354
2355 (*newsock)->ops = sock->ops;
1b08534e 2356 __module_get((*newsock)->ops->owner);
ac5a488e
SS
2357
2358done:
2359 return err;
2360}
2361
2362int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,
4768fbcb 2363 int flags)
ac5a488e
SS
2364{
2365 return sock->ops->connect(sock, addr, addrlen, flags);
2366}
2367
2368int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
2369 int *addrlen)
2370{
2371 return sock->ops->getname(sock, addr, addrlen, 0);
2372}
2373
2374int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
2375 int *addrlen)
2376{
2377 return sock->ops->getname(sock, addr, addrlen, 1);
2378}
2379
2380int kernel_getsockopt(struct socket *sock, int level, int optname,
2381 char *optval, int *optlen)
2382{
2383 mm_segment_t oldfs = get_fs();
2384 int err;
2385
2386 set_fs(KERNEL_DS);
2387 if (level == SOL_SOCKET)
2388 err = sock_getsockopt(sock, level, optname, optval, optlen);
2389 else
2390 err = sock->ops->getsockopt(sock, level, optname, optval,
2391 optlen);
2392 set_fs(oldfs);
2393 return err;
2394}
2395
2396int kernel_setsockopt(struct socket *sock, int level, int optname,
b7058842 2397 char *optval, unsigned int optlen)
ac5a488e
SS
2398{
2399 mm_segment_t oldfs = get_fs();
2400 int err;
2401
2402 set_fs(KERNEL_DS);
2403 if (level == SOL_SOCKET)
2404 err = sock_setsockopt(sock, level, optname, optval, optlen);
2405 else
2406 err = sock->ops->setsockopt(sock, level, optname, optval,
2407 optlen);
2408 set_fs(oldfs);
2409 return err;
2410}
2411
2412int kernel_sendpage(struct socket *sock, struct page *page, int offset,
2413 size_t size, int flags)
2414{
2415 if (sock->ops->sendpage)
2416 return sock->ops->sendpage(sock, page, offset, size, flags);
2417
2418 return sock_no_sendpage(sock, page, offset, size, flags);
2419}
2420
2421int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg)
2422{
2423 mm_segment_t oldfs = get_fs();
2424 int err;
2425
2426 set_fs(KERNEL_DS);
2427 err = sock->ops->ioctl(sock, cmd, arg);
2428 set_fs(oldfs);
2429
2430 return err;
2431}
2432
91cf45f0
TM
2433int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how)
2434{
2435 return sock->ops->shutdown(sock, how);
2436}
2437
1da177e4
LT
2438EXPORT_SYMBOL(sock_create);
2439EXPORT_SYMBOL(sock_create_kern);
2440EXPORT_SYMBOL(sock_create_lite);
2441EXPORT_SYMBOL(sock_map_fd);
2442EXPORT_SYMBOL(sock_recvmsg);
2443EXPORT_SYMBOL(sock_register);
2444EXPORT_SYMBOL(sock_release);
2445EXPORT_SYMBOL(sock_sendmsg);
2446EXPORT_SYMBOL(sock_unregister);
2447EXPORT_SYMBOL(sock_wake_async);
2448EXPORT_SYMBOL(sockfd_lookup);
2449EXPORT_SYMBOL(kernel_sendmsg);
2450EXPORT_SYMBOL(kernel_recvmsg);
ac5a488e
SS
2451EXPORT_SYMBOL(kernel_bind);
2452EXPORT_SYMBOL(kernel_listen);
2453EXPORT_SYMBOL(kernel_accept);
2454EXPORT_SYMBOL(kernel_connect);
2455EXPORT_SYMBOL(kernel_getsockname);
2456EXPORT_SYMBOL(kernel_getpeername);
2457EXPORT_SYMBOL(kernel_getsockopt);
2458EXPORT_SYMBOL(kernel_setsockopt);
2459EXPORT_SYMBOL(kernel_sendpage);
2460EXPORT_SYMBOL(kernel_sock_ioctl);
91cf45f0 2461EXPORT_SYMBOL(kernel_sock_shutdown);