0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 #include <linux/bpf-cgroup.h>
0056 #include <linux/ethtool.h>
0057 #include <linux/mm.h>
0058 #include <linux/socket.h>
0059 #include <linux/file.h>
0060 #include <linux/net.h>
0061 #include <linux/interrupt.h>
0062 #include <linux/thread_info.h>
0063 #include <linux/rcupdate.h>
0064 #include <linux/netdevice.h>
0065 #include <linux/proc_fs.h>
0066 #include <linux/seq_file.h>
0067 #include <linux/mutex.h>
0068 #include <linux/if_bridge.h>
0069 #include <linux/if_vlan.h>
0070 #include <linux/ptp_classify.h>
0071 #include <linux/init.h>
0072 #include <linux/poll.h>
0073 #include <linux/cache.h>
0074 #include <linux/module.h>
0075 #include <linux/highmem.h>
0076 #include <linux/mount.h>
0077 #include <linux/pseudo_fs.h>
0078 #include <linux/security.h>
0079 #include <linux/syscalls.h>
0080 #include <linux/compat.h>
0081 #include <linux/kmod.h>
0082 #include <linux/audit.h>
0083 #include <linux/wireless.h>
0084 #include <linux/nsproxy.h>
0085 #include <linux/magic.h>
0086 #include <linux/slab.h>
0087 #include <linux/xattr.h>
0088 #include <linux/nospec.h>
0089 #include <linux/indirect_call_wrapper.h>
0090
0091 #include <linux/uaccess.h>
0092 #include <asm/unistd.h>
0093
0094 #include <net/compat.h>
0095 #include <net/wext.h>
0096 #include <net/cls_cgroup.h>
0097
0098 #include <net/sock.h>
0099 #include <linux/netfilter.h>
0100
0101 #include <linux/if_tun.h>
0102 #include <linux/ipv6_route.h>
0103 #include <linux/route.h>
0104 #include <linux/termios.h>
0105 #include <linux/sockios.h>
0106 #include <net/busy_poll.h>
0107 #include <linux/errqueue.h>
0108 #include <linux/ptp_clock_kernel.h>
0109
0110 #ifdef CONFIG_NET_RX_BUSY_POLL
0111 unsigned int sysctl_net_busy_read __read_mostly;
0112 unsigned int sysctl_net_busy_poll __read_mostly;
0113 #endif
0114
0115 static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to);
0116 static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from);
0117 static int sock_mmap(struct file *file, struct vm_area_struct *vma);
0118
0119 static int sock_close(struct inode *inode, struct file *file);
0120 static __poll_t sock_poll(struct file *file,
0121 struct poll_table_struct *wait);
0122 static long sock_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
0123 #ifdef CONFIG_COMPAT
0124 static long compat_sock_ioctl(struct file *file,
0125 unsigned int cmd, unsigned long arg);
0126 #endif
0127 static int sock_fasync(int fd, struct file *filp, int on);
0128 static ssize_t sock_sendpage(struct file *file, struct page *page,
0129 int offset, size_t size, loff_t *ppos, int more);
0130 static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
0131 struct pipe_inode_info *pipe, size_t len,
0132 unsigned int flags);
0133
0134 #ifdef CONFIG_PROC_FS
0135 static void sock_show_fdinfo(struct seq_file *m, struct file *f)
0136 {
0137 struct socket *sock = f->private_data;
0138
0139 if (sock->ops->show_fdinfo)
0140 sock->ops->show_fdinfo(m, sock);
0141 }
0142 #else
0143 #define sock_show_fdinfo NULL
0144 #endif
0145
0146
0147
0148
0149
0150
0151 static const struct file_operations socket_file_ops = {
0152 .owner = THIS_MODULE,
0153 .llseek = no_llseek,
0154 .read_iter = sock_read_iter,
0155 .write_iter = sock_write_iter,
0156 .poll = sock_poll,
0157 .unlocked_ioctl = sock_ioctl,
0158 #ifdef CONFIG_COMPAT
0159 .compat_ioctl = compat_sock_ioctl,
0160 #endif
0161 .mmap = sock_mmap,
0162 .release = sock_close,
0163 .fasync = sock_fasync,
0164 .sendpage = sock_sendpage,
0165 .splice_write = generic_splice_sendpage,
0166 .splice_read = sock_splice_read,
0167 .show_fdinfo = sock_show_fdinfo,
0168 };
0169
0170 static const char * const pf_family_names[] = {
0171 [PF_UNSPEC] = "PF_UNSPEC",
0172 [PF_UNIX] = "PF_UNIX/PF_LOCAL",
0173 [PF_INET] = "PF_INET",
0174 [PF_AX25] = "PF_AX25",
0175 [PF_IPX] = "PF_IPX",
0176 [PF_APPLETALK] = "PF_APPLETALK",
0177 [PF_NETROM] = "PF_NETROM",
0178 [PF_BRIDGE] = "PF_BRIDGE",
0179 [PF_ATMPVC] = "PF_ATMPVC",
0180 [PF_X25] = "PF_X25",
0181 [PF_INET6] = "PF_INET6",
0182 [PF_ROSE] = "PF_ROSE",
0183 [PF_DECnet] = "PF_DECnet",
0184 [PF_NETBEUI] = "PF_NETBEUI",
0185 [PF_SECURITY] = "PF_SECURITY",
0186 [PF_KEY] = "PF_KEY",
0187 [PF_NETLINK] = "PF_NETLINK/PF_ROUTE",
0188 [PF_PACKET] = "PF_PACKET",
0189 [PF_ASH] = "PF_ASH",
0190 [PF_ECONET] = "PF_ECONET",
0191 [PF_ATMSVC] = "PF_ATMSVC",
0192 [PF_RDS] = "PF_RDS",
0193 [PF_SNA] = "PF_SNA",
0194 [PF_IRDA] = "PF_IRDA",
0195 [PF_PPPOX] = "PF_PPPOX",
0196 [PF_WANPIPE] = "PF_WANPIPE",
0197 [PF_LLC] = "PF_LLC",
0198 [PF_IB] = "PF_IB",
0199 [PF_MPLS] = "PF_MPLS",
0200 [PF_CAN] = "PF_CAN",
0201 [PF_TIPC] = "PF_TIPC",
0202 [PF_BLUETOOTH] = "PF_BLUETOOTH",
0203 [PF_IUCV] = "PF_IUCV",
0204 [PF_RXRPC] = "PF_RXRPC",
0205 [PF_ISDN] = "PF_ISDN",
0206 [PF_PHONET] = "PF_PHONET",
0207 [PF_IEEE802154] = "PF_IEEE802154",
0208 [PF_CAIF] = "PF_CAIF",
0209 [PF_ALG] = "PF_ALG",
0210 [PF_NFC] = "PF_NFC",
0211 [PF_VSOCK] = "PF_VSOCK",
0212 [PF_KCM] = "PF_KCM",
0213 [PF_QIPCRTR] = "PF_QIPCRTR",
0214 [PF_SMC] = "PF_SMC",
0215 [PF_XDP] = "PF_XDP",
0216 [PF_MCTP] = "PF_MCTP",
0217 };
0218
0219
0220
0221
0222
0223 static DEFINE_SPINLOCK(net_family_lock);
0224 static const struct net_proto_family __rcu *net_families[NPROTO] __read_mostly;
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243 int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr)
0244 {
0245 if (ulen < 0 || ulen > sizeof(struct sockaddr_storage))
0246 return -EINVAL;
0247 if (ulen == 0)
0248 return 0;
0249 if (copy_from_user(kaddr, uaddr, ulen))
0250 return -EFAULT;
0251 return audit_sockaddr(ulen, kaddr);
0252 }
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271 static int move_addr_to_user(struct sockaddr_storage *kaddr, int klen,
0272 void __user *uaddr, int __user *ulen)
0273 {
0274 int err;
0275 int len;
0276
0277 BUG_ON(klen > sizeof(struct sockaddr_storage));
0278 err = get_user(len, ulen);
0279 if (err)
0280 return err;
0281 if (len > klen)
0282 len = klen;
0283 if (len < 0)
0284 return -EINVAL;
0285 if (len) {
0286 if (audit_sockaddr(klen, kaddr))
0287 return -ENOMEM;
0288 if (copy_to_user(uaddr, kaddr, len))
0289 return -EFAULT;
0290 }
0291
0292
0293
0294
0295 return __put_user(klen, ulen);
0296 }
0297
0298 static struct kmem_cache *sock_inode_cachep __ro_after_init;
0299
0300 static struct inode *sock_alloc_inode(struct super_block *sb)
0301 {
0302 struct socket_alloc *ei;
0303
0304 ei = alloc_inode_sb(sb, sock_inode_cachep, GFP_KERNEL);
0305 if (!ei)
0306 return NULL;
0307 init_waitqueue_head(&ei->socket.wq.wait);
0308 ei->socket.wq.fasync_list = NULL;
0309 ei->socket.wq.flags = 0;
0310
0311 ei->socket.state = SS_UNCONNECTED;
0312 ei->socket.flags = 0;
0313 ei->socket.ops = NULL;
0314 ei->socket.sk = NULL;
0315 ei->socket.file = NULL;
0316
0317 return &ei->vfs_inode;
0318 }
0319
0320 static void sock_free_inode(struct inode *inode)
0321 {
0322 struct socket_alloc *ei;
0323
0324 ei = container_of(inode, struct socket_alloc, vfs_inode);
0325 kmem_cache_free(sock_inode_cachep, ei);
0326 }
0327
0328 static void init_once(void *foo)
0329 {
0330 struct socket_alloc *ei = (struct socket_alloc *)foo;
0331
0332 inode_init_once(&ei->vfs_inode);
0333 }
0334
0335 static void init_inodecache(void)
0336 {
0337 sock_inode_cachep = kmem_cache_create("sock_inode_cache",
0338 sizeof(struct socket_alloc),
0339 0,
0340 (SLAB_HWCACHE_ALIGN |
0341 SLAB_RECLAIM_ACCOUNT |
0342 SLAB_MEM_SPREAD | SLAB_ACCOUNT),
0343 init_once);
0344 BUG_ON(sock_inode_cachep == NULL);
0345 }
0346
0347 static const struct super_operations sockfs_ops = {
0348 .alloc_inode = sock_alloc_inode,
0349 .free_inode = sock_free_inode,
0350 .statfs = simple_statfs,
0351 };
0352
0353
0354
0355
0356 static char *sockfs_dname(struct dentry *dentry, char *buffer, int buflen)
0357 {
0358 return dynamic_dname(dentry, buffer, buflen, "socket:[%lu]",
0359 d_inode(dentry)->i_ino);
0360 }
0361
0362 static const struct dentry_operations sockfs_dentry_operations = {
0363 .d_dname = sockfs_dname,
0364 };
0365
0366 static int sockfs_xattr_get(const struct xattr_handler *handler,
0367 struct dentry *dentry, struct inode *inode,
0368 const char *suffix, void *value, size_t size)
0369 {
0370 if (value) {
0371 if (dentry->d_name.len + 1 > size)
0372 return -ERANGE;
0373 memcpy(value, dentry->d_name.name, dentry->d_name.len + 1);
0374 }
0375 return dentry->d_name.len + 1;
0376 }
0377
0378 #define XATTR_SOCKPROTONAME_SUFFIX "sockprotoname"
0379 #define XATTR_NAME_SOCKPROTONAME (XATTR_SYSTEM_PREFIX XATTR_SOCKPROTONAME_SUFFIX)
0380 #define XATTR_NAME_SOCKPROTONAME_LEN (sizeof(XATTR_NAME_SOCKPROTONAME)-1)
0381
0382 static const struct xattr_handler sockfs_xattr_handler = {
0383 .name = XATTR_NAME_SOCKPROTONAME,
0384 .get = sockfs_xattr_get,
0385 };
0386
0387 static int sockfs_security_xattr_set(const struct xattr_handler *handler,
0388 struct user_namespace *mnt_userns,
0389 struct dentry *dentry, struct inode *inode,
0390 const char *suffix, const void *value,
0391 size_t size, int flags)
0392 {
0393
0394 return -EAGAIN;
0395 }
0396
0397 static const struct xattr_handler sockfs_security_xattr_handler = {
0398 .prefix = XATTR_SECURITY_PREFIX,
0399 .set = sockfs_security_xattr_set,
0400 };
0401
0402 static const struct xattr_handler *sockfs_xattr_handlers[] = {
0403 &sockfs_xattr_handler,
0404 &sockfs_security_xattr_handler,
0405 NULL
0406 };
0407
0408 static int sockfs_init_fs_context(struct fs_context *fc)
0409 {
0410 struct pseudo_fs_context *ctx = init_pseudo(fc, SOCKFS_MAGIC);
0411 if (!ctx)
0412 return -ENOMEM;
0413 ctx->ops = &sockfs_ops;
0414 ctx->dops = &sockfs_dentry_operations;
0415 ctx->xattr = sockfs_xattr_handlers;
0416 return 0;
0417 }
0418
0419 static struct vfsmount *sock_mnt __read_mostly;
0420
0421 static struct file_system_type sock_fs_type = {
0422 .name = "sockfs",
0423 .init_fs_context = sockfs_init_fs_context,
0424 .kill_sb = kill_anon_super,
0425 };
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456 struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname)
0457 {
0458 struct file *file;
0459
0460 if (!dname)
0461 dname = sock->sk ? sock->sk->sk_prot_creator->name : "";
0462
0463 file = alloc_file_pseudo(SOCK_INODE(sock), sock_mnt, dname,
0464 O_RDWR | (flags & O_NONBLOCK),
0465 &socket_file_ops);
0466 if (IS_ERR(file)) {
0467 sock_release(sock);
0468 return file;
0469 }
0470
0471 sock->file = file;
0472 file->private_data = sock;
0473 stream_open(SOCK_INODE(sock), file);
0474 return file;
0475 }
0476 EXPORT_SYMBOL(sock_alloc_file);
0477
0478 static int sock_map_fd(struct socket *sock, int flags)
0479 {
0480 struct file *newfile;
0481 int fd = get_unused_fd_flags(flags);
0482 if (unlikely(fd < 0)) {
0483 sock_release(sock);
0484 return fd;
0485 }
0486
0487 newfile = sock_alloc_file(sock, flags, NULL);
0488 if (!IS_ERR(newfile)) {
0489 fd_install(fd, newfile);
0490 return fd;
0491 }
0492
0493 put_unused_fd(fd);
0494 return PTR_ERR(newfile);
0495 }
0496
0497
0498
0499
0500
0501
0502
0503
0504 struct socket *sock_from_file(struct file *file)
0505 {
0506 if (file->f_op == &socket_file_ops)
0507 return file->private_data;
0508
0509 return NULL;
0510 }
0511 EXPORT_SYMBOL(sock_from_file);
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526 struct socket *sockfd_lookup(int fd, int *err)
0527 {
0528 struct file *file;
0529 struct socket *sock;
0530
0531 file = fget(fd);
0532 if (!file) {
0533 *err = -EBADF;
0534 return NULL;
0535 }
0536
0537 sock = sock_from_file(file);
0538 if (!sock) {
0539 *err = -ENOTSOCK;
0540 fput(file);
0541 }
0542 return sock;
0543 }
0544 EXPORT_SYMBOL(sockfd_lookup);
0545
0546 static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed)
0547 {
0548 struct fd f = fdget(fd);
0549 struct socket *sock;
0550
0551 *err = -EBADF;
0552 if (f.file) {
0553 sock = sock_from_file(f.file);
0554 if (likely(sock)) {
0555 *fput_needed = f.flags & FDPUT_FPUT;
0556 return sock;
0557 }
0558 *err = -ENOTSOCK;
0559 fdput(f);
0560 }
0561 return NULL;
0562 }
0563
0564 static ssize_t sockfs_listxattr(struct dentry *dentry, char *buffer,
0565 size_t size)
0566 {
0567 ssize_t len;
0568 ssize_t used = 0;
0569
0570 len = security_inode_listsecurity(d_inode(dentry), buffer, size);
0571 if (len < 0)
0572 return len;
0573 used += len;
0574 if (buffer) {
0575 if (size < used)
0576 return -ERANGE;
0577 buffer += len;
0578 }
0579
0580 len = (XATTR_NAME_SOCKPROTONAME_LEN + 1);
0581 used += len;
0582 if (buffer) {
0583 if (size < used)
0584 return -ERANGE;
0585 memcpy(buffer, XATTR_NAME_SOCKPROTONAME, len);
0586 buffer += len;
0587 }
0588
0589 return used;
0590 }
0591
0592 static int sockfs_setattr(struct user_namespace *mnt_userns,
0593 struct dentry *dentry, struct iattr *iattr)
0594 {
0595 int err = simple_setattr(&init_user_ns, dentry, iattr);
0596
0597 if (!err && (iattr->ia_valid & ATTR_UID)) {
0598 struct socket *sock = SOCKET_I(d_inode(dentry));
0599
0600 if (sock->sk)
0601 sock->sk->sk_uid = iattr->ia_uid;
0602 else
0603 err = -ENOENT;
0604 }
0605
0606 return err;
0607 }
0608
0609 static const struct inode_operations sockfs_inode_ops = {
0610 .listxattr = sockfs_listxattr,
0611 .setattr = sockfs_setattr,
0612 };
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622 struct socket *sock_alloc(void)
0623 {
0624 struct inode *inode;
0625 struct socket *sock;
0626
0627 inode = new_inode_pseudo(sock_mnt->mnt_sb);
0628 if (!inode)
0629 return NULL;
0630
0631 sock = SOCKET_I(inode);
0632
0633 inode->i_ino = get_next_ino();
0634 inode->i_mode = S_IFSOCK | S_IRWXUGO;
0635 inode->i_uid = current_fsuid();
0636 inode->i_gid = current_fsgid();
0637 inode->i_op = &sockfs_inode_ops;
0638
0639 return sock;
0640 }
0641 EXPORT_SYMBOL(sock_alloc);
0642
0643 static void __sock_release(struct socket *sock, struct inode *inode)
0644 {
0645 if (sock->ops) {
0646 struct module *owner = sock->ops->owner;
0647
0648 if (inode)
0649 inode_lock(inode);
0650 sock->ops->release(sock);
0651 sock->sk = NULL;
0652 if (inode)
0653 inode_unlock(inode);
0654 sock->ops = NULL;
0655 module_put(owner);
0656 }
0657
0658 if (sock->wq.fasync_list)
0659 pr_err("%s: fasync list not empty!\n", __func__);
0660
0661 if (!sock->file) {
0662 iput(SOCK_INODE(sock));
0663 return;
0664 }
0665 sock->file = NULL;
0666 }
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676 void sock_release(struct socket *sock)
0677 {
0678 __sock_release(sock, NULL);
0679 }
0680 EXPORT_SYMBOL(sock_release);
0681
0682 void __sock_tx_timestamp(__u16 tsflags, __u8 *tx_flags)
0683 {
0684 u8 flags = *tx_flags;
0685
0686 if (tsflags & SOF_TIMESTAMPING_TX_HARDWARE) {
0687 flags |= SKBTX_HW_TSTAMP;
0688
0689
0690
0691
0692
0693
0694 if (tsflags & SOF_TIMESTAMPING_BIND_PHC)
0695 flags |= SKBTX_HW_TSTAMP_USE_CYCLES;
0696 }
0697
0698 if (tsflags & SOF_TIMESTAMPING_TX_SOFTWARE)
0699 flags |= SKBTX_SW_TSTAMP;
0700
0701 if (tsflags & SOF_TIMESTAMPING_TX_SCHED)
0702 flags |= SKBTX_SCHED_TSTAMP;
0703
0704 *tx_flags = flags;
0705 }
0706 EXPORT_SYMBOL(__sock_tx_timestamp);
0707
0708 INDIRECT_CALLABLE_DECLARE(int inet_sendmsg(struct socket *, struct msghdr *,
0709 size_t));
0710 INDIRECT_CALLABLE_DECLARE(int inet6_sendmsg(struct socket *, struct msghdr *,
0711 size_t));
0712 static inline int sock_sendmsg_nosec(struct socket *sock, struct msghdr *msg)
0713 {
0714 int ret = INDIRECT_CALL_INET(sock->ops->sendmsg, inet6_sendmsg,
0715 inet_sendmsg, sock, msg,
0716 msg_data_left(msg));
0717 BUG_ON(ret == -EIOCBQUEUED);
0718 return ret;
0719 }
0720
0721
0722
0723
0724
0725
0726
0727
0728
0729 int sock_sendmsg(struct socket *sock, struct msghdr *msg)
0730 {
0731 int err = security_socket_sendmsg(sock, msg,
0732 msg_data_left(msg));
0733
0734 return err ?: sock_sendmsg_nosec(sock, msg);
0735 }
0736 EXPORT_SYMBOL(sock_sendmsg);
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749
0750 int kernel_sendmsg(struct socket *sock, struct msghdr *msg,
0751 struct kvec *vec, size_t num, size_t size)
0752 {
0753 iov_iter_kvec(&msg->msg_iter, WRITE, vec, num, size);
0754 return sock_sendmsg(sock, msg);
0755 }
0756 EXPORT_SYMBOL(kernel_sendmsg);
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771 int kernel_sendmsg_locked(struct sock *sk, struct msghdr *msg,
0772 struct kvec *vec, size_t num, size_t size)
0773 {
0774 struct socket *sock = sk->sk_socket;
0775
0776 if (!sock->ops->sendmsg_locked)
0777 return sock_no_sendmsg_locked(sk, msg, size);
0778
0779 iov_iter_kvec(&msg->msg_iter, WRITE, vec, num, size);
0780
0781 return sock->ops->sendmsg_locked(sk, msg, msg_data_left(msg));
0782 }
0783 EXPORT_SYMBOL(kernel_sendmsg_locked);
0784
0785 static bool skb_is_err_queue(const struct sk_buff *skb)
0786 {
0787
0788
0789
0790
0791
0792 return skb->pkt_type == PACKET_OUTGOING;
0793 }
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803 static bool skb_is_swtx_tstamp(const struct sk_buff *skb, int false_tstamp)
0804 {
0805 return skb->tstamp && !false_tstamp && skb_is_err_queue(skb);
0806 }
0807
0808 static ktime_t get_timestamp(struct sock *sk, struct sk_buff *skb, int *if_index)
0809 {
0810 bool cycles = sk->sk_tsflags & SOF_TIMESTAMPING_BIND_PHC;
0811 struct skb_shared_hwtstamps *shhwtstamps = skb_hwtstamps(skb);
0812 struct net_device *orig_dev;
0813 ktime_t hwtstamp;
0814
0815 rcu_read_lock();
0816 orig_dev = dev_get_by_napi_id(skb_napi_id(skb));
0817 if (orig_dev) {
0818 *if_index = orig_dev->ifindex;
0819 hwtstamp = netdev_get_tstamp(orig_dev, shhwtstamps, cycles);
0820 } else {
0821 hwtstamp = shhwtstamps->hwtstamp;
0822 }
0823 rcu_read_unlock();
0824
0825 return hwtstamp;
0826 }
0827
0828 static void put_ts_pktinfo(struct msghdr *msg, struct sk_buff *skb,
0829 int if_index)
0830 {
0831 struct scm_ts_pktinfo ts_pktinfo;
0832 struct net_device *orig_dev;
0833
0834 if (!skb_mac_header_was_set(skb))
0835 return;
0836
0837 memset(&ts_pktinfo, 0, sizeof(ts_pktinfo));
0838
0839 if (!if_index) {
0840 rcu_read_lock();
0841 orig_dev = dev_get_by_napi_id(skb_napi_id(skb));
0842 if (orig_dev)
0843 if_index = orig_dev->ifindex;
0844 rcu_read_unlock();
0845 }
0846 ts_pktinfo.if_index = if_index;
0847
0848 ts_pktinfo.pkt_length = skb->len - skb_mac_offset(skb);
0849 put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMPING_PKTINFO,
0850 sizeof(ts_pktinfo), &ts_pktinfo);
0851 }
0852
0853
0854
0855
0856 void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
0857 struct sk_buff *skb)
0858 {
0859 int need_software_tstamp = sock_flag(sk, SOCK_RCVTSTAMP);
0860 int new_tstamp = sock_flag(sk, SOCK_TSTAMP_NEW);
0861 struct scm_timestamping_internal tss;
0862
0863 int empty = 1, false_tstamp = 0;
0864 struct skb_shared_hwtstamps *shhwtstamps =
0865 skb_hwtstamps(skb);
0866 int if_index;
0867 ktime_t hwtstamp;
0868
0869
0870
0871 if (need_software_tstamp && skb->tstamp == 0) {
0872 __net_timestamp(skb);
0873 false_tstamp = 1;
0874 }
0875
0876 if (need_software_tstamp) {
0877 if (!sock_flag(sk, SOCK_RCVTSTAMPNS)) {
0878 if (new_tstamp) {
0879 struct __kernel_sock_timeval tv;
0880
0881 skb_get_new_timestamp(skb, &tv);
0882 put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_NEW,
0883 sizeof(tv), &tv);
0884 } else {
0885 struct __kernel_old_timeval tv;
0886
0887 skb_get_timestamp(skb, &tv);
0888 put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD,
0889 sizeof(tv), &tv);
0890 }
0891 } else {
0892 if (new_tstamp) {
0893 struct __kernel_timespec ts;
0894
0895 skb_get_new_timestampns(skb, &ts);
0896 put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_NEW,
0897 sizeof(ts), &ts);
0898 } else {
0899 struct __kernel_old_timespec ts;
0900
0901 skb_get_timestampns(skb, &ts);
0902 put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_OLD,
0903 sizeof(ts), &ts);
0904 }
0905 }
0906 }
0907
0908 memset(&tss, 0, sizeof(tss));
0909 if ((sk->sk_tsflags & SOF_TIMESTAMPING_SOFTWARE) &&
0910 ktime_to_timespec64_cond(skb->tstamp, tss.ts + 0))
0911 empty = 0;
0912 if (shhwtstamps &&
0913 (sk->sk_tsflags & SOF_TIMESTAMPING_RAW_HARDWARE) &&
0914 !skb_is_swtx_tstamp(skb, false_tstamp)) {
0915 if_index = 0;
0916 if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP_NETDEV)
0917 hwtstamp = get_timestamp(sk, skb, &if_index);
0918 else
0919 hwtstamp = shhwtstamps->hwtstamp;
0920
0921 if (sk->sk_tsflags & SOF_TIMESTAMPING_BIND_PHC)
0922 hwtstamp = ptp_convert_timestamp(&hwtstamp,
0923 sk->sk_bind_phc);
0924
0925 if (ktime_to_timespec64_cond(hwtstamp, tss.ts + 2)) {
0926 empty = 0;
0927
0928 if ((sk->sk_tsflags & SOF_TIMESTAMPING_OPT_PKTINFO) &&
0929 !skb_is_err_queue(skb))
0930 put_ts_pktinfo(msg, skb, if_index);
0931 }
0932 }
0933 if (!empty) {
0934 if (sock_flag(sk, SOCK_TSTAMP_NEW))
0935 put_cmsg_scm_timestamping64(msg, &tss);
0936 else
0937 put_cmsg_scm_timestamping(msg, &tss);
0938
0939 if (skb_is_err_queue(skb) && skb->len &&
0940 SKB_EXT_ERR(skb)->opt_stats)
0941 put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMPING_OPT_STATS,
0942 skb->len, skb->data);
0943 }
0944 }
0945 EXPORT_SYMBOL_GPL(__sock_recv_timestamp);
0946
0947 void __sock_recv_wifi_status(struct msghdr *msg, struct sock *sk,
0948 struct sk_buff *skb)
0949 {
0950 int ack;
0951
0952 if (!sock_flag(sk, SOCK_WIFI_STATUS))
0953 return;
0954 if (!skb->wifi_acked_valid)
0955 return;
0956
0957 ack = skb->wifi_acked;
0958
0959 put_cmsg(msg, SOL_SOCKET, SCM_WIFI_STATUS, sizeof(ack), &ack);
0960 }
0961 EXPORT_SYMBOL_GPL(__sock_recv_wifi_status);
0962
0963 static inline void sock_recv_drops(struct msghdr *msg, struct sock *sk,
0964 struct sk_buff *skb)
0965 {
0966 if (sock_flag(sk, SOCK_RXQ_OVFL) && skb && SOCK_SKB_CB(skb)->dropcount)
0967 put_cmsg(msg, SOL_SOCKET, SO_RXQ_OVFL,
0968 sizeof(__u32), &SOCK_SKB_CB(skb)->dropcount);
0969 }
0970
0971 static void sock_recv_mark(struct msghdr *msg, struct sock *sk,
0972 struct sk_buff *skb)
0973 {
0974 if (sock_flag(sk, SOCK_RCVMARK) && skb)
0975 put_cmsg(msg, SOL_SOCKET, SO_MARK, sizeof(__u32),
0976 &skb->mark);
0977 }
0978
0979 void __sock_recv_cmsgs(struct msghdr *msg, struct sock *sk,
0980 struct sk_buff *skb)
0981 {
0982 sock_recv_timestamp(msg, sk, skb);
0983 sock_recv_drops(msg, sk, skb);
0984 sock_recv_mark(msg, sk, skb);
0985 }
0986 EXPORT_SYMBOL_GPL(__sock_recv_cmsgs);
0987
0988 INDIRECT_CALLABLE_DECLARE(int inet_recvmsg(struct socket *, struct msghdr *,
0989 size_t, int));
0990 INDIRECT_CALLABLE_DECLARE(int inet6_recvmsg(struct socket *, struct msghdr *,
0991 size_t, int));
0992 static inline int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg,
0993 int flags)
0994 {
0995 return INDIRECT_CALL_INET(sock->ops->recvmsg, inet6_recvmsg,
0996 inet_recvmsg, sock, msg, msg_data_left(msg),
0997 flags);
0998 }
0999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009 int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags)
1010 {
1011 int err = security_socket_recvmsg(sock, msg, msg_data_left(msg), flags);
1012
1013 return err ?: sock_recvmsg_nosec(sock, msg, flags);
1014 }
1015 EXPORT_SYMBOL(sock_recvmsg);
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033 int kernel_recvmsg(struct socket *sock, struct msghdr *msg,
1034 struct kvec *vec, size_t num, size_t size, int flags)
1035 {
1036 msg->msg_control_is_user = false;
1037 iov_iter_kvec(&msg->msg_iter, READ, vec, num, size);
1038 return sock_recvmsg(sock, msg, flags);
1039 }
1040 EXPORT_SYMBOL(kernel_recvmsg);
1041
1042 static ssize_t sock_sendpage(struct file *file, struct page *page,
1043 int offset, size_t size, loff_t *ppos, int more)
1044 {
1045 struct socket *sock;
1046 int flags;
1047
1048 sock = file->private_data;
1049
1050 flags = (file->f_flags & O_NONBLOCK) ? MSG_DONTWAIT : 0;
1051
1052 flags |= more;
1053
1054 return kernel_sendpage(sock, page, offset, size, flags);
1055 }
1056
1057 static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
1058 struct pipe_inode_info *pipe, size_t len,
1059 unsigned int flags)
1060 {
1061 struct socket *sock = file->private_data;
1062
1063 if (unlikely(!sock->ops->splice_read))
1064 return generic_file_splice_read(file, ppos, pipe, len, flags);
1065
1066 return sock->ops->splice_read(sock, ppos, pipe, len, flags);
1067 }
1068
1069 static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to)
1070 {
1071 struct file *file = iocb->ki_filp;
1072 struct socket *sock = file->private_data;
1073 struct msghdr msg = {.msg_iter = *to,
1074 .msg_iocb = iocb};
1075 ssize_t res;
1076
1077 if (file->f_flags & O_NONBLOCK || (iocb->ki_flags & IOCB_NOWAIT))
1078 msg.msg_flags = MSG_DONTWAIT;
1079
1080 if (iocb->ki_pos != 0)
1081 return -ESPIPE;
1082
1083 if (!iov_iter_count(to))
1084 return 0;
1085
1086 res = sock_recvmsg(sock, &msg, msg.msg_flags);
1087 *to = msg.msg_iter;
1088 return res;
1089 }
1090
1091 static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from)
1092 {
1093 struct file *file = iocb->ki_filp;
1094 struct socket *sock = file->private_data;
1095 struct msghdr msg = {.msg_iter = *from,
1096 .msg_iocb = iocb};
1097 ssize_t res;
1098
1099 if (iocb->ki_pos != 0)
1100 return -ESPIPE;
1101
1102 if (file->f_flags & O_NONBLOCK || (iocb->ki_flags & IOCB_NOWAIT))
1103 msg.msg_flags = MSG_DONTWAIT;
1104
1105 if (sock->type == SOCK_SEQPACKET)
1106 msg.msg_flags |= MSG_EOR;
1107
1108 res = sock_sendmsg(sock, &msg);
1109 *from = msg.msg_iter;
1110 return res;
1111 }
1112
1113
1114
1115
1116
1117
1118 static DEFINE_MUTEX(br_ioctl_mutex);
1119 static int (*br_ioctl_hook)(struct net *net, struct net_bridge *br,
1120 unsigned int cmd, struct ifreq *ifr,
1121 void __user *uarg);
1122
1123 void brioctl_set(int (*hook)(struct net *net, struct net_bridge *br,
1124 unsigned int cmd, struct ifreq *ifr,
1125 void __user *uarg))
1126 {
1127 mutex_lock(&br_ioctl_mutex);
1128 br_ioctl_hook = hook;
1129 mutex_unlock(&br_ioctl_mutex);
1130 }
1131 EXPORT_SYMBOL(brioctl_set);
1132
1133 int br_ioctl_call(struct net *net, struct net_bridge *br, unsigned int cmd,
1134 struct ifreq *ifr, void __user *uarg)
1135 {
1136 int err = -ENOPKG;
1137
1138 if (!br_ioctl_hook)
1139 request_module("bridge");
1140
1141 mutex_lock(&br_ioctl_mutex);
1142 if (br_ioctl_hook)
1143 err = br_ioctl_hook(net, br, cmd, ifr, uarg);
1144 mutex_unlock(&br_ioctl_mutex);
1145
1146 return err;
1147 }
1148
1149 static DEFINE_MUTEX(vlan_ioctl_mutex);
1150 static int (*vlan_ioctl_hook) (struct net *, void __user *arg);
1151
1152 void vlan_ioctl_set(int (*hook) (struct net *, void __user *))
1153 {
1154 mutex_lock(&vlan_ioctl_mutex);
1155 vlan_ioctl_hook = hook;
1156 mutex_unlock(&vlan_ioctl_mutex);
1157 }
1158 EXPORT_SYMBOL(vlan_ioctl_set);
1159
1160 static long sock_do_ioctl(struct net *net, struct socket *sock,
1161 unsigned int cmd, unsigned long arg)
1162 {
1163 struct ifreq ifr;
1164 bool need_copyout;
1165 int err;
1166 void __user *argp = (void __user *)arg;
1167 void __user *data;
1168
1169 err = sock->ops->ioctl(sock, cmd, arg);
1170
1171
1172
1173
1174
1175 if (err != -ENOIOCTLCMD)
1176 return err;
1177
1178 if (!is_socket_ioctl_cmd(cmd))
1179 return -ENOTTY;
1180
1181 if (get_user_ifreq(&ifr, &data, argp))
1182 return -EFAULT;
1183 err = dev_ioctl(net, cmd, &ifr, data, &need_copyout);
1184 if (!err && need_copyout)
1185 if (put_user_ifreq(&ifr, argp))
1186 return -EFAULT;
1187
1188 return err;
1189 }
1190
1191
1192
1193
1194
1195
1196 static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
1197 {
1198 struct socket *sock;
1199 struct sock *sk;
1200 void __user *argp = (void __user *)arg;
1201 int pid, err;
1202 struct net *net;
1203
1204 sock = file->private_data;
1205 sk = sock->sk;
1206 net = sock_net(sk);
1207 if (unlikely(cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15))) {
1208 struct ifreq ifr;
1209 void __user *data;
1210 bool need_copyout;
1211 if (get_user_ifreq(&ifr, &data, argp))
1212 return -EFAULT;
1213 err = dev_ioctl(net, cmd, &ifr, data, &need_copyout);
1214 if (!err && need_copyout)
1215 if (put_user_ifreq(&ifr, argp))
1216 return -EFAULT;
1217 } else
1218 #ifdef CONFIG_WEXT_CORE
1219 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
1220 err = wext_handle_ioctl(net, cmd, argp);
1221 } else
1222 #endif
1223 switch (cmd) {
1224 case FIOSETOWN:
1225 case SIOCSPGRP:
1226 err = -EFAULT;
1227 if (get_user(pid, (int __user *)argp))
1228 break;
1229 err = f_setown(sock->file, pid, 1);
1230 break;
1231 case FIOGETOWN:
1232 case SIOCGPGRP:
1233 err = put_user(f_getown(sock->file),
1234 (int __user *)argp);
1235 break;
1236 case SIOCGIFBR:
1237 case SIOCSIFBR:
1238 case SIOCBRADDBR:
1239 case SIOCBRDELBR:
1240 err = br_ioctl_call(net, NULL, cmd, NULL, argp);
1241 break;
1242 case SIOCGIFVLAN:
1243 case SIOCSIFVLAN:
1244 err = -ENOPKG;
1245 if (!vlan_ioctl_hook)
1246 request_module("8021q");
1247
1248 mutex_lock(&vlan_ioctl_mutex);
1249 if (vlan_ioctl_hook)
1250 err = vlan_ioctl_hook(net, argp);
1251 mutex_unlock(&vlan_ioctl_mutex);
1252 break;
1253 case SIOCGSKNS:
1254 err = -EPERM;
1255 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
1256 break;
1257
1258 err = open_related_ns(&net->ns, get_net_ns);
1259 break;
1260 case SIOCGSTAMP_OLD:
1261 case SIOCGSTAMPNS_OLD:
1262 if (!sock->ops->gettstamp) {
1263 err = -ENOIOCTLCMD;
1264 break;
1265 }
1266 err = sock->ops->gettstamp(sock, argp,
1267 cmd == SIOCGSTAMP_OLD,
1268 !IS_ENABLED(CONFIG_64BIT));
1269 break;
1270 case SIOCGSTAMP_NEW:
1271 case SIOCGSTAMPNS_NEW:
1272 if (!sock->ops->gettstamp) {
1273 err = -ENOIOCTLCMD;
1274 break;
1275 }
1276 err = sock->ops->gettstamp(sock, argp,
1277 cmd == SIOCGSTAMP_NEW,
1278 false);
1279 break;
1280
1281 case SIOCGIFCONF:
1282 err = dev_ifconf(net, argp);
1283 break;
1284
1285 default:
1286 err = sock_do_ioctl(net, sock, cmd, arg);
1287 break;
1288 }
1289 return err;
1290 }
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305 int sock_create_lite(int family, int type, int protocol, struct socket **res)
1306 {
1307 int err;
1308 struct socket *sock = NULL;
1309
1310 err = security_socket_create(family, type, protocol, 1);
1311 if (err)
1312 goto out;
1313
1314 sock = sock_alloc();
1315 if (!sock) {
1316 err = -ENOMEM;
1317 goto out;
1318 }
1319
1320 sock->type = type;
1321 err = security_socket_post_create(sock, family, type, protocol, 1);
1322 if (err)
1323 goto out_release;
1324
1325 out:
1326 *res = sock;
1327 return err;
1328 out_release:
1329 sock_release(sock);
1330 sock = NULL;
1331 goto out;
1332 }
1333 EXPORT_SYMBOL(sock_create_lite);
1334
1335
1336 static __poll_t sock_poll(struct file *file, poll_table *wait)
1337 {
1338 struct socket *sock = file->private_data;
1339 __poll_t events = poll_requested_events(wait), flag = 0;
1340
1341 if (!sock->ops->poll)
1342 return 0;
1343
1344 if (sk_can_busy_loop(sock->sk)) {
1345
1346 if (events & POLL_BUSY_LOOP)
1347 sk_busy_loop(sock->sk, 1);
1348
1349
1350 flag = POLL_BUSY_LOOP;
1351 }
1352
1353 return sock->ops->poll(file, sock, wait) | flag;
1354 }
1355
1356 static int sock_mmap(struct file *file, struct vm_area_struct *vma)
1357 {
1358 struct socket *sock = file->private_data;
1359
1360 return sock->ops->mmap(file, sock, vma);
1361 }
1362
1363 static int sock_close(struct inode *inode, struct file *filp)
1364 {
1365 __sock_release(SOCKET_I(inode), inode);
1366 return 0;
1367 }
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380 static int sock_fasync(int fd, struct file *filp, int on)
1381 {
1382 struct socket *sock = filp->private_data;
1383 struct sock *sk = sock->sk;
1384 struct socket_wq *wq = &sock->wq;
1385
1386 if (sk == NULL)
1387 return -EINVAL;
1388
1389 lock_sock(sk);
1390 fasync_helper(fd, filp, on, &wq->fasync_list);
1391
1392 if (!wq->fasync_list)
1393 sock_reset_flag(sk, SOCK_FASYNC);
1394 else
1395 sock_set_flag(sk, SOCK_FASYNC);
1396
1397 release_sock(sk);
1398 return 0;
1399 }
1400
1401
1402
1403 int sock_wake_async(struct socket_wq *wq, int how, int band)
1404 {
1405 if (!wq || !wq->fasync_list)
1406 return -1;
1407
1408 switch (how) {
1409 case SOCK_WAKE_WAITD:
1410 if (test_bit(SOCKWQ_ASYNC_WAITDATA, &wq->flags))
1411 break;
1412 goto call_kill;
1413 case SOCK_WAKE_SPACE:
1414 if (!test_and_clear_bit(SOCKWQ_ASYNC_NOSPACE, &wq->flags))
1415 break;
1416 fallthrough;
1417 case SOCK_WAKE_IO:
1418 call_kill:
1419 kill_fasync(&wq->fasync_list, SIGIO, band);
1420 break;
1421 case SOCK_WAKE_URG:
1422 kill_fasync(&wq->fasync_list, SIGURG, band);
1423 }
1424
1425 return 0;
1426 }
1427 EXPORT_SYMBOL(sock_wake_async);
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444 int __sock_create(struct net *net, int family, int type, int protocol,
1445 struct socket **res, int kern)
1446 {
1447 int err;
1448 struct socket *sock;
1449 const struct net_proto_family *pf;
1450
1451
1452
1453
1454 if (family < 0 || family >= NPROTO)
1455 return -EAFNOSUPPORT;
1456 if (type < 0 || type >= SOCK_MAX)
1457 return -EINVAL;
1458
1459
1460
1461
1462
1463
1464 if (family == PF_INET && type == SOCK_PACKET) {
1465 pr_info_once("%s uses obsolete (PF_INET,SOCK_PACKET)\n",
1466 current->comm);
1467 family = PF_PACKET;
1468 }
1469
1470 err = security_socket_create(family, type, protocol, kern);
1471 if (err)
1472 return err;
1473
1474
1475
1476
1477
1478
1479 sock = sock_alloc();
1480 if (!sock) {
1481 net_warn_ratelimited("socket: no more sockets\n");
1482 return -ENFILE;
1483
1484 }
1485
1486 sock->type = type;
1487
1488 #ifdef CONFIG_MODULES
1489
1490
1491
1492
1493
1494
1495 if (rcu_access_pointer(net_families[family]) == NULL)
1496 request_module("net-pf-%d", family);
1497 #endif
1498
1499 rcu_read_lock();
1500 pf = rcu_dereference(net_families[family]);
1501 err = -EAFNOSUPPORT;
1502 if (!pf)
1503 goto out_release;
1504
1505
1506
1507
1508
1509 if (!try_module_get(pf->owner))
1510 goto out_release;
1511
1512
1513 rcu_read_unlock();
1514
1515 err = pf->create(net, sock, protocol, kern);
1516 if (err < 0)
1517 goto out_module_put;
1518
1519
1520
1521
1522
1523 if (!try_module_get(sock->ops->owner))
1524 goto out_module_busy;
1525
1526
1527
1528
1529
1530 module_put(pf->owner);
1531 err = security_socket_post_create(sock, family, type, protocol, kern);
1532 if (err)
1533 goto out_sock_release;
1534 *res = sock;
1535
1536 return 0;
1537
1538 out_module_busy:
1539 err = -EAFNOSUPPORT;
1540 out_module_put:
1541 sock->ops = NULL;
1542 module_put(pf->owner);
1543 out_sock_release:
1544 sock_release(sock);
1545 return err;
1546
1547 out_release:
1548 rcu_read_unlock();
1549 goto out_sock_release;
1550 }
1551 EXPORT_SYMBOL(__sock_create);
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564 int sock_create(int family, int type, int protocol, struct socket **res)
1565 {
1566 return __sock_create(current->nsproxy->net_ns, family, type, protocol, res, 0);
1567 }
1568 EXPORT_SYMBOL(sock_create);
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582 int sock_create_kern(struct net *net, int family, int type, int protocol, struct socket **res)
1583 {
1584 return __sock_create(net, family, type, protocol, res, 1);
1585 }
1586 EXPORT_SYMBOL(sock_create_kern);
1587
1588 static struct socket *__sys_socket_create(int family, int type, int protocol)
1589 {
1590 struct socket *sock;
1591 int retval;
1592
1593
1594 BUILD_BUG_ON(SOCK_CLOEXEC != O_CLOEXEC);
1595 BUILD_BUG_ON((SOCK_MAX | SOCK_TYPE_MASK) != SOCK_TYPE_MASK);
1596 BUILD_BUG_ON(SOCK_CLOEXEC & SOCK_TYPE_MASK);
1597 BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
1598
1599 if ((type & ~SOCK_TYPE_MASK) & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
1600 return ERR_PTR(-EINVAL);
1601 type &= SOCK_TYPE_MASK;
1602
1603 retval = sock_create(family, type, protocol, &sock);
1604 if (retval < 0)
1605 return ERR_PTR(retval);
1606
1607 return sock;
1608 }
1609
1610 struct file *__sys_socket_file(int family, int type, int protocol)
1611 {
1612 struct socket *sock;
1613 struct file *file;
1614 int flags;
1615
1616 sock = __sys_socket_create(family, type, protocol);
1617 if (IS_ERR(sock))
1618 return ERR_CAST(sock);
1619
1620 flags = type & ~SOCK_TYPE_MASK;
1621 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1622 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1623
1624 file = sock_alloc_file(sock, flags, NULL);
1625 if (IS_ERR(file))
1626 sock_release(sock);
1627
1628 return file;
1629 }
1630
1631 int __sys_socket(int family, int type, int protocol)
1632 {
1633 struct socket *sock;
1634 int flags;
1635
1636 sock = __sys_socket_create(family, type, protocol);
1637 if (IS_ERR(sock))
1638 return PTR_ERR(sock);
1639
1640 flags = type & ~SOCK_TYPE_MASK;
1641 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1642 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1643
1644 return sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK));
1645 }
1646
1647 SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
1648 {
1649 return __sys_socket(family, type, protocol);
1650 }
1651
1652
1653
1654
1655
1656 int __sys_socketpair(int family, int type, int protocol, int __user *usockvec)
1657 {
1658 struct socket *sock1, *sock2;
1659 int fd1, fd2, err;
1660 struct file *newfile1, *newfile2;
1661 int flags;
1662
1663 flags = type & ~SOCK_TYPE_MASK;
1664 if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
1665 return -EINVAL;
1666 type &= SOCK_TYPE_MASK;
1667
1668 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1669 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1670
1671
1672
1673
1674
1675 fd1 = get_unused_fd_flags(flags);
1676 if (unlikely(fd1 < 0))
1677 return fd1;
1678
1679 fd2 = get_unused_fd_flags(flags);
1680 if (unlikely(fd2 < 0)) {
1681 put_unused_fd(fd1);
1682 return fd2;
1683 }
1684
1685 err = put_user(fd1, &usockvec[0]);
1686 if (err)
1687 goto out;
1688
1689 err = put_user(fd2, &usockvec[1]);
1690 if (err)
1691 goto out;
1692
1693
1694
1695
1696
1697
1698 err = sock_create(family, type, protocol, &sock1);
1699 if (unlikely(err < 0))
1700 goto out;
1701
1702 err = sock_create(family, type, protocol, &sock2);
1703 if (unlikely(err < 0)) {
1704 sock_release(sock1);
1705 goto out;
1706 }
1707
1708 err = security_socket_socketpair(sock1, sock2);
1709 if (unlikely(err)) {
1710 sock_release(sock2);
1711 sock_release(sock1);
1712 goto out;
1713 }
1714
1715 err = sock1->ops->socketpair(sock1, sock2);
1716 if (unlikely(err < 0)) {
1717 sock_release(sock2);
1718 sock_release(sock1);
1719 goto out;
1720 }
1721
1722 newfile1 = sock_alloc_file(sock1, flags, NULL);
1723 if (IS_ERR(newfile1)) {
1724 err = PTR_ERR(newfile1);
1725 sock_release(sock2);
1726 goto out;
1727 }
1728
1729 newfile2 = sock_alloc_file(sock2, flags, NULL);
1730 if (IS_ERR(newfile2)) {
1731 err = PTR_ERR(newfile2);
1732 fput(newfile1);
1733 goto out;
1734 }
1735
1736 audit_fd_pair(fd1, fd2);
1737
1738 fd_install(fd1, newfile1);
1739 fd_install(fd2, newfile2);
1740 return 0;
1741
1742 out:
1743 put_unused_fd(fd2);
1744 put_unused_fd(fd1);
1745 return err;
1746 }
1747
1748 SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
1749 int __user *, usockvec)
1750 {
1751 return __sys_socketpair(family, type, protocol, usockvec);
1752 }
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762 int __sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen)
1763 {
1764 struct socket *sock;
1765 struct sockaddr_storage address;
1766 int err, fput_needed;
1767
1768 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1769 if (sock) {
1770 err = move_addr_to_kernel(umyaddr, addrlen, &address);
1771 if (!err) {
1772 err = security_socket_bind(sock,
1773 (struct sockaddr *)&address,
1774 addrlen);
1775 if (!err)
1776 err = sock->ops->bind(sock,
1777 (struct sockaddr *)
1778 &address, addrlen);
1779 }
1780 fput_light(sock->file, fput_needed);
1781 }
1782 return err;
1783 }
1784
1785 SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
1786 {
1787 return __sys_bind(fd, umyaddr, addrlen);
1788 }
1789
1790
1791
1792
1793
1794
1795
1796 int __sys_listen(int fd, int backlog)
1797 {
1798 struct socket *sock;
1799 int err, fput_needed;
1800 int somaxconn;
1801
1802 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1803 if (sock) {
1804 somaxconn = READ_ONCE(sock_net(sock->sk)->core.sysctl_somaxconn);
1805 if ((unsigned int)backlog > somaxconn)
1806 backlog = somaxconn;
1807
1808 err = security_socket_listen(sock, backlog);
1809 if (!err)
1810 err = sock->ops->listen(sock, backlog);
1811
1812 fput_light(sock->file, fput_needed);
1813 }
1814 return err;
1815 }
1816
1817 SYSCALL_DEFINE2(listen, int, fd, int, backlog)
1818 {
1819 return __sys_listen(fd, backlog);
1820 }
1821
1822 struct file *do_accept(struct file *file, unsigned file_flags,
1823 struct sockaddr __user *upeer_sockaddr,
1824 int __user *upeer_addrlen, int flags)
1825 {
1826 struct socket *sock, *newsock;
1827 struct file *newfile;
1828 int err, len;
1829 struct sockaddr_storage address;
1830
1831 sock = sock_from_file(file);
1832 if (!sock)
1833 return ERR_PTR(-ENOTSOCK);
1834
1835 newsock = sock_alloc();
1836 if (!newsock)
1837 return ERR_PTR(-ENFILE);
1838
1839 newsock->type = sock->type;
1840 newsock->ops = sock->ops;
1841
1842
1843
1844
1845
1846 __module_get(newsock->ops->owner);
1847
1848 newfile = sock_alloc_file(newsock, flags, sock->sk->sk_prot_creator->name);
1849 if (IS_ERR(newfile))
1850 return newfile;
1851
1852 err = security_socket_accept(sock, newsock);
1853 if (err)
1854 goto out_fd;
1855
1856 err = sock->ops->accept(sock, newsock, sock->file->f_flags | file_flags,
1857 false);
1858 if (err < 0)
1859 goto out_fd;
1860
1861 if (upeer_sockaddr) {
1862 len = newsock->ops->getname(newsock,
1863 (struct sockaddr *)&address, 2);
1864 if (len < 0) {
1865 err = -ECONNABORTED;
1866 goto out_fd;
1867 }
1868 err = move_addr_to_user(&address,
1869 len, upeer_sockaddr, upeer_addrlen);
1870 if (err < 0)
1871 goto out_fd;
1872 }
1873
1874
1875 return newfile;
1876 out_fd:
1877 fput(newfile);
1878 return ERR_PTR(err);
1879 }
1880
1881 static int __sys_accept4_file(struct file *file, struct sockaddr __user *upeer_sockaddr,
1882 int __user *upeer_addrlen, int flags)
1883 {
1884 struct file *newfile;
1885 int newfd;
1886
1887 if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
1888 return -EINVAL;
1889
1890 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
1891 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
1892
1893 newfd = get_unused_fd_flags(flags);
1894 if (unlikely(newfd < 0))
1895 return newfd;
1896
1897 newfile = do_accept(file, 0, upeer_sockaddr, upeer_addrlen,
1898 flags);
1899 if (IS_ERR(newfile)) {
1900 put_unused_fd(newfd);
1901 return PTR_ERR(newfile);
1902 }
1903 fd_install(newfd, newfile);
1904 return newfd;
1905 }
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919 int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr,
1920 int __user *upeer_addrlen, int flags)
1921 {
1922 int ret = -EBADF;
1923 struct fd f;
1924
1925 f = fdget(fd);
1926 if (f.file) {
1927 ret = __sys_accept4_file(f.file, upeer_sockaddr,
1928 upeer_addrlen, flags);
1929 fdput(f);
1930 }
1931
1932 return ret;
1933 }
1934
1935 SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
1936 int __user *, upeer_addrlen, int, flags)
1937 {
1938 return __sys_accept4(fd, upeer_sockaddr, upeer_addrlen, flags);
1939 }
1940
1941 SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr,
1942 int __user *, upeer_addrlen)
1943 {
1944 return __sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0);
1945 }
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959 int __sys_connect_file(struct file *file, struct sockaddr_storage *address,
1960 int addrlen, int file_flags)
1961 {
1962 struct socket *sock;
1963 int err;
1964
1965 sock = sock_from_file(file);
1966 if (!sock) {
1967 err = -ENOTSOCK;
1968 goto out;
1969 }
1970
1971 err =
1972 security_socket_connect(sock, (struct sockaddr *)address, addrlen);
1973 if (err)
1974 goto out;
1975
1976 err = sock->ops->connect(sock, (struct sockaddr *)address, addrlen,
1977 sock->file->f_flags | file_flags);
1978 out:
1979 return err;
1980 }
1981
1982 int __sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen)
1983 {
1984 int ret = -EBADF;
1985 struct fd f;
1986
1987 f = fdget(fd);
1988 if (f.file) {
1989 struct sockaddr_storage address;
1990
1991 ret = move_addr_to_kernel(uservaddr, addrlen, &address);
1992 if (!ret)
1993 ret = __sys_connect_file(f.file, &address, addrlen, 0);
1994 fdput(f);
1995 }
1996
1997 return ret;
1998 }
1999
2000 SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
2001 int, addrlen)
2002 {
2003 return __sys_connect(fd, uservaddr, addrlen);
2004 }
2005
2006
2007
2008
2009
2010
2011 int __sys_getsockname(int fd, struct sockaddr __user *usockaddr,
2012 int __user *usockaddr_len)
2013 {
2014 struct socket *sock;
2015 struct sockaddr_storage address;
2016 int err, fput_needed;
2017
2018 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2019 if (!sock)
2020 goto out;
2021
2022 err = security_socket_getsockname(sock);
2023 if (err)
2024 goto out_put;
2025
2026 err = sock->ops->getname(sock, (struct sockaddr *)&address, 0);
2027 if (err < 0)
2028 goto out_put;
2029
2030 err = move_addr_to_user(&address, err, usockaddr, usockaddr_len);
2031
2032 out_put:
2033 fput_light(sock->file, fput_needed);
2034 out:
2035 return err;
2036 }
2037
2038 SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
2039 int __user *, usockaddr_len)
2040 {
2041 return __sys_getsockname(fd, usockaddr, usockaddr_len);
2042 }
2043
2044
2045
2046
2047
2048
2049 int __sys_getpeername(int fd, struct sockaddr __user *usockaddr,
2050 int __user *usockaddr_len)
2051 {
2052 struct socket *sock;
2053 struct sockaddr_storage address;
2054 int err, fput_needed;
2055
2056 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2057 if (sock != NULL) {
2058 err = security_socket_getpeername(sock);
2059 if (err) {
2060 fput_light(sock->file, fput_needed);
2061 return err;
2062 }
2063
2064 err = sock->ops->getname(sock, (struct sockaddr *)&address, 1);
2065 if (err >= 0)
2066
2067 err = move_addr_to_user(&address, err, usockaddr,
2068 usockaddr_len);
2069 fput_light(sock->file, fput_needed);
2070 }
2071 return err;
2072 }
2073
2074 SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
2075 int __user *, usockaddr_len)
2076 {
2077 return __sys_getpeername(fd, usockaddr, usockaddr_len);
2078 }
2079
2080
2081
2082
2083
2084
2085 int __sys_sendto(int fd, void __user *buff, size_t len, unsigned int flags,
2086 struct sockaddr __user *addr, int addr_len)
2087 {
2088 struct socket *sock;
2089 struct sockaddr_storage address;
2090 int err;
2091 struct msghdr msg;
2092 struct iovec iov;
2093 int fput_needed;
2094
2095 err = import_single_range(WRITE, buff, len, &iov, &msg.msg_iter);
2096 if (unlikely(err))
2097 return err;
2098 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2099 if (!sock)
2100 goto out;
2101
2102 msg.msg_name = NULL;
2103 msg.msg_control = NULL;
2104 msg.msg_controllen = 0;
2105 msg.msg_namelen = 0;
2106 msg.msg_ubuf = NULL;
2107 if (addr) {
2108 err = move_addr_to_kernel(addr, addr_len, &address);
2109 if (err < 0)
2110 goto out_put;
2111 msg.msg_name = (struct sockaddr *)&address;
2112 msg.msg_namelen = addr_len;
2113 }
2114 if (sock->file->f_flags & O_NONBLOCK)
2115 flags |= MSG_DONTWAIT;
2116 msg.msg_flags = flags;
2117 err = sock_sendmsg(sock, &msg);
2118
2119 out_put:
2120 fput_light(sock->file, fput_needed);
2121 out:
2122 return err;
2123 }
2124
2125 SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
2126 unsigned int, flags, struct sockaddr __user *, addr,
2127 int, addr_len)
2128 {
2129 return __sys_sendto(fd, buff, len, flags, addr, addr_len);
2130 }
2131
2132
2133
2134
2135
2136 SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len,
2137 unsigned int, flags)
2138 {
2139 return __sys_sendto(fd, buff, len, flags, NULL, 0);
2140 }
2141
2142
2143
2144
2145
2146
2147 int __sys_recvfrom(int fd, void __user *ubuf, size_t size, unsigned int flags,
2148 struct sockaddr __user *addr, int __user *addr_len)
2149 {
2150 struct sockaddr_storage address;
2151 struct msghdr msg = {
2152
2153 .msg_name = addr ? (struct sockaddr *)&address : NULL,
2154 };
2155 struct socket *sock;
2156 struct iovec iov;
2157 int err, err2;
2158 int fput_needed;
2159
2160 err = import_single_range(READ, ubuf, size, &iov, &msg.msg_iter);
2161 if (unlikely(err))
2162 return err;
2163 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2164 if (!sock)
2165 goto out;
2166
2167 if (sock->file->f_flags & O_NONBLOCK)
2168 flags |= MSG_DONTWAIT;
2169 err = sock_recvmsg(sock, &msg, flags);
2170
2171 if (err >= 0 && addr != NULL) {
2172 err2 = move_addr_to_user(&address,
2173 msg.msg_namelen, addr, addr_len);
2174 if (err2 < 0)
2175 err = err2;
2176 }
2177
2178 fput_light(sock->file, fput_needed);
2179 out:
2180 return err;
2181 }
2182
2183 SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
2184 unsigned int, flags, struct sockaddr __user *, addr,
2185 int __user *, addr_len)
2186 {
2187 return __sys_recvfrom(fd, ubuf, size, flags, addr, addr_len);
2188 }
2189
2190
2191
2192
2193
2194 SYSCALL_DEFINE4(recv, int, fd, void __user *, ubuf, size_t, size,
2195 unsigned int, flags)
2196 {
2197 return __sys_recvfrom(fd, ubuf, size, flags, NULL, NULL);
2198 }
2199
2200 static bool sock_use_custom_sol_socket(const struct socket *sock)
2201 {
2202 const struct sock *sk = sock->sk;
2203
2204
2205 return IS_ENABLED(CONFIG_MPTCP) &&
2206 sk->sk_protocol == IPPROTO_MPTCP &&
2207 sk->sk_type == SOCK_STREAM &&
2208 (sk->sk_family == AF_INET || sk->sk_family == AF_INET6);
2209 }
2210
2211
2212
2213
2214
2215 int __sys_setsockopt(int fd, int level, int optname, char __user *user_optval,
2216 int optlen)
2217 {
2218 sockptr_t optval = USER_SOCKPTR(user_optval);
2219 char *kernel_optval = NULL;
2220 int err, fput_needed;
2221 struct socket *sock;
2222
2223 if (optlen < 0)
2224 return -EINVAL;
2225
2226 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2227 if (!sock)
2228 return err;
2229
2230 err = security_socket_setsockopt(sock, level, optname);
2231 if (err)
2232 goto out_put;
2233
2234 if (!in_compat_syscall())
2235 err = BPF_CGROUP_RUN_PROG_SETSOCKOPT(sock->sk, &level, &optname,
2236 user_optval, &optlen,
2237 &kernel_optval);
2238 if (err < 0)
2239 goto out_put;
2240 if (err > 0) {
2241 err = 0;
2242 goto out_put;
2243 }
2244
2245 if (kernel_optval)
2246 optval = KERNEL_SOCKPTR(kernel_optval);
2247 if (level == SOL_SOCKET && !sock_use_custom_sol_socket(sock))
2248 err = sock_setsockopt(sock, level, optname, optval, optlen);
2249 else if (unlikely(!sock->ops->setsockopt))
2250 err = -EOPNOTSUPP;
2251 else
2252 err = sock->ops->setsockopt(sock, level, optname, optval,
2253 optlen);
2254 kfree(kernel_optval);
2255 out_put:
2256 fput_light(sock->file, fput_needed);
2257 return err;
2258 }
2259
2260 SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
2261 char __user *, optval, int, optlen)
2262 {
2263 return __sys_setsockopt(fd, level, optname, optval, optlen);
2264 }
2265
2266 INDIRECT_CALLABLE_DECLARE(bool tcp_bpf_bypass_getsockopt(int level,
2267 int optname));
2268
2269
2270
2271
2272
2273 int __sys_getsockopt(int fd, int level, int optname, char __user *optval,
2274 int __user *optlen)
2275 {
2276 int err, fput_needed;
2277 struct socket *sock;
2278 int max_optlen;
2279
2280 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2281 if (!sock)
2282 return err;
2283
2284 err = security_socket_getsockopt(sock, level, optname);
2285 if (err)
2286 goto out_put;
2287
2288 if (!in_compat_syscall())
2289 max_optlen = BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen);
2290
2291 if (level == SOL_SOCKET)
2292 err = sock_getsockopt(sock, level, optname, optval, optlen);
2293 else if (unlikely(!sock->ops->getsockopt))
2294 err = -EOPNOTSUPP;
2295 else
2296 err = sock->ops->getsockopt(sock, level, optname, optval,
2297 optlen);
2298
2299 if (!in_compat_syscall())
2300 err = BPF_CGROUP_RUN_PROG_GETSOCKOPT(sock->sk, level, optname,
2301 optval, optlen, max_optlen,
2302 err);
2303 out_put:
2304 fput_light(sock->file, fput_needed);
2305 return err;
2306 }
2307
2308 SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
2309 char __user *, optval, int __user *, optlen)
2310 {
2311 return __sys_getsockopt(fd, level, optname, optval, optlen);
2312 }
2313
2314
2315
2316
2317
2318 int __sys_shutdown_sock(struct socket *sock, int how)
2319 {
2320 int err;
2321
2322 err = security_socket_shutdown(sock, how);
2323 if (!err)
2324 err = sock->ops->shutdown(sock, how);
2325
2326 return err;
2327 }
2328
2329 int __sys_shutdown(int fd, int how)
2330 {
2331 int err, fput_needed;
2332 struct socket *sock;
2333
2334 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2335 if (sock != NULL) {
2336 err = __sys_shutdown_sock(sock, how);
2337 fput_light(sock->file, fput_needed);
2338 }
2339 return err;
2340 }
2341
2342 SYSCALL_DEFINE2(shutdown, int, fd, int, how)
2343 {
2344 return __sys_shutdown(fd, how);
2345 }
2346
2347
2348
2349
2350 #define COMPAT_MSG(msg, member) ((MSG_CMSG_COMPAT & flags) ? &msg##_compat->member : &msg->member)
2351 #define COMPAT_NAMELEN(msg) COMPAT_MSG(msg, msg_namelen)
2352 #define COMPAT_FLAGS(msg) COMPAT_MSG(msg, msg_flags)
2353
2354 struct used_address {
2355 struct sockaddr_storage name;
2356 unsigned int name_len;
2357 };
2358
2359 int __copy_msghdr(struct msghdr *kmsg,
2360 struct user_msghdr *msg,
2361 struct sockaddr __user **save_addr)
2362 {
2363 ssize_t err;
2364
2365 kmsg->msg_control_is_user = true;
2366 kmsg->msg_get_inq = 0;
2367 kmsg->msg_control_user = msg->msg_control;
2368 kmsg->msg_controllen = msg->msg_controllen;
2369 kmsg->msg_flags = msg->msg_flags;
2370
2371 kmsg->msg_namelen = msg->msg_namelen;
2372 if (!msg->msg_name)
2373 kmsg->msg_namelen = 0;
2374
2375 if (kmsg->msg_namelen < 0)
2376 return -EINVAL;
2377
2378 if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
2379 kmsg->msg_namelen = sizeof(struct sockaddr_storage);
2380
2381 if (save_addr)
2382 *save_addr = msg->msg_name;
2383
2384 if (msg->msg_name && kmsg->msg_namelen) {
2385 if (!save_addr) {
2386 err = move_addr_to_kernel(msg->msg_name,
2387 kmsg->msg_namelen,
2388 kmsg->msg_name);
2389 if (err < 0)
2390 return err;
2391 }
2392 } else {
2393 kmsg->msg_name = NULL;
2394 kmsg->msg_namelen = 0;
2395 }
2396
2397 if (msg->msg_iovlen > UIO_MAXIOV)
2398 return -EMSGSIZE;
2399
2400 kmsg->msg_iocb = NULL;
2401 kmsg->msg_ubuf = NULL;
2402 return 0;
2403 }
2404
2405 static int copy_msghdr_from_user(struct msghdr *kmsg,
2406 struct user_msghdr __user *umsg,
2407 struct sockaddr __user **save_addr,
2408 struct iovec **iov)
2409 {
2410 struct user_msghdr msg;
2411 ssize_t err;
2412
2413 if (copy_from_user(&msg, umsg, sizeof(*umsg)))
2414 return -EFAULT;
2415
2416 err = __copy_msghdr(kmsg, &msg, save_addr);
2417 if (err)
2418 return err;
2419
2420 err = import_iovec(save_addr ? READ : WRITE,
2421 msg.msg_iov, msg.msg_iovlen,
2422 UIO_FASTIOV, iov, &kmsg->msg_iter);
2423 return err < 0 ? err : 0;
2424 }
2425
2426 static int ____sys_sendmsg(struct socket *sock, struct msghdr *msg_sys,
2427 unsigned int flags, struct used_address *used_address,
2428 unsigned int allowed_msghdr_flags)
2429 {
2430 unsigned char ctl[sizeof(struct cmsghdr) + 20]
2431 __aligned(sizeof(__kernel_size_t));
2432
2433 unsigned char *ctl_buf = ctl;
2434 int ctl_len;
2435 ssize_t err;
2436
2437 err = -ENOBUFS;
2438
2439 if (msg_sys->msg_controllen > INT_MAX)
2440 goto out;
2441 flags |= (msg_sys->msg_flags & allowed_msghdr_flags);
2442 ctl_len = msg_sys->msg_controllen;
2443 if ((MSG_CMSG_COMPAT & flags) && ctl_len) {
2444 err =
2445 cmsghdr_from_user_compat_to_kern(msg_sys, sock->sk, ctl,
2446 sizeof(ctl));
2447 if (err)
2448 goto out;
2449 ctl_buf = msg_sys->msg_control;
2450 ctl_len = msg_sys->msg_controllen;
2451 } else if (ctl_len) {
2452 BUILD_BUG_ON(sizeof(struct cmsghdr) !=
2453 CMSG_ALIGN(sizeof(struct cmsghdr)));
2454 if (ctl_len > sizeof(ctl)) {
2455 ctl_buf = sock_kmalloc(sock->sk, ctl_len, GFP_KERNEL);
2456 if (ctl_buf == NULL)
2457 goto out;
2458 }
2459 err = -EFAULT;
2460 if (copy_from_user(ctl_buf, msg_sys->msg_control_user, ctl_len))
2461 goto out_freectl;
2462 msg_sys->msg_control = ctl_buf;
2463 msg_sys->msg_control_is_user = false;
2464 }
2465 msg_sys->msg_flags = flags;
2466
2467 if (sock->file->f_flags & O_NONBLOCK)
2468 msg_sys->msg_flags |= MSG_DONTWAIT;
2469
2470
2471
2472
2473
2474
2475 if (used_address && msg_sys->msg_name &&
2476 used_address->name_len == msg_sys->msg_namelen &&
2477 !memcmp(&used_address->name, msg_sys->msg_name,
2478 used_address->name_len)) {
2479 err = sock_sendmsg_nosec(sock, msg_sys);
2480 goto out_freectl;
2481 }
2482 err = sock_sendmsg(sock, msg_sys);
2483
2484
2485
2486
2487 if (used_address && err >= 0) {
2488 used_address->name_len = msg_sys->msg_namelen;
2489 if (msg_sys->msg_name)
2490 memcpy(&used_address->name, msg_sys->msg_name,
2491 used_address->name_len);
2492 }
2493
2494 out_freectl:
2495 if (ctl_buf != ctl)
2496 sock_kfree_s(sock->sk, ctl_buf, ctl_len);
2497 out:
2498 return err;
2499 }
2500
2501 int sendmsg_copy_msghdr(struct msghdr *msg,
2502 struct user_msghdr __user *umsg, unsigned flags,
2503 struct iovec **iov)
2504 {
2505 int err;
2506
2507 if (flags & MSG_CMSG_COMPAT) {
2508 struct compat_msghdr __user *msg_compat;
2509
2510 msg_compat = (struct compat_msghdr __user *) umsg;
2511 err = get_compat_msghdr(msg, msg_compat, NULL, iov);
2512 } else {
2513 err = copy_msghdr_from_user(msg, umsg, NULL, iov);
2514 }
2515 if (err < 0)
2516 return err;
2517
2518 return 0;
2519 }
2520
2521 static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg,
2522 struct msghdr *msg_sys, unsigned int flags,
2523 struct used_address *used_address,
2524 unsigned int allowed_msghdr_flags)
2525 {
2526 struct sockaddr_storage address;
2527 struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
2528 ssize_t err;
2529
2530 msg_sys->msg_name = &address;
2531
2532 err = sendmsg_copy_msghdr(msg_sys, msg, flags, &iov);
2533 if (err < 0)
2534 return err;
2535
2536 err = ____sys_sendmsg(sock, msg_sys, flags, used_address,
2537 allowed_msghdr_flags);
2538 kfree(iov);
2539 return err;
2540 }
2541
2542
2543
2544
2545 long __sys_sendmsg_sock(struct socket *sock, struct msghdr *msg,
2546 unsigned int flags)
2547 {
2548 return ____sys_sendmsg(sock, msg, flags, NULL, 0);
2549 }
2550
2551 long __sys_sendmsg(int fd, struct user_msghdr __user *msg, unsigned int flags,
2552 bool forbid_cmsg_compat)
2553 {
2554 int fput_needed, err;
2555 struct msghdr msg_sys;
2556 struct socket *sock;
2557
2558 if (forbid_cmsg_compat && (flags & MSG_CMSG_COMPAT))
2559 return -EINVAL;
2560
2561 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2562 if (!sock)
2563 goto out;
2564
2565 err = ___sys_sendmsg(sock, msg, &msg_sys, flags, NULL, 0);
2566
2567 fput_light(sock->file, fput_needed);
2568 out:
2569 return err;
2570 }
2571
2572 SYSCALL_DEFINE3(sendmsg, int, fd, struct user_msghdr __user *, msg, unsigned int, flags)
2573 {
2574 return __sys_sendmsg(fd, msg, flags, true);
2575 }
2576
2577
2578
2579
2580
2581 int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
2582 unsigned int flags, bool forbid_cmsg_compat)
2583 {
2584 int fput_needed, err, datagrams;
2585 struct socket *sock;
2586 struct mmsghdr __user *entry;
2587 struct compat_mmsghdr __user *compat_entry;
2588 struct msghdr msg_sys;
2589 struct used_address used_address;
2590 unsigned int oflags = flags;
2591
2592 if (forbid_cmsg_compat && (flags & MSG_CMSG_COMPAT))
2593 return -EINVAL;
2594
2595 if (vlen > UIO_MAXIOV)
2596 vlen = UIO_MAXIOV;
2597
2598 datagrams = 0;
2599
2600 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2601 if (!sock)
2602 return err;
2603
2604 used_address.name_len = UINT_MAX;
2605 entry = mmsg;
2606 compat_entry = (struct compat_mmsghdr __user *)mmsg;
2607 err = 0;
2608 flags |= MSG_BATCH;
2609
2610 while (datagrams < vlen) {
2611 if (datagrams == vlen - 1)
2612 flags = oflags;
2613
2614 if (MSG_CMSG_COMPAT & flags) {
2615 err = ___sys_sendmsg(sock, (struct user_msghdr __user *)compat_entry,
2616 &msg_sys, flags, &used_address, MSG_EOR);
2617 if (err < 0)
2618 break;
2619 err = __put_user(err, &compat_entry->msg_len);
2620 ++compat_entry;
2621 } else {
2622 err = ___sys_sendmsg(sock,
2623 (struct user_msghdr __user *)entry,
2624 &msg_sys, flags, &used_address, MSG_EOR);
2625 if (err < 0)
2626 break;
2627 err = put_user(err, &entry->msg_len);
2628 ++entry;
2629 }
2630
2631 if (err)
2632 break;
2633 ++datagrams;
2634 if (msg_data_left(&msg_sys))
2635 break;
2636 cond_resched();
2637 }
2638
2639 fput_light(sock->file, fput_needed);
2640
2641
2642 if (datagrams != 0)
2643 return datagrams;
2644
2645 return err;
2646 }
2647
2648 SYSCALL_DEFINE4(sendmmsg, int, fd, struct mmsghdr __user *, mmsg,
2649 unsigned int, vlen, unsigned int, flags)
2650 {
2651 return __sys_sendmmsg(fd, mmsg, vlen, flags, true);
2652 }
2653
2654 int recvmsg_copy_msghdr(struct msghdr *msg,
2655 struct user_msghdr __user *umsg, unsigned flags,
2656 struct sockaddr __user **uaddr,
2657 struct iovec **iov)
2658 {
2659 ssize_t err;
2660
2661 if (MSG_CMSG_COMPAT & flags) {
2662 struct compat_msghdr __user *msg_compat;
2663
2664 msg_compat = (struct compat_msghdr __user *) umsg;
2665 err = get_compat_msghdr(msg, msg_compat, uaddr, iov);
2666 } else {
2667 err = copy_msghdr_from_user(msg, umsg, uaddr, iov);
2668 }
2669 if (err < 0)
2670 return err;
2671
2672 return 0;
2673 }
2674
2675 static int ____sys_recvmsg(struct socket *sock, struct msghdr *msg_sys,
2676 struct user_msghdr __user *msg,
2677 struct sockaddr __user *uaddr,
2678 unsigned int flags, int nosec)
2679 {
2680 struct compat_msghdr __user *msg_compat =
2681 (struct compat_msghdr __user *) msg;
2682 int __user *uaddr_len = COMPAT_NAMELEN(msg);
2683 struct sockaddr_storage addr;
2684 unsigned long cmsg_ptr;
2685 int len;
2686 ssize_t err;
2687
2688 msg_sys->msg_name = &addr;
2689 cmsg_ptr = (unsigned long)msg_sys->msg_control;
2690 msg_sys->msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT);
2691
2692
2693 msg_sys->msg_namelen = 0;
2694
2695 if (sock->file->f_flags & O_NONBLOCK)
2696 flags |= MSG_DONTWAIT;
2697
2698 if (unlikely(nosec))
2699 err = sock_recvmsg_nosec(sock, msg_sys, flags);
2700 else
2701 err = sock_recvmsg(sock, msg_sys, flags);
2702
2703 if (err < 0)
2704 goto out;
2705 len = err;
2706
2707 if (uaddr != NULL) {
2708 err = move_addr_to_user(&addr,
2709 msg_sys->msg_namelen, uaddr,
2710 uaddr_len);
2711 if (err < 0)
2712 goto out;
2713 }
2714 err = __put_user((msg_sys->msg_flags & ~MSG_CMSG_COMPAT),
2715 COMPAT_FLAGS(msg));
2716 if (err)
2717 goto out;
2718 if (MSG_CMSG_COMPAT & flags)
2719 err = __put_user((unsigned long)msg_sys->msg_control - cmsg_ptr,
2720 &msg_compat->msg_controllen);
2721 else
2722 err = __put_user((unsigned long)msg_sys->msg_control - cmsg_ptr,
2723 &msg->msg_controllen);
2724 if (err)
2725 goto out;
2726 err = len;
2727 out:
2728 return err;
2729 }
2730
2731 static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg,
2732 struct msghdr *msg_sys, unsigned int flags, int nosec)
2733 {
2734 struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
2735
2736 struct sockaddr __user *uaddr;
2737 ssize_t err;
2738
2739 err = recvmsg_copy_msghdr(msg_sys, msg, flags, &uaddr, &iov);
2740 if (err < 0)
2741 return err;
2742
2743 err = ____sys_recvmsg(sock, msg_sys, msg, uaddr, flags, nosec);
2744 kfree(iov);
2745 return err;
2746 }
2747
2748
2749
2750
2751
2752 long __sys_recvmsg_sock(struct socket *sock, struct msghdr *msg,
2753 struct user_msghdr __user *umsg,
2754 struct sockaddr __user *uaddr, unsigned int flags)
2755 {
2756 return ____sys_recvmsg(sock, msg, umsg, uaddr, flags, 0);
2757 }
2758
2759 long __sys_recvmsg(int fd, struct user_msghdr __user *msg, unsigned int flags,
2760 bool forbid_cmsg_compat)
2761 {
2762 int fput_needed, err;
2763 struct msghdr msg_sys;
2764 struct socket *sock;
2765
2766 if (forbid_cmsg_compat && (flags & MSG_CMSG_COMPAT))
2767 return -EINVAL;
2768
2769 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2770 if (!sock)
2771 goto out;
2772
2773 err = ___sys_recvmsg(sock, msg, &msg_sys, flags, 0);
2774
2775 fput_light(sock->file, fput_needed);
2776 out:
2777 return err;
2778 }
2779
2780 SYSCALL_DEFINE3(recvmsg, int, fd, struct user_msghdr __user *, msg,
2781 unsigned int, flags)
2782 {
2783 return __sys_recvmsg(fd, msg, flags, true);
2784 }
2785
2786
2787
2788
2789
2790 static int do_recvmmsg(int fd, struct mmsghdr __user *mmsg,
2791 unsigned int vlen, unsigned int flags,
2792 struct timespec64 *timeout)
2793 {
2794 int fput_needed, err, datagrams;
2795 struct socket *sock;
2796 struct mmsghdr __user *entry;
2797 struct compat_mmsghdr __user *compat_entry;
2798 struct msghdr msg_sys;
2799 struct timespec64 end_time;
2800 struct timespec64 timeout64;
2801
2802 if (timeout &&
2803 poll_select_set_timeout(&end_time, timeout->tv_sec,
2804 timeout->tv_nsec))
2805 return -EINVAL;
2806
2807 datagrams = 0;
2808
2809 sock = sockfd_lookup_light(fd, &err, &fput_needed);
2810 if (!sock)
2811 return err;
2812
2813 if (likely(!(flags & MSG_ERRQUEUE))) {
2814 err = sock_error(sock->sk);
2815 if (err) {
2816 datagrams = err;
2817 goto out_put;
2818 }
2819 }
2820
2821 entry = mmsg;
2822 compat_entry = (struct compat_mmsghdr __user *)mmsg;
2823
2824 while (datagrams < vlen) {
2825
2826
2827
2828 if (MSG_CMSG_COMPAT & flags) {
2829 err = ___sys_recvmsg(sock, (struct user_msghdr __user *)compat_entry,
2830 &msg_sys, flags & ~MSG_WAITFORONE,
2831 datagrams);
2832 if (err < 0)
2833 break;
2834 err = __put_user(err, &compat_entry->msg_len);
2835 ++compat_entry;
2836 } else {
2837 err = ___sys_recvmsg(sock,
2838 (struct user_msghdr __user *)entry,
2839 &msg_sys, flags & ~MSG_WAITFORONE,
2840 datagrams);
2841 if (err < 0)
2842 break;
2843 err = put_user(err, &entry->msg_len);
2844 ++entry;
2845 }
2846
2847 if (err)
2848 break;
2849 ++datagrams;
2850
2851
2852 if (flags & MSG_WAITFORONE)
2853 flags |= MSG_DONTWAIT;
2854
2855 if (timeout) {
2856 ktime_get_ts64(&timeout64);
2857 *timeout = timespec64_sub(end_time, timeout64);
2858 if (timeout->tv_sec < 0) {
2859 timeout->tv_sec = timeout->tv_nsec = 0;
2860 break;
2861 }
2862
2863
2864 if (timeout->tv_nsec == 0 && timeout->tv_sec == 0)
2865 break;
2866 }
2867
2868
2869 if (msg_sys.msg_flags & MSG_OOB)
2870 break;
2871 cond_resched();
2872 }
2873
2874 if (err == 0)
2875 goto out_put;
2876
2877 if (datagrams == 0) {
2878 datagrams = err;
2879 goto out_put;
2880 }
2881
2882
2883
2884
2885
2886 if (err != -EAGAIN) {
2887
2888
2889
2890
2891
2892
2893 sock->sk->sk_err = -err;
2894 }
2895 out_put:
2896 fput_light(sock->file, fput_needed);
2897
2898 return datagrams;
2899 }
2900
2901 int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg,
2902 unsigned int vlen, unsigned int flags,
2903 struct __kernel_timespec __user *timeout,
2904 struct old_timespec32 __user *timeout32)
2905 {
2906 int datagrams;
2907 struct timespec64 timeout_sys;
2908
2909 if (timeout && get_timespec64(&timeout_sys, timeout))
2910 return -EFAULT;
2911
2912 if (timeout32 && get_old_timespec32(&timeout_sys, timeout32))
2913 return -EFAULT;
2914
2915 if (!timeout && !timeout32)
2916 return do_recvmmsg(fd, mmsg, vlen, flags, NULL);
2917
2918 datagrams = do_recvmmsg(fd, mmsg, vlen, flags, &timeout_sys);
2919
2920 if (datagrams <= 0)
2921 return datagrams;
2922
2923 if (timeout && put_timespec64(&timeout_sys, timeout))
2924 datagrams = -EFAULT;
2925
2926 if (timeout32 && put_old_timespec32(&timeout_sys, timeout32))
2927 datagrams = -EFAULT;
2928
2929 return datagrams;
2930 }
2931
2932 SYSCALL_DEFINE5(recvmmsg, int, fd, struct mmsghdr __user *, mmsg,
2933 unsigned int, vlen, unsigned int, flags,
2934 struct __kernel_timespec __user *, timeout)
2935 {
2936 if (flags & MSG_CMSG_COMPAT)
2937 return -EINVAL;
2938
2939 return __sys_recvmmsg(fd, mmsg, vlen, flags, timeout, NULL);
2940 }
2941
2942 #ifdef CONFIG_COMPAT_32BIT_TIME
2943 SYSCALL_DEFINE5(recvmmsg_time32, int, fd, struct mmsghdr __user *, mmsg,
2944 unsigned int, vlen, unsigned int, flags,
2945 struct old_timespec32 __user *, timeout)
2946 {
2947 if (flags & MSG_CMSG_COMPAT)
2948 return -EINVAL;
2949
2950 return __sys_recvmmsg(fd, mmsg, vlen, flags, NULL, timeout);
2951 }
2952 #endif
2953
2954 #ifdef __ARCH_WANT_SYS_SOCKETCALL
2955
2956 #define AL(x) ((x) * sizeof(unsigned long))
2957 static const unsigned char nargs[21] = {
2958 AL(0), AL(3), AL(3), AL(3), AL(2), AL(3),
2959 AL(3), AL(3), AL(4), AL(4), AL(4), AL(6),
2960 AL(6), AL(2), AL(5), AL(5), AL(3), AL(3),
2961 AL(4), AL(5), AL(4)
2962 };
2963
2964 #undef AL
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974 SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args)
2975 {
2976 unsigned long a[AUDITSC_ARGS];
2977 unsigned long a0, a1;
2978 int err;
2979 unsigned int len;
2980
2981 if (call < 1 || call > SYS_SENDMMSG)
2982 return -EINVAL;
2983 call = array_index_nospec(call, SYS_SENDMMSG + 1);
2984
2985 len = nargs[call];
2986 if (len > sizeof(a))
2987 return -EINVAL;
2988
2989
2990 if (copy_from_user(a, args, len))
2991 return -EFAULT;
2992
2993 err = audit_socketcall(nargs[call] / sizeof(unsigned long), a);
2994 if (err)
2995 return err;
2996
2997 a0 = a[0];
2998 a1 = a[1];
2999
3000 switch (call) {
3001 case SYS_SOCKET:
3002 err = __sys_socket(a0, a1, a[2]);
3003 break;
3004 case SYS_BIND:
3005 err = __sys_bind(a0, (struct sockaddr __user *)a1, a[2]);
3006 break;
3007 case SYS_CONNECT:
3008 err = __sys_connect(a0, (struct sockaddr __user *)a1, a[2]);
3009 break;
3010 case SYS_LISTEN:
3011 err = __sys_listen(a0, a1);
3012 break;
3013 case SYS_ACCEPT:
3014 err = __sys_accept4(a0, (struct sockaddr __user *)a1,
3015 (int __user *)a[2], 0);
3016 break;
3017 case SYS_GETSOCKNAME:
3018 err =
3019 __sys_getsockname(a0, (struct sockaddr __user *)a1,
3020 (int __user *)a[2]);
3021 break;
3022 case SYS_GETPEERNAME:
3023 err =
3024 __sys_getpeername(a0, (struct sockaddr __user *)a1,
3025 (int __user *)a[2]);
3026 break;
3027 case SYS_SOCKETPAIR:
3028 err = __sys_socketpair(a0, a1, a[2], (int __user *)a[3]);
3029 break;
3030 case SYS_SEND:
3031 err = __sys_sendto(a0, (void __user *)a1, a[2], a[3],
3032 NULL, 0);
3033 break;
3034 case SYS_SENDTO:
3035 err = __sys_sendto(a0, (void __user *)a1, a[2], a[3],
3036 (struct sockaddr __user *)a[4], a[5]);
3037 break;
3038 case SYS_RECV:
3039 err = __sys_recvfrom(a0, (void __user *)a1, a[2], a[3],
3040 NULL, NULL);
3041 break;
3042 case SYS_RECVFROM:
3043 err = __sys_recvfrom(a0, (void __user *)a1, a[2], a[3],
3044 (struct sockaddr __user *)a[4],
3045 (int __user *)a[5]);
3046 break;
3047 case SYS_SHUTDOWN:
3048 err = __sys_shutdown(a0, a1);
3049 break;
3050 case SYS_SETSOCKOPT:
3051 err = __sys_setsockopt(a0, a1, a[2], (char __user *)a[3],
3052 a[4]);
3053 break;
3054 case SYS_GETSOCKOPT:
3055 err =
3056 __sys_getsockopt(a0, a1, a[2], (char __user *)a[3],
3057 (int __user *)a[4]);
3058 break;
3059 case SYS_SENDMSG:
3060 err = __sys_sendmsg(a0, (struct user_msghdr __user *)a1,
3061 a[2], true);
3062 break;
3063 case SYS_SENDMMSG:
3064 err = __sys_sendmmsg(a0, (struct mmsghdr __user *)a1, a[2],
3065 a[3], true);
3066 break;
3067 case SYS_RECVMSG:
3068 err = __sys_recvmsg(a0, (struct user_msghdr __user *)a1,
3069 a[2], true);
3070 break;
3071 case SYS_RECVMMSG:
3072 if (IS_ENABLED(CONFIG_64BIT))
3073 err = __sys_recvmmsg(a0, (struct mmsghdr __user *)a1,
3074 a[2], a[3],
3075 (struct __kernel_timespec __user *)a[4],
3076 NULL);
3077 else
3078 err = __sys_recvmmsg(a0, (struct mmsghdr __user *)a1,
3079 a[2], a[3], NULL,
3080 (struct old_timespec32 __user *)a[4]);
3081 break;
3082 case SYS_ACCEPT4:
3083 err = __sys_accept4(a0, (struct sockaddr __user *)a1,
3084 (int __user *)a[2], a[3]);
3085 break;
3086 default:
3087 err = -EINVAL;
3088 break;
3089 }
3090 return err;
3091 }
3092
3093 #endif
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104 int sock_register(const struct net_proto_family *ops)
3105 {
3106 int err;
3107
3108 if (ops->family >= NPROTO) {
3109 pr_crit("protocol %d >= NPROTO(%d)\n", ops->family, NPROTO);
3110 return -ENOBUFS;
3111 }
3112
3113 spin_lock(&net_family_lock);
3114 if (rcu_dereference_protected(net_families[ops->family],
3115 lockdep_is_held(&net_family_lock)))
3116 err = -EEXIST;
3117 else {
3118 rcu_assign_pointer(net_families[ops->family], ops);
3119 err = 0;
3120 }
3121 spin_unlock(&net_family_lock);
3122
3123 pr_info("NET: Registered %s protocol family\n", pf_family_names[ops->family]);
3124 return err;
3125 }
3126 EXPORT_SYMBOL(sock_register);
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141 void sock_unregister(int family)
3142 {
3143 BUG_ON(family < 0 || family >= NPROTO);
3144
3145 spin_lock(&net_family_lock);
3146 RCU_INIT_POINTER(net_families[family], NULL);
3147 spin_unlock(&net_family_lock);
3148
3149 synchronize_rcu();
3150
3151 pr_info("NET: Unregistered %s protocol family\n", pf_family_names[family]);
3152 }
3153 EXPORT_SYMBOL(sock_unregister);
3154
3155 bool sock_is_registered(int family)
3156 {
3157 return family < NPROTO && rcu_access_pointer(net_families[family]);
3158 }
3159
3160 static int __init sock_init(void)
3161 {
3162 int err;
3163
3164
3165
3166 err = net_sysctl_init();
3167 if (err)
3168 goto out;
3169
3170
3171
3172
3173 skb_init();
3174
3175
3176
3177
3178
3179 init_inodecache();
3180
3181 err = register_filesystem(&sock_fs_type);
3182 if (err)
3183 goto out;
3184 sock_mnt = kern_mount(&sock_fs_type);
3185 if (IS_ERR(sock_mnt)) {
3186 err = PTR_ERR(sock_mnt);
3187 goto out_mount;
3188 }
3189
3190
3191
3192
3193 #ifdef CONFIG_NETFILTER
3194 err = netfilter_init();
3195 if (err)
3196 goto out;
3197 #endif
3198
3199 ptp_classifier_init();
3200
3201 out:
3202 return err;
3203
3204 out_mount:
3205 unregister_filesystem(&sock_fs_type);
3206 goto out;
3207 }
3208
3209 core_initcall(sock_init);
3210
3211 #ifdef CONFIG_PROC_FS
3212 void socket_seq_show(struct seq_file *seq)
3213 {
3214 seq_printf(seq, "sockets: used %d\n",
3215 sock_inuse_get(seq->private));
3216 }
3217 #endif
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228 int get_user_ifreq(struct ifreq *ifr, void __user **ifrdata, void __user *arg)
3229 {
3230 if (in_compat_syscall()) {
3231 struct compat_ifreq *ifr32 = (struct compat_ifreq *)ifr;
3232
3233 memset(ifr, 0, sizeof(*ifr));
3234 if (copy_from_user(ifr32, arg, sizeof(*ifr32)))
3235 return -EFAULT;
3236
3237 if (ifrdata)
3238 *ifrdata = compat_ptr(ifr32->ifr_data);
3239
3240 return 0;
3241 }
3242
3243 if (copy_from_user(ifr, arg, sizeof(*ifr)))
3244 return -EFAULT;
3245
3246 if (ifrdata)
3247 *ifrdata = ifr->ifr_data;
3248
3249 return 0;
3250 }
3251 EXPORT_SYMBOL(get_user_ifreq);
3252
3253 int put_user_ifreq(struct ifreq *ifr, void __user *arg)
3254 {
3255 size_t size = sizeof(*ifr);
3256
3257 if (in_compat_syscall())
3258 size = sizeof(struct compat_ifreq);
3259
3260 if (copy_to_user(arg, ifr, size))
3261 return -EFAULT;
3262
3263 return 0;
3264 }
3265 EXPORT_SYMBOL(put_user_ifreq);
3266
3267 #ifdef CONFIG_COMPAT
3268 static int compat_siocwandev(struct net *net, struct compat_ifreq __user *uifr32)
3269 {
3270 compat_uptr_t uptr32;
3271 struct ifreq ifr;
3272 void __user *saved;
3273 int err;
3274
3275 if (get_user_ifreq(&ifr, NULL, uifr32))
3276 return -EFAULT;
3277
3278 if (get_user(uptr32, &uifr32->ifr_settings.ifs_ifsu))
3279 return -EFAULT;
3280
3281 saved = ifr.ifr_settings.ifs_ifsu.raw_hdlc;
3282 ifr.ifr_settings.ifs_ifsu.raw_hdlc = compat_ptr(uptr32);
3283
3284 err = dev_ioctl(net, SIOCWANDEV, &ifr, NULL, NULL);
3285 if (!err) {
3286 ifr.ifr_settings.ifs_ifsu.raw_hdlc = saved;
3287 if (put_user_ifreq(&ifr, uifr32))
3288 err = -EFAULT;
3289 }
3290 return err;
3291 }
3292
3293
3294 static int compat_ifr_data_ioctl(struct net *net, unsigned int cmd,
3295 struct compat_ifreq __user *u_ifreq32)
3296 {
3297 struct ifreq ifreq;
3298 void __user *data;
3299
3300 if (!is_socket_ioctl_cmd(cmd))
3301 return -ENOTTY;
3302 if (get_user_ifreq(&ifreq, &data, u_ifreq32))
3303 return -EFAULT;
3304 ifreq.ifr_data = data;
3305
3306 return dev_ioctl(net, cmd, &ifreq, data, NULL);
3307 }
3308
3309 static int compat_sock_ioctl_trans(struct file *file, struct socket *sock,
3310 unsigned int cmd, unsigned long arg)
3311 {
3312 void __user *argp = compat_ptr(arg);
3313 struct sock *sk = sock->sk;
3314 struct net *net = sock_net(sk);
3315
3316 if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15))
3317 return sock_ioctl(file, cmd, (unsigned long)argp);
3318
3319 switch (cmd) {
3320 case SIOCWANDEV:
3321 return compat_siocwandev(net, argp);
3322 case SIOCGSTAMP_OLD:
3323 case SIOCGSTAMPNS_OLD:
3324 if (!sock->ops->gettstamp)
3325 return -ENOIOCTLCMD;
3326 return sock->ops->gettstamp(sock, argp, cmd == SIOCGSTAMP_OLD,
3327 !COMPAT_USE_64BIT_TIME);
3328
3329 case SIOCETHTOOL:
3330 case SIOCBONDSLAVEINFOQUERY:
3331 case SIOCBONDINFOQUERY:
3332 case SIOCSHWTSTAMP:
3333 case SIOCGHWTSTAMP:
3334 return compat_ifr_data_ioctl(net, cmd, argp);
3335
3336 case FIOSETOWN:
3337 case SIOCSPGRP:
3338 case FIOGETOWN:
3339 case SIOCGPGRP:
3340 case SIOCBRADDBR:
3341 case SIOCBRDELBR:
3342 case SIOCGIFVLAN:
3343 case SIOCSIFVLAN:
3344 case SIOCGSKNS:
3345 case SIOCGSTAMP_NEW:
3346 case SIOCGSTAMPNS_NEW:
3347 case SIOCGIFCONF:
3348 case SIOCSIFBR:
3349 case SIOCGIFBR:
3350 return sock_ioctl(file, cmd, arg);
3351
3352 case SIOCGIFFLAGS:
3353 case SIOCSIFFLAGS:
3354 case SIOCGIFMAP:
3355 case SIOCSIFMAP:
3356 case SIOCGIFMETRIC:
3357 case SIOCSIFMETRIC:
3358 case SIOCGIFMTU:
3359 case SIOCSIFMTU:
3360 case SIOCGIFMEM:
3361 case SIOCSIFMEM:
3362 case SIOCGIFHWADDR:
3363 case SIOCSIFHWADDR:
3364 case SIOCADDMULTI:
3365 case SIOCDELMULTI:
3366 case SIOCGIFINDEX:
3367 case SIOCGIFADDR:
3368 case SIOCSIFADDR:
3369 case SIOCSIFHWBROADCAST:
3370 case SIOCDIFADDR:
3371 case SIOCGIFBRDADDR:
3372 case SIOCSIFBRDADDR:
3373 case SIOCGIFDSTADDR:
3374 case SIOCSIFDSTADDR:
3375 case SIOCGIFNETMASK:
3376 case SIOCSIFNETMASK:
3377 case SIOCSIFPFLAGS:
3378 case SIOCGIFPFLAGS:
3379 case SIOCGIFTXQLEN:
3380 case SIOCSIFTXQLEN:
3381 case SIOCBRADDIF:
3382 case SIOCBRDELIF:
3383 case SIOCGIFNAME:
3384 case SIOCSIFNAME:
3385 case SIOCGMIIPHY:
3386 case SIOCGMIIREG:
3387 case SIOCSMIIREG:
3388 case SIOCBONDENSLAVE:
3389 case SIOCBONDRELEASE:
3390 case SIOCBONDSETHWADDR:
3391 case SIOCBONDCHANGEACTIVE:
3392 case SIOCSARP:
3393 case SIOCGARP:
3394 case SIOCDARP:
3395 case SIOCOUTQ:
3396 case SIOCOUTQNSD:
3397 case SIOCATMARK:
3398 return sock_do_ioctl(net, sock, cmd, arg);
3399 }
3400
3401 return -ENOIOCTLCMD;
3402 }
3403
3404 static long compat_sock_ioctl(struct file *file, unsigned int cmd,
3405 unsigned long arg)
3406 {
3407 struct socket *sock = file->private_data;
3408 int ret = -ENOIOCTLCMD;
3409 struct sock *sk;
3410 struct net *net;
3411
3412 sk = sock->sk;
3413 net = sock_net(sk);
3414
3415 if (sock->ops->compat_ioctl)
3416 ret = sock->ops->compat_ioctl(sock, cmd, arg);
3417
3418 if (ret == -ENOIOCTLCMD &&
3419 (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST))
3420 ret = compat_wext_handle_ioctl(net, cmd, arg);
3421
3422 if (ret == -ENOIOCTLCMD)
3423 ret = compat_sock_ioctl_trans(file, sock, cmd, arg);
3424
3425 return ret;
3426 }
3427 #endif
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438 int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen)
3439 {
3440 return sock->ops->bind(sock, addr, addrlen);
3441 }
3442 EXPORT_SYMBOL(kernel_bind);
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452 int kernel_listen(struct socket *sock, int backlog)
3453 {
3454 return sock->ops->listen(sock, backlog);
3455 }
3456 EXPORT_SYMBOL(kernel_listen);
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469 int kernel_accept(struct socket *sock, struct socket **newsock, int flags)
3470 {
3471 struct sock *sk = sock->sk;
3472 int err;
3473
3474 err = sock_create_lite(sk->sk_family, sk->sk_type, sk->sk_protocol,
3475 newsock);
3476 if (err < 0)
3477 goto done;
3478
3479 err = sock->ops->accept(sock, *newsock, flags, true);
3480 if (err < 0) {
3481 sock_release(*newsock);
3482 *newsock = NULL;
3483 goto done;
3484 }
3485
3486 (*newsock)->ops = sock->ops;
3487 __module_get((*newsock)->ops->owner);
3488
3489 done:
3490 return err;
3491 }
3492 EXPORT_SYMBOL(kernel_accept);
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507 int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,
3508 int flags)
3509 {
3510 return sock->ops->connect(sock, addr, addrlen, flags);
3511 }
3512 EXPORT_SYMBOL(kernel_connect);
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523 int kernel_getsockname(struct socket *sock, struct sockaddr *addr)
3524 {
3525 return sock->ops->getname(sock, addr, 0);
3526 }
3527 EXPORT_SYMBOL(kernel_getsockname);
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538 int kernel_getpeername(struct socket *sock, struct sockaddr *addr)
3539 {
3540 return sock->ops->getname(sock, addr, 1);
3541 }
3542 EXPORT_SYMBOL(kernel_getpeername);
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555 int kernel_sendpage(struct socket *sock, struct page *page, int offset,
3556 size_t size, int flags)
3557 {
3558 if (sock->ops->sendpage) {
3559
3560 WARN_ONCE(!sendpage_ok(page), "improper page for zero-copy send");
3561 return sock->ops->sendpage(sock, page, offset, size, flags);
3562 }
3563 return sock_no_sendpage(sock, page, offset, size, flags);
3564 }
3565 EXPORT_SYMBOL(kernel_sendpage);
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579 int kernel_sendpage_locked(struct sock *sk, struct page *page, int offset,
3580 size_t size, int flags)
3581 {
3582 struct socket *sock = sk->sk_socket;
3583
3584 if (sock->ops->sendpage_locked)
3585 return sock->ops->sendpage_locked(sk, page, offset, size,
3586 flags);
3587
3588 return sock_no_sendpage_locked(sk, page, offset, size, flags);
3589 }
3590 EXPORT_SYMBOL(kernel_sendpage_locked);
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600 int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how)
3601 {
3602 return sock->ops->shutdown(sock, how);
3603 }
3604 EXPORT_SYMBOL(kernel_sock_shutdown);
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616 u32 kernel_sock_ip_overhead(struct sock *sk)
3617 {
3618 struct inet_sock *inet;
3619 struct ip_options_rcu *opt;
3620 u32 overhead = 0;
3621 #if IS_ENABLED(CONFIG_IPV6)
3622 struct ipv6_pinfo *np;
3623 struct ipv6_txoptions *optv6 = NULL;
3624 #endif
3625
3626 if (!sk)
3627 return overhead;
3628
3629 switch (sk->sk_family) {
3630 case AF_INET:
3631 inet = inet_sk(sk);
3632 overhead += sizeof(struct iphdr);
3633 opt = rcu_dereference_protected(inet->inet_opt,
3634 sock_owned_by_user(sk));
3635 if (opt)
3636 overhead += opt->opt.optlen;
3637 return overhead;
3638 #if IS_ENABLED(CONFIG_IPV6)
3639 case AF_INET6:
3640 np = inet6_sk(sk);
3641 overhead += sizeof(struct ipv6hdr);
3642 if (np)
3643 optv6 = rcu_dereference_protected(np->opt,
3644 sock_owned_by_user(sk));
3645 if (optv6)
3646 overhead += (optv6->opt_flen + optv6->opt_nflen);
3647 return overhead;
3648 #endif
3649 default:
3650 return overhead;
3651 }
3652 }
3653 EXPORT_SYMBOL(kernel_sock_ip_overhead);