Skip to content

Commit c21a887

Browse files
William Kucharskirleon
authored andcommitted
RDMA/srpt: Do not register event handler until srpt device is fully setup
Upon rare occasions, KASAN reports a use-after-free Write in srpt_refresh_port(). This seems to be because an event handler is registered before the srpt device is fully setup and a race condition upon error may leave a partially setup event handler in place. Instead, only register the event handler after srpt device initialization is complete. Fixes: a42d985 ("ib_srpt: Initial SRP Target merge for v3.3-rc1") Signed-off-by: William Kucharski <[email protected]> Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Bart Van Assche <[email protected]> Signed-off-by: Leon Romanovsky <[email protected]>
1 parent 926e8ea commit c21a887

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

drivers/infiniband/ulp/srpt/ib_srpt.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3204,7 +3204,6 @@ static int srpt_add_one(struct ib_device *device)
32043204

32053205
INIT_IB_EVENT_HANDLER(&sdev->event_handler, sdev->device,
32063206
srpt_event_handler);
3207-
ib_register_event_handler(&sdev->event_handler);
32083207

32093208
for (i = 1; i <= sdev->device->phys_port_cnt; i++) {
32103209
sport = &sdev->port[i - 1];
@@ -3227,6 +3226,7 @@ static int srpt_add_one(struct ib_device *device)
32273226
}
32283227
}
32293228

3229+
ib_register_event_handler(&sdev->event_handler);
32303230
spin_lock(&srpt_dev_lock);
32313231
list_add_tail(&sdev->list, &srpt_dev_list);
32323232
spin_unlock(&srpt_dev_lock);
@@ -3237,7 +3237,6 @@ static int srpt_add_one(struct ib_device *device)
32373237

32383238
err_port:
32393239
srpt_unregister_mad_agent(sdev, i);
3240-
ib_unregister_event_handler(&sdev->event_handler);
32413240
err_cm:
32423241
if (sdev->cm_id)
32433242
ib_destroy_cm_id(sdev->cm_id);

0 commit comments

Comments
 (0)