| From 784fb931a0f4f5fca880f2cfcca103797963e3b9 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 1 Dec 2021 01:22:53 +0800 |
| Subject: spi: spi-zynq-qspi: Fix a NULL pointer dereference in |
| zynq_qspi_exec_mem_op() |
| |
| From: Zhou Qingyang <zhou1615@umn.edu> |
| |
| [ Upstream commit ab3824427b848da10e9fe2727f035bbeecae6ff4 ] |
| |
| In zynq_qspi_exec_mem_op(), kzalloc() is directly used in memset(), |
| which could lead to a NULL pointer dereference on failure of |
| kzalloc(). |
| |
| Fix this bug by adding a check of tmpbuf. |
| |
| This bug was found by a static analyzer. The analysis employs |
| differential checking to identify inconsistent security operations |
| (e.g., checks or kfrees) between two code paths and confirms that the |
| inconsistent operations are not recovered in the current function or |
| the callers, so they constitute bugs. |
| |
| Note that, as a bug found by static analysis, it can be a false |
| positive or hard to trigger. Multiple researchers have cross-reviewed |
| the bug. |
| |
| Builds with CONFIG_SPI_ZYNQ_QSPI=m show no new warnings, |
| and our static analyzer no longer warns about this code. |
| |
| Fixes: 67dca5e580f1 ("spi: spi-mem: Add support for Zynq QSPI controller") |
| Signed-off-by: Zhou Qingyang <zhou1615@umn.edu> |
| Link: https://lore.kernel.org/r/20211130172253.203700-1-zhou1615@umn.edu |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/spi/spi-zynq-qspi.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/spi/spi-zynq-qspi.c b/drivers/spi/spi-zynq-qspi.c |
| index 1ced6eb8b3303..b3588240eb39b 100644 |
| --- a/drivers/spi/spi-zynq-qspi.c |
| +++ b/drivers/spi/spi-zynq-qspi.c |
| @@ -558,6 +558,9 @@ static int zynq_qspi_exec_mem_op(struct spi_mem *mem, |
| |
| if (op->dummy.nbytes) { |
| tmpbuf = kzalloc(op->dummy.nbytes, GFP_KERNEL); |
| + if (!tmpbuf) |
| + return -ENOMEM; |
| + |
| memset(tmpbuf, 0xff, op->dummy.nbytes); |
| reinit_completion(&xqspi->data_completion); |
| xqspi->txbuf = tmpbuf; |
| -- |
| 2.34.1 |
| |