diff options
-rw-r--r-- | net/compat.c | 47 | ||||
-rw-r--r-- | net/socket.c | 164 |
2 files changed, 101 insertions, 110 deletions
diff --git a/net/compat.c b/net/compat.c index 1cf75905f132..63d260e81472 100644 --- a/net/compat.c +++ b/net/compat.c | |||
@@ -81,7 +81,7 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov, | |||
81 | int tot_len; | 81 | int tot_len; |
82 | 82 | ||
83 | if (kern_msg->msg_namelen) { | 83 | if (kern_msg->msg_namelen) { |
84 | if (mode==VERIFY_READ) { | 84 | if (mode == VERIFY_READ) { |
85 | int err = move_addr_to_kernel(kern_msg->msg_name, | 85 | int err = move_addr_to_kernel(kern_msg->msg_name, |
86 | kern_msg->msg_namelen, | 86 | kern_msg->msg_namelen, |
87 | kern_address); | 87 | kern_address); |
@@ -354,7 +354,7 @@ static int do_set_attach_filter(struct socket *sock, int level, int optname, | |||
354 | static int do_set_sock_timeout(struct socket *sock, int level, | 354 | static int do_set_sock_timeout(struct socket *sock, int level, |
355 | int optname, char __user *optval, unsigned int optlen) | 355 | int optname, char __user *optval, unsigned int optlen) |
356 | { | 356 | { |
357 | struct compat_timeval __user *up = (struct compat_timeval __user *) optval; | 357 | struct compat_timeval __user *up = (struct compat_timeval __user *)optval; |
358 | struct timeval ktime; | 358 | struct timeval ktime; |
359 | mm_segment_t old_fs; | 359 | mm_segment_t old_fs; |
360 | int err; | 360 | int err; |
@@ -367,7 +367,7 @@ static int do_set_sock_timeout(struct socket *sock, int level, | |||
367 | return -EFAULT; | 367 | return -EFAULT; |
368 | old_fs = get_fs(); | 368 | old_fs = get_fs(); |
369 | set_fs(KERNEL_DS); | 369 | set_fs(KERNEL_DS); |
370 | err = sock_setsockopt(sock, level, optname, (char *) &ktime, sizeof(ktime)); | 370 | err = sock_setsockopt(sock, level, optname, (char *)&ktime, sizeof(ktime)); |
371 | set_fs(old_fs); | 371 | set_fs(old_fs); |
372 | 372 | ||
373 | return err; | 373 | return err; |
@@ -389,11 +389,10 @@ asmlinkage long compat_sys_setsockopt(int fd, int level, int optname, | |||
389 | char __user *optval, unsigned int optlen) | 389 | char __user *optval, unsigned int optlen) |
390 | { | 390 | { |
391 | int err; | 391 | int err; |
392 | struct socket *sock; | 392 | struct socket *sock = sockfd_lookup(fd, &err); |
393 | 393 | ||
394 | if ((sock = sockfd_lookup(fd, &err))!=NULL) | 394 | if (sock) { |
395 | { | 395 | err = security_socket_setsockopt(sock, level, optname); |
396 | err = security_socket_setsockopt(sock,level,optname); | ||
397 | if (err) { | 396 | if (err) { |
398 | sockfd_put(sock); | 397 | sockfd_put(sock); |
399 | return err; | 398 | return err; |
@@ -453,7 +452,7 @@ static int compat_sock_getsockopt(struct socket *sock, int level, int optname, | |||
453 | int compat_sock_get_timestamp(struct sock *sk, struct timeval __user *userstamp) | 452 | int compat_sock_get_timestamp(struct sock *sk, struct timeval __user *userstamp) |
454 | { | 453 | { |
455 | struct compat_timeval __user *ctv = | 454 | struct compat_timeval __user *ctv = |
456 | (struct compat_timeval __user*) userstamp; | 455 | (struct compat_timeval __user *) userstamp; |
457 | int err = -ENOENT; | 456 | int err = -ENOENT; |
458 | struct timeval tv; | 457 | struct timeval tv; |
459 | 458 | ||
@@ -477,7 +476,7 @@ EXPORT_SYMBOL(compat_sock_get_timestamp); | |||
477 | int compat_sock_get_timestampns(struct sock *sk, struct timespec __user *userstamp) | 476 | int compat_sock_get_timestampns(struct sock *sk, struct timespec __user *userstamp) |
478 | { | 477 | { |
479 | struct compat_timespec __user *ctv = | 478 | struct compat_timespec __user *ctv = |
480 | (struct compat_timespec __user*) userstamp; | 479 | (struct compat_timespec __user *) userstamp; |
481 | int err = -ENOENT; | 480 | int err = -ENOENT; |
482 | struct timespec ts; | 481 | struct timespec ts; |
483 | 482 | ||
@@ -502,12 +501,10 @@ asmlinkage long compat_sys_getsockopt(int fd, int level, int optname, | |||
502 | char __user *optval, int __user *optlen) | 501 | char __user *optval, int __user *optlen) |
503 | { | 502 | { |
504 | int err; | 503 | int err; |
505 | struct socket *sock; | 504 | struct socket *sock = sockfd_lookup(fd, &err); |
506 | 505 | ||
507 | if ((sock = sockfd_lookup(fd, &err))!=NULL) | 506 | if (sock) { |
508 | { | 507 | err = security_socket_getsockopt(sock, level, optname); |
509 | err = security_socket_getsockopt(sock, level, | ||
510 | optname); | ||
511 | if (err) { | 508 | if (err) { |
512 | sockfd_put(sock); | 509 | sockfd_put(sock); |
513 | return err; | 510 | return err; |
@@ -557,7 +554,7 @@ struct compat_group_filter { | |||
557 | 554 | ||
558 | int compat_mc_setsockopt(struct sock *sock, int level, int optname, | 555 | int compat_mc_setsockopt(struct sock *sock, int level, int optname, |
559 | char __user *optval, unsigned int optlen, | 556 | char __user *optval, unsigned int optlen, |
560 | int (*setsockopt)(struct sock *,int,int,char __user *,unsigned int)) | 557 | int (*setsockopt)(struct sock *, int, int, char __user *, unsigned int)) |
561 | { | 558 | { |
562 | char __user *koptval = optval; | 559 | char __user *koptval = optval; |
563 | int koptlen = optlen; | 560 | int koptlen = optlen; |
@@ -640,12 +637,11 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname, | |||
640 | } | 637 | } |
641 | return setsockopt(sock, level, optname, koptval, koptlen); | 638 | return setsockopt(sock, level, optname, koptval, koptlen); |
642 | } | 639 | } |
643 | |||
644 | EXPORT_SYMBOL(compat_mc_setsockopt); | 640 | EXPORT_SYMBOL(compat_mc_setsockopt); |
645 | 641 | ||
646 | int compat_mc_getsockopt(struct sock *sock, int level, int optname, | 642 | int compat_mc_getsockopt(struct sock *sock, int level, int optname, |
647 | char __user *optval, int __user *optlen, | 643 | char __user *optval, int __user *optlen, |
648 | int (*getsockopt)(struct sock *,int,int,char __user *,int __user *)) | 644 | int (*getsockopt)(struct sock *, int, int, char __user *, int __user *)) |
649 | { | 645 | { |
650 | struct compat_group_filter __user *gf32 = (void *)optval; | 646 | struct compat_group_filter __user *gf32 = (void *)optval; |
651 | struct group_filter __user *kgf; | 647 | struct group_filter __user *kgf; |
@@ -681,7 +677,7 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname, | |||
681 | __put_user(interface, &kgf->gf_interface) || | 677 | __put_user(interface, &kgf->gf_interface) || |
682 | __put_user(fmode, &kgf->gf_fmode) || | 678 | __put_user(fmode, &kgf->gf_fmode) || |
683 | __put_user(numsrc, &kgf->gf_numsrc) || | 679 | __put_user(numsrc, &kgf->gf_numsrc) || |
684 | copy_in_user(&kgf->gf_group,&gf32->gf_group,sizeof(kgf->gf_group))) | 680 | copy_in_user(&kgf->gf_group, &gf32->gf_group, sizeof(kgf->gf_group))) |
685 | return -EFAULT; | 681 | return -EFAULT; |
686 | 682 | ||
687 | err = getsockopt(sock, level, optname, (char __user *)kgf, koptlen); | 683 | err = getsockopt(sock, level, optname, (char __user *)kgf, koptlen); |
@@ -714,21 +710,22 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname, | |||
714 | copylen = numsrc * sizeof(gf32->gf_slist[0]); | 710 | copylen = numsrc * sizeof(gf32->gf_slist[0]); |
715 | if (copylen > klen) | 711 | if (copylen > klen) |
716 | copylen = klen; | 712 | copylen = klen; |
717 | if (copy_in_user(gf32->gf_slist, kgf->gf_slist, copylen)) | 713 | if (copy_in_user(gf32->gf_slist, kgf->gf_slist, copylen)) |
718 | return -EFAULT; | 714 | return -EFAULT; |
719 | } | 715 | } |
720 | return err; | 716 | return err; |
721 | } | 717 | } |
722 | |||
723 | EXPORT_SYMBOL(compat_mc_getsockopt); | 718 | EXPORT_SYMBOL(compat_mc_getsockopt); |
724 | 719 | ||
725 | 720 | ||
726 | /* Argument list sizes for compat_sys_socketcall */ | 721 | /* Argument list sizes for compat_sys_socketcall */ |
727 | #define AL(x) ((x) * sizeof(u32)) | 722 | #define AL(x) ((x) * sizeof(u32)) |
728 | static unsigned char nas[20]={AL(0),AL(3),AL(3),AL(3),AL(2),AL(3), | 723 | static unsigned char nas[20] = { |
729 | AL(3),AL(3),AL(4),AL(4),AL(4),AL(6), | 724 | AL(0), AL(3), AL(3), AL(3), AL(2), AL(3), |
730 | AL(6),AL(2),AL(5),AL(5),AL(3),AL(3), | 725 | AL(3), AL(3), AL(4), AL(4), AL(4), AL(6), |
731 | AL(4),AL(5)}; | 726 | AL(6), AL(2), AL(5), AL(5), AL(3), AL(3), |
727 | AL(4), AL(5) | ||
728 | }; | ||
732 | #undef AL | 729 | #undef AL |
733 | 730 | ||
734 | asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, unsigned flags) | 731 | asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, unsigned flags) |
@@ -827,7 +824,7 @@ asmlinkage long compat_sys_socketcall(int call, u32 __user *args) | |||
827 | compat_ptr(a[4]), compat_ptr(a[5])); | 824 | compat_ptr(a[4]), compat_ptr(a[5])); |
828 | break; | 825 | break; |
829 | case SYS_SHUTDOWN: | 826 | case SYS_SHUTDOWN: |
830 | ret = sys_shutdown(a0,a1); | 827 | ret = sys_shutdown(a0, a1); |
831 | break; | 828 | break; |
832 | case SYS_SETSOCKOPT: | 829 | case SYS_SETSOCKOPT: |
833 | ret = compat_sys_setsockopt(a0, a1, a[2], | 830 | ret = compat_sys_setsockopt(a0, a1, a[2], |
diff --git a/net/socket.c b/net/socket.c index 367d5477d00f..acfa1738663d 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -124,7 +124,7 @@ static int sock_fasync(int fd, struct file *filp, int on); | |||
124 | static ssize_t sock_sendpage(struct file *file, struct page *page, | 124 | static ssize_t sock_sendpage(struct file *file, struct page *page, |
125 | int offset, size_t size, loff_t *ppos, int more); | 125 | int offset, size_t size, loff_t *ppos, int more); |
126 | static ssize_t sock_splice_read(struct file *file, loff_t *ppos, | 126 | static ssize_t sock_splice_read(struct file *file, loff_t *ppos, |
127 | struct pipe_inode_info *pipe, size_t len, | 127 | struct pipe_inode_info *pipe, size_t len, |
128 | unsigned int flags); | 128 | unsigned int flags); |
129 | 129 | ||
130 | /* | 130 | /* |
@@ -162,7 +162,7 @@ static const struct net_proto_family *net_families[NPROTO] __read_mostly; | |||
162 | * Statistics counters of the socket lists | 162 | * Statistics counters of the socket lists |
163 | */ | 163 | */ |
164 | 164 | ||
165 | static DEFINE_PER_CPU(int, sockets_in_use) = 0; | 165 | static DEFINE_PER_CPU(int, sockets_in_use); |
166 | 166 | ||
167 | /* | 167 | /* |
168 | * Support routines. | 168 | * Support routines. |
@@ -309,9 +309,9 @@ static int init_inodecache(void) | |||
309 | } | 309 | } |
310 | 310 | ||
311 | static const struct super_operations sockfs_ops = { | 311 | static const struct super_operations sockfs_ops = { |
312 | .alloc_inode = sock_alloc_inode, | 312 | .alloc_inode = sock_alloc_inode, |
313 | .destroy_inode =sock_destroy_inode, | 313 | .destroy_inode = sock_destroy_inode, |
314 | .statfs = simple_statfs, | 314 | .statfs = simple_statfs, |
315 | }; | 315 | }; |
316 | 316 | ||
317 | static int sockfs_get_sb(struct file_system_type *fs_type, | 317 | static int sockfs_get_sb(struct file_system_type *fs_type, |
@@ -411,6 +411,7 @@ int sock_map_fd(struct socket *sock, int flags) | |||
411 | 411 | ||
412 | return fd; | 412 | return fd; |
413 | } | 413 | } |
414 | EXPORT_SYMBOL(sock_map_fd); | ||
414 | 415 | ||
415 | static struct socket *sock_from_file(struct file *file, int *err) | 416 | static struct socket *sock_from_file(struct file *file, int *err) |
416 | { | 417 | { |
@@ -422,7 +423,7 @@ static struct socket *sock_from_file(struct file *file, int *err) | |||
422 | } | 423 | } |
423 | 424 | ||
424 | /** | 425 | /** |
425 | * sockfd_lookup - Go from a file number to its socket slot | 426 | * sockfd_lookup - Go from a file number to its socket slot |
426 | * @fd: file handle | 427 | * @fd: file handle |
427 | * @err: pointer to an error code return | 428 | * @err: pointer to an error code return |
428 | * | 429 | * |
@@ -450,6 +451,7 @@ struct socket *sockfd_lookup(int fd, int *err) | |||
450 | fput(file); | 451 | fput(file); |
451 | return sock; | 452 | return sock; |
452 | } | 453 | } |
454 | EXPORT_SYMBOL(sockfd_lookup); | ||
453 | 455 | ||
454 | static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed) | 456 | static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed) |
455 | { | 457 | { |
@@ -540,6 +542,7 @@ void sock_release(struct socket *sock) | |||
540 | } | 542 | } |
541 | sock->file = NULL; | 543 | sock->file = NULL; |
542 | } | 544 | } |
545 | EXPORT_SYMBOL(sock_release); | ||
543 | 546 | ||
544 | int sock_tx_timestamp(struct msghdr *msg, struct sock *sk, | 547 | int sock_tx_timestamp(struct msghdr *msg, struct sock *sk, |
545 | union skb_shared_tx *shtx) | 548 | union skb_shared_tx *shtx) |
@@ -586,6 +589,7 @@ int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) | |||
586 | ret = wait_on_sync_kiocb(&iocb); | 589 | ret = wait_on_sync_kiocb(&iocb); |
587 | return ret; | 590 | return ret; |
588 | } | 591 | } |
592 | EXPORT_SYMBOL(sock_sendmsg); | ||
589 | 593 | ||
590 | int kernel_sendmsg(struct socket *sock, struct msghdr *msg, | 594 | int kernel_sendmsg(struct socket *sock, struct msghdr *msg, |
591 | struct kvec *vec, size_t num, size_t size) | 595 | struct kvec *vec, size_t num, size_t size) |
@@ -604,6 +608,7 @@ int kernel_sendmsg(struct socket *sock, struct msghdr *msg, | |||
604 | set_fs(oldfs); | 608 | set_fs(oldfs); |
605 | return result; | 609 | return result; |
606 | } | 610 | } |
611 | EXPORT_SYMBOL(kernel_sendmsg); | ||
607 | 612 | ||
608 | static int ktime2ts(ktime_t kt, struct timespec *ts) | 613 | static int ktime2ts(ktime_t kt, struct timespec *ts) |
609 | { | 614 | { |
@@ -664,7 +669,6 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk, | |||
664 | put_cmsg(msg, SOL_SOCKET, | 669 | put_cmsg(msg, SOL_SOCKET, |
665 | SCM_TIMESTAMPING, sizeof(ts), &ts); | 670 | SCM_TIMESTAMPING, sizeof(ts), &ts); |
666 | } | 671 | } |
667 | |||
668 | EXPORT_SYMBOL_GPL(__sock_recv_timestamp); | 672 | EXPORT_SYMBOL_GPL(__sock_recv_timestamp); |
669 | 673 | ||
670 | inline void sock_recv_drops(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) | 674 | inline void sock_recv_drops(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) |
@@ -720,6 +724,7 @@ int sock_recvmsg(struct socket *sock, struct msghdr *msg, | |||
720 | ret = wait_on_sync_kiocb(&iocb); | 724 | ret = wait_on_sync_kiocb(&iocb); |
721 | return ret; | 725 | return ret; |
722 | } | 726 | } |
727 | EXPORT_SYMBOL(sock_recvmsg); | ||
723 | 728 | ||
724 | static int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg, | 729 | static int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg, |
725 | size_t size, int flags) | 730 | size_t size, int flags) |
@@ -752,6 +757,7 @@ int kernel_recvmsg(struct socket *sock, struct msghdr *msg, | |||
752 | set_fs(oldfs); | 757 | set_fs(oldfs); |
753 | return result; | 758 | return result; |
754 | } | 759 | } |
760 | EXPORT_SYMBOL(kernel_recvmsg); | ||
755 | 761 | ||
756 | static void sock_aio_dtor(struct kiocb *iocb) | 762 | static void sock_aio_dtor(struct kiocb *iocb) |
757 | { | 763 | { |
@@ -774,7 +780,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page, | |||
774 | } | 780 | } |
775 | 781 | ||
776 | static ssize_t sock_splice_read(struct file *file, loff_t *ppos, | 782 | static ssize_t sock_splice_read(struct file *file, loff_t *ppos, |
777 | struct pipe_inode_info *pipe, size_t len, | 783 | struct pipe_inode_info *pipe, size_t len, |
778 | unsigned int flags) | 784 | unsigned int flags) |
779 | { | 785 | { |
780 | struct socket *sock = file->private_data; | 786 | struct socket *sock = file->private_data; |
@@ -887,7 +893,7 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov, | |||
887 | */ | 893 | */ |
888 | 894 | ||
889 | static DEFINE_MUTEX(br_ioctl_mutex); | 895 | static DEFINE_MUTEX(br_ioctl_mutex); |
890 | static int (*br_ioctl_hook) (struct net *, unsigned int cmd, void __user *arg) = NULL; | 896 | static int (*br_ioctl_hook) (struct net *, unsigned int cmd, void __user *arg); |
891 | 897 | ||
892 | void brioctl_set(int (*hook) (struct net *, unsigned int, void __user *)) | 898 | void brioctl_set(int (*hook) (struct net *, unsigned int, void __user *)) |
893 | { | 899 | { |
@@ -895,7 +901,6 @@ void brioctl_set(int (*hook) (struct net *, unsigned int, void __user *)) | |||
895 | br_ioctl_hook = hook; | 901 | br_ioctl_hook = hook; |
896 | mutex_unlock(&br_ioctl_mutex); | 902 | mutex_unlock(&br_ioctl_mutex); |
897 | } | 903 | } |
898 | |||
899 | EXPORT_SYMBOL(brioctl_set); | 904 | EXPORT_SYMBOL(brioctl_set); |
900 | 905 | ||
901 | static DEFINE_MUTEX(vlan_ioctl_mutex); | 906 | static DEFINE_MUTEX(vlan_ioctl_mutex); |
@@ -907,7 +912,6 @@ void vlan_ioctl_set(int (*hook) (struct net *, void __user *)) | |||
907 | vlan_ioctl_hook = hook; | 912 | vlan_ioctl_hook = hook; |
908 | mutex_unlock(&vlan_ioctl_mutex); | 913 | mutex_unlock(&vlan_ioctl_mutex); |
909 | } | 914 | } |
910 | |||
911 | EXPORT_SYMBOL(vlan_ioctl_set); | 915 | EXPORT_SYMBOL(vlan_ioctl_set); |
912 | 916 | ||
913 | static DEFINE_MUTEX(dlci_ioctl_mutex); | 917 | static DEFINE_MUTEX(dlci_ioctl_mutex); |
@@ -919,7 +923,6 @@ void dlci_ioctl_set(int (*hook) (unsigned int, void __user *)) | |||
919 | dlci_ioctl_hook = hook; | 923 | dlci_ioctl_hook = hook; |
920 | mutex_unlock(&dlci_ioctl_mutex); | 924 | mutex_unlock(&dlci_ioctl_mutex); |
921 | } | 925 | } |
922 | |||
923 | EXPORT_SYMBOL(dlci_ioctl_set); | 926 | EXPORT_SYMBOL(dlci_ioctl_set); |
924 | 927 | ||
925 | static long sock_do_ioctl(struct net *net, struct socket *sock, | 928 | static long sock_do_ioctl(struct net *net, struct socket *sock, |
@@ -1047,6 +1050,7 @@ out_release: | |||
1047 | sock = NULL; | 1050 | sock = NULL; |
1048 | goto out; | 1051 | goto out; |
1049 | } | 1052 | } |
1053 | EXPORT_SYMBOL(sock_create_lite); | ||
1050 | 1054 | ||
1051 | /* No kernel lock held - perfect */ | 1055 | /* No kernel lock held - perfect */ |
1052 | static unsigned int sock_poll(struct file *file, poll_table *wait) | 1056 | static unsigned int sock_poll(struct file *file, poll_table *wait) |
@@ -1147,6 +1151,7 @@ call_kill: | |||
1147 | rcu_read_unlock(); | 1151 | rcu_read_unlock(); |
1148 | return 0; | 1152 | return 0; |
1149 | } | 1153 | } |
1154 | EXPORT_SYMBOL(sock_wake_async); | ||
1150 | 1155 | ||
1151 | static int __sock_create(struct net *net, int family, int type, int protocol, | 1156 | static int __sock_create(struct net *net, int family, int type, int protocol, |
1152 | struct socket **res, int kern) | 1157 | struct socket **res, int kern) |
@@ -1265,11 +1270,13 @@ int sock_create(int family, int type, int protocol, struct socket **res) | |||
1265 | { | 1270 | { |
1266 | return __sock_create(current->nsproxy->net_ns, family, type, protocol, res, 0); | 1271 | return __sock_create(current->nsproxy->net_ns, family, type, protocol, res, 0); |
1267 | } | 1272 | } |
1273 | EXPORT_SYMBOL(sock_create); | ||
1268 | 1274 | ||
1269 | int sock_create_kern(int family, int type, int protocol, struct socket **res) | 1275 | int sock_create_kern(int family, int type, int protocol, struct socket **res) |
1270 | { | 1276 | { |
1271 | return __sock_create(&init_net, family, type, protocol, res, 1); | 1277 | return __sock_create(&init_net, family, type, protocol, res, 1); |
1272 | } | 1278 | } |
1279 | EXPORT_SYMBOL(sock_create_kern); | ||
1273 | 1280 | ||
1274 | SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) | 1281 | SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) |
1275 | { | 1282 | { |
@@ -1474,7 +1481,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, | |||
1474 | goto out; | 1481 | goto out; |
1475 | 1482 | ||
1476 | err = -ENFILE; | 1483 | err = -ENFILE; |
1477 | if (!(newsock = sock_alloc())) | 1484 | newsock = sock_alloc(); |
1485 | if (!newsock) | ||
1478 | goto out_put; | 1486 | goto out_put; |
1479 | 1487 | ||
1480 | newsock->type = sock->type; | 1488 | newsock->type = sock->type; |
@@ -1861,8 +1869,7 @@ SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags) | |||
1861 | if (MSG_CMSG_COMPAT & flags) { | 1869 | if (MSG_CMSG_COMPAT & flags) { |
1862 | if (get_compat_msghdr(&msg_sys, msg_compat)) | 1870 | if (get_compat_msghdr(&msg_sys, msg_compat)) |
1863 | return -EFAULT; | 1871 | return -EFAULT; |
1864 | } | 1872 | } else if (copy_from_user(&msg_sys, msg, sizeof(struct msghdr))) |
1865 | else if (copy_from_user(&msg_sys, msg, sizeof(struct msghdr))) | ||
1866 | return -EFAULT; | 1873 | return -EFAULT; |
1867 | 1874 | ||
1868 | sock = sockfd_lookup_light(fd, &err, &fput_needed); | 1875 | sock = sockfd_lookup_light(fd, &err, &fput_needed); |
@@ -1964,8 +1971,7 @@ static int __sys_recvmsg(struct socket *sock, struct msghdr __user *msg, | |||
1964 | if (MSG_CMSG_COMPAT & flags) { | 1971 | if (MSG_CMSG_COMPAT & flags) { |
1965 | if (get_compat_msghdr(msg_sys, msg_compat)) | 1972 | if (get_compat_msghdr(msg_sys, msg_compat)) |
1966 | return -EFAULT; | 1973 | return -EFAULT; |
1967 | } | 1974 | } else if (copy_from_user(msg_sys, msg, sizeof(struct msghdr))) |
1968 | else if (copy_from_user(msg_sys, msg, sizeof(struct msghdr))) | ||
1969 | return -EFAULT; | 1975 | return -EFAULT; |
1970 | 1976 | ||
1971 | err = -EMSGSIZE; | 1977 | err = -EMSGSIZE; |
@@ -2191,10 +2197,10 @@ SYSCALL_DEFINE5(recvmmsg, int, fd, struct mmsghdr __user *, mmsg, | |||
2191 | /* Argument list sizes for sys_socketcall */ | 2197 | /* Argument list sizes for sys_socketcall */ |
2192 | #define AL(x) ((x) * sizeof(unsigned long)) | 2198 | #define AL(x) ((x) * sizeof(unsigned long)) |
2193 | static const unsigned char nargs[20] = { | 2199 | static const unsigned char nargs[20] = { |
2194 | AL(0),AL(3),AL(3),AL(3),AL(2),AL(3), | 2200 | AL(0), AL(3), AL(3), AL(3), AL(2), AL(3), |
2195 | AL(3),AL(3),AL(4),AL(4),AL(4),AL(6), | 2201 | AL(3), AL(3), AL(4), AL(4), AL(4), AL(6), |
2196 | AL(6),AL(2),AL(5),AL(5),AL(3),AL(3), | 2202 | AL(6), AL(2), AL(5), AL(5), AL(3), AL(3), |
2197 | AL(4),AL(5) | 2203 | AL(4), AL(5) |
2198 | }; | 2204 | }; |
2199 | 2205 | ||
2200 | #undef AL | 2206 | #undef AL |
@@ -2340,6 +2346,7 @@ int sock_register(const struct net_proto_family *ops) | |||
2340 | printk(KERN_INFO "NET: Registered protocol family %d\n", ops->family); | 2346 | printk(KERN_INFO "NET: Registered protocol family %d\n", ops->family); |
2341 | return err; | 2347 | return err; |
2342 | } | 2348 | } |
2349 | EXPORT_SYMBOL(sock_register); | ||
2343 | 2350 | ||
2344 | /** | 2351 | /** |
2345 | * sock_unregister - remove a protocol handler | 2352 | * sock_unregister - remove a protocol handler |
@@ -2366,6 +2373,7 @@ void sock_unregister(int family) | |||
2366 | 2373 | ||
2367 | printk(KERN_INFO "NET: Unregistered protocol family %d\n", family); | 2374 | printk(KERN_INFO "NET: Unregistered protocol family %d\n", family); |
2368 | } | 2375 | } |
2376 | EXPORT_SYMBOL(sock_unregister); | ||
2369 | 2377 | ||
2370 | static int __init sock_init(void) | 2378 | static int __init sock_init(void) |
2371 | { | 2379 | { |
@@ -2490,13 +2498,13 @@ static int dev_ifconf(struct net *net, struct compat_ifconf __user *uifc32) | |||
2490 | ifc.ifc_req = NULL; | 2498 | ifc.ifc_req = NULL; |
2491 | uifc = compat_alloc_user_space(sizeof(struct ifconf)); | 2499 | uifc = compat_alloc_user_space(sizeof(struct ifconf)); |
2492 | } else { | 2500 | } else { |
2493 | size_t len =((ifc32.ifc_len / sizeof (struct compat_ifreq)) + 1) * | 2501 | size_t len = ((ifc32.ifc_len / sizeof(struct compat_ifreq)) + 1) * |
2494 | sizeof (struct ifreq); | 2502 | sizeof(struct ifreq); |
2495 | uifc = compat_alloc_user_space(sizeof(struct ifconf) + len); | 2503 | uifc = compat_alloc_user_space(sizeof(struct ifconf) + len); |
2496 | ifc.ifc_len = len; | 2504 | ifc.ifc_len = len; |
2497 | ifr = ifc.ifc_req = (void __user *)(uifc + 1); | 2505 | ifr = ifc.ifc_req = (void __user *)(uifc + 1); |
2498 | ifr32 = compat_ptr(ifc32.ifcbuf); | 2506 | ifr32 = compat_ptr(ifc32.ifcbuf); |
2499 | for (i = 0; i < ifc32.ifc_len; i += sizeof (struct compat_ifreq)) { | 2507 | for (i = 0; i < ifc32.ifc_len; i += sizeof(struct compat_ifreq)) { |
2500 | if (copy_in_user(ifr, ifr32, sizeof(struct compat_ifreq))) | 2508 | if (copy_in_user(ifr, ifr32, sizeof(struct compat_ifreq))) |
2501 | return -EFAULT; | 2509 | return -EFAULT; |
2502 | ifr++; | 2510 | ifr++; |
@@ -2516,9 +2524,9 @@ static int dev_ifconf(struct net *net, struct compat_ifconf __user *uifc32) | |||
2516 | ifr = ifc.ifc_req; | 2524 | ifr = ifc.ifc_req; |
2517 | ifr32 = compat_ptr(ifc32.ifcbuf); | 2525 | ifr32 = compat_ptr(ifc32.ifcbuf); |
2518 | for (i = 0, j = 0; | 2526 | for (i = 0, j = 0; |
2519 | i + sizeof (struct compat_ifreq) <= ifc32.ifc_len && j < ifc.ifc_len; | 2527 | i + sizeof(struct compat_ifreq) <= ifc32.ifc_len && j < ifc.ifc_len; |
2520 | i += sizeof (struct compat_ifreq), j += sizeof (struct ifreq)) { | 2528 | i += sizeof(struct compat_ifreq), j += sizeof(struct ifreq)) { |
2521 | if (copy_in_user(ifr32, ifr, sizeof (struct compat_ifreq))) | 2529 | if (copy_in_user(ifr32, ifr, sizeof(struct compat_ifreq))) |
2522 | return -EFAULT; | 2530 | return -EFAULT; |
2523 | ifr32++; | 2531 | ifr32++; |
2524 | ifr++; | 2532 | ifr++; |
@@ -2567,7 +2575,7 @@ static int compat_siocwandev(struct net *net, struct compat_ifreq __user *uifr32 | |||
2567 | compat_uptr_t uptr32; | 2575 | compat_uptr_t uptr32; |
2568 | struct ifreq __user *uifr; | 2576 | struct ifreq __user *uifr; |
2569 | 2577 | ||
2570 | uifr = compat_alloc_user_space(sizeof (*uifr)); | 2578 | uifr = compat_alloc_user_space(sizeof(*uifr)); |
2571 | if (copy_in_user(uifr, uifr32, sizeof(struct compat_ifreq))) | 2579 | if (copy_in_user(uifr, uifr32, sizeof(struct compat_ifreq))) |
2572 | return -EFAULT; | 2580 | return -EFAULT; |
2573 | 2581 | ||
@@ -2601,9 +2609,9 @@ static int bond_ioctl(struct net *net, unsigned int cmd, | |||
2601 | return -EFAULT; | 2609 | return -EFAULT; |
2602 | 2610 | ||
2603 | old_fs = get_fs(); | 2611 | old_fs = get_fs(); |
2604 | set_fs (KERNEL_DS); | 2612 | set_fs(KERNEL_DS); |
2605 | err = dev_ioctl(net, cmd, &kifr); | 2613 | err = dev_ioctl(net, cmd, &kifr); |
2606 | set_fs (old_fs); | 2614 | set_fs(old_fs); |
2607 | 2615 | ||
2608 | return err; | 2616 | return err; |
2609 | case SIOCBONDSLAVEINFOQUERY: | 2617 | case SIOCBONDSLAVEINFOQUERY: |
@@ -2710,9 +2718,9 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd, | |||
2710 | return -EFAULT; | 2718 | return -EFAULT; |
2711 | 2719 | ||
2712 | old_fs = get_fs(); | 2720 | old_fs = get_fs(); |
2713 | set_fs (KERNEL_DS); | 2721 | set_fs(KERNEL_DS); |
2714 | err = dev_ioctl(net, cmd, (void __user *)&ifr); | 2722 | err = dev_ioctl(net, cmd, (void __user *)&ifr); |
2715 | set_fs (old_fs); | 2723 | set_fs(old_fs); |
2716 | 2724 | ||
2717 | if (cmd == SIOCGIFMAP && !err) { | 2725 | if (cmd == SIOCGIFMAP && !err) { |
2718 | err = copy_to_user(uifr32, &ifr, sizeof(ifr.ifr_name)); | 2726 | err = copy_to_user(uifr32, &ifr, sizeof(ifr.ifr_name)); |
@@ -2734,7 +2742,7 @@ static int compat_siocshwtstamp(struct net *net, struct compat_ifreq __user *uif | |||
2734 | compat_uptr_t uptr32; | 2742 | compat_uptr_t uptr32; |
2735 | struct ifreq __user *uifr; | 2743 | struct ifreq __user *uifr; |
2736 | 2744 | ||
2737 | uifr = compat_alloc_user_space(sizeof (*uifr)); | 2745 | uifr = compat_alloc_user_space(sizeof(*uifr)); |
2738 | if (copy_in_user(uifr, uifr32, sizeof(struct compat_ifreq))) | 2746 | if (copy_in_user(uifr, uifr32, sizeof(struct compat_ifreq))) |
2739 | return -EFAULT; | 2747 | return -EFAULT; |
2740 | 2748 | ||
@@ -2750,20 +2758,20 @@ static int compat_siocshwtstamp(struct net *net, struct compat_ifreq __user *uif | |||
2750 | } | 2758 | } |
2751 | 2759 | ||
2752 | struct rtentry32 { | 2760 | struct rtentry32 { |
2753 | u32 rt_pad1; | 2761 | u32 rt_pad1; |
2754 | struct sockaddr rt_dst; /* target address */ | 2762 | struct sockaddr rt_dst; /* target address */ |
2755 | struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */ | 2763 | struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */ |
2756 | struct sockaddr rt_genmask; /* target network mask (IP) */ | 2764 | struct sockaddr rt_genmask; /* target network mask (IP) */ |
2757 | unsigned short rt_flags; | 2765 | unsigned short rt_flags; |
2758 | short rt_pad2; | 2766 | short rt_pad2; |
2759 | u32 rt_pad3; | 2767 | u32 rt_pad3; |
2760 | unsigned char rt_tos; | 2768 | unsigned char rt_tos; |
2761 | unsigned char rt_class; | 2769 | unsigned char rt_class; |
2762 | short rt_pad4; | 2770 | short rt_pad4; |
2763 | short rt_metric; /* +1 for binary compatibility! */ | 2771 | short rt_metric; /* +1 for binary compatibility! */ |
2764 | /* char * */ u32 rt_dev; /* forcing the device at add */ | 2772 | /* char * */ u32 rt_dev; /* forcing the device at add */ |
2765 | u32 rt_mtu; /* per route MTU/Window */ | 2773 | u32 rt_mtu; /* per route MTU/Window */ |
2766 | u32 rt_window; /* Window clamping */ | 2774 | u32 rt_window; /* Window clamping */ |
2767 | unsigned short rt_irtt; /* Initial RTT */ | 2775 | unsigned short rt_irtt; /* Initial RTT */ |
2768 | }; | 2776 | }; |
2769 | 2777 | ||
@@ -2793,29 +2801,29 @@ static int routing_ioctl(struct net *net, struct socket *sock, | |||
2793 | 2801 | ||
2794 | if (sock && sock->sk && sock->sk->sk_family == AF_INET6) { /* ipv6 */ | 2802 | if (sock && sock->sk && sock->sk->sk_family == AF_INET6) { /* ipv6 */ |
2795 | struct in6_rtmsg32 __user *ur6 = argp; | 2803 | struct in6_rtmsg32 __user *ur6 = argp; |
2796 | ret = copy_from_user (&r6.rtmsg_dst, &(ur6->rtmsg_dst), | 2804 | ret = copy_from_user(&r6.rtmsg_dst, &(ur6->rtmsg_dst), |
2797 | 3 * sizeof(struct in6_addr)); | 2805 | 3 * sizeof(struct in6_addr)); |
2798 | ret |= __get_user (r6.rtmsg_type, &(ur6->rtmsg_type)); | 2806 | ret |= __get_user(r6.rtmsg_type, &(ur6->rtmsg_type)); |
2799 | ret |= __get_user (r6.rtmsg_dst_len, &(ur6->rtmsg_dst_len)); | 2807 | ret |= __get_user(r6.rtmsg_dst_len, &(ur6->rtmsg_dst_len)); |
2800 | ret |= __get_user (r6.rtmsg_src_len, &(ur6->rtmsg_src_len)); | 2808 | ret |= __get_user(r6.rtmsg_src_len, &(ur6->rtmsg_src_len)); |
2801 | ret |= __get_user (r6.rtmsg_metric, &(ur6->rtmsg_metric)); | 2809 | ret |= __get_user(r6.rtmsg_metric, &(ur6->rtmsg_metric)); |
2802 | ret |= __get_user (r6.rtmsg_info, &(ur6->rtmsg_info)); | 2810 | ret |= __get_user(r6.rtmsg_info, &(ur6->rtmsg_info)); |
2803 | ret |= __get_user (r6.rtmsg_flags, &(ur6->rtmsg_flags)); | 2811 | ret |= __get_user(r6.rtmsg_flags, &(ur6->rtmsg_flags)); |
2804 | ret |= __get_user (r6.rtmsg_ifindex, &(ur6->rtmsg_ifindex)); | 2812 | ret |= __get_user(r6.rtmsg_ifindex, &(ur6->rtmsg_ifindex)); |
2805 | 2813 | ||
2806 | r = (void *) &r6; | 2814 | r = (void *) &r6; |
2807 | } else { /* ipv4 */ | 2815 | } else { /* ipv4 */ |
2808 | struct rtentry32 __user *ur4 = argp; | 2816 | struct rtentry32 __user *ur4 = argp; |
2809 | ret = copy_from_user (&r4.rt_dst, &(ur4->rt_dst), | 2817 | ret = copy_from_user(&r4.rt_dst, &(ur4->rt_dst), |
2810 | 3 * sizeof(struct sockaddr)); | 2818 | 3 * sizeof(struct sockaddr)); |
2811 | ret |= __get_user (r4.rt_flags, &(ur4->rt_flags)); | 2819 | ret |= __get_user(r4.rt_flags, &(ur4->rt_flags)); |
2812 | ret |= __get_user (r4.rt_metric, &(ur4->rt_metric)); | 2820 | ret |= __get_user(r4.rt_metric, &(ur4->rt_metric)); |
2813 | ret |= __get_user (r4.rt_mtu, &(ur4->rt_mtu)); | 2821 | ret |= __get_user(r4.rt_mtu, &(ur4->rt_mtu)); |
2814 | ret |= __get_user (r4.rt_window, &(ur4->rt_window)); | 2822 | ret |= __get_user(r4.rt_window, &(ur4->rt_window)); |
2815 | ret |= __get_user (r4.rt_irtt, &(ur4->rt_irtt)); | 2823 | ret |= __get_user(r4.rt_irtt, &(ur4->rt_irtt)); |
2816 | ret |= __get_user (rtdev, &(ur4->rt_dev)); | 2824 | ret |= __get_user(rtdev, &(ur4->rt_dev)); |
2817 | if (rtdev) { | 2825 | if (rtdev) { |
2818 | ret |= copy_from_user (devname, compat_ptr(rtdev), 15); | 2826 | ret |= copy_from_user(devname, compat_ptr(rtdev), 15); |
2819 | r4.rt_dev = devname; devname[15] = 0; | 2827 | r4.rt_dev = devname; devname[15] = 0; |
2820 | } else | 2828 | } else |
2821 | r4.rt_dev = NULL; | 2829 | r4.rt_dev = NULL; |
@@ -2828,9 +2836,9 @@ static int routing_ioctl(struct net *net, struct socket *sock, | |||
2828 | goto out; | 2836 | goto out; |
2829 | } | 2837 | } |
2830 | 2838 | ||
2831 | set_fs (KERNEL_DS); | 2839 | set_fs(KERNEL_DS); |
2832 | ret = sock_do_ioctl(net, sock, cmd, (unsigned long) r); | 2840 | ret = sock_do_ioctl(net, sock, cmd, (unsigned long) r); |
2833 | set_fs (old_fs); | 2841 | set_fs(old_fs); |
2834 | 2842 | ||
2835 | out: | 2843 | out: |
2836 | return ret; | 2844 | return ret; |
@@ -2993,11 +3001,13 @@ int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen) | |||
2993 | { | 3001 | { |
2994 | return sock->ops->bind(sock, addr, addrlen); | 3002 | return sock->ops->bind(sock, addr, addrlen); |
2995 | } | 3003 | } |
3004 | EXPORT_SYMBOL(kernel_bind); | ||
2996 | 3005 | ||
2997 | int kernel_listen(struct socket *sock, int backlog) | 3006 | int kernel_listen(struct socket *sock, int backlog) |
2998 | { | 3007 | { |
2999 | return sock->ops->listen(sock, backlog); | 3008 | return sock->ops->listen(sock, backlog); |
3000 | } | 3009 | } |
3010 | EXPORT_SYMBOL(kernel_listen); | ||
3001 | 3011 | ||
3002 | int kernel_accept(struct socket *sock, struct socket **newsock, int flags) | 3012 | int kernel_accept(struct socket *sock, struct socket **newsock, int flags) |
3003 | { | 3013 | { |
@@ -3022,24 +3032,28 @@ int kernel_accept(struct socket *sock, struct socket **newsock, int flags) | |||
3022 | done: | 3032 | done: |
3023 | return err; | 3033 | return err; |
3024 | } | 3034 | } |
3035 | EXPORT_SYMBOL(kernel_accept); | ||
3025 | 3036 | ||
3026 | int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen, | 3037 | int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen, |
3027 | int flags) | 3038 | int flags) |
3028 | { | 3039 | { |
3029 | return sock->ops->connect(sock, addr, addrlen, flags); | 3040 | return sock->ops->connect(sock, addr, addrlen, flags); |
3030 | } | 3041 | } |
3042 | EXPORT_SYMBOL(kernel_connect); | ||
3031 | 3043 | ||
3032 | int kernel_getsockname(struct socket *sock, struct sockaddr *addr, | 3044 | int kernel_getsockname(struct socket *sock, struct sockaddr *addr, |
3033 | int *addrlen) | 3045 | int *addrlen) |
3034 | { | 3046 | { |
3035 | return sock->ops->getname(sock, addr, addrlen, 0); | 3047 | return sock->ops->getname(sock, addr, addrlen, 0); |
3036 | } | 3048 | } |
3049 | EXPORT_SYMBOL(kernel_getsockname); | ||
3037 | 3050 | ||
3038 | int kernel_getpeername(struct socket *sock, struct sockaddr *addr, | 3051 | int kernel_getpeername(struct socket *sock, struct sockaddr *addr, |
3039 | int *addrlen) | 3052 | int *addrlen) |
3040 | { | 3053 | { |
3041 | return sock->ops->getname(sock, addr, addrlen, 1); | 3054 | return sock->ops->getname(sock, addr, addrlen, 1); |
3042 | } | 3055 | } |
3056 | EXPORT_SYMBOL(kernel_getpeername); | ||
3043 | 3057 | ||
3044 | int kernel_getsockopt(struct socket *sock, int level, int optname, | 3058 | int kernel_getsockopt(struct socket *sock, int level, int optname, |
3045 | char *optval, int *optlen) | 3059 | char *optval, int *optlen) |
@@ -3056,6 +3070,7 @@ int kernel_getsockopt(struct socket *sock, int level, int optname, | |||
3056 | set_fs(oldfs); | 3070 | set_fs(oldfs); |
3057 | return err; | 3071 | return err; |
3058 | } | 3072 | } |
3073 | EXPORT_SYMBOL(kernel_getsockopt); | ||
3059 | 3074 | ||
3060 | int kernel_setsockopt(struct socket *sock, int level, int optname, | 3075 | int kernel_setsockopt(struct socket *sock, int level, int optname, |
3061 | char *optval, unsigned int optlen) | 3076 | char *optval, unsigned int optlen) |
@@ -3072,6 +3087,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname, | |||
3072 | set_fs(oldfs); | 3087 | set_fs(oldfs); |
3073 | return err; | 3088 | return err; |
3074 | } | 3089 | } |
3090 | EXPORT_SYMBOL(kernel_setsockopt); | ||
3075 | 3091 | ||
3076 | int kernel_sendpage(struct socket *sock, struct page *page, int offset, | 3092 | int kernel_sendpage(struct socket *sock, struct page *page, int offset, |
3077 | size_t size, int flags) | 3093 | size_t size, int flags) |
@@ -3083,6 +3099,7 @@ int kernel_sendpage(struct socket *sock, struct page *page, int offset, | |||
3083 | 3099 | ||
3084 | return sock_no_sendpage(sock, page, offset, size, flags); | 3100 | return sock_no_sendpage(sock, page, offset, size, flags); |
3085 | } | 3101 | } |
3102 | EXPORT_SYMBOL(kernel_sendpage); | ||
3086 | 3103 | ||
3087 | int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg) | 3104 | int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg) |
3088 | { | 3105 | { |
@@ -3095,33 +3112,10 @@ int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg) | |||
3095 | 3112 | ||
3096 | return err; | 3113 | return err; |
3097 | } | 3114 | } |
3115 | EXPORT_SYMBOL(kernel_sock_ioctl); | ||
3098 | 3116 | ||
3099 | int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how) | 3117 | int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how) |
3100 | { | 3118 | { |
3101 | return sock->ops->shutdown(sock, how); | 3119 | return sock->ops->shutdown(sock, how); |
3102 | } | 3120 | } |
3103 | |||
3104 | EXPORT_SYMBOL(sock_create); | ||
3105 | EXPORT_SYMBOL(sock_create_kern); | ||
3106 | EXPORT_SYMBOL(sock_create_lite); | ||
3107 | EXPORT_SYMBOL(sock_map_fd); | ||
3108 | EXPORT_SYMBOL(sock_recvmsg); | ||
3109 | EXPORT_SYMBOL(sock_register); | ||
3110 | EXPORT_SYMBOL(sock_release); | ||
3111 | EXPORT_SYMBOL(sock_sendmsg); | ||
3112 | EXPORT_SYMBOL(sock_unregister); | ||
3113 | EXPORT_SYMBOL(sock_wake_async); | ||
3114 | EXPORT_SYMBOL(sockfd_lookup); | ||
3115 | EXPORT_SYMBOL(kernel_sendmsg); | ||
3116 | EXPORT_SYMBOL(kernel_recvmsg); | ||
3117 | EXPORT_SYMBOL(kernel_bind); | ||
3118 | EXPORT_SYMBOL(kernel_listen); | ||
3119 | EXPORT_SYMBOL(kernel_accept); | ||
3120 | EXPORT_SYMBOL(kernel_connect); | ||
3121 | EXPORT_SYMBOL(kernel_getsockname); | ||
3122 | EXPORT_SYMBOL(kernel_getpeername); | ||
3123 | EXPORT_SYMBOL(kernel_getsockopt); | ||
3124 | EXPORT_SYMBOL(kernel_setsockopt); | ||
3125 | EXPORT_SYMBOL(kernel_sendpage); | ||
3126 | EXPORT_SYMBOL(kernel_sock_ioctl); | ||
3127 | EXPORT_SYMBOL(kernel_sock_shutdown); | 3121 | EXPORT_SYMBOL(kernel_sock_shutdown); |