Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a7a5c33 authored by Jiri Slaby's avatar Jiri Slaby Committed by Linus Torvalds
Browse files

[PATCH] char: mxser_new, check request_region retvals



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: default avatarJiri Slaby <jirislaby@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 59628015
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -622,19 +622,24 @@ static int __init mxser_get_PCI_conf(int board_type, struct mxser_board *brd,
{
	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 board_type, struct mxser_board *brd,
		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 cap, struct mxser_board *brd)
		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;
}