spi: Always check complete callback before calling it
PATCH 1/1 spi: Always check complete callback before calling it
Since commit 1e25cd4729bd "spi: Do not require a completion", this checking is required to prevent NULL pointer dereference.
Signed-off-by Axel Lin <[email protected]>
--- drivers/spi/spi-fsl-espi.c | 3 ++- drivers/spi/spi-fsl-spi.c | 3 ++- drivers/spi/spi-mpc512x-psc.c | 3 ++- drivers/spi/spi-mpc52xx-psc.c | 3 ++- drivers/spi/spi-mpc52xx.c | 6 ++++-- drivers/spi/spi-sh.c | 6 ++++-- drivers/spi/spi-txx9.c | 3 ++- 7 files changed, 18 insertions(+), 9 deletions(-)
drivers/spi/spi-fsl-espi.c +2 -1
@@ -441,7 +441,8 @@ static void fsl_espi_do_one_msg(struct spi_message *m) m->actual_length = espi_trans.actual_length; m->status = espi_trans.status; - m->complete (m->context); +if (m->complete) + m->complete (m->context); }static int fsl_espi_setup (struct spi_device *spi)
drivers/spi/spi-fsl-spi.c +2 -1
@@ -408,7 +408,8 @@ static void fsl_spi_do_one_msg(struct spi_message *m) } m->status = status; - m->complete (m->context); +if (m->complete) + m->complete (m->context);if (status || !cs_change) {ndelay (nsecs);
drivers/spi/spi-mpc512x-psc.c +2 -1
@@ -300,7 +300,8 @@ static int mpc512x_psc_spi_msg_xfer(struct spi_master *master, } m->status = status; - m->complete (m->context); +if (m->complete) + m->complete (m->context);if (status || !cs_change)mpc512x_psc_spi_deactivate_cs (spi);
drivers/spi/spi-mpc52xx-psc.c +2 -1
@@ -247,7 +247,8 @@ static void mpc52xx_psc_spi_work(struct work_struct *work) } m->status = status; - m->complete (m->context); +if (m->complete) + m->complete (m->context);if (status || !cs_change)mpc52xx_psc_spi_deactivate_cs (spi);
drivers/spi/spi-mpc52xx.c +4 -2
@@ -234,7 +234,8 @@ static int mpc52xx_spi_fsmstate_transfer(int irq, struct mpc52xx_spi *ms,dev_err (&ms->master->dev,"mode fault\n" );mpc52xx_spi_chipsel (ms,0 ); ms->message->status = -EIO ; - ms->message->complete (ms->message->context); +if (ms->message->complete) + ms->message->complete (ms->message->context); ms->state = mpc52xx_spi_fsmstate_idle;return FSM_CONTINUE ; }
@@ -288,7 +289,8 @@ mpc52xx_spi_fsmstate_wait(int irq, struct mpc52xx_spi *ms, u8 status, u8 data) ms->msg_count++;mpc52xx_spi_chipsel (ms,0 ); ms->message->status =0 ; - ms->message->complete (ms->message->context); +if (ms->message->complete) + ms->message->complete (ms->message->context); ms->state = mpc52xx_spi_fsmstate_idle;return FSM_CONTINUE ; }
drivers/spi/spi-sh.c +4 -2
@@ -322,7 +322,8 @@ static void spi_sh_work(struct work_struct *work)spin_lock_irqsave (&ss->lock, flags); mesg->status =0 ; - mesg->complete (mesg->context); +if (mesg->complete) + mesg->complete (mesg->context); }clear_fifo (ss);
@@ -340,7 +341,8 @@ static void spi_sh_work(struct work_struct *work) error: mesg->status = ret; - mesg->complete (mesg->context); +if (mesg->complete) + mesg->complete (mesg->context);spi_sh_clear_bit (ss,SPI_SH_SSA |SPI_SH_SSDB |SPI_SH_SSD ,SPI_SH_CR1 );
drivers/spi/spi-txx9.c +2 -1
@@ -262,7 +262,8 @@ static void txx9spi_work_one(struct txx9spi *c, struct spi_message *m) exit: m->status = status; - m->complete (m->context); +if (m->complete) + m->complete (m->context);/* normally deactivate chipselect ... unless no error and * cs_change has hinted that the next message will probably
Signature · 8 lines
1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 10 lines · Axel Lin
Since commit
1e25cd4729bd"spi: Do not require a completion", this checking is required to prevent NULL pointer dereference.Signed-off-by Axel Lin <[email protected]>[ ... ]
drivers/spi/spi-mpc512x-psc.c static int mpc512x_psc_spi_msg_xfer(struct spi_master *master, · line 307
Quoted 9 lines
drivers/spi/spi-mpc512x-psc.c +2
-1@@ -300,7 +300,8 @@ static int mpc512x_psc_spi_msg_xfer(struct spi_master *master, } m->status = status; - m->complete (m->context); +if (m->complete) + m->complete (m->context);if (status || !cs_change)mpc512x_psc_spi_deactivate_cs (spi);
Haven't run-tested the change, but assuming that the .complete() member became optional, the change is straight forward for it. Looks good to me.
virtually yours
Gerhard Sittig
Signature · 7 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr. 5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: [email protected] -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Mark Brown
AppliedQuoted 2 lines · Axel Lin
Since commit
1e25cd4729bd"spi: Do not require a completion", this checking is required to prevent NULL pointer dereference.
Applied, thanks.