• Alan Stern's avatar
    SCSI: Fix NULL pointer dereference in runtime PM · 49718f0f
    Alan Stern authored
    The routines in scsi_rpm.c assume that if a runtime-PM callback is
    invoked for a SCSI device, it can only mean that the device's driver
    has asked the block layer to handle the runtime power management (by
    calling blk_pm_runtime_init(), which among other things sets q->dev).
    
    However, this assumption turns out to be wrong for things like the ses
    driver.  Normally ses devices are not allowed to do runtime PM, but
    userspace can override this setting.  If this happens, the kernel gets
    a NULL pointer dereference when blk_post_runtime_resume() tries to use
    the uninitialized q->dev pointer.
    
    This patch fixes the problem by calling the block layer's runtime-PM
    routines only if the device's driver really does have a runtime-PM
    callback routine.  Since ses doesn't define any such callbacks, the
    crash won't occur.
    
    This fixes Bugzilla #101371.
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Reported-by: default avatarStanisław Pitucha <viraptor@gmail.com>
    Reported-by: default avatarIlan Cohen <ilanco@gmail.com>
    Tested-by: default avatarIlan Cohen <ilanco@gmail.com>
    Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
    49718f0f
scsi_pm.c 7.76 KB