[SCSI] Fix protection scsi_data_buffer leak
We would leak a scsi_data_buffer if the free_list command was of the protected variety. Reported-by: Boaz Harrosh <bharrosh@panasas.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Cc: Stable Tree <stable@kernel.org> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
35e1a5d90b
commit
b4c2554d40
@ -241,10 +241,7 @@ scsi_host_alloc_command(struct Scsi_Host *shost, gfp_t gfp_mask)
|
|||||||
*/
|
*/
|
||||||
struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost, gfp_t gfp_mask)
|
struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost, gfp_t gfp_mask)
|
||||||
{
|
{
|
||||||
struct scsi_cmnd *cmd;
|
struct scsi_cmnd *cmd = scsi_host_alloc_command(shost, gfp_mask);
|
||||||
unsigned char *buf;
|
|
||||||
|
|
||||||
cmd = scsi_host_alloc_command(shost, gfp_mask);
|
|
||||||
|
|
||||||
if (unlikely(!cmd)) {
|
if (unlikely(!cmd)) {
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
@ -258,9 +255,15 @@ struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost, gfp_t gfp_mask)
|
|||||||
spin_unlock_irqrestore(&shost->free_list_lock, flags);
|
spin_unlock_irqrestore(&shost->free_list_lock, flags);
|
||||||
|
|
||||||
if (cmd) {
|
if (cmd) {
|
||||||
|
void *buf, *prot;
|
||||||
|
|
||||||
buf = cmd->sense_buffer;
|
buf = cmd->sense_buffer;
|
||||||
|
prot = cmd->prot_sdb;
|
||||||
|
|
||||||
memset(cmd, 0, sizeof(*cmd));
|
memset(cmd, 0, sizeof(*cmd));
|
||||||
|
|
||||||
cmd->sense_buffer = buf;
|
cmd->sense_buffer = buf;
|
||||||
|
cmd->prot_sdb = prot;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user