In the Linux kernel, the following vulnerability has been resolved:
RDMA/cma: Allow UD qp_type to join multicast only
As for multicast: - The SIDR is the only mode that makes sense; - Besides PSUDP, other port spaces like PSIB is also allowed, as it is UD compatible. In this case qkey also needs to be set [1].
This patch allows only UD qp_type to join multicast, and set qkey to default if it's not set, to fix an uninit-value error: the ib->rec.qkey field is accessed without being initialized.
===================================================== BUG: KMSAN: uninit-value in cmasetqkey drivers/infiniband/core/cma.c:510 [inline] BUG: KMSAN: uninit-value in cmamakemcevent+0xb73/0xe00 drivers/infiniband/core/cma.c:4570 cmasetqkey drivers/infiniband/core/cma.c:510 [inline] cmamakemcevent+0xb73/0xe00 drivers/infiniband/core/cma.c:4570 cmaiboejoinmulticast drivers/infiniband/core/cma.c:4782 [inline] rdmajoinmulticast+0x2b83/0x30a0 drivers/infiniband/core/cma.c:4814 ucmaprocessjoin+0xa76/0xf60 drivers/infiniband/core/ucma.c:1479 ucmajoinmulticast+0x1e3/0x250 drivers/infiniband/core/ucma.c:1546 ucmawrite+0x639/0x6d0 drivers/infiniband/core/ucma.c:1732 vfswrite+0x8ce/0x2030 fs/readwrite.c:588 ksyswrite+0x28c/0x520 fs/readwrite.c:643 _dosyswrite fs/readwrite.c:655 [inline] _sesyswrite fs/readwrite.c:652 [inline] _ia32syswrite+0xdb/0x120 fs/readwrite.c:652 dosyscall32irqson arch/x86/entry/common.c:114 [inline] _dofastsyscall32+0x96/0xf0 arch/x86/entry/common.c:180 dofastsyscall32+0x34/0x70 arch/x86/entry/common.c:205 doSYSENTER32+0x1b/0x20 arch/x86/entry/common.c:248 entrySYSENTERcompatafter_hwframe+0x4d/0x5c
Local variable ib.i created at: cmaiboejoinmulticast drivers/infiniband/core/cma.c:4737 [inline] rdmajoinmulticast+0x586/0x30a0 drivers/infiniband/core/cma.c:4814 ucmaprocess_join+0xa76/0xf60 drivers/infiniband/core/ucma.c:1479
CPU: 0 PID: 29874 Comm: syz-executor.3 Not tainted 5.16.0-rc3-syzkaller #0
[1] https://lore.kernel.org/linux-rdma/20220117183832.GD84788@nvidia.com/