]> 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:45 +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 936abc6ee450c4e389a9bfb4742c95b50e8f33a0..a80c808d3a0efc71d831c1898ebfe8f7d4665362 100644 (file)
@@ -1113,19 +1113,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) {
@@ -10275,6 +10262,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 3c7f160720d348e00e1c25e36e8cdafaa5be55b9..d09849cb60f08b96ba518fea99f4b5d1a1fb9dde 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);