From: Hollis Blanchard <hollis@austin.ibm.com>
Fix two pnp error-path memory leaks, caught by Stanford memory leak checker
circa 2.5.48.
static void isapnp_parse_id(struct pnp_dev * dev, unsigned short vendor, unsigned short device)
{
- struct pnp_id * id = isapnp_alloc(sizeof(struct pnp_id));
- if (!id)
- return;
+ struct pnp_id * id;
if (!dev)
return;
+ id = isapnp_alloc(sizeof(struct pnp_id));
+ if (!id)
+ return;
sprintf(id->id, "%c%c%c%x%x%x%x",
'A' + ((vendor >> 2) & 0x3f) - 1,
'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1,
*/
for ( ; res ; res = res->dep ) {
port2 = pnp_alloc(sizeof(struct pnp_port));
+ if (!port2)
+ return;
port3 = pnp_alloc(sizeof(struct pnp_port));
- if (!port2 || !port3)
+ if (!port3) {
+ kfree(port2);
return;
+ }
port = res->port;
memcpy(port2, port, sizeof(struct pnp_port));
memcpy(port3, port, sizeof(struct pnp_port));