提交 d72baad3 编写于 作者: M Mike Isely 提交者: Mauro Carvalho Chehab

V4L/DVB: pvrusb2: Fix kernel oops at device unregistration

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: NMike Isely <isely@pobox.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 8fd04448
......@@ -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);
......@@ -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);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册