aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/device_handler/scsi_dh_hp_sw.c
diff options
context:
space:
mode:
authorChandra Seetharaman <sekharan@us.ibm.com>2008-07-16 20:35:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-07-16 20:54:21 -0400
commit33af79d12e0fa25545d49e86afc67ea8ad5f2f40 (patch)
tree9e76151b895d102d1978df3afc58248a2adbf5dd /drivers/scsi/device_handler/scsi_dh_hp_sw.c
parentdc7c65db2845a8d17432d89252c4227a9a7cb15f (diff)
scsi_dh: Verify "dev" is a sdev before accessing it.
Before accessing the device data structure in hardware handlers, make sure it is a indeed a sdev device. Yinghai Lu <yhlu.kernel@gmail.com> found the bug on Jul 16, 2008, and later tested/verified the following fix. Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/scsi/device_handler/scsi_dh_hp_sw.c')
-rw-r--r--drivers/scsi/device_handler/scsi_dh_hp_sw.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/scsi/device_handler/scsi_dh_hp_sw.c b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
index 12ceab7b3662..ae6be87d6a83 100644
--- a/drivers/scsi/device_handler/scsi_dh_hp_sw.c
+++ b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
@@ -131,11 +131,16 @@ static int hp_sw_bus_notify(struct notifier_block *nb,
131 unsigned long action, void *data) 131 unsigned long action, void *data)
132{ 132{
133 struct device *dev = data; 133 struct device *dev = data;
134 struct scsi_device *sdev = to_scsi_device(dev); 134 struct scsi_device *sdev;
135 struct scsi_dh_data *scsi_dh_data; 135 struct scsi_dh_data *scsi_dh_data;
136 int i, found = 0; 136 int i, found = 0;
137 unsigned long flags; 137 unsigned long flags;
138 138
139 if (!scsi_is_sdev_device(dev))
140 return 0;
141
142 sdev = to_scsi_device(dev);
143
139 if (action == BUS_NOTIFY_ADD_DEVICE) { 144 if (action == BUS_NOTIFY_ADD_DEVICE) {
140 for (i = 0; hp_sw_dh_data_list[i].vendor; i++) { 145 for (i = 0; hp_sw_dh_data_list[i].vendor; i++) {
141 if (!strncmp(sdev->vendor, hp_sw_dh_data_list[i].vendor, 146 if (!strncmp(sdev->vendor, hp_sw_dh_data_list[i].vendor,