From: Jiri Slaby mxser_new, check request_region retvals Return values of (pci_)request_region should be checked and error should be returned if something is in bad state. Signed-off-by: Jiri Slaby Signed-off-by: Andrew Morton --- drivers/char/mxser_new.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff -puN drivers/char/mxser_new.c~char-mxser_new-check-request_region-retvals drivers/char/mxser_new.c --- a/drivers/char/mxser_new.c~char-mxser_new-check-request_region-retvals +++ a/drivers/char/mxser_new.c @@ -622,19 +622,24 @@ static int __init mxser_get_PCI_conf(int { unsigned int i, j; unsigned long ioaddress; + int retval; /* io address */ brd->board_type = board_type; brd->nports = mxser_numports[board_type - 1]; ioaddress = pci_resource_start(pdev, 2); - pci_request_region(pdev, 2, "mxser(IO)"); + retval = pci_request_region(pdev, 2, "mxser(IO)"); + if (retval) + goto err; for (i = 0; i < brd->nports; i++) brd->ports[i].ioaddr = ioaddress + 8 * i; /* vector */ ioaddress = pci_resource_start(pdev, 3); - pci_request_region(pdev, 3, "mxser(vector)"); + retval = pci_request_region(pdev, 3, "mxser(vector)"); + if (retval) + goto err_relio; brd->vector = ioaddress; /* irq */ @@ -674,6 +679,10 @@ static int __init mxser_get_PCI_conf(int brd->ports[i].baud_base = 921600; } return 0; +err_relio: + pci_release_region(pdev, 2); +err: + return retval; } static int __init mxser_init(void) @@ -3009,8 +3018,12 @@ static int __init mxser_get_ISA_conf(int brd->nports = 8; else brd->nports = 4; - request_region(brd->ports[0].ioaddr, 8 * brd->nports, "mxser(IO)"); - request_region(brd->vector, 1, "mxser(vector)"); + if (!request_region(brd->ports[0].ioaddr, 8 * brd->nports, "mxser(IO)")) + return MXSER_ERR_IOADDR; + if (!request_region(brd->vector, 1, "mxser(vector)")) { + release_region(brd->ports[0].ioaddr, 8 * brd->nports); + return MXSER_ERR_VECTOR; + } return brd->nports; } _