diff options
| author | James Bottomley <jejb@raven.il.steeleye.com> | 2003-05-01 01:45:23 -0500 |
|---|---|---|
| committer | James Bottomley <jejb@raven.il.steeleye.com> | 2003-05-01 01:45:23 -0500 |
| commit | 7cbecb83cd557a3eb3e28ceffe3516281833880d (patch) | |
| tree | 2f7c91db9cdb43119140f5ec706d03c478714130 /drivers/block | |
| parent | eb0a5728e048e61e7802a0aa3e1dcd9d0353e78f (diff) | |
| parent | a950688a3255f8c466720b09d5a4f12930cc4da6 (diff) | |
Merge raven.il.steeleye.com:/home/jejb/BK/linux-2.5
into raven.il.steeleye.com:/home/jejb/BK/scsi-misc-2.5
Diffstat (limited to 'drivers/block')
| -rw-r--r-- | drivers/block/scsi_ioctl.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/block/scsi_ioctl.c b/drivers/block/scsi_ioctl.c index 78bbe1d6e1bc..fc3e3f7aaff8 100644 --- a/drivers/block/scsi_ioctl.c +++ b/drivers/block/scsi_ioctl.c @@ -299,13 +299,14 @@ static int sg_io(request_queue_t *q, struct block_device *bdev, #define MOVE_MEDIUM_TIMEOUT (5 * 60 * HZ) #define READ_ELEMENT_STATUS_TIMEOUT (5 * 60 * HZ) #define READ_DEFECT_DATA_TIMEOUT (60 * HZ ) +#define OMAX_SB_LEN 16 /* For backward compatibility */ static int sg_scsi_ioctl(request_queue_t *q, struct block_device *bdev, Scsi_Ioctl_Command *sic) { struct request *rq; int err, in_len, out_len, bytes, opcode, cmdlen; - char *buffer = NULL, sense[24]; + char *buffer = NULL, sense[SCSI_SENSE_BUFFERSIZE]; /* * get in an out lengths, verify they don't exceed a page worth of data @@ -378,9 +379,12 @@ static int sg_scsi_ioctl(request_queue_t *q, struct block_device *bdev, blk_do_rq(q, bdev, rq); err = rq->errors & 0xff; /* only 8 bit SCSI status */ if (err) { - if (rq->sense_len) - if (copy_to_user(sic->data, rq->sense, rq->sense_len)) + if (rq->sense_len && rq->sense) { + bytes = (OMAX_SB_LEN > rq->sense_len) ? + rq->sense_len : OMAX_SB_LEN; + if (copy_to_user(sic->data, rq->sense, bytes)) err = -EFAULT; + } } else { if (copy_to_user(sic->data, buffer, out_len)) err = -EFAULT; |
