summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Collingbourne2026-05-03 04:51:12 +0000
committerHauke Mehrtens2026-06-25 19:40:01 +0000
commitd34a54f4db2af3224576ed1c2c72989426efcdf5 (patch)
tree9908258d261f43c04246d2eff353f77ba3f80b24
parent38ea322d7cf6eac9542415972aa962601fbd6333 (diff)
downloadopenwrt-d34a54f4db2af3224576ed1c2c72989426efcdf5.tar.gz
kernel/mediatek: fix null dereference in dynamic calibration patch
KASAN reported a null dereference in this patch. Fix it. Signed-off-by: Peter Collingbourne <peter@pcc.me.uk> Link: https://github.com/openwrt/openwrt/pull/23237 Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com> (cherry picked from commit 317317d960e3edb5891ee4d25c3d654074cb568d) Link: https://github.com/openwrt/openwrt/pull/23205 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
-rw-r--r--target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch17
1 files changed, 10 insertions, 7 deletions
diff --git a/target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch b/target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch
index 218a0a89d7..25d6eb4a28 100644
--- a/target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch
+++ b/target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch
@@ -5,21 +5,21 @@ Subject: [PATCH 2/6] drivers: spi: Add support for dynamic calibration
Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
---
- drivers/spi/spi.c | 137 ++++++++++++++++++++++++++++++++++++++++
+ drivers/spi/spi.c | 140 ++++++++++++++++++++++++++++++++++++++++
include/linux/spi/spi.h | 42 ++++++++++++
- 2 files changed, 179 insertions(+)
+ 2 files changed, 182 insertions(+)
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
-@@ -1491,6 +1491,70 @@ static int spi_transfer_wait(struct spi_
+@@ -1491,6 +1491,73 @@ static int spi_transfer_wait(struct spi_
return 0;
}
+int spi_do_calibration(struct spi_controller *ctlr, struct spi_device *spi,
+ int (*cal_read)(void *priv, u32 *addr, int addrlen, u8 *buf, int readlen), void *drv_priv)
+{
-+ int datalen = ctlr->cal_rule->datalen;
-+ int addrlen = ctlr->cal_rule->addrlen;
++ int datalen;
++ int addrlen;
+ u8 *buf;
+ int ret;
+ int i;
@@ -34,6 +34,9 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
+ if(!ctlr->cal_target || !ctlr->cal_rule || !ctlr->append_caldata)
+ return 0;
+
++ datalen = ctlr->cal_rule->datalen;
++ addrlen = ctlr->cal_rule->addrlen;
++
+ buf = kzalloc(datalen * sizeof(u8), GFP_KERNEL);
+ if(!buf)
+ return -ENOMEM;
@@ -82,7 +85,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
static void _spi_transfer_delay_ns(u32 ns)
{
if (!ns)
-@@ -2349,6 +2413,75 @@ void spi_flush_queue(struct spi_controll
+@@ -2349,6 +2416,75 @@ void spi_flush_queue(struct spi_controll
/*-------------------------------------------------------------------------*/
#if defined(CONFIG_OF)
@@ -158,7 +161,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
static void of_spi_parse_dt_cs_delay(struct device_node *nc,
struct spi_delay *delay, const char *prop)
{
-@@ -2513,6 +2646,10 @@ of_register_spi_device(struct spi_contro
+@@ -2513,6 +2649,10 @@ of_register_spi_device(struct spi_contro
if (rc)
goto err_out;