Skip to content

Commit

Permalink
V4L/DVB (13025): s2250-board: Fix memory leaks
Browse files Browse the repository at this point in the history
In some error cases, allocated buffers need to be freed before returning.

Signed-off-by: Pete Eberlein <pete@sensoray.com>
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Pete Eberlein authored and Mauro Carvalho Chehab committed Sep 19, 2009
1 parent bb87165 commit d66ddf2
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions drivers/staging/go7007/s2250-board.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,17 +203,21 @@ static int write_reg_fp(struct i2c_client *client, u16 addr, u16 val)
usb = go->hpi_context;
if (mutex_lock_interruptible(&usb->i2c_lock) != 0) {
printk(KERN_INFO "i2c lock failed\n");
kfree(buf);
return -EINTR;
}
if (go7007_usb_vendor_request(go, 0x57, addr, val, buf, 16, 1) < 0)
if (go7007_usb_vendor_request(go, 0x57, addr, val, buf, 16, 1) < 0) {
kfree(buf);
return -EFAULT;
}

mutex_unlock(&usb->i2c_lock);
if (buf[0] == 0) {
unsigned int subaddr, val_read;

subaddr = (buf[4] << 8) + buf[5];
val_read = (buf[2] << 8) + buf[3];
kfree(buf);
if (val_read != val) {
printk(KERN_INFO "invalid fp write %x %x\n",
val_read, val);
Expand All @@ -224,8 +228,10 @@ static int write_reg_fp(struct i2c_client *client, u16 addr, u16 val)
subaddr, addr);
return -EFAULT;
}
} else
} else {
kfree(buf);
return -EFAULT;
}

/* save last 12b value */
if (addr == 0x12b)
Expand Down

0 comments on commit d66ddf2

Please sign in to comment.