Re: lm75_remove: LM75 Device remove using sysfs delete_device

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

 



On Wed, Jun 13, 2012 at 09:41:38AM -0400, Sasikanth babu wrote:
> 
> 
> On Wed, Jun 13, 2012 at 9:53 AM, Guenter Roeck <guenter.roeck@xxxxxxxxxxxx>
> wrote:
> 
>     On Tue, Jun 12, 2012 at 11:51:51PM -0400, Sasikanth babu wrote:
>     >
>     > On Sun, Jun 10, 2012 at 9:06 PM, Jean Delvare <khali@xxxxxxxxxxxx> wrote:
>     >
>     >     (Note: Frodo is out of the lm-sensors project for years, no need to
>     Cc
>     >     him.)
>     >
>     >     On Sun, 10 Jun 2012 07:41:03 -0700, Sasikanth babu wrote:
>     >     >   when I'm trying to delete lm75 device using sysfs delete_device
>     >     attribute
>     >     > (echo 0x4e >/sys/bus/i2c/devices/i2c-3/delete_device)
>     >     >   It hangs at lm75_remove function. I started the device using
>     sysfs
>     >     > attribute new_device.
>     >     >
>     >     >
>     >     >   Kernel verion : 2.6.34.12
>     >
>     >     I can't reproduce this with kernel 3.4.2.
>     >
>     >     Did you try reproducing this with a more recent kernel? 2.6.34 is
>     >     getting old.
>     >
>     >     Is there anything you can think of which makes your system special?
>     I2C
>     >     bus multiplexing ? Some unusual kernel option maybe?
>     >
>     >
>     >       Yes, I have PCA9545 Mux device. LM75 device was connected to
>     PCA9545 Mux
>     > devices (Mux device
>     >       is connected to SMBUS). At first I unloaded PCA954x module, It
>     hanged at
>     > lm75_remove. Later I had
>     >       to tried remove the lm75 device using sysfs, again it hanged at
>     same
>     > location. Both PCA Mux device and
>     >       lm75 devvice instantiated using sysfs new_device.
>     >
>     >
>     >     > "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this
>     message.
>     >     > i2cinit       D ffffffff814a04e0     0  2064   2059 0x00000004
>     >     >  ffff880271928a70 0000000000000086 0000000000000096
>     ffff880273215b48
>     >     >  ffff8802ffffffff ffff880477306a70 0000000000010140
>     ffff880273215fd8
>     >     >  0000000000010140 ffff880271928a70 ffff880273215fd8
>     ffff880273215fd8
>     >     > Call Trace:
>     >     >  [<ffffffff8103ecd0>] ? default_wake_function+0x0/0x20
>     >     >  [<ffffffff8148765f>] ? __rt_mutex_slowlock+0x4f/0x110
>     >     >  [<ffffffff814879e3>] ? rt_mutex_slowlock+0x93/0x190
>     >     >  [<ffffffff813278d9>] ? i2c_smbus_xfer+0x49/0x110
>     >     >  [<ffffffff814e1de0>] ? dev_sysfs_ops+0x0/0x10
>     >     >  [<ffffffff81327c40>] ? i2c_smbus_write_byte_data+0x30/0x40
>     >
>     >     This looks odd, sysfs_remove_group() doesn't call
>     >     i2c_smbus_write_byte_data(), and i2c_smbus_write_byte_data() doesn't
>     >     touch dev_sysfs_ops... So this stack trace is approximate.
>     >
>     >     >  [<ffffffff811361f9>] ? sysfs_remove_group+0x59/0x100
>     >     >  [<ffffffff8132ec2d>] ? lm75_remove+0x4d/0x80
>     >     >  [<ffffffff81326ef9>] ? i2c_device_remove+0xa9/0xc0
>     >     >  [<ffffffff8129ffb6>] ? __device_release_driver+0x56/0xc0
>     >     >  [<ffffffff812a00f5>] ? device_release_driver+0x25/0x40
>     >     >  [<ffffffff8129f481>] ? bus_remove_device+0x91/0xc0
>     >     >  [<ffffffff8129d7a8>] ? device_del+0x118/0x190
>     >     >  [<ffffffff8129d829>] ? device_unregister+0x9/0x20
>     >     >  [<ffffffff813281bc>] ? i2c_sysfs_delete_device+0x17c/0x200
>     >     >  [<ffffffff81133046>] ? sysfs_write_file+0x1c6/0x260
>     >     >  [<ffffffff810d5323>] ? vfs_write+0x103/0x200
>     >     >  [<ffffffff810d550e>] ? sys_write+0x4e/0x90
>     >     >  [<ffffffff814884e4>] ? page_fault+0x24/0x30
>     >     >  [<ffffffff810024ab>] ? system_call_done+0x0/0x5
>     >
>     Jean,
> 
>     in 2.6.34, i2c_sysfs_delete_device calls i2c_lock_adapter, then
>     i2c_unregister_device.
>     This in turn calls lm75_remove which through i2c_smbus_xfer tries to
>     acquire the lock again.
> 
>     The current code is different - i2c_sysfs_delete_device no longer calls
>     i2c_lock_adapter.
>     Commit ID is dafc50d141c27959dbd3a1cfe9857a86d23402a7, which specifically
>     mentions deadlock
>     issues with multiplexed busses.
>    
>     Guenter
> 
> 
>  
> After patching dafc50d141c27959dbd3a1cfe9857a86d23402a7 lm75_probe is getting
> crashed.
> 
> i2c i2c-1: adapter [i2c-0-mux (chan_id 0)] registered
> i2c-dev: adapter [i2c-0-mux (chan_id 0)] registered as minor 1
> i2c i2c-0: Added multiplexed i2c bus 1
> i2c i2c-2: adapter [i2c-0-mux (chan_id 1)] registered
> i2c-dev: adapter [i2c-0-mux (chan_id 1)] registered as minor 2
> i2c i2c-0: Added multiplexed i2c bus 2
> i2c i2c-3: adapter [i2c-0-mux (chan_id 2)] registered
> i2c-dev: adapter [i2c-0-mux (chan_id 2)] registered as minor 3
> i2c i2c-0: Added multiplexed i2c bus 3
> i2c i2c-4: adapter [i2c-0-mux (chan_id 3)] registered
> i2c-dev: adapter [i2c-0-mux (chan_id 3)] registered as minor 4
> i2c i2c-0: Added multiplexed i2c bus 4
> pca954x 0-0073: registered 4 multiplexed busses for I2C switch pca9545
> i2c i2c-0: client [pca9545] registered with bus id 0-0073
> i2c i2c-0: new_device: Instantiated device pca9545 at 0x73
> i2c i2c-3: The new_device interface is still experimental and may change in a
> near future
> i2c 3-004c: uevent
> lm75 3-004c: probe
> kernel tried to execute NX-protected page - exploit attempt? (uid: 0, task:
> S0i2cinit, pid: 1774)
> lm75 3-004c: uevent
> lm75 3-004c: uevent
> BUG: unable to handle kernel paging request at ffff880272ab0200
> IP: [<ffff880272ab0200>] 0xffff880272ab0200
> PGD 8000000001768063 PUD 80000002400001e3
> Oops: 0011 [#1] SMP
> last sysfs file: /sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-3/3-004c/uevent
> CPU 8
> Modules linked in: igb ixgbe pmbus_core ltc2978 i2c_mux pca954x [last unloaded:
> scsi_wait_scan]
> 
> Pid: 1774, comm: S0i2cinit Not tainted 2.6.34.10-grsec-WR4.3.0.0_cgl #1 To be
> filled by O.E.M./To be filled by O.E.M.
> RIP: 0010:[<ffff880272ab0200>]  [<ffff880272ab0200>] 0xffff880272ab0200
> RSP: 0018:ffff8804734d5c70  EFLAGS: 00010296
> RAX: ffff880272ab01f0 RBX: ffff880473f18c28 RCX: 0000000000000dcd
> RDX: 0000000000000000 RSI: ffffffff814f0620 RDI: ffff880272ab0000
> RBP: ffff880473f18c00 R08: 00000000000165c8 R09: 0000000000000000
> R10: 0000000000000000 R11: 0000000000000001 R12: ffff880473f18c04
> R13: ffff880473f18c00 R14: ffffffff8132ec80 R15: 0000000000000000
> FS:  00007f894f16e700(0000) GS:ffff880287200000(0000) knlGS:0000000000000000
> CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: ffff880272ab0200 CR3: 000000027495c000 CR4: 00000000000406f0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
> Process S0i2cinit (pid: 1774, threadinfo ffff8804734d4000, task
> ffff8804734eabb0)
> Stack:
>  ffffffff8132ecaa ffff880473f18c28 ffffffff814f0620 ffff880473f18c04
> <0> ffff880473f18c00 ffffffff8132ec80 ffffffff81327014 0000000000000000
> <0> ffffffff812a018a ffffffff84a8c350 ffff880473f18c28 00000000ffffffed
> Call Trace:
>  [<ffffffff8132ecaa>] ? lm75_probe+0x2a/0x1b0
>  [<ffffffff814f0620>] ? lm75_ids+0x40/0x1e0
>  [<ffffffff8132ec80>] ? lm75_probe+0x0/0x1b0
>  [<ffffffff81327014>] ? i2c_device_probe+0x104/0x130
>  [<ffffffff812a018a>] ? driver_sysfs_add+0x5a/0x80
>  [<ffffffff812a02a8>] ? driver_probe_device+0x88/0x180
>  [<ffffffff812a0440>] ? __device_attach+0x0/0x60
>  [<ffffffff8129f6bc>] ? bus_for_each_drv+0x5c/0x90
>  [<ffffffff812a0555>] ? device_attach+0x85/0x90
>  [<ffffffff8129f4d5>] ? bus_probe_device+0x25/0x40
>  [<ffffffff8129ddd5>] ? device_add+0x4f5/0x5c0
>  [<ffffffff812287ed>] ? kobject_init+0x2d/0xb0
>  [<ffffffff813287e8>] ? i2c_new_device+0x118/0x1b0
>  [<ffffffff81328b50>] ? i2c_sysfs_new_device+0xe0/0x2a0
>  [<ffffffff814e1de0>] ? dev_sysfs_ops+0x0/0x10
>  [<ffffffff81133046>] ? sysfs_write_file+0x1c6/0x260
>  [<ffffffff810d5323>] ? vfs_write+0x103/0x200
>  [<ffffffff810d550e>] ? sys_write+0x4e/0x90
>  [<ffffffff81488524>] ? page_fault+0x24/0x30
>  [<ffffffff810024ab>] ? system_call_done+0x0/0x5
>  
I suspect it requires additional patches to work. Jean might know.
fe61e07e9ebc890c70d97a1f72ddaad4bee2d848 seems relevant, and there may be others,
even infrastructure changes.

Can you switch to a more recent kernel ?

Guenter

_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors


[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux