• R
    ASoC: Intel: avoid Oops if DMA setup fails · 0efa3334
    Ross Zwisler 提交于
    Currently in sst_dsp_new() if we get an error return from sst_dma_new()
    we just print an error message and then still complete the function
    successfully.  This means that we are trying to run without sst->dma
    properly set up, which will result in NULL pointer dereference when
    sst->dma is later used.  This was happening for me in
    sst_dsp_dma_get_channel():
    
            struct sst_dma *dma = dsp->dma;
    	...
            dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
    
    This resulted in:
    
       BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
       IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
    
    Fix this by adding proper error handling for the case where we fail to
    set up DMA.
    
    This change only affects Haswell and Broadwell systems.  Baytrail
    systems explicilty opt-out of DMA via sst->pdata->resindex_dma_base
    being set to -1.
    Signed-off-by: NRoss Zwisler <zwisler@google.com>
    Cc: stable@vger.kernel.org
    Acked-by: NPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Signed-off-by: NMark Brown <broonie@kernel.org>
    0efa3334
sst-firmware.c 30.1 KB