]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring/unix: drop usage of io_uring socket
authorJens Axboe <axboe@kernel.dk>
Wed, 13 Mar 2024 23:54:49 +0000 (17:54 -0600)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:21:11 +0000 (18:21 -0400)
Commit a4104821ad651d8a0b374f0b2474c345bbb42f82 upstream.

Since we no longer allow sending io_uring fds over SCM_RIGHTS, move to
using io_is_uring_fops() to detect whether this is a io_uring fd or not.
With that done, kill off io_uring_get_socket() as nobody calls it
anymore.

This is in preparation to yanking out the rest of the core related to
unix gc with io_uring.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/linux/io_uring.h
io_uring/io_uring.c
net/core/scm.c
net/unix/scm.c

index 649a4d7c241bccb14099cbcbc427f6163ea8dc5c..55d09f594cd140d1dc6ebba23606f34aae8353b8 100644 (file)
@@ -6,9 +6,9 @@
 #include <linux/xarray.h>
 
 #if defined(CONFIG_IO_URING)
-struct sock *io_uring_get_socket(struct file *file);
 void __io_uring_cancel(bool cancel_all);
 void __io_uring_free(struct task_struct *tsk);
+bool io_is_uring_fops(struct file *file);
 
 static inline void io_uring_files_cancel(void)
 {
@@ -26,10 +26,6 @@ static inline void io_uring_free(struct task_struct *tsk)
                __io_uring_free(tsk);
 }
 #else
-static inline struct sock *io_uring_get_socket(struct file *file)
-{
-       return NULL;
-}
 static inline void io_uring_task_cancel(void)
 {
 }
@@ -39,6 +35,10 @@ static inline void io_uring_files_cancel(void)
 static inline void io_uring_free(struct task_struct *tsk)
 {
 }
+static inline bool io_is_uring_fops(struct file *file)
+{
+       return false;
+}
 #endif
 
 #endif
index 55fd6d98fe121fcd04a7ba0770cec2ad402f4efa..541e6a6985ecc316c1e93e0831a91348762d39f0 100644 (file)
@@ -1116,19 +1116,6 @@ static struct kmem_cache *req_cachep;
 
 static const struct file_operations io_uring_fops;
 
-struct sock *io_uring_get_socket(struct file *file)
-{
-#if defined(CONFIG_UNIX)
-       if (file->f_op == &io_uring_fops) {
-               struct io_ring_ctx *ctx = file->private_data;
-
-               return ctx->ring_sock->sk;
-       }
-#endif
-       return NULL;
-}
-EXPORT_SYMBOL(io_uring_get_socket);
-
 static inline void io_tw_lock(struct io_ring_ctx *ctx, bool *locked)
 {
        if (!*locked) {
@@ -10445,6 +10432,11 @@ static const struct file_operations io_uring_fops = {
 #endif
 };
 
+bool io_is_uring_fops(struct file *file)
+{
+       return file->f_op == &io_uring_fops;
+}
+
 static int io_allocate_scq_urings(struct io_ring_ctx *ctx,
                                  struct io_uring_params *p)
 {
index e762a4b8a1d220e05afd4de364cc421fda776b5d..a877c4ef4c256f742d10e00b75be8a7cc6336d50 100644 (file)
@@ -105,7 +105,7 @@ static int scm_fp_copy(struct cmsghdr *cmsg, struct scm_fp_list **fplp)
                if (fd < 0 || !(file = fget_raw(fd)))
                        return -EBADF;
                /* don't allow io_uring files */
-               if (io_uring_get_socket(file)) {
+               if (io_is_uring_fops(file)) {
                        fput(file);
                        return -EINVAL;
                }
index e8e2a00bb0f58512a82eaa577d456a7f8b50754c..d1048b4c2baafac65716015a38b689fe2a93ba52 100644 (file)
@@ -34,10 +34,8 @@ struct sock *unix_get_socket(struct file *filp)
                /* PF_UNIX ? */
                if (s && sock->ops && sock->ops->family == PF_UNIX)
                        u_sock = s;
-       } else {
-               /* Could be an io_uring instance */
-               u_sock = io_uring_get_socket(filp);
        }
+
        return u_sock;
 }
 EXPORT_SYMBOL(unix_get_socket);