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

Commit a9adb8db authored by Jesper Juhl's avatar Jesper Juhl Committed by Linus Torvalds
Browse files

[PATCH] pnp: card_probe(): fix memory leak



We can leak `clink' if drv->probe == 0.

Signed-off-by: default avatarJesper Juhl <jesper.juhl@gmail.com>
Cc: Adam Belay <ambx1@neo.rr.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 552c0348
Loading
Loading
Loading
Loading
+26 −22
Original line number Diff line number Diff line
@@ -62,28 +62,32 @@ static void card_remove_first(struct pnp_dev * dev)

static int card_probe(struct pnp_card *card, struct pnp_card_driver *drv)
{
	const struct pnp_card_device_id *id = match_card(drv,card);
	if (id) {
		struct pnp_card_link * clink = pnp_alloc(sizeof(struct pnp_card_link));
	const struct pnp_card_device_id *id;
	struct pnp_card_link *clink;
	struct pnp_dev *dev;

	if (!drv->probe)
		return 0;
	id = match_card(drv,card);
	if (!id)
		return 0;

	clink = pnp_alloc(sizeof(*clink));
	if (!clink)
		return 0;
	clink->card = card;
	clink->driver = drv;
	clink->pm_state = PMSG_ON;
		if (drv->probe) {

	if (drv->probe(clink, id) >= 0)
		return 1;
			else {
				struct pnp_dev * dev;

	/* Recovery */
	card_for_each_dev(card, dev) {
		if (dev->card_link == clink)
			pnp_release_card_device(dev);
	}
	kfree(clink);
			}
		} else
			return 1;
	}
	return 0;
}