Skip to content

Commit

Permalink
scsi_dh: Verify "dev" is a sdev before accessing it.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Chandra Seetharaman authored and Linus Torvalds committed Jul 17, 2008
1 parent dc7c65d commit 33af79d
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 3 deletions.
7 changes: 6 additions & 1 deletion drivers/scsi/device_handler/scsi_dh_emc.c
Original file line number Diff line number Diff line change
Expand Up @@ -416,12 +416,17 @@ static int clariion_bus_notify(struct notifier_block *nb,
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,
Expand Down
7 changes: 6 additions & 1 deletion drivers/scsi/device_handler/scsi_dh_hp_sw.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,16 @@ static int hp_sw_bus_notify(struct notifier_block *nb,
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,
Expand Down
7 changes: 6 additions & 1 deletion drivers/scsi/device_handler/scsi_dh_rdac.c
Original file line number Diff line number Diff line change
Expand Up @@ -608,12 +608,17 @@ static int rdac_bus_notify(struct notifier_block *nb,
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,
Expand Down

0 comments on commit 33af79d

Please sign in to comment.