lkml.org 
[lkml]   [2017]   [Jan]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 50/60] ASoC: intel: Fix crash at suspend/resume without card registration
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

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

    From: Takashi Iwai <tiwai@suse.de>

    commit 2fc995a87f2efcd803438f07bfecd35cc3d90d32 upstream.

    When ASoC Intel SST Medfield driver is probed but without codec / card
    assigned, it causes an Oops and freezes the kernel at suspend/resume,

    PM: Suspending system (freeze)
    Suspending console(s) (use no_console_suspend to debug)
    BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
    IP: [<ffffffffc09d9409>] sst_soc_prepare+0x19/0xa0 [snd_soc_sst_mfld_platform]
    Oops: 0000 [#1] PREEMPT SMP
    CPU: 0 PID: 1552 Comm: systemd-sleep Tainted: G W 4.9.0-rc6-1.g5f5c2ad-default #1
    Call Trace:
    [<ffffffffb45318f9>] dpm_prepare+0x209/0x460
    [<ffffffffb4531b61>] dpm_suspend_start+0x11/0x60
    [<ffffffffb40d3cc2>] suspend_devices_and_enter+0xb2/0x710
    [<ffffffffb40d462e>] pm_suspend+0x30e/0x390
    [<ffffffffb40d2eba>] state_store+0x8a/0x90
    [<ffffffffb43c670f>] kobj_attr_store+0xf/0x20
    [<ffffffffb42b0d97>] sysfs_kf_write+0x37/0x40
    [<ffffffffb42b02bc>] kernfs_fop_write+0x11c/0x1b0
    [<ffffffffb422be68>] __vfs_write+0x28/0x140
    [<ffffffffb43728a8>] ? apparmor_file_permission+0x18/0x20
    [<ffffffffb433b2ab>] ? security_file_permission+0x3b/0xc0
    [<ffffffffb422d095>] vfs_write+0xb5/0x1a0
    [<ffffffffb422e3d6>] SyS_write+0x46/0xa0
    [<ffffffffb4719fbb>] entry_SYSCALL_64_fastpath+0x1e/0xad

    Add proper NULL checks in the PM code of mdfld driver.

    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Acked-by: Vinod Koul <vinod.koul@intel.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    sound/soc/intel/atom/sst-mfld-platform-pcm.c | 6 ++++++
    1 file changed, 6 insertions(+)

    --- a/sound/soc/intel/atom/sst-mfld-platform-pcm.c
    +++ b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
    @@ -762,6 +762,9 @@ static int sst_soc_prepare(struct device
    struct sst_data *drv = dev_get_drvdata(dev);
    int i;

    + if (!drv->soc_card)
    + return 0;
    +
    /* suspend all pcms first */
    snd_soc_suspend(drv->soc_card->dev);
    snd_soc_poweroff(drv->soc_card->dev);
    @@ -784,6 +787,9 @@ static void sst_soc_complete(struct devi
    struct sst_data *drv = dev_get_drvdata(dev);
    int i;

    + if (!drv->soc_card)
    + return;
    +
    /* restart SSPs */
    for (i = 0; i < drv->soc_card->num_rtd; i++) {
    struct snd_soc_dai *dai = drv->soc_card->rtd[i].cpu_dai;

    \
     
     \ /
      Last update: 2017-01-04 22:35    [W:4.063 / U:0.896 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site