Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: Remove the err argument from sock_from_file

Currently, the sock_from_file prototype takes an "err" pointer that is
either not set or set to -ENOTSOCK IFF the returned socket is NULL. This
makes the error redundant and it is ignored by a few callers.

This patch simplifies the API by letting callers deduce the error based
on whether the returned socket is NULL or not.

Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Florent Revest <revest@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: KP Singh <kpsingh@google.com>
Link: https://lore.kernel.org/bpf/20201204113609.1850150-1-revest@google.com

authored by

Florent Revest and committed by
Daniel Borkmann
dba4a925 5c667dca

+29 -33
+1 -2
fs/eventpoll.c
··· 416 416 unsigned int napi_id; 417 417 struct socket *sock; 418 418 struct sock *sk; 419 - int err; 420 419 421 420 if (!net_busy_loop_on()) 422 421 return; 423 422 424 - sock = sock_from_file(epi->ffd.file, &err); 423 + sock = sock_from_file(epi->ffd.file); 425 424 if (!sock) 426 425 return; 427 426
+8 -8
fs/io_uring.c
··· 4356 4356 unsigned flags; 4357 4357 int ret; 4358 4358 4359 - sock = sock_from_file(req->file, &ret); 4359 + sock = sock_from_file(req->file); 4360 4360 if (unlikely(!sock)) 4361 - return ret; 4361 + return -ENOTSOCK; 4362 4362 4363 4363 if (req->async_data) { 4364 4364 kmsg = req->async_data; ··· 4405 4405 unsigned flags; 4406 4406 int ret; 4407 4407 4408 - sock = sock_from_file(req->file, &ret); 4408 + sock = sock_from_file(req->file); 4409 4409 if (unlikely(!sock)) 4410 - return ret; 4410 + return -ENOTSOCK; 4411 4411 4412 4412 ret = import_single_range(WRITE, sr->buf, sr->len, &iov, &msg.msg_iter); 4413 4413 if (unlikely(ret)) ··· 4584 4584 unsigned flags; 4585 4585 int ret, cflags = 0; 4586 4586 4587 - sock = sock_from_file(req->file, &ret); 4587 + sock = sock_from_file(req->file); 4588 4588 if (unlikely(!sock)) 4589 - return ret; 4589 + return -ENOTSOCK; 4590 4590 4591 4591 if (req->async_data) { 4592 4592 kmsg = req->async_data; ··· 4647 4647 unsigned flags; 4648 4648 int ret, cflags = 0; 4649 4649 4650 - sock = sock_from_file(req->file, &ret); 4650 + sock = sock_from_file(req->file); 4651 4651 if (unlikely(!sock)) 4652 - return ret; 4652 + return -ENOTSOCK; 4653 4653 4654 4654 if (req->flags & REQ_F_BUFFER_SELECT) { 4655 4655 kbuf = io_recv_buffer_select(req, !force_nonblock);
+1 -1
include/linux/net.h
··· 240 240 int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags); 241 241 struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname); 242 242 struct socket *sockfd_lookup(int fd, int *err); 243 - struct socket *sock_from_file(struct file *file, int *err); 243 + struct socket *sock_from_file(struct file *file); 244 244 #define sockfd_put(sock) fput(sock->file) 245 245 int net_ratelimit(void); 246 246
+1 -2
net/core/netclassid_cgroup.c
··· 68 68 69 69 static int update_classid_sock(const void *v, struct file *file, unsigned n) 70 70 { 71 - int err; 72 71 struct update_classid_context *ctx = (void *)v; 73 - struct socket *sock = sock_from_file(file, &err); 72 + struct socket *sock = sock_from_file(file); 74 73 75 74 if (sock) { 76 75 spin_lock(&cgroup_sk_update_lock);
+1 -2
net/core/netprio_cgroup.c
··· 220 220 221 221 static int update_netprio(const void *v, struct file *file, unsigned n) 222 222 { 223 - int err; 224 - struct socket *sock = sock_from_file(file, &err); 223 + struct socket *sock = sock_from_file(file); 225 224 if (sock) { 226 225 spin_lock(&cgroup_sk_update_lock); 227 226 sock_cgroup_set_prioidx(&sock->sk->sk_cgrp_data,
+1 -7
net/core/sock.c
··· 2827 2827 void __receive_sock(struct file *file) 2828 2828 { 2829 2829 struct socket *sock; 2830 - int error; 2831 2830 2832 - /* 2833 - * The resulting value of "error" is ignored here since we only 2834 - * need to take action when the file is a socket and testing 2835 - * "sock" for NULL is sufficient. 2836 - */ 2837 - sock = sock_from_file(file, &error); 2831 + sock = sock_from_file(file); 2838 2832 if (sock) { 2839 2833 sock_update_netprioidx(&sock->sk->sk_cgrp_data); 2840 2834 sock_update_classid(&sock->sk->sk_cgrp_data);
+16 -11
net/socket.c
··· 445 445 /** 446 446 * sock_from_file - Return the &socket bounded to @file. 447 447 * @file: file 448 - * @err: pointer to an error code return 449 448 * 450 - * On failure returns %NULL and assigns -ENOTSOCK to @err. 449 + * On failure returns %NULL. 451 450 */ 452 451 453 - struct socket *sock_from_file(struct file *file, int *err) 452 + struct socket *sock_from_file(struct file *file) 454 453 { 455 454 if (file->f_op == &socket_file_ops) 456 455 return file->private_data; /* set in sock_map_fd */ 457 456 458 - *err = -ENOTSOCK; 459 457 return NULL; 460 458 } 461 459 EXPORT_SYMBOL(sock_from_file); ··· 482 484 return NULL; 483 485 } 484 486 485 - sock = sock_from_file(file, err); 486 - if (!sock) 487 + sock = sock_from_file(file); 488 + if (!sock) { 489 + *err = -ENOTSOCK; 487 490 fput(file); 491 + } 488 492 return sock; 489 493 } 490 494 EXPORT_SYMBOL(sockfd_lookup); ··· 498 498 499 499 *err = -EBADF; 500 500 if (f.file) { 501 - sock = sock_from_file(f.file, err); 501 + sock = sock_from_file(f.file); 502 502 if (likely(sock)) { 503 503 *fput_needed = f.flags & FDPUT_FPUT; 504 504 return sock; 505 505 } 506 + *err = -ENOTSOCK; 506 507 fdput(f); 507 508 } 508 509 return NULL; ··· 1694 1693 if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK)) 1695 1694 flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK; 1696 1695 1697 - sock = sock_from_file(file, &err); 1698 - if (!sock) 1696 + sock = sock_from_file(file); 1697 + if (!sock) { 1698 + err = -ENOTSOCK; 1699 1699 goto out; 1700 + } 1700 1701 1701 1702 err = -ENFILE; 1702 1703 newsock = sock_alloc(); ··· 1821 1818 struct socket *sock; 1822 1819 int err; 1823 1820 1824 - sock = sock_from_file(file, &err); 1825 - if (!sock) 1821 + sock = sock_from_file(file); 1822 + if (!sock) { 1823 + err = -ENOTSOCK; 1826 1824 goto out; 1825 + } 1827 1826 1828 1827 err = 1829 1828 security_socket_connect(sock, (struct sockaddr *)address, addrlen);