Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

IB/ucm: Fix bitmap wrap when devnum > IB_UCM_MAX_DEVICES

ib_ucm_release_dev clears the wrong bit if devnum is greater
than IB_UCM_MAX_DEVICES.

Signed-off-by: Carol L Soto <clsoto@linux.vnet.ibm.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>

authored by

Carol L Soto and committed by
Doug Ledford
59d40dd9 8b7cce0d

+2 -2
+2 -2
drivers/infiniband/core/ucm.c
··· 1193 1193 return 0; 1194 1194 } 1195 1195 1196 + static DECLARE_BITMAP(overflow_map, IB_UCM_MAX_DEVICES); 1196 1197 static void ib_ucm_release_dev(struct device *dev) 1197 1198 { 1198 1199 struct ib_ucm_device *ucm_dev; ··· 1203 1202 if (ucm_dev->devnum < IB_UCM_MAX_DEVICES) 1204 1203 clear_bit(ucm_dev->devnum, dev_map); 1205 1204 else 1206 - clear_bit(ucm_dev->devnum - IB_UCM_MAX_DEVICES, dev_map); 1205 + clear_bit(ucm_dev->devnum - IB_UCM_MAX_DEVICES, overflow_map); 1207 1206 kfree(ucm_dev); 1208 1207 } 1209 1208 ··· 1227 1226 static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); 1228 1227 1229 1228 static dev_t overflow_maj; 1230 - static DECLARE_BITMAP(overflow_map, IB_UCM_MAX_DEVICES); 1231 1229 static int find_overflow_devnum(void) 1232 1230 { 1233 1231 int ret;