Lines Matching +full:kernel +full:- +full:family

1 // SPDX-License-Identifier: GPL-2.0-or-later
25 * Jeff Uphoff : Made max number of sockets command-line
34 * for NetROM and future kernel nfsd type
47 * protocol-independent
55 #include <linux/bpf-cgroup.h>
141 struct socket *sock = f->private_data; in sock_show_fdinfo()
142 const struct proto_ops *ops = READ_ONCE(sock->ops); in sock_show_fdinfo()
144 if (ops->show_fdinfo) in sock_show_fdinfo()
145 ops->show_fdinfo(m, sock); in sock_show_fdinfo()
233 * Move socket addresses back and forth across the kernel/user
238 * move_addr_to_kernel - copy a socket address into kernel space
240 * @kaddr: Address in kernel space
243 * The address is copied into kernel space. If the provided address is
244 * too long an error code of -EINVAL is returned. If the copy gives
245 * invalid addresses -EFAULT is returned. On a success 0 is returned.
251 return -EINVAL; in move_addr_to_kernel()
255 return -EFAULT; in move_addr_to_kernel()
260 * move_addr_to_user - copy an address to user space
261 * @kaddr: kernel space address
262 * @klen: length of address in kernel
267 * This is overwritten with the buffer space used. -EINVAL is returned
268 * if an overlong buffer is specified or a negative buffer size. -EFAULT
289 return -EINVAL; in move_addr_to_user()
292 return -ENOMEM; in move_addr_to_user()
294 return -EFAULT; in move_addr_to_user()
312 init_waitqueue_head(&ei->socket.wq.wait); in sock_alloc_inode()
313 ei->socket.wq.fasync_list = NULL; in sock_alloc_inode()
314 ei->socket.wq.flags = 0; in sock_alloc_inode()
316 ei->socket.state = SS_UNCONNECTED; in sock_alloc_inode()
317 ei->socket.flags = 0; in sock_alloc_inode()
318 ei->socket.ops = NULL; in sock_alloc_inode()
319 ei->socket.sk = NULL; in sock_alloc_inode()
320 ei->socket.file = NULL; in sock_alloc_inode()
322 return &ei->vfs_inode; in sock_alloc_inode()
337 inode_init_once(&ei->vfs_inode); in init_once()
364 d_inode(dentry)->i_ino); in sockfs_dname()
376 if (dentry->d_name.len + 1 > size) in sockfs_xattr_get()
377 return -ERANGE; in sockfs_xattr_get()
378 memcpy(value, dentry->d_name.name, dentry->d_name.len + 1); in sockfs_xattr_get()
380 return dentry->d_name.len + 1; in sockfs_xattr_get()
385 #define XATTR_NAME_SOCKPROTONAME_LEN (sizeof(XATTR_NAME_SOCKPROTONAME)-1)
399 return -EAGAIN; in sockfs_security_xattr_set()
417 return -ENOMEM; in sockfs_init_fs_context()
418 ctx->ops = &sockfs_ops; in sockfs_init_fs_context()
419 ctx->dops = &sockfs_dentry_operations; in sockfs_init_fs_context()
420 ctx->xattr = sockfs_xattr_handlers; in sockfs_init_fs_context()
437 * and file struct implicitly stored in sock->file.
445 * with shared fd spaces, we cannot solve it inside kernel,
450 * sock_alloc_file - Bind a &socket to a &file
456 * in sock->file. If dname is %NULL, sets to "".
468 dname = sock->sk ? sock->sk->sk_prot_creator->name : ""; in sock_alloc_file()
478 file->f_mode |= FMODE_NOWAIT; in sock_alloc_file()
479 sock->file = file; in sock_alloc_file()
480 file->private_data = sock; in sock_alloc_file()
483 * Disable permission and pre-content events, but enable legacy in sock_alloc_file()
511 * sock_from_file - Return the &socket bounded to @file.
519 if (likely(file->f_op == &socket_file_ops)) in sock_from_file()
520 return file->private_data; /* set in sock_alloc_file */ in sock_from_file()
527 * sockfd_lookup - Go from a file number to its socket slot
546 *err = -EBADF; in sockfd_lookup()
552 *err = -ENOTSOCK; in sockfd_lookup()
571 return -ERANGE; in sockfs_listxattr()
579 return -ERANGE; in sockfs_listxattr()
592 if (!err && (iattr->ia_valid & ATTR_UID)) { in sockfs_setattr()
595 if (sock->sk) in sockfs_setattr()
596 sock->sk->sk_uid = iattr->ia_uid; in sockfs_setattr()
598 err = -ENOENT; in sockfs_setattr()
610 * sock_alloc - allocate a socket
622 inode = new_inode_pseudo(sock_mnt->mnt_sb); in sock_alloc()
628 inode->i_ino = get_next_ino(); in sock_alloc()
629 inode->i_mode = S_IFSOCK | S_IRWXUGO; in sock_alloc()
630 inode->i_uid = current_fsuid(); in sock_alloc()
631 inode->i_gid = current_fsgid(); in sock_alloc()
632 inode->i_op = &sockfs_inode_ops; in sock_alloc()
640 const struct proto_ops *ops = READ_ONCE(sock->ops); in __sock_release()
643 struct module *owner = ops->owner; in __sock_release()
647 ops->release(sock); in __sock_release()
648 sock->sk = NULL; in __sock_release()
651 sock->ops = NULL; in __sock_release()
655 if (sock->wq.fasync_list) in __sock_release()
658 if (!sock->file) { in __sock_release()
662 sock->file = NULL; in __sock_release()
666 * sock_release - close a socket
712 int ret = INDIRECT_CALL_INET(READ_ONCE(sock->ops)->sendmsg, inet6_sendmsg, in sock_sendmsg_nosec()
715 BUG_ON(ret == -EIOCBQUEUED); in sock_sendmsg_nosec()
718 call_trace_sock_send_length(sock->sk, ret, 0); in sock_sendmsg_nosec()
731 * sock_sendmsg - send a message through @sock
740 struct sockaddr_storage *save_addr = (struct sockaddr_storage *)msg->msg_name; in sock_sendmsg()
742 int save_len = msg->msg_namelen; in sock_sendmsg()
745 if (msg->msg_name) { in sock_sendmsg()
746 memcpy(&address, msg->msg_name, msg->msg_namelen); in sock_sendmsg()
747 msg->msg_name = &address; in sock_sendmsg()
751 msg->msg_name = save_addr; in sock_sendmsg()
752 msg->msg_namelen = save_len; in sock_sendmsg()
759 * kernel_sendmsg - send a message through @sock (kernel-space)
762 * @vec: kernel vec
773 iov_iter_kvec(&msg->msg_iter, ITER_SOURCE, vec, num, size); in kernel_sendmsg()
785 return skb->pkt_type == PACKET_OUTGOING; in skb_is_err_queue()
798 return skb->tstamp && !false_tstamp && skb_is_err_queue(skb); in skb_is_swtx_tstamp()
803 bool cycles = READ_ONCE(sk->sk_tsflags) & SOF_TIMESTAMPING_BIND_PHC; in get_timestamp()
811 *if_index = orig_dev->ifindex; in get_timestamp()
814 hwtstamp = shhwtstamps->hwtstamp; in get_timestamp()
836 if_index = orig_dev->ifindex; in put_ts_pktinfo()
841 ts_pktinfo.pkt_length = skb->len - skb_mac_offset(skb); in put_ts_pktinfo()
864 if (need_software_tstamp && skb->tstamp == 0) { in __sock_recv_timestamp()
902 tsflags = READ_ONCE(sk->sk_tsflags); in __sock_recv_timestamp()
907 ktime_to_timespec64_cond(skb->tstamp, tss.ts + 0)) in __sock_recv_timestamp()
916 if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP_NETDEV) in __sock_recv_timestamp()
919 hwtstamp = shhwtstamps->hwtstamp; in __sock_recv_timestamp()
923 READ_ONCE(sk->sk_bind_phc)); in __sock_recv_timestamp()
939 if (skb_is_err_queue(skb) && skb->len && in __sock_recv_timestamp()
940 SKB_EXT_ERR(skb)->opt_stats) in __sock_recv_timestamp()
942 skb->len, skb->data); in __sock_recv_timestamp()
955 if (!skb->wifi_acked_valid) in __sock_recv_wifi_status()
958 ack = skb->wifi_acked; in __sock_recv_wifi_status()
968 if (sock_flag(sk, SOCK_RXQ_OVFL) && skb && SOCK_SKB_CB(skb)->dropcount) in sock_recv_drops()
970 sizeof(__u32), &SOCK_SKB_CB(skb)->dropcount); in sock_recv_drops()
978 __u32 mark = skb->mark; in sock_recv_mark()
988 __u32 priority = skb->priority; in sock_recv_priority()
1017 int ret = INDIRECT_CALL_INET(READ_ONCE(sock->ops)->recvmsg, in sock_recvmsg_nosec()
1022 call_trace_sock_recv_length(sock->sk, ret, flags); in sock_recvmsg_nosec()
1027 * sock_recvmsg - receive a message from @sock
1044 * kernel_recvmsg - Receive a message from a socket (kernel space)
1062 msg->msg_control_is_user = false; in kernel_recvmsg()
1063 iov_iter_kvec(&msg->msg_iter, ITER_DEST, vec, num, size); in kernel_recvmsg()
1072 struct socket *sock = file->private_data; in sock_splice_read()
1075 ops = READ_ONCE(sock->ops); in sock_splice_read()
1076 if (unlikely(!ops->splice_read)) in sock_splice_read()
1079 return ops->splice_read(sock, ppos, pipe, len, flags); in sock_splice_read()
1084 struct socket *sock = file->private_data; in sock_splice_eof()
1087 ops = READ_ONCE(sock->ops); in sock_splice_eof()
1088 if (ops->splice_eof) in sock_splice_eof()
1089 ops->splice_eof(sock); in sock_splice_eof()
1094 struct file *file = iocb->ki_filp; in sock_read_iter()
1095 struct socket *sock = file->private_data; in sock_read_iter()
1100 if (file->f_flags & O_NONBLOCK || (iocb->ki_flags & IOCB_NOWAIT)) in sock_read_iter()
1103 if (iocb->ki_pos != 0) in sock_read_iter()
1104 return -ESPIPE; in sock_read_iter()
1116 struct file *file = iocb->ki_filp; in sock_write_iter()
1117 struct socket *sock = file->private_data; in sock_write_iter()
1122 if (iocb->ki_pos != 0) in sock_write_iter()
1123 return -ESPIPE; in sock_write_iter()
1125 if (file->f_flags & O_NONBLOCK || (iocb->ki_flags & IOCB_NOWAIT)) in sock_write_iter()
1128 if (sock->type == SOCK_SEQPACKET) in sock_write_iter()
1156 int err = -ENOPKG; in br_ioctl_call()
1183 const struct proto_ops *ops = READ_ONCE(sock->ops); in sock_do_ioctl()
1190 err = ops->ioctl(sock, cmd, arg); in sock_do_ioctl()
1196 if (err != -ENOIOCTLCMD) in sock_do_ioctl()
1200 return -ENOTTY; in sock_do_ioctl()
1203 return -EFAULT; in sock_do_ioctl()
1207 return -EFAULT; in sock_do_ioctl()
1214 * what to do with it - that's up to the protocol still.
1226 sock = file->private_data; in sock_ioctl()
1227 ops = READ_ONCE(sock->ops); in sock_ioctl()
1228 sk = sock->sk; in sock_ioctl()
1235 return -EFAULT; in sock_ioctl()
1239 return -EFAULT; in sock_ioctl()
1249 err = -EFAULT; in sock_ioctl()
1252 err = f_setown(sock->file, pid, 1); in sock_ioctl()
1256 err = put_user(f_getown(sock->file), in sock_ioctl()
1269 err = -ENOPKG; in sock_ioctl()
1279 err = -EPERM; in sock_ioctl()
1280 if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) in sock_ioctl()
1283 err = open_related_ns(&net->ns, get_net_ns); in sock_ioctl()
1287 if (!ops->gettstamp) { in sock_ioctl()
1288 err = -ENOIOCTLCMD; in sock_ioctl()
1291 err = ops->gettstamp(sock, argp, in sock_ioctl()
1297 if (!ops->gettstamp) { in sock_ioctl()
1298 err = -ENOIOCTLCMD; in sock_ioctl()
1301 err = ops->gettstamp(sock, argp, in sock_ioctl()
1318 * sock_create_lite - creates a socket
1319 * @family: protocol family (AF_INET, ...)
1330 int sock_create_lite(int family, int type, int protocol, struct socket **res) in sock_create_lite() argument
1335 err = security_socket_create(family, type, protocol, 1); in sock_create_lite()
1341 err = -ENOMEM; in sock_create_lite()
1345 sock->type = type; in sock_create_lite()
1346 err = security_socket_post_create(sock, family, type, protocol, 1); in sock_create_lite()
1360 /* No kernel lock held - perfect */
1363 struct socket *sock = file->private_data; in sock_poll()
1364 const struct proto_ops *ops = READ_ONCE(sock->ops); in sock_poll()
1367 if (!ops->poll) in sock_poll()
1370 if (sk_can_busy_loop(sock->sk)) { in sock_poll()
1373 sk_busy_loop(sock->sk, 1); in sock_poll()
1379 return ops->poll(file, sock, wait) | flag; in sock_poll()
1384 struct socket *sock = file->private_data; in sock_mmap()
1386 return READ_ONCE(sock->ops)->mmap(file, sock, vma); in sock_mmap()
1402 * 2. fasync_list is used under read_lock(&sk->sk_callback_lock)
1408 struct socket *sock = filp->private_data; in sock_fasync()
1409 struct sock *sk = sock->sk; in sock_fasync()
1410 struct socket_wq *wq = &sock->wq; in sock_fasync()
1413 return -EINVAL; in sock_fasync()
1416 fasync_helper(fd, filp, on, &wq->fasync_list); in sock_fasync()
1418 if (!wq->fasync_list) in sock_fasync()
1431 if (!wq || !wq->fasync_list) in sock_wake_async()
1432 return -1; in sock_wake_async()
1436 if (test_bit(SOCKWQ_ASYNC_WAITDATA, &wq->flags)) in sock_wake_async()
1440 if (!test_and_clear_bit(SOCKWQ_ASYNC_NOSPACE, &wq->flags)) in sock_wake_async()
1445 kill_fasync(&wq->fasync_list, SIGIO, band); in sock_wake_async()
1448 kill_fasync(&wq->fasync_list, SIGURG, band); in sock_wake_async()
1456 * __sock_create - creates a socket
1458 * @family: protocol family (AF_INET, ...)
1462 * @kern: boolean for kernel space sockets
1466 * be set to true if the socket resides in kernel space.
1470 int __sock_create(struct net *net, int family, int type, int protocol, in __sock_create() argument
1480 if (family < 0 || family >= NPROTO) in __sock_create()
1481 return -EAFNOSUPPORT; in __sock_create()
1483 return -EINVAL; in __sock_create()
1490 if (family == PF_INET && type == SOCK_PACKET) { in __sock_create()
1492 current->comm); in __sock_create()
1493 family = PF_PACKET; in __sock_create()
1496 err = security_socket_create(family, type, protocol, kern); in __sock_create()
1501 * Allocate the socket and allow the family to set things up. if in __sock_create()
1502 * the protocol is 0, the family is instructed to select an appropriate in __sock_create()
1508 return -ENFILE; /* Not exactly a match, but its the in __sock_create()
1512 sock->type = type; in __sock_create()
1518 * requested real, full-featured networking support upon configuration. in __sock_create()
1521 if (rcu_access_pointer(net_families[family]) == NULL) in __sock_create()
1522 request_module("net-pf-%d", family); in __sock_create()
1526 pf = rcu_dereference(net_families[family]); in __sock_create()
1527 err = -EAFNOSUPPORT; in __sock_create()
1532 * We will call the ->create function, that possibly is in a loadable in __sock_create()
1535 if (!try_module_get(pf->owner)) in __sock_create()
1541 err = pf->create(net, sock, protocol, kern); in __sock_create()
1543 /* ->create should release the allocated sock->sk object on error in __sock_create()
1544 * and make sure sock->sk is set to NULL to avoid use-after-free in __sock_create()
1546 DEBUG_NET_WARN_ONCE(sock->sk, in __sock_create()
1547 "%ps must clear sock->sk on failure, family: %d, type: %d, protocol: %d\n", in __sock_create()
1548 pf->create, family, type, protocol); in __sock_create()
1556 if (!try_module_get(sock->ops->owner)) in __sock_create()
1560 * Now that we're done with the ->create function, the [loadable] in __sock_create()
1563 module_put(pf->owner); in __sock_create()
1564 err = security_socket_post_create(sock, family, type, protocol, kern); in __sock_create()
1572 err = -EAFNOSUPPORT; in __sock_create()
1574 sock->ops = NULL; in __sock_create()
1575 module_put(pf->owner); in __sock_create()
1587 * sock_create - creates a socket
1588 * @family: protocol family (AF_INET, ...)
1597 int sock_create(int family, int type, int protocol, struct socket **res) in sock_create() argument
1599 return __sock_create(current->nsproxy->net_ns, family, type, protocol, res, 0); in sock_create()
1604 * sock_create_kern - creates a socket (kernel space)
1606 * @family: protocol family (AF_INET, ...)
1615 int sock_create_kern(struct net *net, int family, int type, int protocol, struct socket **res) in sock_create_kern() argument
1617 return __sock_create(net, family, type, protocol, res, 1); in sock_create_kern()
1621 static struct socket *__sys_socket_create(int family, int type, int protocol) in __sys_socket_create() argument
1633 return ERR_PTR(-EINVAL); in __sys_socket_create()
1636 retval = sock_create(family, type, protocol, &sock); in __sys_socket_create()
1643 struct file *__sys_socket_file(int family, int type, int protocol) in __sys_socket_file() argument
1648 sock = __sys_socket_create(family, type, protocol); in __sys_socket_file()
1671 __weak noinline int update_socket_protocol(int family, int type, int protocol) in update_socket_protocol() argument
1678 int __sys_socket(int family, int type, int protocol) in __sys_socket() argument
1683 sock = __sys_socket_create(family, type, in __sys_socket()
1684 update_socket_protocol(family, type, protocol)); in __sys_socket()
1695 SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) in SYSCALL_DEFINE3() argument
1697 return __sys_socket(family, type, protocol); in SYSCALL_DEFINE3()
1704 int __sys_socketpair(int family, int type, int protocol, int __user *usockvec) in __sys_socketpair() argument
1713 return -EINVAL; in __sys_socketpair()
1746 err = sock_create(family, type, protocol, &sock1); in __sys_socketpair()
1750 err = sock_create(family, type, protocol, &sock2); in __sys_socketpair()
1763 err = READ_ONCE(sock1->ops)->socketpair(sock1, sock2); in __sys_socketpair()
1796 SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol, in SYSCALL_DEFINE4() argument
1799 return __sys_socketpair(family, type, protocol, usockvec); in SYSCALL_DEFINE4()
1810 err = READ_ONCE(sock->ops)->bind(sock, in __sys_bind_socket()
1820 * We move the socket address to kernel space before we call
1832 return -EBADF; in __sys_bind()
1835 return -ENOTSOCK; in __sys_bind()
1858 somaxconn = READ_ONCE(sock_net(sock->sk)->core.sysctl_somaxconn); in __sys_listen_socket()
1864 err = READ_ONCE(sock->ops)->listen(sock, backlog); in __sys_listen_socket()
1874 return -EBADF; in __sys_listen()
1877 return -ENOTSOCK; in __sys_listen()
1899 return ERR_PTR(-ENOTSOCK); in do_accept()
1903 return ERR_PTR(-ENFILE); in do_accept()
1904 ops = READ_ONCE(sock->ops); in do_accept()
1906 newsock->type = sock->type; in do_accept()
1907 newsock->ops = ops; in do_accept()
1911 * has the protocol module (sock->ops->owner) held. in do_accept()
1913 __module_get(ops->owner); in do_accept()
1915 newfile = sock_alloc_file(newsock, flags, sock->sk->sk_prot_creator->name); in do_accept()
1923 arg->flags |= sock->file->f_flags; in do_accept()
1924 err = ops->accept(sock, newsock, arg); in do_accept()
1929 len = ops->getname(newsock, (struct sockaddr *)&address, 2); in do_accept()
1931 err = -ECONNABORTED; in do_accept()
1955 return -EINVAL; in __sys_accept4_file()
1977 * connected fd. We collect the address of the connector in kernel
1992 return -EBADF; in __sys_accept4()
2011 * is in user space so we verify it is OK and move it to kernel space.
2018 * include the -EINPROGRESS status for such sockets.
2029 err = -ENOTSOCK; in __sys_connect_file()
2038 err = READ_ONCE(sock->ops)->connect(sock, (struct sockaddr *)address, in __sys_connect_file()
2039 addrlen, sock->file->f_flags | file_flags); in __sys_connect_file()
2051 return -EBADF; in __sys_connect()
2080 return -EBADF; in __sys_getsockname()
2083 return -ENOTSOCK; in __sys_getsockname()
2089 err = READ_ONCE(sock->ops)->getname(sock, (struct sockaddr *)&address, 0); in __sys_getsockname()
2117 return -EBADF; in __sys_getpeername()
2120 return -ENOTSOCK; in __sys_getpeername()
2126 err = READ_ONCE(sock->ops)->getname(sock, (struct sockaddr *)&address, 1); in __sys_getpeername()
2141 * Send a datagram to a given address. We move the address into kernel
2159 return -EBADF; in __sys_sendto()
2162 return -ENOTSOCK; in __sys_sendto()
2177 if (sock->file->f_flags & O_NONBLOCK) in __sys_sendto()
2203 * sender address from kernel to user space.
2223 return -EBADF; in __sys_recvfrom()
2226 return -ENOTSOCK; in __sys_recvfrom()
2228 if (sock->file->f_flags & O_NONBLOCK) in __sys_recvfrom()
2260 return test_bit(SOCK_CUSTOM_SOCKOPT, &sock->flags); in sock_use_custom_sol_socket()
2271 return -EINVAL; in do_sock_setsockopt()
2278 err = BPF_CGROUP_RUN_PROG_SETSOCKOPT(sock->sk, &level, &optname, in do_sock_setsockopt()
2290 ops = READ_ONCE(sock->ops); in do_sock_setsockopt()
2293 else if (unlikely(!ops->setsockopt)) in do_sock_setsockopt()
2294 err = -EOPNOTSUPP; in do_sock_setsockopt()
2296 err = ops->setsockopt(sock, level, optname, optval, in do_sock_setsockopt()
2316 return -EBADF; in __sys_setsockopt()
2319 return -ENOTSOCK; in __sys_setsockopt()
2347 ops = READ_ONCE(sock->ops); in do_sock_getsockopt()
2349 err = sk_getsockopt(sock->sk, level, optname, optval, optlen); in do_sock_getsockopt()
2350 } else if (unlikely(!ops->getsockopt)) { in do_sock_getsockopt()
2351 err = -EOPNOTSUPP; in do_sock_getsockopt()
2355 return -EOPNOTSUPP; in do_sock_getsockopt()
2357 err = ops->getsockopt(sock, level, optname, optval.user, in do_sock_getsockopt()
2362 err = BPF_CGROUP_RUN_PROG_GETSOCKOPT(sock->sk, level, optname, in do_sock_getsockopt()
2381 return -EBADF; in __sys_getsockopt()
2384 return -ENOTSOCK; in __sys_getsockopt()
2406 err = READ_ONCE(sock->ops)->shutdown(sock, how); in __sys_shutdown_sock()
2417 return -EBADF; in __sys_shutdown()
2420 return -ENOTSOCK; in __sys_shutdown()
2433 #define COMPAT_MSG(msg, member) ((MSG_CMSG_COMPAT & flags) ? &msg##_compat->member : &msg->member)
2448 kmsg->msg_control_is_user = true; in __copy_msghdr()
2449 kmsg->msg_get_inq = 0; in __copy_msghdr()
2450 kmsg->msg_control_user = msg->msg_control; in __copy_msghdr()
2451 kmsg->msg_controllen = msg->msg_controllen; in __copy_msghdr()
2452 kmsg->msg_flags = msg->msg_flags; in __copy_msghdr()
2454 kmsg->msg_namelen = msg->msg_namelen; in __copy_msghdr()
2455 if (!msg->msg_name) in __copy_msghdr()
2456 kmsg->msg_namelen = 0; in __copy_msghdr()
2458 if (kmsg->msg_namelen < 0) in __copy_msghdr()
2459 return -EINVAL; in __copy_msghdr()
2461 if (kmsg->msg_namelen > sizeof(struct sockaddr_storage)) in __copy_msghdr()
2462 kmsg->msg_namelen = sizeof(struct sockaddr_storage); in __copy_msghdr()
2465 *save_addr = msg->msg_name; in __copy_msghdr()
2467 if (msg->msg_name && kmsg->msg_namelen) { in __copy_msghdr()
2469 err = move_addr_to_kernel(msg->msg_name, in __copy_msghdr()
2470 kmsg->msg_namelen, in __copy_msghdr()
2471 kmsg->msg_name); in __copy_msghdr()
2476 kmsg->msg_name = NULL; in __copy_msghdr()
2477 kmsg->msg_namelen = 0; in __copy_msghdr()
2480 if (msg->msg_iovlen > UIO_MAXIOV) in __copy_msghdr()
2481 return -EMSGSIZE; in __copy_msghdr()
2483 kmsg->msg_iocb = NULL; in __copy_msghdr()
2484 kmsg->msg_ubuf = NULL; in __copy_msghdr()
2497 return -EFAULT; in copy_msghdr_from_user()
2505 UIO_FASTIOV, iov, &kmsg->msg_iter); in copy_msghdr_from_user()
2520 err = -ENOBUFS; in ____sys_sendmsg()
2522 if (msg_sys->msg_controllen > INT_MAX) in ____sys_sendmsg()
2524 flags |= (msg_sys->msg_flags & allowed_msghdr_flags); in ____sys_sendmsg()
2525 ctl_len = msg_sys->msg_controllen; in ____sys_sendmsg()
2528 cmsghdr_from_user_compat_to_kern(msg_sys, sock->sk, ctl, in ____sys_sendmsg()
2532 ctl_buf = msg_sys->msg_control; in ____sys_sendmsg()
2533 ctl_len = msg_sys->msg_controllen; in ____sys_sendmsg()
2538 ctl_buf = sock_kmalloc(sock->sk, ctl_len, GFP_KERNEL); in ____sys_sendmsg()
2542 err = -EFAULT; in ____sys_sendmsg()
2543 if (copy_from_user(ctl_buf, msg_sys->msg_control_user, ctl_len)) in ____sys_sendmsg()
2545 msg_sys->msg_control = ctl_buf; in ____sys_sendmsg()
2546 msg_sys->msg_control_is_user = false; in ____sys_sendmsg()
2549 msg_sys->msg_flags = flags; in ____sys_sendmsg()
2551 if (sock->file->f_flags & O_NONBLOCK) in ____sys_sendmsg()
2552 msg_sys->msg_flags |= MSG_DONTWAIT; in ____sys_sendmsg()
2556 * used_address->name_len is initialized to UINT_MAX so that the first in ____sys_sendmsg()
2559 if (used_address && msg_sys->msg_name && in ____sys_sendmsg()
2560 used_address->name_len == msg_sys->msg_namelen && in ____sys_sendmsg()
2561 !memcmp(&used_address->name, msg_sys->msg_name, in ____sys_sendmsg()
2562 used_address->name_len)) { in ____sys_sendmsg()
2572 used_address->name_len = msg_sys->msg_namelen; in ____sys_sendmsg()
2573 if (msg_sys->msg_name) in ____sys_sendmsg()
2574 memcpy(&used_address->name, msg_sys->msg_name, in ____sys_sendmsg()
2575 used_address->name_len); in ____sys_sendmsg()
2580 sock_kfree_s(sock->sk, ctl_buf, ctl_len); in ____sys_sendmsg()
2614 msg_sys->msg_name = &address; in ___sys_sendmsg()
2642 return -EINVAL; in __sys_sendmsg()
2647 return -EBADF; in __sys_sendmsg()
2650 return -ENOTSOCK; in __sys_sendmsg()
2676 return -EINVAL; in __sys_sendmmsg()
2686 return -EBADF; in __sys_sendmmsg()
2689 return -ENOTSOCK; in __sys_sendmmsg()
2698 if (datagrams == vlen - 1) in __sys_sendmmsg()
2706 err = __put_user(err, &compat_entry->msg_len); in __sys_sendmmsg()
2714 err = put_user(err, &entry->msg_len); in __sys_sendmmsg()
2773 msg_sys->msg_name = &addr; in ____sys_recvmsg()
2774 cmsg_ptr = (unsigned long)msg_sys->msg_control; in ____sys_recvmsg()
2775 msg_sys->msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT); in ____sys_recvmsg()
2777 /* We assume all kernel code knows the size of sockaddr_storage */ in ____sys_recvmsg()
2778 msg_sys->msg_namelen = 0; in ____sys_recvmsg()
2780 if (sock->file->f_flags & O_NONBLOCK) in ____sys_recvmsg()
2794 msg_sys->msg_namelen, uaddr, in ____sys_recvmsg()
2799 err = __put_user((msg_sys->msg_flags & ~MSG_CMSG_COMPAT), in ____sys_recvmsg()
2804 err = __put_user((unsigned long)msg_sys->msg_control - cmsg_ptr, in ____sys_recvmsg()
2805 &msg_compat->msg_controllen); in ____sys_recvmsg()
2807 err = __put_user((unsigned long)msg_sys->msg_control - cmsg_ptr, in ____sys_recvmsg()
2808 &msg->msg_controllen); in ____sys_recvmsg()
2851 return -EINVAL; in __sys_recvmsg()
2856 return -EBADF; in __sys_recvmsg()
2859 return -ENOTSOCK; in __sys_recvmsg()
2887 poll_select_set_timeout(&end_time, timeout->tv_sec, in do_recvmmsg()
2888 timeout->tv_nsec)) in do_recvmmsg()
2889 return -EINVAL; in do_recvmmsg()
2896 return -EBADF; in do_recvmmsg()
2899 return -ENOTSOCK; in do_recvmmsg()
2902 err = sock_error(sock->sk); in do_recvmmsg()
2920 err = __put_user(err, &compat_entry->msg_len); in do_recvmmsg()
2929 err = put_user(err, &entry->msg_len); in do_recvmmsg()
2944 if (timeout->tv_sec < 0) { in do_recvmmsg()
2945 timeout->tv_sec = timeout->tv_nsec = 0; in do_recvmmsg()
2950 if (timeout->tv_nsec == 0 && timeout->tv_sec == 0) in do_recvmmsg()
2970 if (err != -EAGAIN) { in do_recvmmsg()
2977 WRITE_ONCE(sock->sk->sk_err, -err); in do_recvmmsg()
2991 return -EFAULT; in __sys_recvmmsg()
2994 return -EFAULT; in __sys_recvmmsg()
3005 datagrams = -EFAULT; in __sys_recvmmsg()
3008 datagrams = -EFAULT; in __sys_recvmmsg()
3018 return -EINVAL; in SYSCALL_DEFINE5()
3029 return -EINVAL; in SYSCALL_DEFINE5()
3051 * This function doesn't need to set the kernel lock because
3063 return -EINVAL; in SYSCALL_DEFINE2()
3068 return -EINVAL; in SYSCALL_DEFINE2()
3072 return -EFAULT; in SYSCALL_DEFINE2()
3168 err = -EINVAL; in SYSCALL_DEFINE2()
3177 * sock_register - add a socket protocol handler
3181 * advertise its address family, and have it linked into the
3182 * socket interface. The value ops->family corresponds to the
3183 * socket system call protocol family.
3189 if (ops->family >= NPROTO) { in sock_register()
3190 pr_crit("protocol %d >= NPROTO(%d)\n", ops->family, NPROTO); in sock_register()
3191 return -ENOBUFS; in sock_register()
3195 if (rcu_dereference_protected(net_families[ops->family], in sock_register()
3197 err = -EEXIST; in sock_register()
3199 rcu_assign_pointer(net_families[ops->family], ops); in sock_register()
3204 pr_info("NET: Registered %s protocol family\n", pf_family_names[ops->family]); in sock_register()
3210 * sock_unregister - remove a protocol handler
3211 * @family: protocol family to remove
3214 * remove its address family, and have it unlinked from the
3220 * the ops->create routine.
3222 void sock_unregister(int family) in sock_unregister() argument
3224 BUG_ON(family < 0 || family >= NPROTO); in sock_unregister()
3227 RCU_INIT_POINTER(net_families[family], NULL); in sock_unregister()
3232 pr_info("NET: Unregistered %s protocol family\n", pf_family_names[family]); in sock_unregister()
3236 bool sock_is_registered(int family) in sock_is_registered() argument
3238 return family < NPROTO && rcu_access_pointer(net_families[family]); in sock_is_registered()
3296 sock_inuse_get(seq->private)); in socket_seq_show()
3303 * ifreq::ifru_ifmap (which is 16 bytes on 32 bit, 24 bytes on 64-bit,
3316 return -EFAULT; in get_user_ifreq()
3319 *ifrdata = compat_ptr(ifr32->ifr_data); in get_user_ifreq()
3325 return -EFAULT; in get_user_ifreq()
3328 *ifrdata = ifr->ifr_data; in get_user_ifreq()
3342 return -EFAULT; in put_user_ifreq()
3357 return -EFAULT; in compat_siocwandev()
3359 if (get_user(uptr32, &uifr32->ifr_settings.ifs_ifsu)) in compat_siocwandev()
3360 return -EFAULT; in compat_siocwandev()
3369 err = -EFAULT; in compat_siocwandev()
3382 return -ENOTTY; in compat_ifr_data_ioctl()
3384 return -EFAULT; in compat_ifr_data_ioctl()
3394 struct sock *sk = sock->sk; in compat_sock_ioctl_trans()
3406 ops = READ_ONCE(sock->ops); in compat_sock_ioctl_trans()
3407 if (!ops->gettstamp) in compat_sock_ioctl_trans()
3408 return -ENOIOCTLCMD; in compat_sock_ioctl_trans()
3409 return ops->gettstamp(sock, argp, cmd == SIOCGSTAMP_OLD, in compat_sock_ioctl_trans()
3484 return -ENOIOCTLCMD; in compat_sock_ioctl_trans()
3490 struct socket *sock = file->private_data; in compat_sock_ioctl()
3491 const struct proto_ops *ops = READ_ONCE(sock->ops); in compat_sock_ioctl()
3492 int ret = -ENOIOCTLCMD; in compat_sock_ioctl()
3496 sk = sock->sk; in compat_sock_ioctl()
3499 if (ops->compat_ioctl) in compat_sock_ioctl()
3500 ret = ops->compat_ioctl(sock, cmd, arg); in compat_sock_ioctl()
3502 if (ret == -ENOIOCTLCMD && in compat_sock_ioctl()
3506 if (ret == -ENOIOCTLCMD) in compat_sock_ioctl()
3514 * kernel_bind - bind an address to a socket (kernel space)
3528 return READ_ONCE(sock->ops)->bind(sock, (struct sockaddr *)&address, in kernel_bind()
3534 * kernel_listen - move socket to listening state (kernel space)
3543 return READ_ONCE(sock->ops)->listen(sock, backlog); in kernel_listen()
3548 * kernel_accept - accept a connection (kernel space)
3560 struct sock *sk = sock->sk; in kernel_accept()
3561 const struct proto_ops *ops = READ_ONCE(sock->ops); in kernel_accept()
3568 err = sock_create_lite(sk->sk_family, sk->sk_type, sk->sk_protocol, in kernel_accept()
3573 err = ops->accept(sock, *newsock, &arg); in kernel_accept()
3580 (*newsock)->ops = ops; in kernel_accept()
3581 __module_get(ops->owner); in kernel_accept()
3589 * kernel_connect - connect a socket (kernel space)
3608 return READ_ONCE(sock->ops)->connect(sock, (struct sockaddr *)&address, in kernel_connect()
3614 * kernel_getsockname - get the address which the socket is bound (kernel space)
3624 return READ_ONCE(sock->ops)->getname(sock, addr, 0); in kernel_getsockname()
3629 * kernel_getpeername - get the address which the socket is connected (kernel space)
3639 return READ_ONCE(sock->ops)->getname(sock, addr, 1); in kernel_getpeername()
3644 * kernel_sock_shutdown - shut down part of a full-duplex connection (kernel space)
3653 return READ_ONCE(sock->ops)->shutdown(sock, how); in kernel_sock_shutdown()
3658 * kernel_sock_ip_overhead - returns the IP overhead imposed by a socket
3680 switch (sk->sk_family) { in kernel_sock_ip_overhead()
3684 opt = rcu_dereference_protected(inet->inet_opt, in kernel_sock_ip_overhead()
3687 overhead += opt->opt.optlen; in kernel_sock_ip_overhead()
3694 optv6 = rcu_dereference_protected(np->opt, in kernel_sock_ip_overhead()
3697 overhead += (optv6->opt_flen + optv6->opt_nflen); in kernel_sock_ip_overhead()