staging: dgap: unwind on error in dgap_found_board()
Adds a label for "kfree(brd)". And also remove a state value as BOARD_FAILED in brd when dgap_do_remap() is failed. Because "brd" will free after failure. Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com> Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
836bf241d8
commit
f86c55c965
|
@ -673,6 +673,7 @@ static int dgap_found_board(struct pci_dev *pdev, int id)
|
|||
struct board_t *brd;
|
||||
unsigned int pci_irq;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
/* get the board structure and prep it */
|
||||
brd = kzalloc(sizeof(struct board_t), GFP_KERNEL);
|
||||
|
@ -728,8 +729,10 @@ static int dgap_found_board(struct pci_dev *pdev, int id)
|
|||
brd->membase_end = pci_resource_end(pdev, 0);
|
||||
}
|
||||
|
||||
if (!brd->membase)
|
||||
return -ENODEV;
|
||||
if (!brd->membase) {
|
||||
ret = -ENODEV;
|
||||
goto free_brd;
|
||||
}
|
||||
|
||||
if (brd->membase & 1)
|
||||
brd->membase &= ~3;
|
||||
|
@ -770,14 +773,20 @@ static int dgap_found_board(struct pci_dev *pdev, int id)
|
|||
tasklet_init(&brd->helper_tasklet, dgap_poll_tasklet,
|
||||
(unsigned long) brd);
|
||||
|
||||
i = dgap_do_remap(brd);
|
||||
if (i)
|
||||
brd->state = BOARD_FAILED;
|
||||
ret = dgap_do_remap(brd);
|
||||
if (ret)
|
||||
goto free_brd;
|
||||
|
||||
pr_info("dgap: board %d: %s (rev %d), irq %ld\n",
|
||||
dgap_numboards, brd->name, brd->rev, brd->irq);
|
||||
|
||||
return 0;
|
||||
|
||||
free_brd:
|
||||
kfree(brd);
|
||||
dgap_board[dgap_numboards] = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue