cnic: Need to include net/ip6_checksum.h
[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
3b885787
NH
671inline void sock_recv_drops(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
672{
673 if (sock_flag(sk, SOCK_RXQ_OVFL) && skb && skb->dropcount)
674 put_cmsg(msg, SOL_SOCKET, SO_RXQ_OVFL,
675 sizeof(__u32), &skb->dropcount);
676}
677
678void sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
679 struct sk_buff *skb)
680{
681 sock_recv_timestamp(msg, sk, skb);
682 sock_recv_drops(msg, sk, skb);
683}
684EXPORT_SYMBOL_GPL(sock_recv_ts_and_drops);
685
89bddce5 686static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock,
1da177e4
LT
687 struct msghdr *msg, size_t size, int flags)
688{
689 int err;
690 struct sock_iocb *si = kiocb_to_siocb(iocb);
691
692 si->sock = sock;
693 si->scm = NULL;
694 si->msg = msg;
695 si->size = size;
696 si->flags = flags;
697
698 err = security_socket_recvmsg(sock, msg, size, flags);
699 if (err)
700 return err;
701
702 return sock->ops->recvmsg(iocb, sock, msg, size, flags);
703}
704
89bddce5 705int sock_recvmsg(struct socket *sock, struct msghdr *msg,
1da177e4
LT
706 size_t size, int flags)
707{
708 struct kiocb iocb;
709 struct sock_iocb siocb;
710 int ret;
711
89bddce5 712 init_sync_kiocb(&iocb, NULL);
1da177e4
LT
713 iocb.private = &siocb;
714 ret = __sock_recvmsg(&iocb, sock, msg, size, flags);
715 if (-EIOCBQUEUED == ret)
716 ret = wait_on_sync_kiocb(&iocb);
717 return ret;
718}
719
89bddce5
SH
720int kernel_recvmsg(struct socket *sock, struct msghdr *msg,
721 struct kvec *vec, size_t num, size_t size, int flags)
1da177e4
LT
722{
723 mm_segment_t oldfs = get_fs();
724 int result;
725
726 set_fs(KERNEL_DS);
727 /*
728 * the following is safe, since for compiler definitions of kvec and
729 * iovec are identical, yielding the same in-core layout and alignment
730 */
89bddce5 731 msg->msg_iov = (struct iovec *)vec, msg->msg_iovlen = num;
1da177e4
LT
732 result = sock_recvmsg(sock, msg, size, flags);
733 set_fs(oldfs);
734 return result;
735}
736
737static void sock_aio_dtor(struct kiocb *iocb)
738{
739 kfree(iocb->private);
740}
741
ce1d4d3e
CH
742static ssize_t sock_sendpage(struct file *file, struct page *page,
743 int offset, size_t size, loff_t *ppos, int more)
1da177e4 744{
1da177e4
LT
745 struct socket *sock;
746 int flags;
747
ce1d4d3e
CH
748 sock = file->private_data;
749
750 flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
751 if (more)
752 flags |= MSG_MORE;
753
e6949583 754 return kernel_sendpage(sock, page, offset, size, flags);
ce1d4d3e 755}
1da177e4 756
9c55e01c
JA
757static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
758 struct pipe_inode_info *pipe, size_t len,
759 unsigned int flags)
760{
761 struct socket *sock = file->private_data;
762
997b37da
RDC
763 if (unlikely(!sock->ops->splice_read))
764 return -EINVAL;
765
9c55e01c
JA
766 return sock->ops->splice_read(sock, ppos, pipe, len, flags);
767}
768
ce1d4d3e 769static struct sock_iocb *alloc_sock_iocb(struct kiocb *iocb,
89bddce5 770 struct sock_iocb *siocb)
ce1d4d3e
CH
771{
772 if (!is_sync_kiocb(iocb)) {
773 siocb = kmalloc(sizeof(*siocb), GFP_KERNEL);
774 if (!siocb)
775 return NULL;
1da177e4
LT
776 iocb->ki_dtor = sock_aio_dtor;
777 }
1da177e4 778
ce1d4d3e 779 siocb->kiocb = iocb;
ce1d4d3e
CH
780 iocb->private = siocb;
781 return siocb;
1da177e4
LT
782}
783
ce1d4d3e 784static ssize_t do_sock_read(struct msghdr *msg, struct kiocb *iocb,
027445c3
BP
785 struct file *file, const struct iovec *iov,
786 unsigned long nr_segs)
ce1d4d3e
CH
787{
788 struct socket *sock = file->private_data;
789 size_t size = 0;
790 int i;
1da177e4 791
89bddce5
SH
792 for (i = 0; i < nr_segs; i++)
793 size += iov[i].iov_len;
1da177e4 794
ce1d4d3e
CH
795 msg->msg_name = NULL;
796 msg->msg_namelen = 0;
797 msg->msg_control = NULL;
798 msg->msg_controllen = 0;
89bddce5 799 msg->msg_iov = (struct iovec *)iov;
ce1d4d3e
CH
800 msg->msg_iovlen = nr_segs;
801 msg->msg_flags = (file->f_flags & O_NONBLOCK) ? MSG_DONTWAIT : 0;
802
803 return __sock_recvmsg(iocb, sock, msg, size, msg->msg_flags);
804}
805
027445c3
BP
806static ssize_t sock_aio_read(struct kiocb *iocb, const struct iovec *iov,
807 unsigned long nr_segs, loff_t pos)
ce1d4d3e
CH
808{
809 struct sock_iocb siocb, *x;
810
1da177e4
LT
811 if (pos != 0)
812 return -ESPIPE;
027445c3
BP
813
814 if (iocb->ki_left == 0) /* Match SYS5 behaviour */
1da177e4
LT
815 return 0;
816
027445c3
BP
817
818 x = alloc_sock_iocb(iocb, &siocb);
ce1d4d3e
CH
819 if (!x)
820 return -ENOMEM;
027445c3 821 return do_sock_read(&x->async_msg, iocb, iocb->ki_filp, iov, nr_segs);
1da177e4
LT
822}
823
ce1d4d3e 824static ssize_t do_sock_write(struct msghdr *msg, struct kiocb *iocb,
027445c3
BP
825 struct file *file, const struct iovec *iov,
826 unsigned long nr_segs)
1da177e4 827{
ce1d4d3e
CH
828 struct socket *sock = file->private_data;
829 size_t size = 0;
830 int i;
1da177e4 831
89bddce5
SH
832 for (i = 0; i < nr_segs; i++)
833 size += iov[i].iov_len;
1da177e4 834
ce1d4d3e
CH
835 msg->msg_name = NULL;
836 msg->msg_namelen = 0;
837 msg->msg_control = NULL;
838 msg->msg_controllen = 0;
89bddce5 839 msg->msg_iov = (struct iovec *)iov;
ce1d4d3e
CH
840 msg->msg_iovlen = nr_segs;
841 msg->msg_flags = (file->f_flags & O_NONBLOCK) ? MSG_DONTWAIT : 0;
842 if (sock->type == SOCK_SEQPACKET)
843 msg->msg_flags |= MSG_EOR;
1da177e4 844
ce1d4d3e 845 return __sock_sendmsg(iocb, sock, msg, size);
1da177e4
LT
846}
847
027445c3
BP
848static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov,
849 unsigned long nr_segs, loff_t pos)
ce1d4d3e
CH
850{
851 struct sock_iocb siocb, *x;
1da177e4 852
ce1d4d3e
CH
853 if (pos != 0)
854 return -ESPIPE;
027445c3 855
027445c3 856 x = alloc_sock_iocb(iocb, &siocb);
ce1d4d3e
CH
857 if (!x)
858 return -ENOMEM;
1da177e4 859
027445c3 860 return do_sock_write(&x->async_msg, iocb, iocb->ki_filp, iov, nr_segs);
1da177e4
LT
861}
862
1da177e4
LT
863/*
864 * Atomic setting of ioctl hooks to avoid race
865 * with module unload.
866 */
867
4a3e2f71 868static DEFINE_MUTEX(br_ioctl_mutex);
881d966b 869static int (*br_ioctl_hook) (struct net *, unsigned int cmd, void __user *arg) = NULL;
1da177e4 870
881d966b 871void brioctl_set(int (*hook) (struct net *, unsigned int, void __user *))
1da177e4 872{
4a3e2f71 873 mutex_lock(&br_ioctl_mutex);
1da177e4 874 br_ioctl_hook = hook;
4a3e2f71 875 mutex_unlock(&br_ioctl_mutex);
1da177e4 876}
89bddce5 877
1da177e4
LT
878EXPORT_SYMBOL(brioctl_set);
879
4a3e2f71 880static DEFINE_MUTEX(vlan_ioctl_mutex);
881d966b 881static int (*vlan_ioctl_hook) (struct net *, void __user *arg);
1da177e4 882
881d966b 883void vlan_ioctl_set(int (*hook) (struct net *, void __user *))
1da177e4 884{
4a3e2f71 885 mutex_lock(&vlan_ioctl_mutex);
1da177e4 886 vlan_ioctl_hook = hook;
4a3e2f71 887 mutex_unlock(&vlan_ioctl_mutex);
1da177e4 888}
89bddce5 889
1da177e4
LT
890EXPORT_SYMBOL(vlan_ioctl_set);
891
4a3e2f71 892static DEFINE_MUTEX(dlci_ioctl_mutex);
89bddce5 893static int (*dlci_ioctl_hook) (unsigned int, void __user *);
1da177e4 894
89bddce5 895void dlci_ioctl_set(int (*hook) (unsigned int, void __user *))
1da177e4 896{
4a3e2f71 897 mutex_lock(&dlci_ioctl_mutex);
1da177e4 898 dlci_ioctl_hook = hook;
4a3e2f71 899 mutex_unlock(&dlci_ioctl_mutex);
1da177e4 900}
89bddce5 901
1da177e4
LT
902EXPORT_SYMBOL(dlci_ioctl_set);
903
904/*
905 * With an ioctl, arg may well be a user mode pointer, but we don't know
906 * what to do with it - that's up to the protocol still.
907 */
908
909static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
910{
911 struct socket *sock;
881d966b 912 struct sock *sk;
1da177e4
LT
913 void __user *argp = (void __user *)arg;
914 int pid, err;
881d966b 915 struct net *net;
1da177e4 916
b69aee04 917 sock = file->private_data;
881d966b 918 sk = sock->sk;
3b1e0a65 919 net = sock_net(sk);
1da177e4 920 if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
881d966b 921 err = dev_ioctl(net, cmd, argp);
1da177e4 922 } else
3d23e349 923#ifdef CONFIG_WEXT_CORE
1da177e4 924 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
881d966b 925 err = dev_ioctl(net, cmd, argp);
1da177e4 926 } else
3d23e349 927#endif
89bddce5 928 switch (cmd) {
1da177e4
LT
929 case FIOSETOWN:
930 case SIOCSPGRP:
931 err = -EFAULT;
932 if (get_user(pid, (int __user *)argp))
933 break;
934 err = f_setown(sock->file, pid, 1);
935 break;
936 case FIOGETOWN:
937 case SIOCGPGRP:
609d7fa9 938 err = put_user(f_getown(sock->file),
89bddce5 939 (int __user *)argp);
1da177e4
LT
940 break;
941 case SIOCGIFBR:
942 case SIOCSIFBR:
943 case SIOCBRADDBR:
944 case SIOCBRDELBR:
945 err = -ENOPKG;
946 if (!br_ioctl_hook)
947 request_module("bridge");
948
4a3e2f71 949 mutex_lock(&br_ioctl_mutex);
89bddce5 950 if (br_ioctl_hook)
881d966b 951 err = br_ioctl_hook(net, cmd, argp);
4a3e2f71 952 mutex_unlock(&br_ioctl_mutex);
1da177e4
LT
953 break;
954 case SIOCGIFVLAN:
955 case SIOCSIFVLAN:
956 err = -ENOPKG;
957 if (!vlan_ioctl_hook)
958 request_module("8021q");
959
4a3e2f71 960 mutex_lock(&vlan_ioctl_mutex);
1da177e4 961 if (vlan_ioctl_hook)
881d966b 962 err = vlan_ioctl_hook(net, argp);
4a3e2f71 963 mutex_unlock(&vlan_ioctl_mutex);
1da177e4 964 break;
1da177e4
LT
965 case SIOCADDDLCI:
966 case SIOCDELDLCI:
967 err = -ENOPKG;
968 if (!dlci_ioctl_hook)
969 request_module("dlci");
970
7512cbf6
PE
971 mutex_lock(&dlci_ioctl_mutex);
972 if (dlci_ioctl_hook)
1da177e4 973 err = dlci_ioctl_hook(cmd, argp);
7512cbf6 974 mutex_unlock(&dlci_ioctl_mutex);
1da177e4
LT
975 break;
976 default:
977 err = sock->ops->ioctl(sock, cmd, arg);
b5e5fa5e
CH
978
979 /*
980 * If this ioctl is unknown try to hand it down
981 * to the NIC driver.
982 */
983 if (err == -ENOIOCTLCMD)
881d966b 984 err = dev_ioctl(net, cmd, argp);
1da177e4 985 break;
89bddce5 986 }
1da177e4
LT
987 return err;
988}
989
990int sock_create_lite(int family, int type, int protocol, struct socket **res)
991{
992 int err;
993 struct socket *sock = NULL;
89bddce5 994
1da177e4
LT
995 err = security_socket_create(family, type, protocol, 1);
996 if (err)
997 goto out;
998
999 sock = sock_alloc();
1000 if (!sock) {
1001 err = -ENOMEM;
1002 goto out;
1003 }
1004
1da177e4 1005 sock->type = type;
7420ed23
VY
1006 err = security_socket_post_create(sock, family, type, protocol, 1);
1007 if (err)
1008 goto out_release;
1009
1da177e4
LT
1010out:
1011 *res = sock;
1012 return err;
7420ed23
VY
1013out_release:
1014 sock_release(sock);
1015 sock = NULL;
1016 goto out;
1da177e4
LT
1017}
1018
1019/* No kernel lock held - perfect */
89bddce5 1020static unsigned int sock_poll(struct file *file, poll_table *wait)
1da177e4
LT
1021{
1022 struct socket *sock;
1023
1024 /*
89bddce5 1025 * We can't return errors to poll, so it's either yes or no.
1da177e4 1026 */
b69aee04 1027 sock = file->private_data;
1da177e4
LT
1028 return sock->ops->poll(file, sock, wait);
1029}
1030
89bddce5 1031static int sock_mmap(struct file *file, struct vm_area_struct *vma)
1da177e4 1032{
b69aee04 1033 struct socket *sock = file->private_data;
1da177e4
LT
1034
1035 return sock->ops->mmap(file, sock, vma);
1036}
1037
20380731 1038static int sock_close(struct inode *inode, struct file *filp)
1da177e4
LT
1039{
1040 /*
89bddce5
SH
1041 * It was possible the inode is NULL we were
1042 * closing an unfinished socket.
1da177e4
LT
1043 */
1044
89bddce5 1045 if (!inode) {
1da177e4
LT
1046 printk(KERN_DEBUG "sock_close: NULL inode\n");
1047 return 0;
1048 }
1da177e4
LT
1049 sock_release(SOCKET_I(inode));
1050 return 0;
1051}
1052
1053/*
1054 * Update the socket async list
1055 *
1056 * Fasync_list locking strategy.
1057 *
1058 * 1. fasync_list is modified only under process context socket lock
1059 * i.e. under semaphore.
1060 * 2. fasync_list is used under read_lock(&sk->sk_callback_lock)
1061 * or under socket lock.
1062 * 3. fasync_list can be used from softirq context, so that
1063 * modification under socket lock have to be enhanced with
1064 * write_lock_bh(&sk->sk_callback_lock).
1065 * --ANK (990710)
1066 */
1067
1068static int sock_fasync(int fd, struct file *filp, int on)
1069{
89bddce5 1070 struct fasync_struct *fa, *fna = NULL, **prev;
1da177e4
LT
1071 struct socket *sock;
1072 struct sock *sk;
1073
89bddce5 1074 if (on) {
8b3a7005 1075 fna = kmalloc(sizeof(struct fasync_struct), GFP_KERNEL);
89bddce5 1076 if (fna == NULL)
1da177e4
LT
1077 return -ENOMEM;
1078 }
1079
b69aee04 1080 sock = filp->private_data;
1da177e4 1081
89bddce5
SH
1082 sk = sock->sk;
1083 if (sk == NULL) {
1da177e4
LT
1084 kfree(fna);
1085 return -EINVAL;
1086 }
1087
1088 lock_sock(sk);
1089
76398425
JC
1090 spin_lock(&filp->f_lock);
1091 if (on)
1092 filp->f_flags |= FASYNC;
1093 else
1094 filp->f_flags &= ~FASYNC;
1095 spin_unlock(&filp->f_lock);
1096
89bddce5 1097 prev = &(sock->fasync_list);
1da177e4 1098
89bddce5
SH
1099 for (fa = *prev; fa != NULL; prev = &fa->fa_next, fa = *prev)
1100 if (fa->fa_file == filp)
1da177e4
LT
1101 break;
1102
89bddce5
SH
1103 if (on) {
1104 if (fa != NULL) {
1da177e4 1105 write_lock_bh(&sk->sk_callback_lock);
89bddce5 1106 fa->fa_fd = fd;
1da177e4
LT
1107 write_unlock_bh(&sk->sk_callback_lock);
1108
1109 kfree(fna);
1110 goto out;
1111 }
89bddce5
SH
1112 fna->fa_file = filp;
1113 fna->fa_fd = fd;
1114 fna->magic = FASYNC_MAGIC;
1115 fna->fa_next = sock->fasync_list;
1da177e4 1116 write_lock_bh(&sk->sk_callback_lock);
89bddce5 1117 sock->fasync_list = fna;
bcdce719 1118 sock_set_flag(sk, SOCK_FASYNC);
1da177e4 1119 write_unlock_bh(&sk->sk_callback_lock);
89bddce5
SH
1120 } else {
1121 if (fa != NULL) {
1da177e4 1122 write_lock_bh(&sk->sk_callback_lock);
89bddce5 1123 *prev = fa->fa_next;
bcdce719
ED
1124 if (!sock->fasync_list)
1125 sock_reset_flag(sk, SOCK_FASYNC);
1da177e4
LT
1126 write_unlock_bh(&sk->sk_callback_lock);
1127 kfree(fa);
1128 }
1129 }
1130
1131out:
1132 release_sock(sock->sk);
1133 return 0;
1134}
1135
1136/* This function may be called only under socket lock or callback_lock */
1137
1138int sock_wake_async(struct socket *sock, int how, int band)
1139{
1140 if (!sock || !sock->fasync_list)
1141 return -1;
89bddce5 1142 switch (how) {
8d8ad9d7 1143 case SOCK_WAKE_WAITD:
1da177e4
LT
1144 if (test_bit(SOCK_ASYNC_WAITDATA, &sock->flags))
1145 break;
1146 goto call_kill;
8d8ad9d7 1147 case SOCK_WAKE_SPACE:
1da177e4
LT
1148 if (!test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags))
1149 break;
1150 /* fall through */
8d8ad9d7 1151 case SOCK_WAKE_IO:
89bddce5 1152call_kill:
1da177e4
LT
1153 __kill_fasync(sock->fasync_list, SIGIO, band);
1154 break;
8d8ad9d7 1155 case SOCK_WAKE_URG:
1da177e4
LT
1156 __kill_fasync(sock->fasync_list, SIGURG, band);
1157 }
1158 return 0;
1159}
1160
1b8d7ae4 1161static int __sock_create(struct net *net, int family, int type, int protocol,
89bddce5 1162 struct socket **res, int kern)
1da177e4
LT
1163{
1164 int err;
1165 struct socket *sock;
55737fda 1166 const struct net_proto_family *pf;
1da177e4
LT
1167
1168 /*
89bddce5 1169 * Check protocol is in range
1da177e4
LT
1170 */
1171 if (family < 0 || family >= NPROTO)
1172 return -EAFNOSUPPORT;
1173 if (type < 0 || type >= SOCK_MAX)
1174 return -EINVAL;
1175
1176 /* Compatibility.
1177
1178 This uglymoron is moved from INET layer to here to avoid
1179 deadlock in module load.
1180 */
1181 if (family == PF_INET && type == SOCK_PACKET) {
89bddce5 1182 static int warned;
1da177e4
LT
1183 if (!warned) {
1184 warned = 1;
89bddce5
SH
1185 printk(KERN_INFO "%s uses obsolete (PF_INET,SOCK_PACKET)\n",
1186 current->comm);
1da177e4
LT
1187 }
1188 family = PF_PACKET;
1189 }
1190
1191 err = security_socket_create(family, type, protocol, kern);
1192 if (err)
1193 return err;
89bddce5 1194
55737fda
SH
1195 /*
1196 * Allocate the socket and allow the family to set things up. if
1197 * the protocol is 0, the family is instructed to select an appropriate
1198 * default.
1199 */
1200 sock = sock_alloc();
1201 if (!sock) {
1202 if (net_ratelimit())
1203 printk(KERN_WARNING "socket: no more sockets\n");
1204 return -ENFILE; /* Not exactly a match, but its the
1205 closest posix thing */
1206 }
1207
1208 sock->type = type;
1209
95a5afca 1210#ifdef CONFIG_MODULES
89bddce5
SH
1211 /* Attempt to load a protocol module if the find failed.
1212 *
1213 * 12/09/1996 Marcin: But! this makes REALLY only sense, if the user
1da177e4
LT
1214 * requested real, full-featured networking support upon configuration.
1215 * Otherwise module support will break!
1216 */
55737fda 1217 if (net_families[family] == NULL)
89bddce5 1218 request_module("net-pf-%d", family);
1da177e4
LT
1219#endif
1220
55737fda
SH
1221 rcu_read_lock();
1222 pf = rcu_dereference(net_families[family]);
1223 err = -EAFNOSUPPORT;
1224 if (!pf)
1225 goto out_release;
1da177e4
LT
1226
1227 /*
1228 * We will call the ->create function, that possibly is in a loadable
1229 * module, so we have to bump that loadable module refcnt first.
1230 */
55737fda 1231 if (!try_module_get(pf->owner))
1da177e4
LT
1232 goto out_release;
1233
55737fda
SH
1234 /* Now protected by module ref count */
1235 rcu_read_unlock();
1236
1b8d7ae4 1237 err = pf->create(net, sock, protocol);
55737fda 1238 if (err < 0)
1da177e4 1239 goto out_module_put;
a79af59e 1240
1da177e4
LT
1241 /*
1242 * Now to bump the refcnt of the [loadable] module that owns this
1243 * socket at sock_release time we decrement its refcnt.
1244 */
55737fda
SH
1245 if (!try_module_get(sock->ops->owner))
1246 goto out_module_busy;
1247
1da177e4
LT
1248 /*
1249 * Now that we're done with the ->create function, the [loadable]
1250 * module can have its refcnt decremented
1251 */
55737fda 1252 module_put(pf->owner);
7420ed23
VY
1253 err = security_socket_post_create(sock, family, type, protocol, kern);
1254 if (err)
3b185525 1255 goto out_sock_release;
55737fda 1256 *res = sock;
1da177e4 1257
55737fda
SH
1258 return 0;
1259
1260out_module_busy:
1261 err = -EAFNOSUPPORT;
1da177e4 1262out_module_put:
55737fda
SH
1263 sock->ops = NULL;
1264 module_put(pf->owner);
1265out_sock_release:
1da177e4 1266 sock_release(sock);
55737fda
SH
1267 return err;
1268
1269out_release:
1270 rcu_read_unlock();
1271 goto out_sock_release;
1da177e4
LT
1272}
1273
1274int sock_create(int family, int type, int protocol, struct socket **res)
1275{
1b8d7ae4 1276 return __sock_create(current->nsproxy->net_ns, family, type, protocol, res, 0);
1da177e4
LT
1277}
1278
1279int sock_create_kern(int family, int type, int protocol, struct socket **res)
1280{
1b8d7ae4 1281 return __sock_create(&init_net, family, type, protocol, res, 1);
1da177e4
LT
1282}
1283
3e0fa65f 1284SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
1da177e4
LT
1285{
1286 int retval;
1287 struct socket *sock;
a677a039
UD
1288 int flags;
1289
e38b36f3
UD
1290 /* Check the SOCK_* constants for consistency. */
1291 BUILD_BUG_ON(SOCK_CLOEXEC != O_CLOEXEC);
1292 BUILD_BUG_ON((SOCK_MAX | SOCK_TYPE_MASK) != SOCK_TYPE_MASK);
1293 BUILD_BUG_ON(SOCK_CLOEXEC & SOCK_TYPE_MASK);
1294 BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
1295
a677a039 1296 flags = type & ~SOCK_TYPE_MASK;
77d27200 1297 if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
a677a039
UD
1298 return -EINVAL;
1299 type &= SOCK_TYPE_MASK;
1da177e4 1300
aaca0bdc
UD
1301 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1302 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1303
1da177e4
LT
1304 retval = sock_create(family, type, protocol, &sock);
1305 if (retval < 0)
1306 goto out;
1307
77d27200 1308 retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK));
1da177e4
LT
1309 if (retval < 0)
1310 goto out_release;
1311
1312out:
1313 /* It may be already another descriptor 8) Not kernel problem. */
1314 return retval;
1315
1316out_release:
1317 sock_release(sock);
1318 return retval;
1319}
1320
1321/*
1322 * Create a pair of connected sockets.
1323 */
1324
3e0fa65f
HC
1325SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
1326 int __user *, usockvec)
1da177e4
LT
1327{
1328 struct socket *sock1, *sock2;
1329 int fd1, fd2, err;
db349509 1330 struct file *newfile1, *newfile2;
a677a039
UD
1331 int flags;
1332
1333 flags = type & ~SOCK_TYPE_MASK;
77d27200 1334 if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
a677a039
UD
1335 return -EINVAL;
1336 type &= SOCK_TYPE_MASK;
1da177e4 1337
aaca0bdc
UD
1338 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1339 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1340
1da177e4
LT
1341 /*
1342 * Obtain the first socket and check if the underlying protocol
1343 * supports the socketpair call.
1344 */
1345
1346 err = sock_create(family, type, protocol, &sock1);
1347 if (err < 0)
1348 goto out;
1349
1350 err = sock_create(family, type, protocol, &sock2);
1351 if (err < 0)
1352 goto out_release_1;
1353
1354 err = sock1->ops->socketpair(sock1, sock2);
89bddce5 1355 if (err < 0)
1da177e4
LT
1356 goto out_release_both;
1357
a677a039 1358 fd1 = sock_alloc_fd(&newfile1, flags & O_CLOEXEC);
bf3c23d1
DM
1359 if (unlikely(fd1 < 0)) {
1360 err = fd1;
db349509 1361 goto out_release_both;
bf3c23d1 1362 }
1da177e4 1363
a677a039 1364 fd2 = sock_alloc_fd(&newfile2, flags & O_CLOEXEC);
db349509 1365 if (unlikely(fd2 < 0)) {
bf3c23d1 1366 err = fd2;
db349509
AV
1367 put_filp(newfile1);
1368 put_unused_fd(fd1);
1da177e4 1369 goto out_release_both;
db349509 1370 }
1da177e4 1371
77d27200 1372 err = sock_attach_fd(sock1, newfile1, flags & O_NONBLOCK);
db349509
AV
1373 if (unlikely(err < 0)) {
1374 goto out_fd2;
1375 }
1376
77d27200 1377 err = sock_attach_fd(sock2, newfile2, flags & O_NONBLOCK);
db349509
AV
1378 if (unlikely(err < 0)) {
1379 fput(newfile1);
1380 goto out_fd1;
1381 }
1382
157cf649 1383 audit_fd_pair(fd1, fd2);
db349509
AV
1384 fd_install(fd1, newfile1);
1385 fd_install(fd2, newfile2);
1da177e4
LT
1386 /* fd1 and fd2 may be already another descriptors.
1387 * Not kernel problem.
1388 */
1389
89bddce5 1390 err = put_user(fd1, &usockvec[0]);
1da177e4
LT
1391 if (!err)
1392 err = put_user(fd2, &usockvec[1]);
1393 if (!err)
1394 return 0;
1395
1396 sys_close(fd2);
1397 sys_close(fd1);
1398 return err;
1399
1da177e4 1400out_release_both:
89bddce5 1401 sock_release(sock2);
1da177e4 1402out_release_1:
89bddce5 1403 sock_release(sock1);
1da177e4
LT
1404out:
1405 return err;
db349509
AV
1406
1407out_fd2:
1408 put_filp(newfile1);
1409 sock_release(sock1);
1410out_fd1:
1411 put_filp(newfile2);
1412 sock_release(sock2);
db349509
AV
1413 put_unused_fd(fd1);
1414 put_unused_fd(fd2);
1415 goto out;
1da177e4
LT
1416}
1417
1da177e4
LT
1418/*
1419 * Bind a name to a socket. Nothing much to do here since it's
1420 * the protocol's responsibility to handle the local address.
1421 *
1422 * We move the socket address to kernel space before we call
1423 * the protocol layer (having also checked the address is ok).
1424 */
1425
20f37034 1426SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
1da177e4
LT
1427{
1428 struct socket *sock;
230b1839 1429 struct sockaddr_storage address;
6cb153ca 1430 int err, fput_needed;
1da177e4 1431
89bddce5 1432 sock = sockfd_lookup_light(fd, &err, &fput_needed);
e71a4783 1433 if (sock) {
230b1839 1434 err = move_addr_to_kernel(umyaddr, addrlen, (struct sockaddr *)&address);
89bddce5
SH
1435 if (err >= 0) {
1436 err = security_socket_bind(sock,
230b1839 1437 (struct sockaddr *)&address,
89bddce5 1438 addrlen);
6cb153ca
BL
1439 if (!err)
1440 err = sock->ops->bind(sock,
89bddce5 1441 (struct sockaddr *)
230b1839 1442 &address, addrlen);
1da177e4 1443 }
6cb153ca 1444 fput_light(sock->file, fput_needed);
89bddce5 1445 }
1da177e4
LT
1446 return err;
1447}
1448
1da177e4
LT
1449/*
1450 * Perform a listen. Basically, we allow the protocol to do anything
1451 * necessary for a listen, and if that works, we mark the socket as
1452 * ready for listening.
1453 */
1454
3e0fa65f 1455SYSCALL_DEFINE2(listen, int, fd, int, backlog)
1da177e4
LT
1456{
1457 struct socket *sock;
6cb153ca 1458 int err, fput_needed;
b8e1f9b5 1459 int somaxconn;
89bddce5
SH
1460
1461 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1462 if (sock) {
8efa6e93 1463 somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn;
b8e1f9b5
PE
1464 if ((unsigned)backlog > somaxconn)
1465 backlog = somaxconn;
1da177e4
LT
1466
1467 err = security_socket_listen(sock, backlog);
6cb153ca
BL
1468 if (!err)
1469 err = sock->ops->listen(sock, backlog);
1da177e4 1470
6cb153ca 1471 fput_light(sock->file, fput_needed);
1da177e4
LT
1472 }
1473 return err;
1474}
1475
1da177e4
LT
1476/*
1477 * For accept, we attempt to create a new socket, set up the link
1478 * with the client, wake up the client, then return the new
1479 * connected fd. We collect the address of the connector in kernel
1480 * space and move it to user at the very end. This is unclean because
1481 * we open the socket then return an error.
1482 *
1483 * 1003.1g adds the ability to recvmsg() to query connection pending
1484 * status to recvmsg. We need to add that support in a way thats
1485 * clean when we restucture accept also.
1486 */
1487
20f37034
HC
1488SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
1489 int __user *, upeer_addrlen, int, flags)
1da177e4
LT
1490{
1491 struct socket *sock, *newsock;
39d8c1b6 1492 struct file *newfile;
6cb153ca 1493 int err, len, newfd, fput_needed;
230b1839 1494 struct sockaddr_storage address;
1da177e4 1495
77d27200 1496 if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
aaca0bdc
UD
1497 return -EINVAL;
1498
1499 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1500 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1501
6cb153ca 1502 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4
LT
1503 if (!sock)
1504 goto out;
1505
1506 err = -ENFILE;
89bddce5 1507 if (!(newsock = sock_alloc()))
1da177e4
LT
1508 goto out_put;
1509
1510 newsock->type = sock->type;
1511 newsock->ops = sock->ops;
1512
1da177e4
LT
1513 /*
1514 * We don't need try_module_get here, as the listening socket (sock)
1515 * has the protocol module (sock->ops->owner) held.
1516 */
1517 __module_get(newsock->ops->owner);
1518
aaca0bdc 1519 newfd = sock_alloc_fd(&newfile, flags & O_CLOEXEC);
39d8c1b6
DM
1520 if (unlikely(newfd < 0)) {
1521 err = newfd;
9a1875e6
DM
1522 sock_release(newsock);
1523 goto out_put;
39d8c1b6
DM
1524 }
1525
77d27200 1526 err = sock_attach_fd(newsock, newfile, flags & O_NONBLOCK);
39d8c1b6 1527 if (err < 0)
79f4f642 1528 goto out_fd_simple;
39d8c1b6 1529
a79af59e
FF
1530 err = security_socket_accept(sock, newsock);
1531 if (err)
39d8c1b6 1532 goto out_fd;
a79af59e 1533
1da177e4
LT
1534 err = sock->ops->accept(sock, newsock, sock->file->f_flags);
1535 if (err < 0)
39d8c1b6 1536 goto out_fd;
1da177e4
LT
1537
1538 if (upeer_sockaddr) {
230b1839 1539 if (newsock->ops->getname(newsock, (struct sockaddr *)&address,
89bddce5 1540 &len, 2) < 0) {
1da177e4 1541 err = -ECONNABORTED;
39d8c1b6 1542 goto out_fd;
1da177e4 1543 }
230b1839
YH
1544 err = move_addr_to_user((struct sockaddr *)&address,
1545 len, upeer_sockaddr, upeer_addrlen);
1da177e4 1546 if (err < 0)
39d8c1b6 1547 goto out_fd;
1da177e4
LT
1548 }
1549
1550 /* File flags are not inherited via accept() unlike another OSes. */
1551
39d8c1b6
DM
1552 fd_install(newfd, newfile);
1553 err = newfd;
1da177e4 1554
1da177e4 1555out_put:
6cb153ca 1556 fput_light(sock->file, fput_needed);
1da177e4
LT
1557out:
1558 return err;
79f4f642
AD
1559out_fd_simple:
1560 sock_release(newsock);
1561 put_filp(newfile);
1562 put_unused_fd(newfd);
1563 goto out_put;
39d8c1b6 1564out_fd:
9606a216 1565 fput(newfile);
39d8c1b6 1566 put_unused_fd(newfd);
1da177e4
LT
1567 goto out_put;
1568}
1569
20f37034
HC
1570SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr,
1571 int __user *, upeer_addrlen)
aaca0bdc 1572{
de11defe 1573 return sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0);
aaca0bdc
UD
1574}
1575
1da177e4
LT
1576/*
1577 * Attempt to connect to a socket with the server address. The address
1578 * is in user space so we verify it is OK and move it to kernel space.
1579 *
1580 * For 1003.1g we need to add clean support for a bind to AF_UNSPEC to
1581 * break bindings
1582 *
1583 * NOTE: 1003.1g draft 6.3 is broken with respect to AX.25/NetROM and
1584 * other SEQPACKET protocols that take time to connect() as it doesn't
1585 * include the -EINPROGRESS status for such sockets.
1586 */
1587
20f37034
HC
1588SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
1589 int, addrlen)
1da177e4
LT
1590{
1591 struct socket *sock;
230b1839 1592 struct sockaddr_storage address;
6cb153ca 1593 int err, fput_needed;
1da177e4 1594
6cb153ca 1595 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4
LT
1596 if (!sock)
1597 goto out;
230b1839 1598 err = move_addr_to_kernel(uservaddr, addrlen, (struct sockaddr *)&address);
1da177e4
LT
1599 if (err < 0)
1600 goto out_put;
1601
89bddce5 1602 err =
230b1839 1603 security_socket_connect(sock, (struct sockaddr *)&address, addrlen);
1da177e4
LT
1604 if (err)
1605 goto out_put;
1606
230b1839 1607 err = sock->ops->connect(sock, (struct sockaddr *)&address, addrlen,
1da177e4
LT
1608 sock->file->f_flags);
1609out_put:
6cb153ca 1610 fput_light(sock->file, fput_needed);
1da177e4
LT
1611out:
1612 return err;
1613}
1614
1615/*
1616 * Get the local address ('name') of a socket object. Move the obtained
1617 * name to user space.
1618 */
1619
20f37034
HC
1620SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
1621 int __user *, usockaddr_len)
1da177e4
LT
1622{
1623 struct socket *sock;
230b1839 1624 struct sockaddr_storage address;
6cb153ca 1625 int len, err, fput_needed;
89bddce5 1626
6cb153ca 1627 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4
LT
1628 if (!sock)
1629 goto out;
1630
1631 err = security_socket_getsockname(sock);
1632 if (err)
1633 goto out_put;
1634
230b1839 1635 err = sock->ops->getname(sock, (struct sockaddr *)&address, &len, 0);
1da177e4
LT
1636 if (err)
1637 goto out_put;
230b1839 1638 err = move_addr_to_user((struct sockaddr *)&address, len, usockaddr, usockaddr_len);
1da177e4
LT
1639
1640out_put:
6cb153ca 1641 fput_light(sock->file, fput_needed);
1da177e4
LT
1642out:
1643 return err;
1644}
1645
1646/*
1647 * Get the remote address ('name') of a socket object. Move the obtained
1648 * name to user space.
1649 */
1650
20f37034
HC
1651SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
1652 int __user *, usockaddr_len)
1da177e4
LT
1653{
1654 struct socket *sock;
230b1839 1655 struct sockaddr_storage address;
6cb153ca 1656 int len, err, fput_needed;
1da177e4 1657
89bddce5
SH
1658 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1659 if (sock != NULL) {
1da177e4
LT
1660 err = security_socket_getpeername(sock);
1661 if (err) {
6cb153ca 1662 fput_light(sock->file, fput_needed);
1da177e4
LT
1663 return err;
1664 }
1665
89bddce5 1666 err =
230b1839 1667 sock->ops->getname(sock, (struct sockaddr *)&address, &len,
89bddce5 1668 1);
1da177e4 1669 if (!err)
230b1839 1670 err = move_addr_to_user((struct sockaddr *)&address, len, usockaddr,
89bddce5 1671 usockaddr_len);
6cb153ca 1672 fput_light(sock->file, fput_needed);
1da177e4
LT
1673 }
1674 return err;
1675}
1676
1677/*
1678 * Send a datagram to a given address. We move the address into kernel
1679 * space and check the user space data area is readable before invoking
1680 * the protocol.
1681 */
1682
3e0fa65f
HC
1683SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
1684 unsigned, flags, struct sockaddr __user *, addr,
1685 int, addr_len)
1da177e4
LT
1686{
1687 struct socket *sock;
230b1839 1688 struct sockaddr_storage address;
1da177e4
LT
1689 int err;
1690 struct msghdr msg;
1691 struct iovec iov;
6cb153ca 1692 int fput_needed;
6cb153ca 1693
de0fa95c
PE
1694 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1695 if (!sock)
4387ff75 1696 goto out;
6cb153ca 1697
89bddce5
SH
1698 iov.iov_base = buff;
1699 iov.iov_len = len;
1700 msg.msg_name = NULL;
1701 msg.msg_iov = &iov;
1702 msg.msg_iovlen = 1;
1703 msg.msg_control = NULL;
1704 msg.msg_controllen = 0;
1705 msg.msg_namelen = 0;
6cb153ca 1706 if (addr) {
230b1839 1707 err = move_addr_to_kernel(addr, addr_len, (struct sockaddr *)&address);
1da177e4
LT
1708 if (err < 0)
1709 goto out_put;
230b1839 1710 msg.msg_name = (struct sockaddr *)&address;
89bddce5 1711 msg.msg_namelen = addr_len;
1da177e4
LT
1712 }
1713 if (sock->file->f_flags & O_NONBLOCK)
1714 flags |= MSG_DONTWAIT;
1715 msg.msg_flags = flags;
1716 err = sock_sendmsg(sock, &msg, len);
1717
89bddce5 1718out_put:
de0fa95c 1719 fput_light(sock->file, fput_needed);
4387ff75 1720out:
1da177e4
LT
1721 return err;
1722}
1723
1724/*
89bddce5 1725 * Send a datagram down a socket.
1da177e4
LT
1726 */
1727
3e0fa65f
HC
1728SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len,
1729 unsigned, flags)
1da177e4
LT
1730{
1731 return sys_sendto(fd, buff, len, flags, NULL, 0);
1732}
1733
1734/*
89bddce5 1735 * Receive a frame from the socket and optionally record the address of the
1da177e4
LT
1736 * sender. We verify the buffers are writable and if needed move the
1737 * sender address from kernel to user space.
1738 */
1739
3e0fa65f
HC
1740SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
1741 unsigned, flags, struct sockaddr __user *, addr,
1742 int __user *, addr_len)
1da177e4
LT
1743{
1744 struct socket *sock;
1745 struct iovec iov;
1746 struct msghdr msg;
230b1839 1747 struct sockaddr_storage address;
89bddce5 1748 int err, err2;
6cb153ca
BL
1749 int fput_needed;
1750
de0fa95c 1751 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4 1752 if (!sock)
de0fa95c 1753 goto out;
1da177e4 1754
89bddce5
SH
1755 msg.msg_control = NULL;
1756 msg.msg_controllen = 0;
1757 msg.msg_iovlen = 1;
1758 msg.msg_iov = &iov;
1759 iov.iov_len = size;
1760 iov.iov_base = ubuf;
230b1839
YH
1761 msg.msg_name = (struct sockaddr *)&address;
1762 msg.msg_namelen = sizeof(address);
1da177e4
LT
1763 if (sock->file->f_flags & O_NONBLOCK)
1764 flags |= MSG_DONTWAIT;
89bddce5 1765 err = sock_recvmsg(sock, &msg, size, flags);
1da177e4 1766
89bddce5 1767 if (err >= 0 && addr != NULL) {
230b1839
YH
1768 err2 = move_addr_to_user((struct sockaddr *)&address,
1769 msg.msg_namelen, addr, addr_len);
89bddce5
SH
1770 if (err2 < 0)
1771 err = err2;
1da177e4 1772 }
de0fa95c
PE
1773
1774 fput_light(sock->file, fput_needed);
4387ff75 1775out:
1da177e4
LT
1776 return err;
1777}
1778
1779/*
89bddce5 1780 * Receive a datagram from a socket.
1da177e4
LT
1781 */
1782
89bddce5
SH
1783asmlinkage long sys_recv(int fd, void __user *ubuf, size_t size,
1784 unsigned flags)
1da177e4
LT
1785{
1786 return sys_recvfrom(fd, ubuf, size, flags, NULL, NULL);
1787}
1788
1789/*
1790 * Set a socket option. Because we don't know the option lengths we have
1791 * to pass the user mode parameter for the protocols to sort out.
1792 */
1793
20f37034
HC
1794SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
1795 char __user *, optval, int, optlen)
1da177e4 1796{
6cb153ca 1797 int err, fput_needed;
1da177e4
LT
1798 struct socket *sock;
1799
1800 if (optlen < 0)
1801 return -EINVAL;
89bddce5
SH
1802
1803 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1804 if (sock != NULL) {
1805 err = security_socket_setsockopt(sock, level, optname);
6cb153ca
BL
1806 if (err)
1807 goto out_put;
1da177e4
LT
1808
1809 if (level == SOL_SOCKET)
89bddce5
SH
1810 err =
1811 sock_setsockopt(sock, level, optname, optval,
1812 optlen);
1da177e4 1813 else
89bddce5
SH
1814 err =
1815 sock->ops->setsockopt(sock, level, optname, optval,
1816 optlen);
6cb153ca
BL
1817out_put:
1818 fput_light(sock->file, fput_needed);
1da177e4
LT
1819 }
1820 return err;
1821}
1822
1823/*
1824 * Get a socket option. Because we don't know the option lengths we have
1825 * to pass a user mode parameter for the protocols to sort out.
1826 */
1827
20f37034
HC
1828SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
1829 char __user *, optval, int __user *, optlen)
1da177e4 1830{
6cb153ca 1831 int err, fput_needed;
1da177e4
LT
1832 struct socket *sock;
1833
89bddce5
SH
1834 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1835 if (sock != NULL) {
6cb153ca
BL
1836 err = security_socket_getsockopt(sock, level, optname);
1837 if (err)
1838 goto out_put;
1da177e4
LT
1839
1840 if (level == SOL_SOCKET)
89bddce5
SH
1841 err =
1842 sock_getsockopt(sock, level, optname, optval,
1843 optlen);
1da177e4 1844 else
89bddce5
SH
1845 err =
1846 sock->ops->getsockopt(sock, level, optname, optval,
1847 optlen);
6cb153ca
BL
1848out_put:
1849 fput_light(sock->file, fput_needed);
1da177e4
LT
1850 }
1851 return err;
1852}
1853
1da177e4
LT
1854/*
1855 * Shutdown a socket.
1856 */
1857
754fe8d2 1858SYSCALL_DEFINE2(shutdown, int, fd, int, how)
1da177e4 1859{
6cb153ca 1860 int err, fput_needed;
1da177e4
LT
1861 struct socket *sock;
1862
89bddce5
SH
1863 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1864 if (sock != NULL) {
1da177e4 1865 err = security_socket_shutdown(sock, how);
6cb153ca
BL
1866 if (!err)
1867 err = sock->ops->shutdown(sock, how);
1868 fput_light(sock->file, fput_needed);
1da177e4
LT
1869 }
1870 return err;
1871}
1872
89bddce5 1873/* A couple of helpful macros for getting the address of the 32/64 bit
1da177e4
LT
1874 * fields which are the same type (int / unsigned) on our platforms.
1875 */
1876#define COMPAT_MSG(msg, member) ((MSG_CMSG_COMPAT & flags) ? &msg##_compat->member : &msg->member)
1877#define COMPAT_NAMELEN(msg) COMPAT_MSG(msg, msg_namelen)
1878#define COMPAT_FLAGS(msg) COMPAT_MSG(msg, msg_flags)
1879
1da177e4
LT
1880/*
1881 * BSD sendmsg interface
1882 */
1883
3e0fa65f 1884SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)
1da177e4 1885{
89bddce5
SH
1886 struct compat_msghdr __user *msg_compat =
1887 (struct compat_msghdr __user *)msg;
1da177e4 1888 struct socket *sock;
230b1839 1889 struct sockaddr_storage address;
1da177e4 1890 struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
b9d717a7 1891 unsigned char ctl[sizeof(struct cmsghdr) + 20]
89bddce5
SH
1892 __attribute__ ((aligned(sizeof(__kernel_size_t))));
1893 /* 20 is size of ipv6_pktinfo */
1da177e4
LT
1894 unsigned char *ctl_buf = ctl;
1895 struct msghdr msg_sys;
1896 int err, ctl_len, iov_size, total_len;
6cb153ca 1897 int fput_needed;
89bddce5 1898
1da177e4
LT
1899 err = -EFAULT;
1900 if (MSG_CMSG_COMPAT & flags) {
1901 if (get_compat_msghdr(&msg_sys, msg_compat))
1902 return -EFAULT;
89bddce5
SH
1903 }
1904 else if (copy_from_user(&msg_sys, msg, sizeof(struct msghdr)))
1da177e4
LT
1905 return -EFAULT;
1906
6cb153ca 1907 sock = sockfd_lookup_light(fd, &err, &fput_needed);
89bddce5 1908 if (!sock)
1da177e4
LT
1909 goto out;
1910
1911 /* do not move before msg_sys is valid */
1912 err = -EMSGSIZE;
1913 if (msg_sys.msg_iovlen > UIO_MAXIOV)
1914 goto out_put;
1915
89bddce5 1916 /* Check whether to allocate the iovec area */
1da177e4
LT
1917 err = -ENOMEM;
1918 iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
1919 if (msg_sys.msg_iovlen > UIO_FASTIOV) {
1920 iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
1921 if (!iov)
1922 goto out_put;
1923 }
1924
1925 /* This will also move the address data into kernel space */
1926 if (MSG_CMSG_COMPAT & flags) {
230b1839
YH
1927 err = verify_compat_iovec(&msg_sys, iov,
1928 (struct sockaddr *)&address,
1929 VERIFY_READ);
1da177e4 1930 } else
230b1839
YH
1931 err = verify_iovec(&msg_sys, iov,
1932 (struct sockaddr *)&address,
1933 VERIFY_READ);
89bddce5 1934 if (err < 0)
1da177e4
LT
1935 goto out_freeiov;
1936 total_len = err;
1937
1938 err = -ENOBUFS;
1939
1940 if (msg_sys.msg_controllen > INT_MAX)
1941 goto out_freeiov;
89bddce5 1942 ctl_len = msg_sys.msg_controllen;
1da177e4 1943 if ((MSG_CMSG_COMPAT & flags) && ctl_len) {
89bddce5
SH
1944 err =
1945 cmsghdr_from_user_compat_to_kern(&msg_sys, sock->sk, ctl,
1946 sizeof(ctl));
1da177e4
LT
1947 if (err)
1948 goto out_freeiov;
1949 ctl_buf = msg_sys.msg_control;
8920e8f9 1950 ctl_len = msg_sys.msg_controllen;
1da177e4 1951 } else if (ctl_len) {
89bddce5 1952 if (ctl_len > sizeof(ctl)) {
1da177e4 1953 ctl_buf = sock_kmalloc(sock->sk, ctl_len, GFP_KERNEL);
89bddce5 1954 if (ctl_buf == NULL)
1da177e4
LT
1955 goto out_freeiov;
1956 }
1957 err = -EFAULT;
1958 /*
1959 * Careful! Before this, msg_sys.msg_control contains a user pointer.
1960 * Afterwards, it will be a kernel pointer. Thus the compiler-assisted
1961 * checking falls down on this.
1962 */
89bddce5
SH
1963 if (copy_from_user(ctl_buf, (void __user *)msg_sys.msg_control,
1964 ctl_len))
1da177e4
LT
1965 goto out_freectl;
1966 msg_sys.msg_control = ctl_buf;
1967 }
1968 msg_sys.msg_flags = flags;
1969
1970 if (sock->file->f_flags & O_NONBLOCK)
1971 msg_sys.msg_flags |= MSG_DONTWAIT;
1972 err = sock_sendmsg(sock, &msg_sys, total_len);
1973
1974out_freectl:
89bddce5 1975 if (ctl_buf != ctl)
1da177e4
LT
1976 sock_kfree_s(sock->sk, ctl_buf, ctl_len);
1977out_freeiov:
1978 if (iov != iovstack)
1979 sock_kfree_s(sock->sk, iov, iov_size);
1980out_put:
6cb153ca 1981 fput_light(sock->file, fput_needed);
89bddce5 1982out:
1da177e4
LT
1983 return err;
1984}
1985
1986/*
1987 * BSD recvmsg interface
1988 */
1989
3e0fa65f
HC
1990SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg,
1991 unsigned int, flags)
1da177e4 1992{
89bddce5
SH
1993 struct compat_msghdr __user *msg_compat =
1994 (struct compat_msghdr __user *)msg;
1da177e4
LT
1995 struct socket *sock;
1996 struct iovec iovstack[UIO_FASTIOV];
89bddce5 1997 struct iovec *iov = iovstack;
1da177e4
LT
1998 struct msghdr msg_sys;
1999 unsigned long cmsg_ptr;
2000 int err, iov_size, total_len, len;
6cb153ca 2001 int fput_needed;
1da177e4
LT
2002
2003 /* kernel mode address */
230b1839 2004 struct sockaddr_storage addr;
1da177e4
LT
2005
2006 /* user mode address pointers */
2007 struct sockaddr __user *uaddr;
2008 int __user *uaddr_len;
89bddce5 2009
1da177e4
LT
2010 if (MSG_CMSG_COMPAT & flags) {
2011 if (get_compat_msghdr(&msg_sys, msg_compat))
2012 return -EFAULT;
89bddce5
SH
2013 }
2014 else if (copy_from_user(&msg_sys, msg, sizeof(struct msghdr)))
2015 return -EFAULT;
1da177e4 2016
6cb153ca 2017 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1da177e4
LT
2018 if (!sock)
2019 goto out;
2020
2021 err = -EMSGSIZE;
2022 if (msg_sys.msg_iovlen > UIO_MAXIOV)
2023 goto out_put;
89bddce5
SH
2024
2025 /* Check whether to allocate the iovec area */
1da177e4
LT
2026 err = -ENOMEM;
2027 iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
2028 if (msg_sys.msg_iovlen > UIO_FASTIOV) {
2029 iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
2030 if (!iov)
2031 goto out_put;
2032 }
2033
2034 /*
89bddce5
SH
2035 * Save the user-mode address (verify_iovec will change the
2036 * kernel msghdr to use the kernel address space)
1da177e4 2037 */
89bddce5 2038
cfcabdcc 2039 uaddr = (__force void __user *)msg_sys.msg_name;
1da177e4
LT
2040 uaddr_len = COMPAT_NAMELEN(msg);
2041 if (MSG_CMSG_COMPAT & flags) {
230b1839
YH
2042 err = verify_compat_iovec(&msg_sys, iov,
2043 (struct sockaddr *)&addr,
2044 VERIFY_WRITE);
1da177e4 2045 } else
230b1839
YH
2046 err = verify_iovec(&msg_sys, iov,
2047 (struct sockaddr *)&addr,
2048 VERIFY_WRITE);
1da177e4
LT
2049 if (err < 0)
2050 goto out_freeiov;
89bddce5 2051 total_len = err;
1da177e4
LT
2052
2053 cmsg_ptr = (unsigned long)msg_sys.msg_control;
4a19542e 2054 msg_sys.msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT);
89bddce5 2055
1da177e4
LT
2056 if (sock->file->f_flags & O_NONBLOCK)
2057 flags |= MSG_DONTWAIT;
2058 err = sock_recvmsg(sock, &msg_sys, total_len, flags);
2059 if (err < 0)
2060 goto out_freeiov;
2061 len = err;
2062
2063 if (uaddr != NULL) {
230b1839
YH
2064 err = move_addr_to_user((struct sockaddr *)&addr,
2065 msg_sys.msg_namelen, uaddr,
89bddce5 2066 uaddr_len);
1da177e4
LT
2067 if (err < 0)
2068 goto out_freeiov;
2069 }
37f7f421
DM
2070 err = __put_user((msg_sys.msg_flags & ~MSG_CMSG_COMPAT),
2071 COMPAT_FLAGS(msg));
1da177e4
LT
2072 if (err)
2073 goto out_freeiov;
2074 if (MSG_CMSG_COMPAT & flags)
89bddce5 2075 err = __put_user((unsigned long)msg_sys.msg_control - cmsg_ptr,
1da177e4
LT
2076 &msg_compat->msg_controllen);
2077 else
89bddce5 2078 err = __put_user((unsigned long)msg_sys.msg_control - cmsg_ptr,
1da177e4
LT
2079 &msg->msg_controllen);
2080 if (err)
2081 goto out_freeiov;
2082 err = len;
2083
2084out_freeiov:
2085 if (iov != iovstack)
2086 sock_kfree_s(sock->sk, iov, iov_size);
2087out_put:
6cb153ca 2088 fput_light(sock->file, fput_needed);
1da177e4
LT
2089out:
2090 return err;
2091}
2092
2093#ifdef __ARCH_WANT_SYS_SOCKETCALL
2094
2095/* Argument list sizes for sys_socketcall */
2096#define AL(x) ((x) * sizeof(unsigned long))
aaca0bdc 2097static const unsigned char nargs[19]={
89bddce5
SH
2098 AL(0),AL(3),AL(3),AL(3),AL(2),AL(3),
2099 AL(3),AL(3),AL(4),AL(4),AL(4),AL(6),
aaca0bdc 2100 AL(6),AL(2),AL(5),AL(5),AL(3),AL(3),
de11defe 2101 AL(4)
89bddce5
SH
2102};
2103
1da177e4
LT
2104#undef AL
2105
2106/*
89bddce5 2107 * System call vectors.
1da177e4
LT
2108 *
2109 * Argument checking cleaned up. Saved 20% in size.
2110 * This function doesn't need to set the kernel lock because
89bddce5 2111 * it is set by the callees.
1da177e4
LT
2112 */
2113
3e0fa65f 2114SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args)
1da177e4
LT
2115{
2116 unsigned long a[6];
89bddce5 2117 unsigned long a0, a1;
1da177e4 2118 int err;
47379052 2119 unsigned int len;
1da177e4 2120
de11defe 2121 if (call < 1 || call > SYS_ACCEPT4)
1da177e4
LT
2122 return -EINVAL;
2123
47379052
AV
2124 len = nargs[call];
2125 if (len > sizeof(a))
2126 return -EINVAL;
2127
1da177e4 2128 /* copy_from_user should be SMP safe. */
47379052 2129 if (copy_from_user(a, args, len))
1da177e4 2130 return -EFAULT;
3ec3b2fb 2131
f3298dc4 2132 audit_socketcall(nargs[call] / sizeof(unsigned long), a);
3ec3b2fb 2133
89bddce5
SH
2134 a0 = a[0];
2135 a1 = a[1];
2136
2137 switch (call) {
2138 case SYS_SOCKET:
2139 err = sys_socket(a0, a1, a[2]);
2140 break;
2141 case SYS_BIND:
2142 err = sys_bind(a0, (struct sockaddr __user *)a1, a[2]);
2143 break;
2144 case SYS_CONNECT:
2145 err = sys_connect(a0, (struct sockaddr __user *)a1, a[2]);
2146 break;
2147 case SYS_LISTEN:
2148 err = sys_listen(a0, a1);
2149 break;
2150 case SYS_ACCEPT:
de11defe
UD
2151 err = sys_accept4(a0, (struct sockaddr __user *)a1,
2152 (int __user *)a[2], 0);
89bddce5
SH
2153 break;
2154 case SYS_GETSOCKNAME:
2155 err =
2156 sys_getsockname(a0, (struct sockaddr __user *)a1,
2157 (int __user *)a[2]);
2158 break;
2159 case SYS_GETPEERNAME:
2160 err =
2161 sys_getpeername(a0, (struct sockaddr __user *)a1,
2162 (int __user *)a[2]);
2163 break;
2164 case SYS_SOCKETPAIR:
2165 err = sys_socketpair(a0, a1, a[2], (int __user *)a[3]);
2166 break;
2167 case SYS_SEND:
2168 err = sys_send(a0, (void __user *)a1, a[2], a[3]);
2169 break;
2170 case SYS_SENDTO:
2171 err = sys_sendto(a0, (void __user *)a1, a[2], a[3],
2172 (struct sockaddr __user *)a[4], a[5]);
2173 break;
2174 case SYS_RECV:
2175 err = sys_recv(a0, (void __user *)a1, a[2], a[3]);
2176 break;
2177 case SYS_RECVFROM:
2178 err = sys_recvfrom(a0, (void __user *)a1, a[2], a[3],
2179 (struct sockaddr __user *)a[4],
2180 (int __user *)a[5]);
2181 break;
2182 case SYS_SHUTDOWN:
2183 err = sys_shutdown(a0, a1);
2184 break;
2185 case SYS_SETSOCKOPT:
2186 err = sys_setsockopt(a0, a1, a[2], (char __user *)a[3], a[4]);
2187 break;
2188 case SYS_GETSOCKOPT:
2189 err =
2190 sys_getsockopt(a0, a1, a[2], (char __user *)a[3],
2191 (int __user *)a[4]);
2192 break;
2193 case SYS_SENDMSG:
2194 err = sys_sendmsg(a0, (struct msghdr __user *)a1, a[2]);
2195 break;
2196 case SYS_RECVMSG:
2197 err = sys_recvmsg(a0, (struct msghdr __user *)a1, a[2]);
2198 break;
de11defe
UD
2199 case SYS_ACCEPT4:
2200 err = sys_accept4(a0, (struct sockaddr __user *)a1,
2201 (int __user *)a[2], a[3]);
aaca0bdc 2202 break;
89bddce5
SH
2203 default:
2204 err = -EINVAL;
2205 break;
1da177e4
LT
2206 }
2207 return err;
2208}
2209
89bddce5 2210#endif /* __ARCH_WANT_SYS_SOCKETCALL */
1da177e4 2211
55737fda
SH
2212/**
2213 * sock_register - add a socket protocol handler
2214 * @ops: description of protocol
2215 *
1da177e4
LT
2216 * This function is called by a protocol handler that wants to
2217 * advertise its address family, and have it linked into the
55737fda
SH
2218 * socket interface. The value ops->family coresponds to the
2219 * socket system call protocol family.
1da177e4 2220 */
f0fd27d4 2221int sock_register(const struct net_proto_family *ops)
1da177e4
LT
2222{
2223 int err;
2224
2225 if (ops->family >= NPROTO) {
89bddce5
SH
2226 printk(KERN_CRIT "protocol %d >= NPROTO(%d)\n", ops->family,
2227 NPROTO);
1da177e4
LT
2228 return -ENOBUFS;
2229 }
55737fda
SH
2230
2231 spin_lock(&net_family_lock);
2232 if (net_families[ops->family])
2233 err = -EEXIST;
2234 else {
89bddce5 2235 net_families[ops->family] = ops;
1da177e4
LT
2236 err = 0;
2237 }
55737fda
SH
2238 spin_unlock(&net_family_lock);
2239
89bddce5 2240 printk(KERN_INFO "NET: Registered protocol family %d\n", ops->family);
1da177e4
LT
2241 return err;
2242}
2243
55737fda
SH
2244/**
2245 * sock_unregister - remove a protocol handler
2246 * @family: protocol family to remove
2247 *
1da177e4
LT
2248 * This function is called by a protocol handler that wants to
2249 * remove its address family, and have it unlinked from the
55737fda
SH
2250 * new socket creation.
2251 *
2252 * If protocol handler is a module, then it can use module reference
2253 * counts to protect against new references. If protocol handler is not
2254 * a module then it needs to provide its own protection in
2255 * the ops->create routine.
1da177e4 2256 */
f0fd27d4 2257void sock_unregister(int family)
1da177e4 2258{
f0fd27d4 2259 BUG_ON(family < 0 || family >= NPROTO);
1da177e4 2260
55737fda 2261 spin_lock(&net_family_lock);
89bddce5 2262 net_families[family] = NULL;
55737fda
SH
2263 spin_unlock(&net_family_lock);
2264
2265 synchronize_rcu();
2266
89bddce5 2267 printk(KERN_INFO "NET: Unregistered protocol family %d\n", family);
1da177e4
LT
2268}
2269
77d76ea3 2270static int __init sock_init(void)
1da177e4
LT
2271{
2272 /*
89bddce5 2273 * Initialize sock SLAB cache.
1da177e4 2274 */
89bddce5 2275
1da177e4
LT
2276 sk_init();
2277
1da177e4 2278 /*
89bddce5 2279 * Initialize skbuff SLAB cache
1da177e4
LT
2280 */
2281 skb_init();
1da177e4
LT
2282
2283 /*
89bddce5 2284 * Initialize the protocols module.
1da177e4
LT
2285 */
2286
2287 init_inodecache();
2288 register_filesystem(&sock_fs_type);
2289 sock_mnt = kern_mount(&sock_fs_type);
77d76ea3
AK
2290
2291 /* The real protocol initialization is performed in later initcalls.
1da177e4
LT
2292 */
2293
2294#ifdef CONFIG_NETFILTER
2295 netfilter_init();
2296#endif
cbeb321a
DM
2297
2298 return 0;
1da177e4
LT
2299}
2300
77d76ea3
AK
2301core_initcall(sock_init); /* early initcall */
2302
1da177e4
LT
2303#ifdef CONFIG_PROC_FS
2304void socket_seq_show(struct seq_file *seq)
2305{
2306 int cpu;
2307 int counter = 0;
2308
6f912042 2309 for_each_possible_cpu(cpu)
89bddce5 2310 counter += per_cpu(sockets_in_use, cpu);
1da177e4
LT
2311
2312 /* It can be negative, by the way. 8) */
2313 if (counter < 0)
2314 counter = 0;
2315
2316 seq_printf(seq, "sockets: used %d\n", counter);
2317}
89bddce5 2318#endif /* CONFIG_PROC_FS */
1da177e4 2319
89bbfc95
SP
2320#ifdef CONFIG_COMPAT
2321static long compat_sock_ioctl(struct file *file, unsigned cmd,
89bddce5 2322 unsigned long arg)
89bbfc95
SP
2323{
2324 struct socket *sock = file->private_data;
2325 int ret = -ENOIOCTLCMD;
87de87d5
DM
2326 struct sock *sk;
2327 struct net *net;
2328
2329 sk = sock->sk;
2330 net = sock_net(sk);
89bbfc95
SP
2331
2332 if (sock->ops->compat_ioctl)
2333 ret = sock->ops->compat_ioctl(sock, cmd, arg);
2334
87de87d5
DM
2335 if (ret == -ENOIOCTLCMD &&
2336 (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST))
2337 ret = compat_wext_handle_ioctl(net, cmd, arg);
2338
89bbfc95
SP
2339 return ret;
2340}
2341#endif
2342
ac5a488e
SS
2343int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen)
2344{
2345 return sock->ops->bind(sock, addr, addrlen);
2346}
2347
2348int kernel_listen(struct socket *sock, int backlog)
2349{
2350 return sock->ops->listen(sock, backlog);
2351}
2352
2353int kernel_accept(struct socket *sock, struct socket **newsock, int flags)
2354{
2355 struct sock *sk = sock->sk;
2356 int err;
2357
2358 err = sock_create_lite(sk->sk_family, sk->sk_type, sk->sk_protocol,
2359 newsock);
2360 if (err < 0)
2361 goto done;
2362
2363 err = sock->ops->accept(sock, *newsock, flags);
2364 if (err < 0) {
2365 sock_release(*newsock);
fa8705b0 2366 *newsock = NULL;
ac5a488e
SS
2367 goto done;
2368 }
2369
2370 (*newsock)->ops = sock->ops;
1b08534e 2371 __module_get((*newsock)->ops->owner);
ac5a488e
SS
2372
2373done:
2374 return err;
2375}
2376
2377int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,
4768fbcb 2378 int flags)
ac5a488e
SS
2379{
2380 return sock->ops->connect(sock, addr, addrlen, flags);
2381}
2382
2383int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
2384 int *addrlen)
2385{
2386 return sock->ops->getname(sock, addr, addrlen, 0);
2387}
2388
2389int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
2390 int *addrlen)
2391{
2392 return sock->ops->getname(sock, addr, addrlen, 1);
2393}
2394
2395int kernel_getsockopt(struct socket *sock, int level, int optname,
2396 char *optval, int *optlen)
2397{
2398 mm_segment_t oldfs = get_fs();
2399 int err;
2400
2401 set_fs(KERNEL_DS);
2402 if (level == SOL_SOCKET)
2403 err = sock_getsockopt(sock, level, optname, optval, optlen);
2404 else
2405 err = sock->ops->getsockopt(sock, level, optname, optval,
2406 optlen);
2407 set_fs(oldfs);
2408 return err;
2409}
2410
2411int kernel_setsockopt(struct socket *sock, int level, int optname,
b7058842 2412 char *optval, unsigned int optlen)
ac5a488e
SS
2413{
2414 mm_segment_t oldfs = get_fs();
2415 int err;
2416
2417 set_fs(KERNEL_DS);
2418 if (level == SOL_SOCKET)
2419 err = sock_setsockopt(sock, level, optname, optval, optlen);
2420 else
2421 err = sock->ops->setsockopt(sock, level, optname, optval,
2422 optlen);
2423 set_fs(oldfs);
2424 return err;
2425}
2426
2427int kernel_sendpage(struct socket *sock, struct page *page, int offset,
2428 size_t size, int flags)
2429{
2430 if (sock->ops->sendpage)
2431 return sock->ops->sendpage(sock, page, offset, size, flags);
2432
2433 return sock_no_sendpage(sock, page, offset, size, flags);
2434}
2435
2436int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg)
2437{
2438 mm_segment_t oldfs = get_fs();
2439 int err;
2440
2441 set_fs(KERNEL_DS);
2442 err = sock->ops->ioctl(sock, cmd, arg);
2443 set_fs(oldfs);
2444
2445 return err;
2446}
2447
91cf45f0
TM
2448int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how)
2449{
2450 return sock->ops->shutdown(sock, how);
2451}
2452
1da177e4
LT
2453EXPORT_SYMBOL(sock_create);
2454EXPORT_SYMBOL(sock_create_kern);
2455EXPORT_SYMBOL(sock_create_lite);
2456EXPORT_SYMBOL(sock_map_fd);
2457EXPORT_SYMBOL(sock_recvmsg);
2458EXPORT_SYMBOL(sock_register);
2459EXPORT_SYMBOL(sock_release);
2460EXPORT_SYMBOL(sock_sendmsg);
2461EXPORT_SYMBOL(sock_unregister);
2462EXPORT_SYMBOL(sock_wake_async);
2463EXPORT_SYMBOL(sockfd_lookup);
2464EXPORT_SYMBOL(kernel_sendmsg);
2465EXPORT_SYMBOL(kernel_recvmsg);
ac5a488e
SS
2466EXPORT_SYMBOL(kernel_bind);
2467EXPORT_SYMBOL(kernel_listen);
2468EXPORT_SYMBOL(kernel_accept);
2469EXPORT_SYMBOL(kernel_connect);
2470EXPORT_SYMBOL(kernel_getsockname);
2471EXPORT_SYMBOL(kernel_getpeername);
2472EXPORT_SYMBOL(kernel_getsockopt);
2473EXPORT_SYMBOL(kernel_setsockopt);
2474EXPORT_SYMBOL(kernel_sendpage);
2475EXPORT_SYMBOL(kernel_sock_ioctl);
91cf45f0 2476EXPORT_SYMBOL(kernel_sock_shutdown);