lkml.org 
[lkml]   [2013]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 44/62] cpuidle: Check for dev before deregistering it.
    Date
    3.12-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

    commit 813e8e3d6aaa0b511126cce15c16a931afffe768 upstream.

    If not, we could end up in the unfortunate situation where
    we dereference a NULL pointer b/c we have cpuidle disabled.

    This is the case when booting under Xen (which uses the
    ACPI P/C states but disables the CPU idle driver) - and can
    be easily reproduced when booting with cpuidle.off=1.

    BUG: unable to handle kernel NULL pointer dereference at (null)
    IP: [<ffffffff8156db4a>] cpuidle_unregister_device+0x2a/0x90
    .. snip..
    Call Trace:
    [<ffffffff813b15b4>] acpi_processor_power_exit+0x3c/0x5c
    [<ffffffff813af0a9>] acpi_processor_stop+0x61/0xb6
    [<ffffffff814215bf>] __device_release_driver+0fffff81421653>] device_release_driver+0x23/0x30
    [<ffffffff81420ed8>] bus_remove_device+0x108/0x180
    [<ffffffff8141d9d9>] device_del+0x129/0x1c0
    [<ffffffff813cb4b0>] ? unregister_xenbus_watch+0x1f0/0x1f0
    [<ffffffff8141da8e>] device_unregister+0x1e/0x60
    [<ffffffff814243e9>] unregister_cpu+0x39/0x60
    [<ffffffff81019e03>] arch_unregister_cpu+0x23/0x30
    [<ffffffff813c3c51>] handle_vcpu_hotplug_event+0xc1/0xe0
    [<ffffffff813cb4f5>] xenwatch_thread+0x45/0x120
    [<ffffffff810af010>] ? abort_exclusive_wait+0xb0/0xb0
    [<ffffffff8108ec42>] kthread+0xd2/0xf0
    [<ffffffff8108eb70>] ? kthread_create_on_node+0x180/0x180
    [<ffffffff816ce17c>] ret_from_fork+0x7c/0xb0
    [<ffffffff8108eb70>] ? kthread_create_on_node+0x180/0x180

    This problem also appears in 3.12 and could be a candidate for backport.

    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/cpuidle/cpuidle.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/cpuidle/cpuidle.c
    +++ b/drivers/cpuidle/cpuidle.c
    @@ -448,7 +448,7 @@ EXPORT_SYMBOL_GPL(cpuidle_register_devic
    */
    void cpuidle_unregister_device(struct cpuidle_device *dev)
    {
    - if (dev->registered == 0)
    + if (!dev || dev->registered == 0)
    return;

    cpuidle_pause_and_lock();



    \
     
     \ /
      Last update: 2013-12-10 10:41    [W:4.064 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site