* [scsi_dh] [PATCH] Verify "dev" is a sdev before accessing it.
@ 2008-07-17 0:35 Chandra Seetharaman
0 siblings, 0 replies; only message in thread
From: Chandra Seetharaman @ 2008-07-17 0:35 UTC (permalink / raw)
To: Linus Torvalds, James.Bottomley; +Cc: linux-scsi, Yinghai Lu, linux-kernel
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>
--
Index: linux2.6.26-git3/drivers/scsi/device_handler/scsi_dh_rdac.c
===================================================================
--- linux2.6.26-git3.orig/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ linux2.6.26-git3/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -608,12 +608,17 @@ static int rdac_bus_notify(struct notifi
unsigned long action, void *data)
{
struct device *dev = data;
- struct scsi_device *sdev = to_scsi_device(dev);
+ struct scsi_device *sdev;
struct scsi_dh_data *scsi_dh_data;
struct rdac_dh_data *h;
int i, found = 0;
unsigned long flags;
+ if (!scsi_is_sdev_device(dev))
+ return 0;
+
+ sdev = to_scsi_device(dev);
+
if (action == BUS_NOTIFY_ADD_DEVICE) {
for (i = 0; rdac_dev_list[i].vendor; i++) {
if (!strncmp(sdev->vendor, rdac_dev_list[i].vendor,
Index: linux2.6.26-git3/drivers/scsi/device_handler/scsi_dh_emc.c
===================================================================
--- linux2.6.26-git3.orig/drivers/scsi/device_handler/scsi_dh_emc.c
+++ linux2.6.26-git3/drivers/scsi/device_handler/scsi_dh_emc.c
@@ -416,12 +416,17 @@ static int clariion_bus_notify(struct no
unsigned long action, void *data)
{
struct device *dev = data;
- struct scsi_device *sdev = to_scsi_device(dev);
+ struct scsi_device *sdev;
struct scsi_dh_data *scsi_dh_data;
struct clariion_dh_data *h;
int i, found = 0;
unsigned long flags;
+ if (!scsi_is_sdev_device(dev))
+ return 0;
+
+ sdev = to_scsi_device(dev);
+
if (action == BUS_NOTIFY_ADD_DEVICE) {
for (i = 0; clariion_dev_list[i].vendor; i++) {
if (!strncmp(sdev->vendor, clariion_dev_list[i].vendor,
Index: linux2.6.26-git3/drivers/scsi/device_handler/scsi_dh_hp_sw.c
===================================================================
--- linux2.6.26-git3.orig/drivers/scsi/device_handler/scsi_dh_hp_sw.c
+++ linux2.6.26-git3/drivers/scsi/device_handler/scsi_dh_hp_sw.c
@@ -131,11 +131,16 @@ static int hp_sw_bus_notify(struct notif
unsigned long action, void *data)
{
struct device *dev = data;
- struct scsi_device *sdev = to_scsi_device(dev);
+ struct scsi_device *sdev;
struct scsi_dh_data *scsi_dh_data;
int i, found = 0;
unsigned long flags;
+ if (!scsi_is_sdev_device(dev))
+ return 0;
+
+ sdev = to_scsi_device(dev);
+
if (action == BUS_NOTIFY_ADD_DEVICE) {
for (i = 0; hp_sw_dh_data_list[i].vendor; i++) {
if (!strncmp(sdev->vendor, hp_sw_dh_data_list[i].vendor,
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-07-17 0:35 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-17 0:35 [scsi_dh] [PATCH] Verify "dev" is a sdev before accessing it Chandra Seetharaman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox