lkml.org 
[lkml]   [2009]   [May]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: 2.6.30-rc6: Reported regressions from 2.6.29
    From
    Date
    On Sun, 2009-05-17 at 02:15 +0200, Kay Sievers wrote:
    > On Sun, May 17, 2009 at 02:01, Linus Torvalds
    > <torvalds@linux-foundation.org> wrote:
    >
    > > [ 10.428691] Error: Driver 'rtc_cmos' is already registered, aborting...
    > >
    > > but the driver doesn't really care whether that succeeded or not, but then
    > > the platform_driver_probe fails (because the thing is already in use), so
    > > then it ends up unregistering something that never got registered in the
    > > first place.
    > >
    > > I think this is strictly speaking a bug in driver_unregister(), which is
    > > too fragile. If you unregister a drivert that wasn't registered, we
    > > shouldn't oops.
    > >
    > > But we could certainly do it at the rtc-cmos.c level too, and just not
    > > unregister it if the registration failed. My gut feel is that we should
    > > aim for the core driver helpers to be less fragile, though - we'll always
    > > have driver bugs.
    >
    > In:
    > driver_remove_file()
    > we try to access the private part:
    > sysfs_remove_file(&drv->p->kobj, ...
    > and that is NULL, for an unregistered driver, I would expect.
    >
    > I'm looking into it.

    This makes the oops in the driver-core, caused by the rtc driver
    unregister, go away. The original issue is also fixed in the rtc driver
    itself.

    Thanks,
    Kay


    From: Kay Sievers <kay.sievers@vrfy.org>
    Subject: Driver Core: do not oops when driver_unregister() is called for unregistered drivers

    Handle the case someone tries to unregister a non-registered driver
    more gracefully.

    Error: Driver 'rtc_cmos' is already registered, aborting...
    BUG: unable to handle kernel NULL pointer dereference at 00000018
    [<c01e16ba>] sysfs_remove_file+0x1/0xf

    Cc: Greg Kroah-Hartman <gregkh@suse.de>
    Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
    ---

    driver.c | 2 ++
    1 file changed, 2 insertions(+)

    --- a/drivers/base/driver.c
    +++ b/drivers/base/driver.c
    @@ -257,6 +257,8 @@ EXPORT_SYMBOL_GPL(driver_register);
    */
    void driver_unregister(struct device_driver *drv)
    {
    + if (!drv || !drv->p)
    + return;
    driver_remove_groups(drv, drv->groups);
    bus_remove_driver(drv);
    }



    \
     
     \ /
      Last update: 2009-05-17 03:05    [W:0.022 / U:52.340 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site