sysfs_attr_ns: missing error handling & problem with usb/serial/io_ti

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

my USB device is causing a kernel oops upon disconnection.

It's a "Inside Out Networks Watchport/H" sensor,
vendor: 0x1608, product: 0x305, Linux driver: io_ti.
The problem appeared after v3.1.

A git bisect from v3.1 to v3.2 yielded this commit:
---------------------------------------------------------------
487505c257021fc06a7d05753cf27b011487f1dc is the first bad commit
commit 487505c257021fc06a7d05753cf27b011487f1dc
Author: Eric W. Biederman <ebiederm@xxxxxxxxxxxx>
Date:   Wed Oct 12 21:53:38 2011 +0000

    sysfs: Implement support for tagged files in sysfs.
---------------------------------------------------------------

This commit introduces a new function sysfs_attr_ns()
It assumes that kobj->sd is a valid directory entry and dereferences it
unconditionally. This missing check causes a NULL pointer exception when
the io_ti device is disconnected. My attached patch fixes the symptom by
adding a check to sysfs_attr_ns().

The driver works as expected with this patch. However it still leaves a
kernel warning message upon disconnection. Unfortunately my
understanding of sysfs and the io_ti driver is not good enough to
recognize any further, underlying problems.

Best Regards,
Wolfgang Frisch
Jan 13 16:44:12 pure-squeeze kernel: [   58.239165] usb 1-2: new full-speed USB device number 3 using ohci_hcd
Jan 13 16:44:12 pure-squeeze kernel: [   58.565958] usb 1-2: New USB device found, idVendor=1608, idProduct=0305
Jan 13 16:44:12 pure-squeeze kernel: [   58.565961] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jan 13 16:44:12 pure-squeeze kernel: [   58.565964] usb 1-2: Product: Watchport/H
Jan 13 16:44:12 pure-squeeze kernel: [   58.565966] usb 1-2: Manufacturer: Inside Out Networks
Jan 13 16:44:12 pure-squeeze kernel: [   58.565968] usb 1-2: SerialNumber: V51055643-0
Jan 13 16:44:12 pure-squeeze kernel: [   58.656163] usbcore: registered new interface driver usbserial
Jan 13 16:44:12 pure-squeeze kernel: [   58.656190] USB Serial support registered for generic
Jan 13 16:44:12 pure-squeeze kernel: [   58.656225] usbcore: registered new interface driver usbserial_generic
Jan 13 16:44:12 pure-squeeze kernel: [   58.656227] usbserial: USB Serial Driver core
Jan 13 16:44:12 pure-squeeze kernel: [   58.663856] USB Serial support registered for Edgeport TI 1 port adapter
Jan 13 16:44:12 pure-squeeze kernel: [   58.664358] USB Serial support registered for Edgeport TI 2 port adapter
Jan 13 16:44:12 pure-squeeze kernel: [   58.664689] io_ti 1-2:1.0: Edgeport TI 1 port adapter converter detected
Jan 13 16:44:12 pure-squeeze kernel: [   58.998697] usb 1-2: Edgeport TI 1 port adapter converter now attached to ttyUSB0
Jan 13 16:44:12 pure-squeeze kernel: [   58.998779] usbcore: registered new interface driver io_ti
Jan 13 16:44:12 pure-squeeze kernel: [   58.998781] io_ti: v0.7mode043006:Edgeport USB Serial Driver
Jan 13 16:44:14 pure-squeeze kernel: [   59.953876] usb 1-2: USB disconnect, device number 3
Jan 13 16:44:14 pure-squeeze kernel: [   59.954311] edgeport_ti_1 ttyUSB0: Edgeport TI 1 port adapter converter now disconnected from ttyUSB0
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] PGD 0 
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] CPU 0 
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] Modules linked in: io_ti usbserial e1000
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] 
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] Pid: 266, comm: khubd Not tainted 3.2.0-vbox #42 innotek GmbH VirtualBox
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] RIP: 0010:[<ffffffff8112b404>]  [<ffffffff8112b404>] sysfs_attr_ns+0x10/0x66
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] RSP: 0018:ffff88007c89dba0  EFLAGS: 00010246
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] RAX: 0000000000000000 RBX: ffff88007c89dbc8 RCX: ffff88007bc47fa0
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] RDX: 0000000000000000 RSI: ffffffffa0032480 RDI: ffff88007c221a00
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] RBP: ffff88007c89dbb0 R08: 0000000000000000 R09: 0000000000020001
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] R10: 0000000000020001 R11: ffff88007bdc4bd0 R12: ffff88007c221a00
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] R13: ffff88007c221800 R14: 0000000000000001 R15: 0000000000000000
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] FS:  0000000000000000(0000) GS:ffff88007fc00000(0000) knlGS:0000000000000000
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] CR2: 0000000000000079 CR3: 000000007c1e6000 CR4: 00000000000006f0
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077] Process khubd (pid: 266, threadinfo ffff88007c89c000, task ffff88007d3fb980)
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  0000000000020001 ffffffffa0032480 ffff88007c89dbe0 ffffffff8112b474
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  ffff88007ba26e00 ffff88007c2219f0 ffff88007bdeb9c0 0000000000000001
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  ffff88007c89dbf0 ffffffff812ba2a7 ffff88007c89dc10 ffffffffa002cdbc
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8112b474>] sysfs_remove_file+0x1a/0x37
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff812ba2a7>] device_remove_file+0x12/0x14
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffffa002cdbc>] edge_disconnect+0x5c/0x6f [io_ti]
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffffa001f354>] usb_serial_disconnect+0x11e/0x144 [usbserial]
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8131ea17>] usb_unbind_interface+0x45/0xc3
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff812bcd65>] __device_release_driver+0x67/0xb0
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff812bcdcc>] device_release_driver+0x1e/0x2b
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff812bc9c4>] bus_remove_device+0x81/0x91
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff812ba82b>] device_del+0x127/0x179
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8131d8ba>] usb_disable_device+0xa8/0x1d8
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff81317072>] usb_disconnect+0xa7/0x116
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff81318491>] hub_thread+0x64c/0x1057
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8102b988>] ? dequeue_task_fair+0x11d/0x12a
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8104debd>] ? add_wait_queue+0x44/0x44
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff81317e45>] ? usb_new_device+0x16e/0x16e
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8104d7fd>] kthread+0x7f/0x87
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8145ba34>] kernel_thread_helper+0x4/0x10
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8104d77e>] ? kthread_worker_fn+0x12f/0x12f
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  [<ffffffff8145ba30>] ? gs_change+0xb/0xb
Jan 13 16:44:14 pure-squeeze kernel: [   59.955077]  RSP <ffff88007c89dba0>
Jan 13 16:44:14 pure-squeeze kernel: [   60.019735] ---[ end trace bf7b4f5738921164 ]---
Jan 13 16:44:14 pure-squeeze kernel: [   60.020487] khubd used greatest stack depth: 4056 bytes left

diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
index 07c1b4e..876885e 100644
--- a/fs/sysfs/file.c
+++ b/fs/sysfs/file.c
@@ -496,6 +496,10 @@ int sysfs_attr_ns(struct kobject *kobj, const struct attribute *attr,
 	const void *ns = NULL;
 	int err;
 
+	err = -ENOENT;
+	if (!dir_sd)
+		goto out;
+
 	err = 0;
 	if (!sysfs_ns_type(dir_sd))
 		goto out;

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux