Skip to content

Commit

Permalink
V4L/DVB: pvrusb2: Fix kernel oops at device unregistration
Browse files Browse the repository at this point in the history
pvrusb2: Fix oops caused by touching deleted memory after
unregistration.  This bug was introduced when we had started using
video_device_node_name() - that function was being called potentially
after the underlying structure (referenced by that function) had been
deleted.  The fix rearranges things slightly so that the function is
called before destruction takes place.

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Mike Isely authored and Mauro Carvalho Chehab committed Jun 1, 2010
1 parent 8fd0444 commit d72baad
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions drivers/media/video/pvrusb2/pvrusb2-v4l2.c
Original file line number Diff line number Diff line change
Expand Up @@ -883,6 +883,17 @@ static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip)
{
struct pvr2_hdw *hdw = dip->v4lp->channel.mc_head->hdw;
enum pvr2_config cfg = dip->config;
char msg[80];
unsigned int mcnt;

/* Construct the unregistration message *before* we actually
perform the unregistration step. By doing it this way we don't
have to worry about potentially touching deleted resources. */
mcnt = scnprintf(msg, sizeof(msg) - 1,
"pvrusb2: unregistered device %s [%s]",
video_device_node_name(&dip->devbase),
pvr2_config_get_name(cfg));
msg[mcnt] = 0;

pvr2_hdw_v4l_store_minor_number(hdw,dip->minor_type,-1);

Expand All @@ -894,9 +905,7 @@ static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip)
are gone. */
video_unregister_device(&dip->devbase);

printk(KERN_INFO "pvrusb2: unregistered device %s [%s]\n",
video_device_node_name(&dip->devbase),
pvr2_config_get_name(cfg));
printk(KERN_INFO "%s\n", msg);

}

Expand Down

0 comments on commit d72baad

Please sign in to comment.