Patch "RDMA/core: Prevent mixed use of FDs between shared ufiles" has been added to the 5.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    RDMA/core: Prevent mixed use of FDs between shared ufiles

to the 5.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     rdma-core-prevent-mixed-use-of-fds-between-shared-uf.patch
and it can be found in the queue-5.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4af83ffa2faa167400e31123b46896b06faed77d
Author: Leon Romanovsky <leonro@xxxxxxxxxxxx>
Date:   Tue Apr 21 11:29:28 2020 +0300

    RDMA/core: Prevent mixed use of FDs between shared ufiles
    
    commit 0fb00941dc63990a10951146df216fc7b0e20bc2 upstream.
    
    FDs can only be used on the ufile that created them, they cannot be mixed
    to other ufiles. We are lacking a check to prevent it.
    
      BUG: KASAN: null-ptr-deref in atomic64_sub_and_test include/asm-generic/atomic-instrumented.h:1547 [inline]
      BUG: KASAN: null-ptr-deref in atomic_long_sub_and_test include/asm-generic/atomic-long.h:460 [inline]
      BUG: KASAN: null-ptr-deref in fput_many+0x1a/0x140 fs/file_table.c:336
      Write of size 8 at addr 0000000000000038 by task syz-executor179/284
    
      CPU: 0 PID: 284 Comm: syz-executor179 Not tainted 5.5.0-rc5+ #1
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
      Call Trace:
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack+0x94/0xce lib/dump_stack.c:118
       __kasan_report+0x18f/0x1b7 mm/kasan/report.c:510
       kasan_report+0xe/0x20 mm/kasan/common.c:639
       check_memory_region_inline mm/kasan/generic.c:185 [inline]
       check_memory_region+0x15d/0x1b0 mm/kasan/generic.c:192
       atomic64_sub_and_test include/asm-generic/atomic-instrumented.h:1547 [inline]
       atomic_long_sub_and_test include/asm-generic/atomic-long.h:460 [inline]
       fput_many+0x1a/0x140 fs/file_table.c:336
       rdma_lookup_put_uobject+0x85/0x130 drivers/infiniband/core/rdma_core.c:692
       uobj_put_read include/rdma/uverbs_std_types.h:96 [inline]
       _ib_uverbs_lookup_comp_file drivers/infiniband/core/uverbs_cmd.c:198 [inline]
       create_cq+0x375/0xba0 drivers/infiniband/core/uverbs_cmd.c:1006
       ib_uverbs_create_cq+0x114/0x140 drivers/infiniband/core/uverbs_cmd.c:1089
       ib_uverbs_write+0xaa5/0xdf0 drivers/infiniband/core/uverbs_main.c:769
       __vfs_write+0x7c/0x100 fs/read_write.c:494
       vfs_write+0x168/0x4a0 fs/read_write.c:558
       ksys_write+0xc8/0x200 fs/read_write.c:611
       do_syscall_64+0x9c/0x390 arch/x86/entry/common.c:294
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      RIP: 0033:0x44ef99
      Code: 00 b8 00 01 00 00 eb e1 e8 74 1c 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c4 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007ffc0b74c028 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
      RAX: ffffffffffffffda RBX: 00007ffc0b74c030 RCX: 000000000044ef99
      RDX: 0000000000000040 RSI: 0000000020000040 RDI: 0000000000000005
      RBP: 00007ffc0b74c038 R08: 0000000000401830 R09: 0000000000401830
      R10: 00007ffc0b74c038 R11: 0000000000000246 R12: 0000000000000000
      R13: 0000000000000000 R14: 00000000006be018 R15: 0000000000000000
    
    Fixes: cf8966b3477d ("IB/core: Add support for fd objects")
    Link: https://lore.kernel.org/r/20200421082929.311931-2-leon@xxxxxxxxxx
    Suggested-by: Jason Gunthorpe <jgg@xxxxxxxxxxxx>
    Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
    Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxxxx>
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

diff --git a/drivers/infiniband/core/rdma_core.c b/drivers/infiniband/core/rdma_core.c
index 5128cb16bb485..8f480de5596a2 100644
--- a/drivers/infiniband/core/rdma_core.c
+++ b/drivers/infiniband/core/rdma_core.c
@@ -360,7 +360,7 @@ lookup_get_fd_uobject(const struct uverbs_api_object *obj,
 	 * uverbs_uobject_fd_release(), and the caller is expected to ensure
 	 * that release is never done while a call to lookup is possible.
 	 */
-	if (f->f_op != fd_type->fops) {
+	if (f->f_op != fd_type->fops || uobject->ufile != ufile) {
 		fput(f);
 		return ERR_PTR(-EBADF);
 	}



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux