lkml.org 
[lkml]   [2022]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 077/105] spi: bcm2835: bcm2835_spi_handle_err(): fix NULL pointer deref for non DMA transfers
    Date
    From: Marc Kleine-Budde <mkl@pengutronix.de>

    commit 4ceaa684459d414992acbefb4e4c31f2dfc50641 upstream.

    In case a IRQ based transfer times out the bcm2835_spi_handle_err()
    function is called. Since commit 1513ceee70f2 ("spi: bcm2835: Drop
    dma_pending flag") the TX and RX DMA transfers are unconditionally
    canceled, leading to NULL pointer derefs if ctlr->dma_tx or
    ctlr->dma_rx are not set.

    Fix the NULL pointer deref by checking that ctlr->dma_tx and
    ctlr->dma_rx are valid pointers before accessing them.

    Fixes: 1513ceee70f2 ("spi: bcm2835: Drop dma_pending flag")
    Cc: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Link: https://lore.kernel.org/r/20220719072234.2782764-1-mkl@pengutronix.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/spi/spi-bcm2835.c | 12 ++++++++----
    1 file changed, 8 insertions(+), 4 deletions(-)

    --- a/drivers/spi/spi-bcm2835.c
    +++ b/drivers/spi/spi-bcm2835.c
    @@ -1174,10 +1174,14 @@ static void bcm2835_spi_handle_err(struc
    struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);

    /* if an error occurred and we have an active dma, then terminate */
    - dmaengine_terminate_sync(ctlr->dma_tx);
    - bs->tx_dma_active = false;
    - dmaengine_terminate_sync(ctlr->dma_rx);
    - bs->rx_dma_active = false;
    + if (ctlr->dma_tx) {
    + dmaengine_terminate_sync(ctlr->dma_tx);
    + bs->tx_dma_active = false;
    + }
    + if (ctlr->dma_rx) {
    + dmaengine_terminate_sync(ctlr->dma_rx);
    + bs->rx_dma_active = false;
    + }
    bcm2835_spi_undo_prologue(bs);

    /* and reset */

    \
     
     \ /
      Last update: 2022-07-27 18:57    [W:4.675 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site