aboutsummaryrefslogtreecommitdiff
path: root/drivers/isdn
diff options
context:
space:
mode:
authorGravatar Shifeng Li <lishifeng@sangfor.com.cn> 2024-02-02 19:53:13 -0800
committerGravatar Jason Gunthorpe <jgg@nvidia.com> 2024-02-21 13:15:50 -0400
commit7a8bccd8b29c321ac181369b42b04fecf05f98e2 (patch)
treeb5a9e30e0fabc7f435288d3143931fcff0d05727 /drivers/isdn
parentRDMA/hns: Fix mis-modifying default congestion control algorithm (diff)
downloadlinux-7a8bccd8b29c321ac181369b42b04fecf05f98e2.tar.gz
linux-7a8bccd8b29c321ac181369b42b04fecf05f98e2.tar.bz2
linux-7a8bccd8b29c321ac181369b42b04fecf05f98e2.zip
RDMA/device: Fix a race between mad_client and cm_client init
The mad_client will be initialized in enable_device_and_get(), while the devices_rwsem will be downgraded to a read semaphore. There is a window that leads to the failed initialization for cm_client, since it can not get matched mad port from ib_mad_port_list, and the matched mad port will be added to the list after that. mad_client | cm_client ------------------|-------------------------------------------------------- ib_register_device| enable_device_and_get down_write(&devices_rwsem) xa_set_mark(&devices, DEVICE_REGISTERED) downgrade_write(&devices_rwsem) | |ib_cm_init |ib_register_client(&cm_client) |down_read(&devices_rwsem) |xa_for_each_marked (&devices, DEVICE_REGISTERED) |add_client_context |cm_add_one |ib_register_mad_agent |ib_get_mad_port |__ib_get_mad_port |list_for_each_entry(entry, &ib_mad_port_list, port_list) |return NULL |up_read(&devices_rwsem) | add_client_context| ib_mad_init_device| ib_mad_port_open | list_add_tail(&port_priv->port_list, &ib_mad_port_list) up_read(&devices_rwsem) | Fix it by using down_write(&devices_rwsem) in ib_register_client(). Fixes: d0899892edd0 ("RDMA/device: Provide APIs from the core code to help unregistration") Link: https://lore.kernel.org/r/20240203035313.98991-1-lishifeng@sangfor.com.cn Suggested-by: Jason Gunthorpe <jgg@ziepe.ca> Signed-off-by: Shifeng Li <lishifeng@sangfor.com.cn> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Diffstat (limited to 'drivers/isdn')
0 files changed, 0 insertions, 0 deletions