CVE-2023-52851

IB/mlx5: Fix init stage error handling to avoid double free of same QP and UAF

published May 21, 2024

CVSS
—
EPSS
0%
Percentile
14.0
In the wild
Unconfirmed
What it is

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 record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00238 · 14.0th percentile
Published
2024-05-21T15:31Z
EPSS history
Timeline
  • 21 MAY 15:31Z
    IB/mlx5: Fix init stage error handling to avoid double free of same QP and UAF
    cvelistv5