Skip to content

Commit

Permalink
V4L/DVB: IR/imon: remove bad ir_input_dev use
Browse files Browse the repository at this point in the history
The ir_input_dev gets filled in by __ir_input_register, the one
allocated in imon_init_idev was being overwritten by the correct one
shortly after it was initialized (ultimately resulting in a memory
leak). Additionally, there was an ill-advised memcpy into that
extraneous ir_input_dev which gets fixed by this.

Ill-advised memcpy pointed out by Dmitry Torokhov, bad usage of
ir_input_dev pointed out by Maxim Levitsky.

Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Jarod Wilson authored and Mauro Carvalho Chehab committed Aug 9, 2010
1 parent 20cd195 commit da48db6
Showing 1 changed file with 0 additions and 15 deletions.
15 changes: 0 additions & 15 deletions drivers/media/IR/imon.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ static ssize_t lcd_write(struct file *file, const char *buf,
struct imon_context {
struct device *dev;
struct ir_dev_props *props;
struct ir_input_dev *ir;
/* Newer devices have two interfaces */
struct usb_device *usbdev_intf0;
struct usb_device *usbdev_intf1;
Expand Down Expand Up @@ -1656,7 +1655,6 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
{
struct input_dev *idev;
struct ir_dev_props *props;
struct ir_input_dev *ir;
int ret, i;

idev = input_allocate_device();
Expand All @@ -1671,12 +1669,6 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
goto props_alloc_failed;
}

ir = kzalloc(sizeof(struct ir_input_dev), GFP_KERNEL);
if (!ir) {
dev_err(ictx->dev, "remote ir input dev allocation failed\n");
goto ir_dev_alloc_failed;
}

snprintf(ictx->name_idev, sizeof(ictx->name_idev),
"iMON Remote (%04x:%04x)", ictx->vendor, ictx->product);
idev->name = ictx->name_idev;
Expand Down Expand Up @@ -1706,14 +1698,9 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
props->change_protocol = imon_ir_change_protocol;
ictx->props = props;

ictx->ir = ir;
memcpy(&ir->dev, ictx->dev, sizeof(struct device));

usb_to_input_id(ictx->usbdev_intf0, &idev->id);
idev->dev.parent = ictx->dev;

input_set_drvdata(idev, ir);

ret = ir_input_register(idev, RC_MAP_IMON_PAD, props, MOD_NAME);
if (ret < 0) {
dev_err(ictx->dev, "remote input dev register failed\n");
Expand All @@ -1723,8 +1710,6 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
return idev;

idev_register_failed:
kfree(ir);
ir_dev_alloc_failed:
kfree(props);
props_alloc_failed:
input_free_device(idev);
Expand Down

0 comments on commit da48db6

Please sign in to comment.