Commit 2c143342 authored by Robert Elliott's avatar Robert Elliott Committed by James Bottomley

hpsa: fix memory leak in hpsa_alloc_cmd_pool

Partial allocation failure wasn't handled correctly
Reviewed-by: default avatarScott Teel <scott.teel@pmcs.com>
Signed-off-by: default avatarRobert Elliott <elliott@hp.com>
Signed-off-by: default avatarDon Brace <don.brace@pmcs.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 3d4e6af8
...@@ -211,6 +211,7 @@ static struct CommandList *cmd_special_alloc(struct ctlr_info *h); ...@@ -211,6 +211,7 @@ static struct CommandList *cmd_special_alloc(struct ctlr_info *h);
static int fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h, static int fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h,
void *buff, size_t size, u16 page_code, unsigned char *scsi3addr, void *buff, size_t size, u16 page_code, unsigned char *scsi3addr,
int cmd_type); int cmd_type);
static void hpsa_free_cmd_pool(struct ctlr_info *h);
#define VPD_PAGE (1 << 8) #define VPD_PAGE (1 << 8)
static int hpsa_scsi_queue_command(struct Scsi_Host *h, struct scsi_cmnd *cmd); static int hpsa_scsi_queue_command(struct Scsi_Host *h, struct scsi_cmnd *cmd);
...@@ -6471,9 +6472,12 @@ static int hpsa_allocate_cmd_pool(struct ctlr_info *h) ...@@ -6471,9 +6472,12 @@ static int hpsa_allocate_cmd_pool(struct ctlr_info *h)
|| (h->cmd_pool == NULL) || (h->cmd_pool == NULL)
|| (h->errinfo_pool == NULL)) { || (h->errinfo_pool == NULL)) {
dev_err(&h->pdev->dev, "out of memory in %s", __func__); dev_err(&h->pdev->dev, "out of memory in %s", __func__);
return -ENOMEM; goto clean_up;
} }
return 0; return 0;
clean_up:
hpsa_free_cmd_pool(h);
return -ENOMEM;
} }
static void hpsa_free_cmd_pool(struct ctlr_info *h) static void hpsa_free_cmd_pool(struct ctlr_info *h)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment