| From 294001a80c9810e2fe27aaaad7df8be12a103065 Mon Sep 17 00:00:00 2001 |
| From: Stefan Haberland <stefan.haberland@de.ibm.com> |
| Date: Wed, 27 Jan 2010 10:12:35 +0100 |
| Subject: [S390] dasd: fix possible NULL pointer errors |
| |
| From: Stefan Haberland <stefan.haberland@de.ibm.com> |
| |
| commit 294001a80c9810e2fe27aaaad7df8be12a103065 upstream. |
| |
| Fix possible NULL pointer in DASD messages and correct discipline |
| checking. |
| |
| Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com> |
| Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/s390/block/dasd.c | 8 ++++---- |
| drivers/s390/block/dasd_eckd.c | 2 +- |
| drivers/s390/block/dasd_ioctl.c | 7 ++----- |
| drivers/s390/block/dasd_proc.c | 7 ++----- |
| 4 files changed, 9 insertions(+), 15 deletions(-) |
| |
| --- a/drivers/s390/block/dasd.c |
| +++ b/drivers/s390/block/dasd.c |
| @@ -1005,8 +1005,8 @@ static void dasd_handle_killed_request(s |
| if (device == NULL || |
| device != dasd_device_from_cdev_locked(cdev) || |
| strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) { |
| - DBF_DEV_EVENT(DBF_DEBUG, device, "invalid device in request: " |
| - "bus_id %s", dev_name(&cdev->dev)); |
| + DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", |
| + "invalid device in request"); |
| return; |
| } |
| |
| @@ -1078,8 +1078,8 @@ void dasd_int_handler(struct ccw_device |
| device = (struct dasd_device *) cqr->startdev; |
| if (!device || |
| strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) { |
| - DBF_DEV_EVENT(DBF_DEBUG, device, "invalid device in request: " |
| - "bus_id %s", dev_name(&cdev->dev)); |
| + DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", |
| + "invalid device in request"); |
| return; |
| } |
| |
| --- a/drivers/s390/block/dasd_eckd.c |
| +++ b/drivers/s390/block/dasd_eckd.c |
| @@ -2980,7 +2980,7 @@ static void dasd_eckd_dump_sense_ccw(str |
| len += sprintf(page + len, KERN_ERR PRINTK_HEADER |
| " in req: %p CS: 0x%02X DS: 0x%02X CC: 0x%02X RC: %d\n", |
| req, scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw), |
| - scsw_cc(&irb->scsw), req->intrc); |
| + scsw_cc(&irb->scsw), req ? req->intrc : 0); |
| len += sprintf(page + len, KERN_ERR PRINTK_HEADER |
| " device %s: Failing CCW: %p\n", |
| dev_name(&device->cdev->dev), |
| --- a/drivers/s390/block/dasd_ioctl.c |
| +++ b/drivers/s390/block/dasd_ioctl.c |
| @@ -260,7 +260,7 @@ static int dasd_ioctl_information(struct |
| struct ccw_dev_id dev_id; |
| |
| base = block->base; |
| - if (!base->discipline->fill_info) |
| + if (!base->discipline || !base->discipline->fill_info) |
| return -EINVAL; |
| |
| dasd_info = kzalloc(sizeof(struct dasd_information2_t), GFP_KERNEL); |
| @@ -303,10 +303,7 @@ static int dasd_ioctl_information(struct |
| dasd_info->features |= |
| ((base->features & DASD_FEATURE_READONLY) != 0); |
| |
| - if (base->discipline) |
| - memcpy(dasd_info->type, base->discipline->name, 4); |
| - else |
| - memcpy(dasd_info->type, "none", 4); |
| + memcpy(dasd_info->type, base->discipline->name, 4); |
| |
| if (block->request_queue->request_fn) { |
| struct list_head *l; |
| --- a/drivers/s390/block/dasd_proc.c |
| +++ b/drivers/s390/block/dasd_proc.c |
| @@ -71,7 +71,7 @@ dasd_devices_show(struct seq_file *m, vo |
| /* Print device number. */ |
| seq_printf(m, "%s", dev_name(&device->cdev->dev)); |
| /* Print discipline string. */ |
| - if (device != NULL && device->discipline != NULL) |
| + if (device->discipline != NULL) |
| seq_printf(m, "(%s)", device->discipline->name); |
| else |
| seq_printf(m, "(none)"); |
| @@ -91,10 +91,7 @@ dasd_devices_show(struct seq_file *m, vo |
| substr = (device->features & DASD_FEATURE_READONLY) ? "(ro)" : " "; |
| seq_printf(m, "%4s: ", substr); |
| /* Print device status information. */ |
| - switch ((device != NULL) ? device->state : -1) { |
| - case -1: |
| - seq_printf(m, "unknown"); |
| - break; |
| + switch (device->state) { |
| case DASD_STATE_NEW: |
| seq_printf(m, "new"); |
| break; |