io_uring: annotate the struct io_kiocb slab for appropriate user copy
[platform/kernel/linux-rpi.git] / io_uring / io_uring.c
index 7505de2..679bea7 100644 (file)
@@ -4601,8 +4601,20 @@ static int __init io_uring_init(void)
 
        io_uring_optable_init();
 
-       req_cachep = KMEM_CACHE(io_kiocb, SLAB_HWCACHE_ALIGN | SLAB_PANIC |
-                               SLAB_ACCOUNT | SLAB_TYPESAFE_BY_RCU);
+       /*
+        * Allow user copy in the per-command field, which starts after the
+        * file in io_kiocb and until the opcode field. The openat2 handling
+        * requires copying in user memory into the io_kiocb object in that
+        * range, and HARDENED_USERCOPY will complain if we haven't
+        * correctly annotated this range.
+        */
+       req_cachep = kmem_cache_create_usercopy("io_kiocb",
+                               sizeof(struct io_kiocb), 0,
+                               SLAB_HWCACHE_ALIGN | SLAB_PANIC |
+                               SLAB_ACCOUNT | SLAB_TYPESAFE_BY_RCU,
+                               offsetof(struct io_kiocb, cmd.data),
+                               sizeof_field(struct io_kiocb, cmd.data), NULL);
+
        return 0;
 };
 __initcall(io_uring_init);