scsi: scsi_debug: Fix buffer size of REPORT ZONES command
commit 7db0e0c8190a086ef92ce5bb960836cde49540aa upstream.
According to ZBC and SPC specifications, the unit of ALLOCATION LENGTH
field of REPORT ZONES command is byte. However, current scsi_debug
implementation handles it as number of zones to calculate buffer size to
report zones. When the ALLOCATION LENGTH has a large number, this results
in too large buffer size and causes memory allocation failure. Fix the
failure by handling ALLOCATION LENGTH as byte unit.
Link: https://lore.kernel.org/r/20211207010638.124280-1-shinichiro.kawasaki@wdc.com
Fixes: f0d1cf9378
("scsi: scsi_debug: Add ZBC zone commands")
Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
1e434d2687
commit
c4d2d7c935
@@ -4313,7 +4313,7 @@ static int resp_report_zones(struct scsi_cmnd *scp,
|
|||||||
rep_max_zones = min((alloc_len - 64) >> ilog2(RZONES_DESC_HD),
|
rep_max_zones = min((alloc_len - 64) >> ilog2(RZONES_DESC_HD),
|
||||||
max_zones);
|
max_zones);
|
||||||
|
|
||||||
arr = kcalloc(RZONES_DESC_HD, alloc_len, GFP_ATOMIC);
|
arr = kzalloc(alloc_len, GFP_ATOMIC);
|
||||||
if (!arr) {
|
if (!arr) {
|
||||||
mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
|
mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
|
||||||
INSUFF_RES_ASCQ);
|
INSUFF_RES_ASCQ);
|
||||||
|
Reference in New Issue
Block a user