vserver 2.0 rc7
[linux-2.6.git] / net / socket.c
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>
7  *              Ross Biro
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)
45  *              Tigran Aivazian :       Made listen(2) backlog sanity checks 
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
56  *      paradigm. 
57  *
58  *      Based upon Swansea University Computer Society NET3.039
59  */
60
61 #include <linux/config.h>
62 #include <linux/mm.h>
63 #include <linux/smp_lock.h>
64 #include <linux/socket.h>
65 #include <linux/file.h>
66 #include <linux/net.h>
67 #include <linux/interrupt.h>
68 #include <linux/netdevice.h>
69 #include <linux/proc_fs.h>
70 #include <linux/seq_file.h>
71 #include <linux/wanrouter.h>
72 #include <linux/if_bridge.h>
73 #include <linux/init.h>
74 #include <linux/poll.h>
75 #include <linux/cache.h>
76 #include <linux/module.h>
77 #include <linux/highmem.h>
78 #include <linux/divert.h>
79 #include <linux/mount.h>
80 #include <linux/security.h>
81 #include <linux/syscalls.h>
82 #include <linux/compat.h>
83 #include <linux/kmod.h>
84
85 #ifdef CONFIG_NET_RADIO
86 #include <linux/wireless.h>             /* Note : will define WIRELESS_EXT */
87 #endif  /* CONFIG_NET_RADIO */
88
89 #include <asm/uaccess.h>
90 #include <asm/unistd.h>
91
92 #include <net/compat.h>
93
94 #include <net/sock.h>
95 #include <linux/netfilter.h>
96 #include <linux/vs_socket.h>
97
98 static int sock_no_open(struct inode *irrelevant, struct file *dontcare);
99 static ssize_t sock_aio_read(struct kiocb *iocb, char __user *buf,
100                          size_t size, loff_t pos);
101 static ssize_t sock_aio_write(struct kiocb *iocb, const char __user *buf,
102                           size_t size, loff_t pos);
103 static int sock_mmap(struct file *file, struct vm_area_struct * vma);
104
105 static int sock_close(struct inode *inode, struct file *file);
106 static unsigned int sock_poll(struct file *file,
107                               struct poll_table_struct *wait);
108 static long sock_ioctl(struct file *file,
109                       unsigned int cmd, unsigned long arg);
110 static int sock_fasync(int fd, struct file *filp, int on);
111 static ssize_t sock_readv(struct file *file, const struct iovec *vector,
112                           unsigned long count, loff_t *ppos);
113 static ssize_t sock_writev(struct file *file, const struct iovec *vector,
114                           unsigned long count, loff_t *ppos);
115 static ssize_t sock_sendpage(struct file *file, struct page *page,
116                              int offset, size_t size, loff_t *ppos, int more);
117
118
119 /*
120  *      Socket files have a set of 'special' operations as well as the generic file ones. These don't appear
121  *      in the operation structures but are done directly via the socketcall() multiplexor.
122  */
123
124 static struct file_operations socket_file_ops = {
125         .owner =        THIS_MODULE,
126         .llseek =       no_llseek,
127         .aio_read =     sock_aio_read,
128         .aio_write =    sock_aio_write,
129         .poll =         sock_poll,
130         .unlocked_ioctl = sock_ioctl,
131         .mmap =         sock_mmap,
132         .open =         sock_no_open,   /* special open code to disallow open via /proc */
133         .release =      sock_close,
134         .fasync =       sock_fasync,
135         .readv =        sock_readv,
136         .writev =       sock_writev,
137         .sendpage =     sock_sendpage
138 };
139
140 /*
141  *      The protocol list. Each protocol is registered in here.
142  */
143
144 static struct net_proto_family *net_families[NPROTO];
145
146 #if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
147 static atomic_t net_family_lockct = ATOMIC_INIT(0);
148 static DEFINE_SPINLOCK(net_family_lock);
149
150 /* The strategy is: modifications net_family vector are short, do not
151    sleep and veeery rare, but read access should be free of any exclusive
152    locks.
153  */
154
155 static void net_family_write_lock(void)
156 {
157         spin_lock(&net_family_lock);
158         while (atomic_read(&net_family_lockct) != 0) {
159                 spin_unlock(&net_family_lock);
160
161                 yield();
162
163                 spin_lock(&net_family_lock);
164         }
165 }
166
167 static __inline__ void net_family_write_unlock(void)
168 {
169         spin_unlock(&net_family_lock);
170 }
171
172 static __inline__ void net_family_read_lock(void)
173 {
174         atomic_inc(&net_family_lockct);
175         spin_unlock_wait(&net_family_lock);
176 }
177
178 static __inline__ void net_family_read_unlock(void)
179 {
180         atomic_dec(&net_family_lockct);
181 }
182
183 #else
184 #define net_family_write_lock() do { } while(0)
185 #define net_family_write_unlock() do { } while(0)
186 #define net_family_read_lock() do { } while(0)
187 #define net_family_read_unlock() do { } while(0)
188 #endif
189
190
191 /*
192  *      Statistics counters of the socket lists
193  */
194
195 static DEFINE_PER_CPU(int, sockets_in_use) = 0;
196
197 /*
198  *      Support routines. Move socket addresses back and forth across the kernel/user
199  *      divide and look after the messy bits.
200  */
201
202 #define MAX_SOCK_ADDR   128             /* 108 for Unix domain - 
203                                            16 for IP, 16 for IPX,
204                                            24 for IPv6,
205                                            about 80 for AX.25 
206                                            must be at least one bigger than
207                                            the AF_UNIX size (see net/unix/af_unix.c
208                                            :unix_mkname()).  
209                                          */
210                                          
211 /**
212  *      move_addr_to_kernel     -       copy a socket address into kernel space
213  *      @uaddr: Address in user space
214  *      @kaddr: Address in kernel space
215  *      @ulen: Length in user space
216  *
217  *      The address is copied into kernel space. If the provided address is
218  *      too long an error code of -EINVAL is returned. If the copy gives
219  *      invalid addresses -EFAULT is returned. On a success 0 is returned.
220  */
221
222 int move_addr_to_kernel(void __user *uaddr, int ulen, void *kaddr)
223 {
224         if(ulen<0||ulen>MAX_SOCK_ADDR)
225                 return -EINVAL;
226         if(ulen==0)
227                 return 0;
228         if(copy_from_user(kaddr,uaddr,ulen))
229                 return -EFAULT;
230         return 0;
231 }
232
233 /**
234  *      move_addr_to_user       -       copy an address to user space
235  *      @kaddr: kernel space address
236  *      @klen: length of address in kernel
237  *      @uaddr: user space address
238  *      @ulen: pointer to user length field
239  *
240  *      The value pointed to by ulen on entry is the buffer length available.
241  *      This is overwritten with the buffer space used. -EINVAL is returned
242  *      if an overlong buffer is specified or a negative buffer size. -EFAULT
243  *      is returned if either the buffer or the length field are not
244  *      accessible.
245  *      After copying the data up to the limit the user specifies, the true
246  *      length of the data is written over the length limit the user
247  *      specified. Zero is returned for a success.
248  */
249  
250 int move_addr_to_user(void *kaddr, int klen, void __user *uaddr, int __user *ulen)
251 {
252         int err;
253         int len;
254
255         if((err=get_user(len, ulen)))
256                 return err;
257         if(len>klen)
258                 len=klen;
259         if(len<0 || len> MAX_SOCK_ADDR)
260                 return -EINVAL;
261         if(len)
262         {
263                 if(copy_to_user(uaddr,kaddr,len))
264                         return -EFAULT;
265         }
266         /*
267          *      "fromlen shall refer to the value before truncation.."
268          *                      1003.1g
269          */
270         return __put_user(klen, ulen);
271 }
272
273 #define SOCKFS_MAGIC 0x534F434B
274
275 static kmem_cache_t * sock_inode_cachep;
276
277 static struct inode *sock_alloc_inode(struct super_block *sb)
278 {
279         struct socket_alloc *ei;
280         ei = (struct socket_alloc *)kmem_cache_alloc(sock_inode_cachep, SLAB_KERNEL);
281         if (!ei)
282                 return NULL;
283         init_waitqueue_head(&ei->socket.wait);
284         
285         ei->socket.fasync_list = NULL;
286         ei->socket.state = SS_UNCONNECTED;
287         ei->socket.flags = 0;
288         ei->socket.ops = NULL;
289         ei->socket.sk = NULL;
290         ei->socket.file = NULL;
291         ei->socket.flags = 0;
292
293         return &ei->vfs_inode;
294 }
295
296 static void sock_destroy_inode(struct inode *inode)
297 {
298         kmem_cache_free(sock_inode_cachep,
299                         container_of(inode, struct socket_alloc, vfs_inode));
300 }
301
302 static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
303 {
304         struct socket_alloc *ei = (struct socket_alloc *) foo;
305
306         if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
307             SLAB_CTOR_CONSTRUCTOR)
308                 inode_init_once(&ei->vfs_inode);
309 }
310  
311 static int init_inodecache(void)
312 {
313         sock_inode_cachep = kmem_cache_create("sock_inode_cache",
314                                 sizeof(struct socket_alloc),
315                                 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
316                                 init_once, NULL);
317         if (sock_inode_cachep == NULL)
318                 return -ENOMEM;
319         return 0;
320 }
321
322 static struct super_operations sockfs_ops = {
323         .alloc_inode =  sock_alloc_inode,
324         .destroy_inode =sock_destroy_inode,
325         .statfs =       simple_statfs,
326 };
327
328 static struct super_block *sockfs_get_sb(struct file_system_type *fs_type,
329         int flags, const char *dev_name, void *data)
330 {
331         return get_sb_pseudo(fs_type, "socket:", &sockfs_ops, SOCKFS_MAGIC);
332 }
333
334 static struct vfsmount *sock_mnt;
335
336 static struct file_system_type sock_fs_type = {
337         .name =         "sockfs",
338         .get_sb =       sockfs_get_sb,
339         .kill_sb =      kill_anon_super,
340 };
341 static int sockfs_delete_dentry(struct dentry *dentry)
342 {
343         return 1;
344 }
345 static struct dentry_operations sockfs_dentry_operations = {
346         .d_delete =     sockfs_delete_dentry,
347 };
348
349 /*
350  *      Obtains the first available file descriptor and sets it up for use.
351  *
352  *      This function creates file structure and maps it to fd space
353  *      of current process. On success it returns file descriptor
354  *      and file struct implicitly stored in sock->file.
355  *      Note that another thread may close file descriptor before we return
356  *      from this function. We use the fact that now we do not refer
357  *      to socket after mapping. If one day we will need it, this
358  *      function will increment ref. count on file by 1.
359  *
360  *      In any case returned fd MAY BE not valid!
361  *      This race condition is unavoidable
362  *      with shared fd spaces, we cannot solve it inside kernel,
363  *      but we take care of internal coherence yet.
364  */
365
366 int sock_map_fd(struct socket *sock)
367 {
368         int fd;
369         struct qstr this;
370         char name[32];
371
372         /*
373          *      Find a file descriptor suitable for return to the user. 
374          */
375
376         fd = get_unused_fd();
377         if (fd >= 0) {
378                 struct file *file = get_empty_filp();
379
380                 if (!file) {
381                         put_unused_fd(fd);
382                         fd = -ENFILE;
383                         goto out;
384                 }
385
386                 sprintf(name, "[%lu]", SOCK_INODE(sock)->i_ino);
387                 this.name = name;
388                 this.len = strlen(name);
389                 this.hash = SOCK_INODE(sock)->i_ino;
390
391                 file->f_dentry = d_alloc(sock_mnt->mnt_sb->s_root, &this);
392                 if (!file->f_dentry) {
393                         put_filp(file);
394                         put_unused_fd(fd);
395                         fd = -ENOMEM;
396                         goto out;
397                 }
398                 file->f_dentry->d_op = &sockfs_dentry_operations;
399                 d_add(file->f_dentry, SOCK_INODE(sock));
400                 file->f_vfsmnt = mntget(sock_mnt);
401                 file->f_mapping = file->f_dentry->d_inode->i_mapping;
402
403                 sock->file = file;
404                 file->f_op = SOCK_INODE(sock)->i_fop = &socket_file_ops;
405                 file->f_mode = FMODE_READ | FMODE_WRITE;
406                 file->f_flags = O_RDWR;
407                 file->f_pos = 0;
408                 fd_install(fd, file);
409         }
410
411 out:
412         return fd;
413 }
414
415 /**
416  *      sockfd_lookup   -       Go from a file number to its socket slot
417  *      @fd: file handle
418  *      @err: pointer to an error code return
419  *
420  *      The file handle passed in is locked and the socket it is bound
421  *      too is returned. If an error occurs the err pointer is overwritten
422  *      with a negative errno code and NULL is returned. The function checks
423  *      for both invalid handles and passing a handle which is not a socket.
424  *
425  *      On a success the socket object pointer is returned.
426  */
427
428 struct socket *sockfd_lookup(int fd, int *err)
429 {
430         struct file *file;
431         struct inode *inode;
432         struct socket *sock;
433
434         if (!(file = fget(fd)))
435         {
436                 *err = -EBADF;
437                 return NULL;
438         }
439
440         inode = file->f_dentry->d_inode;
441         if (!S_ISSOCK(inode->i_mode)) {
442                 *err = -ENOTSOCK;
443                 fput(file);
444                 return NULL;
445         }
446
447         sock = SOCKET_I(inode);
448         if (sock->file != file) {
449                 printk(KERN_ERR "socki_lookup: socket file changed!\n");
450                 sock->file = file;
451         }
452         return sock;
453 }
454
455 /**
456  *      sock_alloc      -       allocate a socket
457  *      
458  *      Allocate a new inode and socket object. The two are bound together
459  *      and initialised. The socket is then returned. If we are out of inodes
460  *      NULL is returned.
461  */
462
463 static struct socket *sock_alloc(void)
464 {
465         struct inode * inode;
466         struct socket * sock;
467
468         inode = new_inode(sock_mnt->mnt_sb);
469         if (!inode)
470                 return NULL;
471
472         sock = SOCKET_I(inode);
473
474         inode->i_mode = S_IFSOCK|S_IRWXUGO;
475         inode->i_uid = current->fsuid;
476         inode->i_gid = current->fsgid;
477
478         get_cpu_var(sockets_in_use)++;
479         put_cpu_var(sockets_in_use);
480         return sock;
481 }
482
483 /*
484  *      In theory you can't get an open on this inode, but /proc provides
485  *      a back door. Remember to keep it shut otherwise you'll let the
486  *      creepy crawlies in.
487  */
488   
489 static int sock_no_open(struct inode *irrelevant, struct file *dontcare)
490 {
491         return -ENXIO;
492 }
493
494 struct file_operations bad_sock_fops = {
495         .owner = THIS_MODULE,
496         .open = sock_no_open,
497 };
498
499 /**
500  *      sock_release    -       close a socket
501  *      @sock: socket to close
502  *
503  *      The socket is released from the protocol stack if it has a release
504  *      callback, and the inode is then released if the socket is bound to
505  *      an inode not a file. 
506  */
507  
508 void sock_release(struct socket *sock)
509 {
510         if (sock->ops) {
511                 struct module *owner = sock->ops->owner;
512
513                 sock->ops->release(sock);
514                 sock->ops = NULL;
515                 module_put(owner);
516         }
517
518         if (sock->fasync_list)
519                 printk(KERN_ERR "sock_release: fasync list not empty!\n");
520
521         get_cpu_var(sockets_in_use)--;
522         put_cpu_var(sockets_in_use);
523         if (!sock->file) {
524                 iput(SOCK_INODE(sock));
525                 return;
526         }
527         sock->file=NULL;
528 }
529
530 static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock, 
531                                  struct msghdr *msg, size_t size)
532 {
533         struct sock_iocb *si = kiocb_to_siocb(iocb);
534         int err, len;
535
536         si->sock = sock;
537         si->scm = NULL;
538         si->msg = msg;
539         si->size = size;
540
541         err = security_socket_sendmsg(sock, msg, size);
542         if (err)
543                 return err;
544
545         len = sock->ops->sendmsg(iocb, sock, msg, size);
546         if (sock->sk) {
547                 if (len == size)
548                         vx_sock_send(sock->sk, size);
549                 else
550                         vx_sock_fail(sock->sk, size);
551         }
552         vxdprintk(VXD_CBIT(net, 7),
553                 "__sock_sendmsg: %p[%p,%p,%p;%d]:%d/%d",
554                 sock, sock->sk,
555                 (sock->sk)?sock->sk->sk_nx_info:0,
556                 (sock->sk)?sock->sk->sk_vx_info:0,
557                 (sock->sk)?sock->sk->sk_xid:0,
558                 (unsigned int)size, len);
559         return len;
560 }
561
562 int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
563 {
564         struct kiocb iocb;
565         struct sock_iocb siocb;
566         int ret;
567
568         init_sync_kiocb(&iocb, NULL);
569         iocb.private = &siocb;
570         ret = __sock_sendmsg(&iocb, sock, msg, size);
571         if (-EIOCBQUEUED == ret)
572                 ret = wait_on_sync_kiocb(&iocb);
573         return ret;
574 }
575
576 int kernel_sendmsg(struct socket *sock, struct msghdr *msg,
577                    struct kvec *vec, size_t num, size_t size)
578 {
579         mm_segment_t oldfs = get_fs();
580         int result;
581
582         set_fs(KERNEL_DS);
583         /*
584          * the following is safe, since for compiler definitions of kvec and
585          * iovec are identical, yielding the same in-core layout and alignment
586          */
587         msg->msg_iov = (struct iovec *)vec,
588         msg->msg_iovlen = num;
589         result = sock_sendmsg(sock, msg, size);
590         set_fs(oldfs);
591         return result;
592 }
593
594 static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock, 
595                                  struct msghdr *msg, size_t size, int flags)
596 {
597         int err, len;
598         struct sock_iocb *si = kiocb_to_siocb(iocb);
599
600         si->sock = sock;
601         si->scm = NULL;
602         si->msg = msg;
603         si->size = size;
604         si->flags = flags;
605
606         err = security_socket_recvmsg(sock, msg, size, flags);
607         if (err)
608                 return err;
609
610         len = sock->ops->recvmsg(iocb, sock, msg, size, flags);
611         if ((len >= 0) && sock->sk)
612                 vx_sock_recv(sock->sk, len);
613         vxdprintk(VXD_CBIT(net, 7),
614                 "__sock_recvmsg: %p[%p,%p,%p;%d]:%d/%d",
615                 sock, sock->sk,
616                 (sock->sk)?sock->sk->sk_nx_info:0,
617                 (sock->sk)?sock->sk->sk_vx_info:0,
618                 (sock->sk)?sock->sk->sk_xid:0,
619                 (unsigned int)size, len);
620         return len;
621 }
622
623 int sock_recvmsg(struct socket *sock, struct msghdr *msg, 
624                  size_t size, int flags)
625 {
626         struct kiocb iocb;
627         struct sock_iocb siocb;
628         int ret;
629
630         init_sync_kiocb(&iocb, NULL);
631         iocb.private = &siocb;
632         ret = __sock_recvmsg(&iocb, sock, msg, size, flags);
633         if (-EIOCBQUEUED == ret)
634                 ret = wait_on_sync_kiocb(&iocb);
635         return ret;
636 }
637
638 int kernel_recvmsg(struct socket *sock, struct msghdr *msg, 
639                    struct kvec *vec, size_t num,
640                    size_t size, int flags)
641 {
642         mm_segment_t oldfs = get_fs();
643         int result;
644
645         set_fs(KERNEL_DS);
646         /*
647          * the following is safe, since for compiler definitions of kvec and
648          * iovec are identical, yielding the same in-core layout and alignment
649          */
650         msg->msg_iov = (struct iovec *)vec,
651         msg->msg_iovlen = num;
652         result = sock_recvmsg(sock, msg, size, flags);
653         set_fs(oldfs);
654         return result;
655 }
656
657 static void sock_aio_dtor(struct kiocb *iocb)
658 {
659         kfree(iocb->private);
660 }
661
662 /*
663  *      Read data from a socket. ubuf is a user mode pointer. We make sure the user
664  *      area ubuf...ubuf+size-1 is writable before asking the protocol.
665  */
666
667 static ssize_t sock_aio_read(struct kiocb *iocb, char __user *ubuf,
668                          size_t size, loff_t pos)
669 {
670         struct sock_iocb *x, siocb;
671         struct socket *sock;
672         int flags;
673
674         if (pos != 0)
675                 return -ESPIPE;
676         if (size==0)            /* Match SYS5 behaviour */
677                 return 0;
678
679         if (is_sync_kiocb(iocb))
680                 x = &siocb;
681         else {
682                 x = kmalloc(sizeof(struct sock_iocb), GFP_KERNEL);
683                 if (!x)
684                         return -ENOMEM;
685                 iocb->ki_dtor = sock_aio_dtor;
686         }
687         iocb->private = x;
688         x->kiocb = iocb;
689         sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode); 
690
691         x->async_msg.msg_name = NULL;
692         x->async_msg.msg_namelen = 0;
693         x->async_msg.msg_iov = &x->async_iov;
694         x->async_msg.msg_iovlen = 1;
695         x->async_msg.msg_control = NULL;
696         x->async_msg.msg_controllen = 0;
697         x->async_iov.iov_base = ubuf;
698         x->async_iov.iov_len = size;
699         flags = !(iocb->ki_filp->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
700
701         return __sock_recvmsg(iocb, sock, &x->async_msg, size, flags);
702 }
703
704
705 /*
706  *      Write data to a socket. We verify that the user area ubuf..ubuf+size-1
707  *      is readable by the user process.
708  */
709
710 static ssize_t sock_aio_write(struct kiocb *iocb, const char __user *ubuf,
711                           size_t size, loff_t pos)
712 {
713         struct sock_iocb *x, siocb;
714         struct socket *sock;
715         
716         if (pos != 0)
717                 return -ESPIPE;
718         if(size==0)             /* Match SYS5 behaviour */
719                 return 0;
720
721         if (is_sync_kiocb(iocb))
722                 x = &siocb;
723         else {
724                 x = kmalloc(sizeof(struct sock_iocb), GFP_KERNEL);
725                 if (!x)
726                         return -ENOMEM;
727                 iocb->ki_dtor = sock_aio_dtor;
728         }
729         iocb->private = x;
730         x->kiocb = iocb;
731         sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode); 
732
733         x->async_msg.msg_name = NULL;
734         x->async_msg.msg_namelen = 0;
735         x->async_msg.msg_iov = &x->async_iov;
736         x->async_msg.msg_iovlen = 1;
737         x->async_msg.msg_control = NULL;
738         x->async_msg.msg_controllen = 0;
739         x->async_msg.msg_flags = !(iocb->ki_filp->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
740         if (sock->type == SOCK_SEQPACKET)
741                 x->async_msg.msg_flags |= MSG_EOR;
742         x->async_iov.iov_base = (void __user *)ubuf;
743         x->async_iov.iov_len = size;
744         
745         return __sock_sendmsg(iocb, sock, &x->async_msg, size);
746 }
747
748 ssize_t sock_sendpage(struct file *file, struct page *page,
749                       int offset, size_t size, loff_t *ppos, int more)
750 {
751         struct socket *sock;
752         int flags;
753
754         sock = SOCKET_I(file->f_dentry->d_inode);
755
756         flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
757         if (more)
758                 flags |= MSG_MORE;
759
760         return sock->ops->sendpage(sock, page, offset, size, flags);
761 }
762
763 static int sock_readv_writev(int type, struct inode * inode,
764                              struct file * file, const struct iovec * iov,
765                              long count, size_t size)
766 {
767         struct msghdr msg;
768         struct socket *sock;
769
770         sock = SOCKET_I(inode);
771
772         msg.msg_name = NULL;
773         msg.msg_namelen = 0;
774         msg.msg_control = NULL;
775         msg.msg_controllen = 0;
776         msg.msg_iov = (struct iovec *) iov;
777         msg.msg_iovlen = count;
778         msg.msg_flags = (file->f_flags & O_NONBLOCK) ? MSG_DONTWAIT : 0;
779
780         /* read() does a VERIFY_WRITE */
781         if (type == VERIFY_WRITE)
782                 return sock_recvmsg(sock, &msg, size, msg.msg_flags);
783
784         if (sock->type == SOCK_SEQPACKET)
785                 msg.msg_flags |= MSG_EOR;
786
787         return sock_sendmsg(sock, &msg, size);
788 }
789
790 static ssize_t sock_readv(struct file *file, const struct iovec *vector,
791                           unsigned long count, loff_t *ppos)
792 {
793         size_t tot_len = 0;
794         int i;
795         for (i = 0 ; i < count ; i++)
796                 tot_len += vector[i].iov_len;
797         return sock_readv_writev(VERIFY_WRITE, file->f_dentry->d_inode,
798                                  file, vector, count, tot_len);
799 }
800         
801 static ssize_t sock_writev(struct file *file, const struct iovec *vector,
802                            unsigned long count, loff_t *ppos)
803 {
804         size_t tot_len = 0;
805         int i;
806         for (i = 0 ; i < count ; i++)
807                 tot_len += vector[i].iov_len;
808         return sock_readv_writev(VERIFY_READ, file->f_dentry->d_inode,
809                                  file, vector, count, tot_len);
810 }
811
812
813 /*
814  * Atomic setting of ioctl hooks to avoid race
815  * with module unload.
816  */
817
818 static DECLARE_MUTEX(br_ioctl_mutex);
819 static int (*br_ioctl_hook)(unsigned int cmd, void __user *arg) = NULL;
820
821 void brioctl_set(int (*hook)(unsigned int, void __user *))
822 {
823         down(&br_ioctl_mutex);
824         br_ioctl_hook = hook;
825         up(&br_ioctl_mutex);
826 }
827 EXPORT_SYMBOL(brioctl_set);
828
829 static DECLARE_MUTEX(vlan_ioctl_mutex);
830 static int (*vlan_ioctl_hook)(void __user *arg);
831
832 void vlan_ioctl_set(int (*hook)(void __user *))
833 {
834         down(&vlan_ioctl_mutex);
835         vlan_ioctl_hook = hook;
836         up(&vlan_ioctl_mutex);
837 }
838 EXPORT_SYMBOL(vlan_ioctl_set);
839
840 static DECLARE_MUTEX(dlci_ioctl_mutex);
841 static int (*dlci_ioctl_hook)(unsigned int, void __user *);
842
843 void dlci_ioctl_set(int (*hook)(unsigned int, void __user *))
844 {
845         down(&dlci_ioctl_mutex);
846         dlci_ioctl_hook = hook;
847         up(&dlci_ioctl_mutex);
848 }
849 EXPORT_SYMBOL(dlci_ioctl_set);
850
851 /*
852  *      With an ioctl, arg may well be a user mode pointer, but we don't know
853  *      what to do with it - that's up to the protocol still.
854  */
855
856 static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
857 {
858         struct socket *sock;
859         void __user *argp = (void __user *)arg;
860         int pid, err;
861
862         sock = SOCKET_I(file->f_dentry->d_inode);
863         if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
864                 err = dev_ioctl(cmd, argp);
865         } else
866 #ifdef WIRELESS_EXT
867         if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
868                 err = dev_ioctl(cmd, argp);
869         } else
870 #endif  /* WIRELESS_EXT */
871         switch (cmd) {
872                 case FIOSETOWN:
873                 case SIOCSPGRP:
874                         err = -EFAULT;
875                         if (get_user(pid, (int __user *)argp))
876                                 break;
877                         err = f_setown(sock->file, pid, 1);
878                         break;
879                 case FIOGETOWN:
880                 case SIOCGPGRP:
881                         err = put_user(sock->file->f_owner.pid, (int __user *)argp);
882                         break;
883                 case SIOCGIFBR:
884                 case SIOCSIFBR:
885                 case SIOCBRADDBR:
886                 case SIOCBRDELBR:
887                         err = -ENOPKG;
888                         if (!br_ioctl_hook)
889                                 request_module("bridge");
890
891                         down(&br_ioctl_mutex);
892                         if (br_ioctl_hook) 
893                                 err = br_ioctl_hook(cmd, argp);
894                         up(&br_ioctl_mutex);
895                         break;
896                 case SIOCGIFVLAN:
897                 case SIOCSIFVLAN:
898                         err = -ENOPKG;
899                         if (!vlan_ioctl_hook)
900                                 request_module("8021q");
901
902                         down(&vlan_ioctl_mutex);
903                         if (vlan_ioctl_hook)
904                                 err = vlan_ioctl_hook(argp);
905                         up(&vlan_ioctl_mutex);
906                         break;
907                 case SIOCGIFDIVERT:
908                 case SIOCSIFDIVERT:
909                 /* Convert this to call through a hook */
910                         err = divert_ioctl(cmd, argp);
911                         break;
912                 case SIOCADDDLCI:
913                 case SIOCDELDLCI:
914                         err = -ENOPKG;
915                         if (!dlci_ioctl_hook)
916                                 request_module("dlci");
917
918                         if (dlci_ioctl_hook) {
919                                 down(&dlci_ioctl_mutex);
920                                 err = dlci_ioctl_hook(cmd, argp);
921                                 up(&dlci_ioctl_mutex);
922                         }
923                         break;
924                 default:
925                         err = sock->ops->ioctl(sock, cmd, arg);
926                         break;
927         }
928         return err;
929 }
930
931 int sock_create_lite(int family, int type, int protocol, struct socket **res)
932 {
933         int err;
934         struct socket *sock = NULL;
935         
936         err = security_socket_create(family, type, protocol, 1);
937         if (err)
938                 goto out;
939
940         sock = sock_alloc();
941         if (!sock) {
942                 err = -ENOMEM;
943                 goto out;
944         }
945
946         security_socket_post_create(sock, family, type, protocol, 1);
947         sock->type = type;
948 out:
949         *res = sock;
950         return err;
951 }
952
953 /* No kernel lock held - perfect */
954 static unsigned int sock_poll(struct file *file, poll_table * wait)
955 {
956         struct socket *sock;
957
958         /*
959          *      We can't return errors to poll, so it's either yes or no. 
960          */
961         sock = SOCKET_I(file->f_dentry->d_inode);
962         return sock->ops->poll(file, sock, wait);
963 }
964
965 static int sock_mmap(struct file * file, struct vm_area_struct * vma)
966 {
967         struct socket *sock = SOCKET_I(file->f_dentry->d_inode);
968
969         return sock->ops->mmap(file, sock, vma);
970 }
971
972 int sock_close(struct inode *inode, struct file *filp)
973 {
974         /*
975          *      It was possible the inode is NULL we were 
976          *      closing an unfinished socket. 
977          */
978
979         if (!inode)
980         {
981                 printk(KERN_DEBUG "sock_close: NULL inode\n");
982                 return 0;
983         }
984         sock_fasync(-1, filp, 0);
985         sock_release(SOCKET_I(inode));
986         return 0;
987 }
988
989 /*
990  *      Update the socket async list
991  *
992  *      Fasync_list locking strategy.
993  *
994  *      1. fasync_list is modified only under process context socket lock
995  *         i.e. under semaphore.
996  *      2. fasync_list is used under read_lock(&sk->sk_callback_lock)
997  *         or under socket lock.
998  *      3. fasync_list can be used from softirq context, so that
999  *         modification under socket lock have to be enhanced with
1000  *         write_lock_bh(&sk->sk_callback_lock).
1001  *                                                      --ANK (990710)
1002  */
1003
1004 static int sock_fasync(int fd, struct file *filp, int on)
1005 {
1006         struct fasync_struct *fa, *fna=NULL, **prev;
1007         struct socket *sock;
1008         struct sock *sk;
1009
1010         if (on)
1011         {
1012                 fna=(struct fasync_struct *)kmalloc(sizeof(struct fasync_struct), GFP_KERNEL);
1013                 if(fna==NULL)
1014                         return -ENOMEM;
1015         }
1016
1017         sock = SOCKET_I(filp->f_dentry->d_inode);
1018
1019         if ((sk=sock->sk) == NULL) {
1020                 kfree(fna);
1021                 return -EINVAL;
1022         }
1023
1024         lock_sock(sk);
1025
1026         prev=&(sock->fasync_list);
1027
1028         for (fa=*prev; fa!=NULL; prev=&fa->fa_next,fa=*prev)
1029                 if (fa->fa_file==filp)
1030                         break;
1031
1032         if(on)
1033         {
1034                 if(fa!=NULL)
1035                 {
1036                         write_lock_bh(&sk->sk_callback_lock);
1037                         fa->fa_fd=fd;
1038                         write_unlock_bh(&sk->sk_callback_lock);
1039
1040                         kfree(fna);
1041                         goto out;
1042                 }
1043                 fna->fa_file=filp;
1044                 fna->fa_fd=fd;
1045                 fna->magic=FASYNC_MAGIC;
1046                 fna->fa_next=sock->fasync_list;
1047                 write_lock_bh(&sk->sk_callback_lock);
1048                 sock->fasync_list=fna;
1049                 write_unlock_bh(&sk->sk_callback_lock);
1050         }
1051         else
1052         {
1053                 if (fa!=NULL)
1054                 {
1055                         write_lock_bh(&sk->sk_callback_lock);
1056                         *prev=fa->fa_next;
1057                         write_unlock_bh(&sk->sk_callback_lock);
1058                         kfree(fa);
1059                 }
1060         }
1061
1062 out:
1063         release_sock(sock->sk);
1064         return 0;
1065 }
1066
1067 /* This function may be called only under socket lock or callback_lock */
1068
1069 int sock_wake_async(struct socket *sock, int how, int band)
1070 {
1071         if (!sock || !sock->fasync_list)
1072                 return -1;
1073         switch (how)
1074         {
1075         case 1:
1076                 
1077                 if (test_bit(SOCK_ASYNC_WAITDATA, &sock->flags))
1078                         break;
1079                 goto call_kill;
1080         case 2:
1081                 if (!test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags))
1082                         break;
1083                 /* fall through */
1084         case 0:
1085         call_kill:
1086                 __kill_fasync(sock->fasync_list, SIGIO, band);
1087                 break;
1088         case 3:
1089                 __kill_fasync(sock->fasync_list, SIGURG, band);
1090         }
1091         return 0;
1092 }
1093
1094 static int __sock_create(int family, int type, int protocol, struct socket **res, int kern)
1095 {
1096         int err;
1097         struct socket *sock;
1098
1099         /*
1100          *      Check protocol is in range
1101          */
1102         if (family < 0 || family >= NPROTO)
1103                 return -EAFNOSUPPORT;
1104         if (type < 0 || type >= SOCK_MAX)
1105                 return -EINVAL;
1106
1107         /* disable IPv6 inside vservers for now */
1108         if (family == PF_INET6 && !vx_check(0, VX_ADMIN))
1109                 return -EAFNOSUPPORT;
1110
1111         /* Compatibility.
1112
1113            This uglymoron is moved from INET layer to here to avoid
1114            deadlock in module load.
1115          */
1116         if (family == PF_INET && type == SOCK_PACKET) {
1117                 static int warned; 
1118                 if (!warned) {
1119                         warned = 1;
1120                         printk(KERN_INFO "%s uses obsolete (PF_INET,SOCK_PACKET)\n", current->comm);
1121                 }
1122                 family = PF_PACKET;
1123         }
1124
1125         err = security_socket_create(family, type, protocol, kern);
1126         if (err)
1127                 return err;
1128                 
1129 #if defined(CONFIG_KMOD)
1130         /* Attempt to load a protocol module if the find failed. 
1131          * 
1132          * 12/09/1996 Marcin: But! this makes REALLY only sense, if the user 
1133          * requested real, full-featured networking support upon configuration.
1134          * Otherwise module support will break!
1135          */
1136         if (net_families[family]==NULL)
1137         {
1138                 request_module("net-pf-%d",family);
1139         }
1140 #endif
1141
1142         net_family_read_lock();
1143         if (net_families[family] == NULL) {
1144                 err = -EAFNOSUPPORT;
1145                 goto out;
1146         }
1147
1148 /*
1149  *      Allocate the socket and allow the family to set things up. if
1150  *      the protocol is 0, the family is instructed to select an appropriate
1151  *      default.
1152  */
1153
1154         if (!(sock = sock_alloc())) {
1155                 printk(KERN_WARNING "socket: no more sockets\n");
1156                 err = -ENFILE;          /* Not exactly a match, but its the
1157                                            closest posix thing */
1158                 goto out;
1159         }
1160
1161         sock->type  = type;
1162
1163         /*
1164          * We will call the ->create function, that possibly is in a loadable
1165          * module, so we have to bump that loadable module refcnt first.
1166          */
1167         err = -EAFNOSUPPORT;
1168         if (!try_module_get(net_families[family]->owner))
1169                 goto out_release;
1170
1171         if ((err = net_families[family]->create(sock, protocol)) < 0)
1172                 goto out_module_put;
1173         /*
1174          * Now to bump the refcnt of the [loadable] module that owns this
1175          * socket at sock_release time we decrement its refcnt.
1176          */
1177         if (!try_module_get(sock->ops->owner)) {
1178                 sock->ops = NULL;
1179                 goto out_module_put;
1180         }
1181         /*
1182          * Now that we're done with the ->create function, the [loadable]
1183          * module can have its refcnt decremented
1184          */
1185         module_put(net_families[family]->owner);
1186         *res = sock;
1187         security_socket_post_create(sock, family, type, protocol, kern);
1188
1189 out:
1190         net_family_read_unlock();
1191         return err;
1192 out_module_put:
1193         module_put(net_families[family]->owner);
1194 out_release:
1195         sock_release(sock);
1196         goto out;
1197 }
1198
1199 int sock_create(int family, int type, int protocol, struct socket **res)
1200 {
1201         return __sock_create(family, type, protocol, res, 0);
1202 }
1203
1204 int sock_create_kern(int family, int type, int protocol, struct socket **res)
1205 {
1206         return __sock_create(family, type, protocol, res, 1);
1207 }
1208
1209 asmlinkage long sys_socket(int family, int type, int protocol)
1210 {
1211         int retval;
1212         struct socket *sock;
1213
1214         retval = sock_create(family, type, protocol, &sock);
1215         if (retval < 0)
1216                 goto out;
1217
1218         set_bit(SOCK_USER_SOCKET, &sock->flags);
1219         retval = sock_map_fd(sock);
1220         if (retval < 0)
1221                 goto out_release;
1222
1223 out:
1224         /* It may be already another descriptor 8) Not kernel problem. */
1225         return retval;
1226
1227 out_release:
1228         sock_release(sock);
1229         return retval;
1230 }
1231
1232 /*
1233  *      Create a pair of connected sockets.
1234  */
1235
1236 asmlinkage long sys_socketpair(int family, int type, int protocol, int __user *usockvec)
1237 {
1238         struct socket *sock1, *sock2;
1239         int fd1, fd2, err;
1240
1241         /*
1242          * Obtain the first socket and check if the underlying protocol
1243          * supports the socketpair call.
1244          */
1245
1246         err = sock_create(family, type, protocol, &sock1);
1247         if (err < 0)
1248                 goto out;
1249         set_bit(SOCK_USER_SOCKET, &sock1->flags);
1250
1251         err = sock_create(family, type, protocol, &sock2);
1252         if (err < 0)
1253                 goto out_release_1;
1254         set_bit(SOCK_USER_SOCKET, &sock2->flags);
1255
1256         err = sock1->ops->socketpair(sock1, sock2);
1257         if (err < 0) 
1258                 goto out_release_both;
1259
1260         fd1 = fd2 = -1;
1261
1262         err = sock_map_fd(sock1);
1263         if (err < 0)
1264                 goto out_release_both;
1265         fd1 = err;
1266
1267         err = sock_map_fd(sock2);
1268         if (err < 0)
1269                 goto out_close_1;
1270         fd2 = err;
1271
1272         /* fd1 and fd2 may be already another descriptors.
1273          * Not kernel problem.
1274          */
1275
1276         err = put_user(fd1, &usockvec[0]); 
1277         if (!err)
1278                 err = put_user(fd2, &usockvec[1]);
1279         if (!err)
1280                 return 0;
1281
1282         sys_close(fd2);
1283         sys_close(fd1);
1284         return err;
1285
1286 out_close_1:
1287         sock_release(sock2);
1288         sys_close(fd1);
1289         return err;
1290
1291 out_release_both:
1292         sock_release(sock2);
1293 out_release_1:
1294         sock_release(sock1);
1295 out:
1296         return err;
1297 }
1298
1299
1300 /*
1301  *      Bind a name to a socket. Nothing much to do here since it's
1302  *      the protocol's responsibility to handle the local address.
1303  *
1304  *      We move the socket address to kernel space before we call
1305  *      the protocol layer (having also checked the address is ok).
1306  */
1307
1308 asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen)
1309 {
1310         struct socket *sock;
1311         char address[MAX_SOCK_ADDR];
1312         int err;
1313
1314         if((sock = sockfd_lookup(fd,&err))!=NULL)
1315         {
1316                 if((err=move_addr_to_kernel(umyaddr,addrlen,address))>=0) {
1317                         err = security_socket_bind(sock, (struct sockaddr *)address, addrlen);
1318                         if (err) {
1319                                 sockfd_put(sock);
1320                                 return err;
1321                         }
1322                         err = sock->ops->bind(sock, (struct sockaddr *)address, addrlen);
1323                 }
1324                 sockfd_put(sock);
1325         }                       
1326         return err;
1327 }
1328
1329
1330 /*
1331  *      Perform a listen. Basically, we allow the protocol to do anything
1332  *      necessary for a listen, and if that works, we mark the socket as
1333  *      ready for listening.
1334  */
1335
1336 int sysctl_somaxconn = SOMAXCONN;
1337
1338 asmlinkage long sys_listen(int fd, int backlog)
1339 {
1340         struct socket *sock;
1341         int err;
1342         
1343         if ((sock = sockfd_lookup(fd, &err)) != NULL) {
1344                 if ((unsigned) backlog > sysctl_somaxconn)
1345                         backlog = sysctl_somaxconn;
1346
1347                 err = security_socket_listen(sock, backlog);
1348                 if (err) {
1349                         sockfd_put(sock);
1350                         return err;
1351                 }
1352
1353                 err=sock->ops->listen(sock, backlog);
1354                 sockfd_put(sock);
1355         }
1356         return err;
1357 }
1358
1359
1360 /*
1361  *      For accept, we attempt to create a new socket, set up the link
1362  *      with the client, wake up the client, then return the new
1363  *      connected fd. We collect the address of the connector in kernel
1364  *      space and move it to user at the very end. This is unclean because
1365  *      we open the socket then return an error.
1366  *
1367  *      1003.1g adds the ability to recvmsg() to query connection pending
1368  *      status to recvmsg. We need to add that support in a way thats
1369  *      clean when we restucture accept also.
1370  */
1371
1372 asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, int __user *upeer_addrlen)
1373 {
1374         struct socket *sock, *newsock;
1375         int err, len;
1376         char address[MAX_SOCK_ADDR];
1377
1378         sock = sockfd_lookup(fd, &err);
1379         if (!sock)
1380                 goto out;
1381
1382         err = -ENFILE;
1383         if (!(newsock = sock_alloc())) 
1384                 goto out_put;
1385
1386         newsock->type = sock->type;
1387         newsock->ops = sock->ops;
1388
1389         err = security_socket_accept(sock, newsock);
1390         if (err)
1391                 goto out_release;
1392
1393         /*
1394          * We don't need try_module_get here, as the listening socket (sock)
1395          * has the protocol module (sock->ops->owner) held.
1396          */
1397         __module_get(newsock->ops->owner);
1398
1399         err = sock->ops->accept(sock, newsock, sock->file->f_flags);
1400         if (err < 0)
1401                 goto out_release;
1402
1403         if (upeer_sockaddr) {
1404                 if(newsock->ops->getname(newsock, (struct sockaddr *)address, &len, 2)<0) {
1405                         err = -ECONNABORTED;
1406                         goto out_release;
1407                 }
1408                 err = move_addr_to_user(address, len, upeer_sockaddr, upeer_addrlen);
1409                 if (err < 0)
1410                         goto out_release;
1411         }
1412
1413         /* File flags are not inherited via accept() unlike another OSes. */
1414
1415         if ((err = sock_map_fd(newsock)) < 0)
1416                 goto out_release;
1417
1418         security_socket_post_accept(sock, newsock);
1419
1420 out_put:
1421         sockfd_put(sock);
1422 out:
1423         return err;
1424 out_release:
1425         sock_release(newsock);
1426         goto out_put;
1427 }
1428
1429
1430 /*
1431  *      Attempt to connect to a socket with the server address.  The address
1432  *      is in user space so we verify it is OK and move it to kernel space.
1433  *
1434  *      For 1003.1g we need to add clean support for a bind to AF_UNSPEC to
1435  *      break bindings
1436  *
1437  *      NOTE: 1003.1g draft 6.3 is broken with respect to AX.25/NetROM and
1438  *      other SEQPACKET protocols that take time to connect() as it doesn't
1439  *      include the -EINPROGRESS status for such sockets.
1440  */
1441
1442 asmlinkage long sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen)
1443 {
1444         struct socket *sock;
1445         char address[MAX_SOCK_ADDR];
1446         int err;
1447
1448         sock = sockfd_lookup(fd, &err);
1449         if (!sock)
1450                 goto out;
1451         err = move_addr_to_kernel(uservaddr, addrlen, address);
1452         if (err < 0)
1453                 goto out_put;
1454
1455         err = security_socket_connect(sock, (struct sockaddr *)address, addrlen);
1456         if (err)
1457                 goto out_put;
1458
1459         err = sock->ops->connect(sock, (struct sockaddr *) address, addrlen,
1460                                  sock->file->f_flags);
1461 out_put:
1462         sockfd_put(sock);
1463 out:
1464         return err;
1465 }
1466
1467 /*
1468  *      Get the local address ('name') of a socket object. Move the obtained
1469  *      name to user space.
1470  */
1471
1472 asmlinkage long sys_getsockname(int fd, struct sockaddr __user *usockaddr, int __user *usockaddr_len)
1473 {
1474         struct socket *sock;
1475         char address[MAX_SOCK_ADDR];
1476         int len, err;
1477         
1478         sock = sockfd_lookup(fd, &err);
1479         if (!sock)
1480                 goto out;
1481
1482         err = security_socket_getsockname(sock);
1483         if (err)
1484                 goto out_put;
1485
1486         err = sock->ops->getname(sock, (struct sockaddr *)address, &len, 0);
1487         if (err)
1488                 goto out_put;
1489         err = move_addr_to_user(address, len, usockaddr, usockaddr_len);
1490
1491 out_put:
1492         sockfd_put(sock);
1493 out:
1494         return err;
1495 }
1496
1497 /*
1498  *      Get the remote address ('name') of a socket object. Move the obtained
1499  *      name to user space.
1500  */
1501
1502 asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr, int __user *usockaddr_len)
1503 {
1504         struct socket *sock;
1505         char address[MAX_SOCK_ADDR];
1506         int len, err;
1507
1508         if ((sock = sockfd_lookup(fd, &err))!=NULL)
1509         {
1510                 err = security_socket_getpeername(sock);
1511                 if (err) {
1512                         sockfd_put(sock);
1513                         return err;
1514                 }
1515
1516                 err = sock->ops->getname(sock, (struct sockaddr *)address, &len, 1);
1517                 if (!err)
1518                         err=move_addr_to_user(address,len, usockaddr, usockaddr_len);
1519                 sockfd_put(sock);
1520         }
1521         return err;
1522 }
1523
1524 /*
1525  *      Send a datagram to a given address. We move the address into kernel
1526  *      space and check the user space data area is readable before invoking
1527  *      the protocol.
1528  */
1529
1530 asmlinkage long sys_sendto(int fd, void __user * buff, size_t len, unsigned flags,
1531                            struct sockaddr __user *addr, int addr_len)
1532 {
1533         struct socket *sock;
1534         char address[MAX_SOCK_ADDR];
1535         int err;
1536         struct msghdr msg;
1537         struct iovec iov;
1538         
1539         sock = sockfd_lookup(fd, &err);
1540         if (!sock)
1541                 goto out;
1542         iov.iov_base=buff;
1543         iov.iov_len=len;
1544         msg.msg_name=NULL;
1545         msg.msg_iov=&iov;
1546         msg.msg_iovlen=1;
1547         msg.msg_control=NULL;
1548         msg.msg_controllen=0;
1549         msg.msg_namelen=0;
1550         if(addr)
1551         {
1552                 err = move_addr_to_kernel(addr, addr_len, address);
1553                 if (err < 0)
1554                         goto out_put;
1555                 msg.msg_name=address;
1556                 msg.msg_namelen=addr_len;
1557         }
1558         if (sock->file->f_flags & O_NONBLOCK)
1559                 flags |= MSG_DONTWAIT;
1560         msg.msg_flags = flags;
1561         err = sock_sendmsg(sock, &msg, len);
1562
1563 out_put:                
1564         sockfd_put(sock);
1565 out:
1566         return err;
1567 }
1568
1569 /*
1570  *      Send a datagram down a socket. 
1571  */
1572
1573 asmlinkage long sys_send(int fd, void __user * buff, size_t len, unsigned flags)
1574 {
1575         return sys_sendto(fd, buff, len, flags, NULL, 0);
1576 }
1577
1578 /*
1579  *      Receive a frame from the socket and optionally record the address of the 
1580  *      sender. We verify the buffers are writable and if needed move the
1581  *      sender address from kernel to user space.
1582  */
1583
1584 asmlinkage long sys_recvfrom(int fd, void __user * ubuf, size_t size, unsigned flags,
1585                              struct sockaddr __user *addr, int __user *addr_len)
1586 {
1587         struct socket *sock;
1588         struct iovec iov;
1589         struct msghdr msg;
1590         char address[MAX_SOCK_ADDR];
1591         int err,err2;
1592
1593         sock = sockfd_lookup(fd, &err);
1594         if (!sock)
1595                 goto out;
1596
1597         msg.msg_control=NULL;
1598         msg.msg_controllen=0;
1599         msg.msg_iovlen=1;
1600         msg.msg_iov=&iov;
1601         iov.iov_len=size;
1602         iov.iov_base=ubuf;
1603         msg.msg_name=address;
1604         msg.msg_namelen=MAX_SOCK_ADDR;
1605         if (sock->file->f_flags & O_NONBLOCK)
1606                 flags |= MSG_DONTWAIT;
1607         err=sock_recvmsg(sock, &msg, size, flags);
1608
1609         if(err >= 0 && addr != NULL)
1610         {
1611                 err2=move_addr_to_user(address, msg.msg_namelen, addr, addr_len);
1612                 if(err2<0)
1613                         err=err2;
1614         }
1615         sockfd_put(sock);                       
1616 out:
1617         return err;
1618 }
1619
1620 /*
1621  *      Receive a datagram from a socket. 
1622  */
1623
1624 asmlinkage long sys_recv(int fd, void __user * ubuf, size_t size, unsigned flags)
1625 {
1626         return sys_recvfrom(fd, ubuf, size, flags, NULL, NULL);
1627 }
1628
1629 /*
1630  *      Set a socket option. Because we don't know the option lengths we have
1631  *      to pass the user mode parameter for the protocols to sort out.
1632  */
1633
1634 asmlinkage long sys_setsockopt(int fd, int level, int optname, char __user *optval, int optlen)
1635 {
1636         int err;
1637         struct socket *sock;
1638
1639         if (optlen < 0)
1640                 return -EINVAL;
1641                         
1642         if ((sock = sockfd_lookup(fd, &err))!=NULL)
1643         {
1644                 err = security_socket_setsockopt(sock,level,optname);
1645                 if (err) {
1646                         sockfd_put(sock);
1647                         return err;
1648                 }
1649
1650                 if (level == SOL_SOCKET)
1651                         err=sock_setsockopt(sock,level,optname,optval,optlen);
1652                 else
1653                         err=sock->ops->setsockopt(sock, level, optname, optval, optlen);
1654                 sockfd_put(sock);
1655         }
1656         return err;
1657 }
1658
1659 /*
1660  *      Get a socket option. Because we don't know the option lengths we have
1661  *      to pass a user mode parameter for the protocols to sort out.
1662  */
1663
1664 asmlinkage long sys_getsockopt(int fd, int level, int optname, char __user *optval, int __user *optlen)
1665 {
1666         int err;
1667         struct socket *sock;
1668
1669         if ((sock = sockfd_lookup(fd, &err))!=NULL)
1670         {
1671                 err = security_socket_getsockopt(sock, level, 
1672                                                            optname);
1673                 if (err) {
1674                         sockfd_put(sock);
1675                         return err;
1676                 }
1677
1678                 if (level == SOL_SOCKET)
1679                         err=sock_getsockopt(sock,level,optname,optval,optlen);
1680                 else
1681                         err=sock->ops->getsockopt(sock, level, optname, optval, optlen);
1682                 sockfd_put(sock);
1683         }
1684         return err;
1685 }
1686
1687
1688 /*
1689  *      Shutdown a socket.
1690  */
1691
1692 asmlinkage long sys_shutdown(int fd, int how)
1693 {
1694         int err;
1695         struct socket *sock;
1696
1697         if ((sock = sockfd_lookup(fd, &err))!=NULL)
1698         {
1699                 err = security_socket_shutdown(sock, how);
1700                 if (err) {
1701                         sockfd_put(sock);
1702                         return err;
1703                 }
1704                                 
1705                 err=sock->ops->shutdown(sock, how);
1706                 sockfd_put(sock);
1707         }
1708         return err;
1709 }
1710
1711 /* A couple of helpful macros for getting the address of the 32/64 bit 
1712  * fields which are the same type (int / unsigned) on our platforms.
1713  */
1714 #define COMPAT_MSG(msg, member) ((MSG_CMSG_COMPAT & flags) ? &msg##_compat->member : &msg->member)
1715 #define COMPAT_NAMELEN(msg)     COMPAT_MSG(msg, msg_namelen)
1716 #define COMPAT_FLAGS(msg)       COMPAT_MSG(msg, msg_flags)
1717
1718
1719 /*
1720  *      BSD sendmsg interface
1721  */
1722
1723 asmlinkage long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags)
1724 {
1725         struct compat_msghdr __user *msg_compat = (struct compat_msghdr __user *)msg;
1726         struct socket *sock;
1727         char address[MAX_SOCK_ADDR];
1728         struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
1729         unsigned char ctl[sizeof(struct cmsghdr) + 20]; /* 20 is size of ipv6_pktinfo */
1730         unsigned char *ctl_buf = ctl;
1731         struct msghdr msg_sys;
1732         int err, ctl_len, iov_size, total_len;
1733         
1734         err = -EFAULT;
1735         if (MSG_CMSG_COMPAT & flags) {
1736                 if (get_compat_msghdr(&msg_sys, msg_compat))
1737                         return -EFAULT;
1738         } else if (copy_from_user(&msg_sys, msg, sizeof(struct msghdr)))
1739                 return -EFAULT;
1740
1741         sock = sockfd_lookup(fd, &err);
1742         if (!sock) 
1743                 goto out;
1744
1745         /* do not move before msg_sys is valid */
1746         err = -EMSGSIZE;
1747         if (msg_sys.msg_iovlen > UIO_MAXIOV)
1748                 goto out_put;
1749
1750         /* Check whether to allocate the iovec area*/
1751         err = -ENOMEM;
1752         iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
1753         if (msg_sys.msg_iovlen > UIO_FASTIOV) {
1754                 iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
1755                 if (!iov)
1756                         goto out_put;
1757         }
1758
1759         /* This will also move the address data into kernel space */
1760         if (MSG_CMSG_COMPAT & flags) {
1761                 err = verify_compat_iovec(&msg_sys, iov, address, VERIFY_READ);
1762         } else
1763                 err = verify_iovec(&msg_sys, iov, address, VERIFY_READ);
1764         if (err < 0) 
1765                 goto out_freeiov;
1766         total_len = err;
1767
1768         err = -ENOBUFS;
1769
1770         if (msg_sys.msg_controllen > INT_MAX)
1771                 goto out_freeiov;
1772         ctl_len = msg_sys.msg_controllen; 
1773         if ((MSG_CMSG_COMPAT & flags) && ctl_len) {
1774                 err = cmsghdr_from_user_compat_to_kern(&msg_sys, ctl, sizeof(ctl));
1775                 if (err)
1776                         goto out_freeiov;
1777                 ctl_buf = msg_sys.msg_control;
1778         } else if (ctl_len) {
1779                 if (ctl_len > sizeof(ctl))
1780                 {
1781                         ctl_buf = sock_kmalloc(sock->sk, ctl_len, GFP_KERNEL);
1782                         if (ctl_buf == NULL) 
1783                                 goto out_freeiov;
1784                 }
1785                 err = -EFAULT;
1786                 /*
1787                  * Careful! Before this, msg_sys.msg_control contains a user pointer.
1788                  * Afterwards, it will be a kernel pointer. Thus the compiler-assisted
1789                  * checking falls down on this.
1790                  */
1791                 if (copy_from_user(ctl_buf, (void __user *) msg_sys.msg_control, ctl_len))
1792                         goto out_freectl;
1793                 msg_sys.msg_control = ctl_buf;
1794         }
1795         msg_sys.msg_flags = flags;
1796
1797         if (sock->file->f_flags & O_NONBLOCK)
1798                 msg_sys.msg_flags |= MSG_DONTWAIT;
1799         err = sock_sendmsg(sock, &msg_sys, total_len);
1800
1801 out_freectl:
1802         if (ctl_buf != ctl)    
1803                 sock_kfree_s(sock->sk, ctl_buf, ctl_len);
1804 out_freeiov:
1805         if (iov != iovstack)
1806                 sock_kfree_s(sock->sk, iov, iov_size);
1807 out_put:
1808         sockfd_put(sock);
1809 out:       
1810         return err;
1811 }
1812
1813 /*
1814  *      BSD recvmsg interface
1815  */
1816
1817 asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned int flags)
1818 {
1819         struct compat_msghdr __user *msg_compat = (struct compat_msghdr __user *)msg;
1820         struct socket *sock;
1821         struct iovec iovstack[UIO_FASTIOV];
1822         struct iovec *iov=iovstack;
1823         struct msghdr msg_sys;
1824         unsigned long cmsg_ptr;
1825         int err, iov_size, total_len, len;
1826
1827         /* kernel mode address */
1828         char addr[MAX_SOCK_ADDR];
1829
1830         /* user mode address pointers */
1831         struct sockaddr __user *uaddr;
1832         int __user *uaddr_len;
1833         
1834         if (MSG_CMSG_COMPAT & flags) {
1835                 if (get_compat_msghdr(&msg_sys, msg_compat))
1836                         return -EFAULT;
1837         } else
1838                 if (copy_from_user(&msg_sys,msg,sizeof(struct msghdr)))
1839                         return -EFAULT;
1840
1841         sock = sockfd_lookup(fd, &err);
1842         if (!sock)
1843                 goto out;
1844
1845         err = -EMSGSIZE;
1846         if (msg_sys.msg_iovlen > UIO_MAXIOV)
1847                 goto out_put;
1848         
1849         /* Check whether to allocate the iovec area*/
1850         err = -ENOMEM;
1851         iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
1852         if (msg_sys.msg_iovlen > UIO_FASTIOV) {
1853                 iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
1854                 if (!iov)
1855                         goto out_put;
1856         }
1857
1858         /*
1859          *      Save the user-mode address (verify_iovec will change the
1860          *      kernel msghdr to use the kernel address space)
1861          */
1862          
1863         uaddr = (void __user *) msg_sys.msg_name;
1864         uaddr_len = COMPAT_NAMELEN(msg);
1865         if (MSG_CMSG_COMPAT & flags) {
1866                 err = verify_compat_iovec(&msg_sys, iov, addr, VERIFY_WRITE);
1867         } else
1868                 err = verify_iovec(&msg_sys, iov, addr, VERIFY_WRITE);
1869         if (err < 0)
1870                 goto out_freeiov;
1871         total_len=err;
1872
1873         cmsg_ptr = (unsigned long)msg_sys.msg_control;
1874         msg_sys.msg_flags = 0;
1875         if (MSG_CMSG_COMPAT & flags)
1876                 msg_sys.msg_flags = MSG_CMSG_COMPAT;
1877         
1878         if (sock->file->f_flags & O_NONBLOCK)
1879                 flags |= MSG_DONTWAIT;
1880         err = sock_recvmsg(sock, &msg_sys, total_len, flags);
1881         if (err < 0)
1882                 goto out_freeiov;
1883         len = err;
1884
1885         if (uaddr != NULL) {
1886                 err = move_addr_to_user(addr, msg_sys.msg_namelen, uaddr, uaddr_len);
1887                 if (err < 0)
1888                         goto out_freeiov;
1889         }
1890         err = __put_user(msg_sys.msg_flags, COMPAT_FLAGS(msg));
1891         if (err)
1892                 goto out_freeiov;
1893         if (MSG_CMSG_COMPAT & flags)
1894                 err = __put_user((unsigned long)msg_sys.msg_control-cmsg_ptr, 
1895                                  &msg_compat->msg_controllen);
1896         else
1897                 err = __put_user((unsigned long)msg_sys.msg_control-cmsg_ptr, 
1898                                  &msg->msg_controllen);
1899         if (err)
1900                 goto out_freeiov;
1901         err = len;
1902
1903 out_freeiov:
1904         if (iov != iovstack)
1905                 sock_kfree_s(sock->sk, iov, iov_size);
1906 out_put:
1907         sockfd_put(sock);
1908 out:
1909         return err;
1910 }
1911
1912 #ifdef __ARCH_WANT_SYS_SOCKETCALL
1913
1914 /* Argument list sizes for sys_socketcall */
1915 #define AL(x) ((x) * sizeof(unsigned long))
1916 static unsigned char nargs[18]={AL(0),AL(3),AL(3),AL(3),AL(2),AL(3),
1917                                 AL(3),AL(3),AL(4),AL(4),AL(4),AL(6),
1918                                 AL(6),AL(2),AL(5),AL(5),AL(3),AL(3)};
1919 #undef AL
1920
1921 /*
1922  *      System call vectors. 
1923  *
1924  *      Argument checking cleaned up. Saved 20% in size.
1925  *  This function doesn't need to set the kernel lock because
1926  *  it is set by the callees. 
1927  */
1928
1929 asmlinkage long sys_socketcall(int call, unsigned long __user *args)
1930 {
1931         unsigned long a[6];
1932         unsigned long a0,a1;
1933         int err;
1934
1935         if(call<1||call>SYS_RECVMSG)
1936                 return -EINVAL;
1937
1938         /* copy_from_user should be SMP safe. */
1939         if (copy_from_user(a, args, nargs[call]))
1940                 return -EFAULT;
1941                 
1942         a0=a[0];
1943         a1=a[1];
1944         
1945         switch(call) 
1946         {
1947                 case SYS_SOCKET:
1948                         err = sys_socket(a0,a1,a[2]);
1949                         break;
1950                 case SYS_BIND:
1951                         err = sys_bind(a0,(struct sockaddr __user *)a1, a[2]);
1952                         break;
1953                 case SYS_CONNECT:
1954                         err = sys_connect(a0, (struct sockaddr __user *)a1, a[2]);
1955                         break;
1956                 case SYS_LISTEN:
1957                         err = sys_listen(a0,a1);
1958                         break;
1959                 case SYS_ACCEPT:
1960                         err = sys_accept(a0,(struct sockaddr __user *)a1, (int __user *)a[2]);
1961                         break;
1962                 case SYS_GETSOCKNAME:
1963                         err = sys_getsockname(a0,(struct sockaddr __user *)a1, (int __user *)a[2]);
1964                         break;
1965                 case SYS_GETPEERNAME:
1966                         err = sys_getpeername(a0, (struct sockaddr __user *)a1, (int __user *)a[2]);
1967                         break;
1968                 case SYS_SOCKETPAIR:
1969                         err = sys_socketpair(a0,a1, a[2], (int __user *)a[3]);
1970                         break;
1971                 case SYS_SEND:
1972                         err = sys_send(a0, (void __user *)a1, a[2], a[3]);
1973                         break;
1974                 case SYS_SENDTO:
1975                         err = sys_sendto(a0,(void __user *)a1, a[2], a[3],
1976                                          (struct sockaddr __user *)a[4], a[5]);
1977                         break;
1978                 case SYS_RECV:
1979                         err = sys_recv(a0, (void __user *)a1, a[2], a[3]);
1980                         break;
1981                 case SYS_RECVFROM:
1982                         err = sys_recvfrom(a0, (void __user *)a1, a[2], a[3],
1983                                            (struct sockaddr __user *)a[4], (int __user *)a[5]);
1984                         break;
1985                 case SYS_SHUTDOWN:
1986                         err = sys_shutdown(a0,a1);
1987                         break;
1988                 case SYS_SETSOCKOPT:
1989                         err = sys_setsockopt(a0, a1, a[2], (char __user *)a[3], a[4]);
1990                         break;
1991                 case SYS_GETSOCKOPT:
1992                         err = sys_getsockopt(a0, a1, a[2], (char __user *)a[3], (int __user *)a[4]);
1993                         break;
1994                 case SYS_SENDMSG:
1995                         err = sys_sendmsg(a0, (struct msghdr __user *) a1, a[2]);
1996                         break;
1997                 case SYS_RECVMSG:
1998                         err = sys_recvmsg(a0, (struct msghdr __user *) a1, a[2]);
1999                         break;
2000                 default:
2001                         err = -EINVAL;
2002                         break;
2003         }
2004         return err;
2005 }
2006
2007 #endif /* __ARCH_WANT_SYS_SOCKETCALL */
2008
2009 /*
2010  *      This function is called by a protocol handler that wants to
2011  *      advertise its address family, and have it linked into the
2012  *      SOCKET module.
2013  */
2014
2015 int sock_register(struct net_proto_family *ops)
2016 {
2017         int err;
2018
2019         if (ops->family >= NPROTO) {
2020                 printk(KERN_CRIT "protocol %d >= NPROTO(%d)\n", ops->family, NPROTO);
2021                 return -ENOBUFS;
2022         }
2023         net_family_write_lock();
2024         err = -EEXIST;
2025         if (net_families[ops->family] == NULL) {
2026                 net_families[ops->family]=ops;
2027                 err = 0;
2028         }
2029         net_family_write_unlock();
2030         printk(KERN_INFO "NET: Registered protocol family %d\n",
2031                ops->family);
2032         return err;
2033 }
2034
2035 /*
2036  *      This function is called by a protocol handler that wants to
2037  *      remove its address family, and have it unlinked from the
2038  *      SOCKET module.
2039  */
2040
2041 int sock_unregister(int family)
2042 {
2043         if (family < 0 || family >= NPROTO)
2044                 return -1;
2045
2046         net_family_write_lock();
2047         net_families[family]=NULL;
2048         net_family_write_unlock();
2049         printk(KERN_INFO "NET: Unregistered protocol family %d\n",
2050                family);
2051         return 0;
2052 }
2053
2054
2055 extern void sk_init(void);
2056
2057 void __init sock_init(void)
2058 {
2059         /*
2060          *      Initialize sock SLAB cache.
2061          */
2062          
2063         sk_init();
2064
2065 #ifdef SLAB_SKB
2066         /*
2067          *      Initialize skbuff SLAB cache 
2068          */
2069         skb_init();
2070 #endif
2071
2072         /*
2073          *      Initialize the protocols module. 
2074          */
2075
2076         init_inodecache();
2077         register_filesystem(&sock_fs_type);
2078         sock_mnt = kern_mount(&sock_fs_type);
2079         /* The real protocol initialization is performed when
2080          *  do_initcalls is run.  
2081          */
2082
2083 #ifdef CONFIG_NETFILTER
2084         netfilter_init();
2085 #endif
2086 }
2087
2088 #ifdef CONFIG_PROC_FS
2089 void socket_seq_show(struct seq_file *seq)
2090 {
2091         int cpu;
2092         int counter = 0;
2093
2094         for (cpu = 0; cpu < NR_CPUS; cpu++)
2095                 counter += per_cpu(sockets_in_use, cpu);
2096
2097         /* It can be negative, by the way. 8) */
2098         if (counter < 0)
2099                 counter = 0;
2100
2101         seq_printf(seq, "sockets: used %d\n", counter);
2102 }
2103 #endif /* CONFIG_PROC_FS */
2104
2105 /* ABI emulation layers need these two */
2106 EXPORT_SYMBOL(move_addr_to_kernel);
2107 EXPORT_SYMBOL(move_addr_to_user);
2108 EXPORT_SYMBOL(sock_create);
2109 EXPORT_SYMBOL(sock_create_kern);
2110 EXPORT_SYMBOL(sock_create_lite);
2111 EXPORT_SYMBOL(sock_map_fd);
2112 EXPORT_SYMBOL(sock_recvmsg);
2113 EXPORT_SYMBOL(sock_register);
2114 EXPORT_SYMBOL(sock_release);
2115 EXPORT_SYMBOL(sock_sendmsg);
2116 EXPORT_SYMBOL(sock_unregister);
2117 EXPORT_SYMBOL(sock_wake_async);
2118 EXPORT_SYMBOL(sockfd_lookup);
2119 EXPORT_SYMBOL(kernel_sendmsg);
2120 EXPORT_SYMBOL(kernel_recvmsg);