| From bippy-5f407fcff5a0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2023-52851: IB/mlx5: Fix init stage error handling to avoid double free of same QP and UAF |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| IB/mlx5: Fix init stage error handling to avoid double free of same QP and UAF |
| |
| In the unlikely event that workqueue allocation fails and returns NULL in |
| mlx5_mkey_cache_init(), delete the call to |
| mlx5r_umr_resource_cleanup() (which frees the QP) in |
| mlx5_ib_stage_post_ib_reg_umr_init(). This will avoid attempted double |
| free of the same QP when __mlx5_ib_add() does its cleanup. |
| |
| Resolves a splat: |
| |
| Syzkaller reported a UAF in ib_destroy_qp_user |
| |
| workqueue: Failed to create a rescuer kthread for wq "mkey_cache": -EINTR |
| infiniband mlx5_0: mlx5_mkey_cache_init:981:(pid 1642): |
| failed to create work queue |
| infiniband mlx5_0: mlx5_ib_stage_post_ib_reg_umr_init:4075:(pid 1642): |
| mr cache init failed -12 |
| ================================================================== |
| BUG: KASAN: slab-use-after-free in ib_destroy_qp_user (drivers/infiniband/core/verbs.c:2073) |
| Read of size 8 at addr ffff88810da310a8 by task repro_upstream/1642 |
| |
| Call Trace: |
| <TASK> |
| kasan_report (mm/kasan/report.c:590) |
| ib_destroy_qp_user (drivers/infiniband/core/verbs.c:2073) |
| mlx5r_umr_resource_cleanup (drivers/infiniband/hw/mlx5/umr.c:198) |
| __mlx5_ib_add (drivers/infiniband/hw/mlx5/main.c:4178) |
| mlx5r_probe (drivers/infiniband/hw/mlx5/main.c:4402) |
| ... |
| </TASK> |
| |
| Allocated by task 1642: |
| __kmalloc (./include/linux/kasan.h:198 mm/slab_common.c:1026 |
| mm/slab_common.c:1039) |
| create_qp (./include/linux/slab.h:603 ./include/linux/slab.h:720 |
| ./include/rdma/ib_verbs.h:2795 drivers/infiniband/core/verbs.c:1209) |
| ib_create_qp_kernel (drivers/infiniband/core/verbs.c:1347) |
| mlx5r_umr_resource_init (drivers/infiniband/hw/mlx5/umr.c:164) |
| mlx5_ib_stage_post_ib_reg_umr_init (drivers/infiniband/hw/mlx5/main.c:4070) |
| __mlx5_ib_add (drivers/infiniband/hw/mlx5/main.c:4168) |
| mlx5r_probe (drivers/infiniband/hw/mlx5/main.c:4402) |
| ... |
| |
| Freed by task 1642: |
| __kmem_cache_free (mm/slub.c:1826 mm/slub.c:3809 mm/slub.c:3822) |
| ib_destroy_qp_user (drivers/infiniband/core/verbs.c:2112) |
| mlx5r_umr_resource_cleanup (drivers/infiniband/hw/mlx5/umr.c:198) |
| mlx5_ib_stage_post_ib_reg_umr_init (drivers/infiniband/hw/mlx5/main.c:4076 |
| drivers/infiniband/hw/mlx5/main.c:4065) |
| __mlx5_ib_add (drivers/infiniband/hw/mlx5/main.c:4168) |
| mlx5r_probe (drivers/infiniband/hw/mlx5/main.c:4402) |
| ... |
| |
| The Linux kernel CVE team has assigned CVE-2023-52851 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 5.19 with commit 04876c12c19e94bbbc94bb0446c7bc7cd75163de and fixed in 6.1.63 with commit 437f033e30c897bb3723eac9e9003cd9f88d00a3 |
| Issue introduced in 5.19 with commit 04876c12c19e94bbbc94bb0446c7bc7cd75163de and fixed in 6.5.12 with commit 4f4a7a7d1404297f2a92df0046f7e64dc5c52dd9 |
| Issue introduced in 5.19 with commit 04876c12c19e94bbbc94bb0446c7bc7cd75163de and fixed in 6.6.2 with commit 6387f269d84e6e149499408c4d1fc805017729b2 |
| Issue introduced in 5.19 with commit 04876c12c19e94bbbc94bb0446c7bc7cd75163de and fixed in 6.7 with commit 2ef422f063b74adcc4a4a9004b0a87bb55e0a836 |
| |
| Please see https://www.kernel.org for a full list of currently supported |
| kernel versions by the kernel community. |
| |
| Unaffected versions might change over time as fixes are backported to |
| older supported kernel versions. The official CVE entry at |
| https://cve.org/CVERecord/?id=CVE-2023-52851 |
| will be updated if fixes are backported, please check that for the most |
| up to date information about this issue. |
| |
| |
| Affected files |
| ============== |
| |
| The file(s) affected by this issue are: |
| drivers/infiniband/hw/mlx5/main.c |
| |
| |
| Mitigation |
| ========== |
| |
| The Linux kernel CVE team recommends that you update to the latest |
| stable kernel version for this, and many other bugfixes. Individual |
| changes are never tested alone, but rather are part of a larger kernel |
| release. Cherry-picking individual commits is not recommended or |
| supported by the Linux kernel community at all. If however, updating to |
| the latest release is impossible, the individual changes to resolve this |
| issue can be found at these commits: |
| https://git.kernel.org/stable/c/437f033e30c897bb3723eac9e9003cd9f88d00a3 |
| https://git.kernel.org/stable/c/4f4a7a7d1404297f2a92df0046f7e64dc5c52dd9 |
| https://git.kernel.org/stable/c/6387f269d84e6e149499408c4d1fc805017729b2 |
| https://git.kernel.org/stable/c/2ef422f063b74adcc4a4a9004b0a87bb55e0a836 |