* [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid()
@ 2025-08-06 17:25 Mukesh Ojha
2025-08-06 17:25 ` [PATCH v2 2/4] soc: qcom: mdt_loader: Remove unused parameter Mukesh Ojha
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Mukesh Ojha @ 2025-08-06 17:25 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab,
Jeff Johnson, Bjorn Andersson, Mathieu Poirier, Konrad Dybcio,
Dmitry Baryshkov
Cc: Bryan O'Donoghue, Bjorn Andersson, linux-media,
linux-arm-msm, linux-kernel, linux-wireless, ath12k,
linux-remoteproc, Mukesh Ojha
Firmware binaries may lack section headers, in which case
the e_shentsize field in the ELF header can be zero.
Update mdt_header_valid() to correctly handle this scenario
by adjusting the validation logic accordingly.
Fixes: 9f9967fed9d0 ("soc: qcom: mdt_loader: Ensure we don't read past the ELF header")
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
---
Changes in v2:
- Make this patch as first patch of the series.
- Added R-b tag
drivers/soc/qcom/mdt_loader.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c
index 0ca268bdf1f8..2a14ba9b0fb6 100644
--- a/drivers/soc/qcom/mdt_loader.c
+++ b/drivers/soc/qcom/mdt_loader.c
@@ -39,7 +39,7 @@ static bool mdt_header_valid(const struct firmware *fw)
if (phend > fw->size)
return false;
- if (ehdr->e_shentsize != sizeof(struct elf32_shdr))
+ if (ehdr->e_shentsize && ehdr->e_shentsize != sizeof(struct elf32_shdr))
return false;
shend = size_add(size_mul(sizeof(struct elf32_shdr), ehdr->e_shnum), ehdr->e_shoff);
--
2.50.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v2 2/4] soc: qcom: mdt_loader: Remove unused parameter 2025-08-06 17:25 [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Mukesh Ojha @ 2025-08-06 17:25 ` Mukesh Ojha 2025-08-06 17:25 ` [PATCH v2 3/4] soc: qcom: mdt_loader: Remove pas id parameter Mukesh Ojha ` (2 subsequent siblings) 3 siblings, 0 replies; 9+ messages in thread From: Mukesh Ojha @ 2025-08-06 17:25 UTC (permalink / raw) To: Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab, Jeff Johnson, Bjorn Andersson, Mathieu Poirier, Konrad Dybcio, Dmitry Baryshkov Cc: Bryan O'Donoghue, Bjorn Andersson, linux-media, linux-arm-msm, linux-kernel, linux-wireless, ath12k, linux-remoteproc, Mukesh Ojha, Konrad Dybcio commit f4e526ff7e38e ("soc: qcom: mdt_loader: Extract PAS operations") move pas specific code from __qcom_mdt_load() to a separate function qcom_mdt_pas_init() after which the pas_init variable became unused in __qcom_mdt_load(). Remove pas_init argument from __qcom_mdt_load(). Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com> --- Changes in v2: - Added R-b tag and its order in the series. drivers/soc/qcom/mdt_loader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c index 2a14ba9b0fb6..63af3e97c93b 100644 --- a/drivers/soc/qcom/mdt_loader.c +++ b/drivers/soc/qcom/mdt_loader.c @@ -333,7 +333,7 @@ static bool qcom_mdt_bins_are_split(const struct firmware *fw, const char *fw_na static int __qcom_mdt_load(struct device *dev, const struct firmware *fw, const char *fw_name, int pas_id, void *mem_region, phys_addr_t mem_phys, size_t mem_size, - phys_addr_t *reloc_base, bool pas_init) + phys_addr_t *reloc_base) { const struct elf32_phdr *phdrs; const struct elf32_phdr *phdr; @@ -459,7 +459,7 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw, return ret; return __qcom_mdt_load(dev, fw, firmware, pas_id, mem_region, mem_phys, - mem_size, reloc_base, true); + mem_size, reloc_base); } EXPORT_SYMBOL_GPL(qcom_mdt_load); @@ -482,7 +482,7 @@ int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw, size_t mem_size, phys_addr_t *reloc_base) { return __qcom_mdt_load(dev, fw, firmware, pas_id, mem_region, mem_phys, - mem_size, reloc_base, false); + mem_size, reloc_base); } EXPORT_SYMBOL_GPL(qcom_mdt_load_no_init); -- 2.50.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 3/4] soc: qcom: mdt_loader: Remove pas id parameter 2025-08-06 17:25 [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Mukesh Ojha 2025-08-06 17:25 ` [PATCH v2 2/4] soc: qcom: mdt_loader: Remove unused parameter Mukesh Ojha @ 2025-08-06 17:25 ` Mukesh Ojha 2025-08-06 19:07 ` Jeff Johnson 2025-08-06 17:25 ` [PATCH v2 4/4] soc: qcom: mdt_loader: Remove unused parameter Mukesh Ojha 2025-08-06 22:01 ` [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Bjorn Andersson 3 siblings, 1 reply; 9+ messages in thread From: Mukesh Ojha @ 2025-08-06 17:25 UTC (permalink / raw) To: Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab, Jeff Johnson, Bjorn Andersson, Mathieu Poirier, Konrad Dybcio, Dmitry Baryshkov Cc: Bryan O'Donoghue, Bjorn Andersson, linux-media, linux-arm-msm, linux-kernel, linux-wireless, ath12k, linux-remoteproc, Mukesh Ojha pas id is not used in qcom_mdt_load_no_init() and it should not be used as it is non-PAS specific function and has no relation to PAS specific mechanism. Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com> Acked-by: Jeff Johnson <jjohnson@kernel.org> # drivers/net/wireless/ath/ath12k/ahb.c Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com> --- Changes in v2: - Added Acked-b and R-b tag and its order in the series. drivers/media/platform/qcom/venus/firmware.c | 4 ++-- drivers/net/wireless/ath/ath12k/ahb.c | 2 +- drivers/remoteproc/qcom_q6v5_adsp.c | 2 +- drivers/remoteproc/qcom_q6v5_pas.c | 7 +++---- drivers/remoteproc/qcom_q6v5_wcss.c | 2 +- drivers/soc/qcom/mdt_loader.c | 12 +++++------- include/linux/soc/qcom/mdt_loader.h | 7 +++---- 7 files changed, 16 insertions(+), 20 deletions(-) diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c index 66a18830e66d..862d0718f694 100644 --- a/drivers/media/platform/qcom/venus/firmware.c +++ b/drivers/media/platform/qcom/venus/firmware.c @@ -136,8 +136,8 @@ static int venus_load_fw(struct venus_core *core, const char *fwname, ret = qcom_mdt_load(dev, mdt, fwname, VENUS_PAS_ID, mem_va, *mem_phys, *mem_size, NULL); else - ret = qcom_mdt_load_no_init(dev, mdt, fwname, VENUS_PAS_ID, - mem_va, *mem_phys, *mem_size, NULL); + ret = qcom_mdt_load_no_init(dev, mdt, fwname, mem_va, + *mem_phys, *mem_size, NULL); memunmap(mem_va); err_release_fw: diff --git a/drivers/net/wireless/ath/ath12k/ahb.c b/drivers/net/wireless/ath/ath12k/ahb.c index 3b983f4e3268..b30527c402f6 100644 --- a/drivers/net/wireless/ath/ath12k/ahb.c +++ b/drivers/net/wireless/ath/ath12k/ahb.c @@ -414,7 +414,7 @@ static int ath12k_ahb_power_up(struct ath12k_base *ab) goto err_fw2; } - ret = qcom_mdt_load_no_init(dev, fw2, fw2_name, pasid, mem_region, mem_phys, + ret = qcom_mdt_load_no_init(dev, fw2, fw2_name, mem_region, mem_phys, mem_size, &mem_phys); if (ret) { ath12k_err(ab, "Failed to load MDT segments: %d\n", ret); diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c b/drivers/remoteproc/qcom_q6v5_adsp.c index 94af77baa7a1..e98b7e03162c 100644 --- a/drivers/remoteproc/qcom_q6v5_adsp.c +++ b/drivers/remoteproc/qcom_q6v5_adsp.c @@ -317,7 +317,7 @@ static int adsp_load(struct rproc *rproc, const struct firmware *fw) struct qcom_adsp *adsp = rproc->priv; int ret; - ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0, + ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, adsp->mem_region, adsp->mem_phys, adsp->mem_size, &adsp->mem_reloc); if (ret) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index 02e29171cbbe..55a7da801183 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -242,9 +242,8 @@ static int qcom_pas_load(struct rproc *rproc, const struct firmware *fw) goto release_dtb_firmware; ret = qcom_mdt_load_no_init(pas->dev, pas->dtb_firmware, pas->dtb_firmware_name, - pas->dtb_pas_id, pas->dtb_mem_region, - pas->dtb_mem_phys, pas->dtb_mem_size, - &pas->dtb_mem_reloc); + pas->dtb_mem_region, pas->dtb_mem_phys, + pas->dtb_mem_size, &pas->dtb_mem_reloc); if (ret) goto release_dtb_metadata; } @@ -307,7 +306,7 @@ static int qcom_pas_start(struct rproc *rproc) if (ret) goto disable_px_supply; - ret = qcom_mdt_load_no_init(pas->dev, pas->firmware, rproc->firmware, pas->pas_id, + ret = qcom_mdt_load_no_init(pas->dev, pas->firmware, rproc->firmware, pas->mem_region, pas->mem_phys, pas->mem_size, &pas->mem_reloc); if (ret) diff --git a/drivers/remoteproc/qcom_q6v5_wcss.c b/drivers/remoteproc/qcom_q6v5_wcss.c index 93648734a2f2..07c88623f597 100644 --- a/drivers/remoteproc/qcom_q6v5_wcss.c +++ b/drivers/remoteproc/qcom_q6v5_wcss.c @@ -757,7 +757,7 @@ static int q6v5_wcss_load(struct rproc *rproc, const struct firmware *fw) int ret; ret = qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, - 0, wcss->mem_region, wcss->mem_phys, + wcss->mem_region, wcss->mem_phys, wcss->mem_size, &wcss->mem_reloc); if (ret) return ret; diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c index 63af3e97c93b..145bd1374f07 100644 --- a/drivers/soc/qcom/mdt_loader.c +++ b/drivers/soc/qcom/mdt_loader.c @@ -331,7 +331,7 @@ static bool qcom_mdt_bins_are_split(const struct firmware *fw, const char *fw_na } static int __qcom_mdt_load(struct device *dev, const struct firmware *fw, - const char *fw_name, int pas_id, void *mem_region, + const char *fw_name, void *mem_region, phys_addr_t mem_phys, size_t mem_size, phys_addr_t *reloc_base) { @@ -353,7 +353,7 @@ static int __qcom_mdt_load(struct device *dev, const struct firmware *fw, if (!mdt_header_valid(fw)) return -EINVAL; - is_split = qcom_mdt_bins_are_split(fw, fw_name); + is_split = qcom_mdt_bins_are_split(fw); ehdr = (struct elf32_hdr *)fw->data; phdrs = (struct elf32_phdr *)(fw->data + ehdr->e_phoff); @@ -458,7 +458,7 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw, if (ret) return ret; - return __qcom_mdt_load(dev, fw, firmware, pas_id, mem_region, mem_phys, + return __qcom_mdt_load(dev, fw, firmware, mem_region, mem_phys, mem_size, reloc_base); } EXPORT_SYMBOL_GPL(qcom_mdt_load); @@ -468,7 +468,6 @@ EXPORT_SYMBOL_GPL(qcom_mdt_load); * @dev: device handle to associate resources with * @fw: firmware object for the mdt file * @firmware: name of the firmware, for construction of segment file names - * @pas_id: PAS identifier * @mem_region: allocated memory region to load firmware into * @mem_phys: physical address of allocated memory region * @mem_size: size of the allocated memory region @@ -477,11 +476,10 @@ EXPORT_SYMBOL_GPL(qcom_mdt_load); * Returns 0 on success, negative errno otherwise. */ int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw, - const char *firmware, int pas_id, - void *mem_region, phys_addr_t mem_phys, + const char *firmware, void *mem_region, phys_addr_t mem_phys, size_t mem_size, phys_addr_t *reloc_base) { - return __qcom_mdt_load(dev, fw, firmware, pas_id, mem_region, mem_phys, + return __qcom_mdt_load(dev, fw, firmware, mem_region, mem_phys, mem_size, reloc_base); } EXPORT_SYMBOL_GPL(qcom_mdt_load_no_init); diff --git a/include/linux/soc/qcom/mdt_loader.h b/include/linux/soc/qcom/mdt_loader.h index 9e8e60421192..8ea8230579a2 100644 --- a/include/linux/soc/qcom/mdt_loader.h +++ b/include/linux/soc/qcom/mdt_loader.h @@ -24,7 +24,7 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw, phys_addr_t *reloc_base); int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw, - const char *fw_name, int pas_id, void *mem_region, + const char *fw_name, void *mem_region, phys_addr_t mem_phys, size_t mem_size, phys_addr_t *reloc_base); void *qcom_mdt_read_metadata(const struct firmware *fw, size_t *data_len, @@ -54,9 +54,8 @@ static inline int qcom_mdt_load(struct device *dev, const struct firmware *fw, static inline int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw, - const char *fw_name, int pas_id, - void *mem_region, phys_addr_t mem_phys, - size_t mem_size, + const char *fw_name, void *mem_region, + phys_addr_t mem_phys, size_t mem_size, phys_addr_t *reloc_base) { return -ENODEV; -- 2.50.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 3/4] soc: qcom: mdt_loader: Remove pas id parameter 2025-08-06 17:25 ` [PATCH v2 3/4] soc: qcom: mdt_loader: Remove pas id parameter Mukesh Ojha @ 2025-08-06 19:07 ` Jeff Johnson 2025-08-07 5:36 ` Mukesh Ojha 0 siblings, 1 reply; 9+ messages in thread From: Jeff Johnson @ 2025-08-06 19:07 UTC (permalink / raw) To: Mukesh Ojha, Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab, Jeff Johnson, Bjorn Andersson, Mathieu Poirier, Konrad Dybcio, Dmitry Baryshkov Cc: Bryan O'Donoghue, Bjorn Andersson, linux-media, linux-arm-msm, linux-kernel, linux-wireless, ath12k, linux-remoteproc On 8/6/2025 10:25 AM, Mukesh Ojha wrote: > pas id is not used in qcom_mdt_load_no_init() and it should not > be used as it is non-PAS specific function and has no relation > to PAS specific mechanism. ...> @@ -353,7 +353,7 @@ static int __qcom_mdt_load(struct device *dev, const struct firmware *fw, > if (!mdt_header_valid(fw)) > return -EINVAL; > > - is_split = qcom_mdt_bins_are_split(fw, fw_name); > + is_split = qcom_mdt_bins_are_split(fw); this should be in the 4/4 patch ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 3/4] soc: qcom: mdt_loader: Remove pas id parameter 2025-08-06 19:07 ` Jeff Johnson @ 2025-08-07 5:36 ` Mukesh Ojha 2025-08-07 16:50 ` Bjorn Andersson 0 siblings, 1 reply; 9+ messages in thread From: Mukesh Ojha @ 2025-08-07 5:36 UTC (permalink / raw) To: Jeff Johnson Cc: Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab, Jeff Johnson, Bjorn Andersson, Mathieu Poirier, Konrad Dybcio, Dmitry Baryshkov, Bryan O'Donoghue, Bjorn Andersson, linux-media, linux-arm-msm, linux-kernel, linux-wireless, ath12k, linux-remoteproc On Wed, Aug 06, 2025 at 12:07:05PM -0700, Jeff Johnson wrote: > On 8/6/2025 10:25 AM, Mukesh Ojha wrote: > > pas id is not used in qcom_mdt_load_no_init() and it should not > > be used as it is non-PAS specific function and has no relation > > to PAS specific mechanism. > ...> @@ -353,7 +353,7 @@ static int __qcom_mdt_load(struct device *dev, const > struct firmware *fw, > > if (!mdt_header_valid(fw)) > > return -EINVAL; > > > > - is_split = qcom_mdt_bins_are_split(fw, fw_name); > > + is_split = qcom_mdt_bins_are_split(fw); > > this should be in the 4/4 patch > Rush to send patches!! -- -Mukesh ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 3/4] soc: qcom: mdt_loader: Remove pas id parameter 2025-08-07 5:36 ` Mukesh Ojha @ 2025-08-07 16:50 ` Bjorn Andersson 0 siblings, 0 replies; 9+ messages in thread From: Bjorn Andersson @ 2025-08-07 16:50 UTC (permalink / raw) To: Jeff Johnson, Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab, Jeff Johnson, Mathieu Poirier, Konrad Dybcio, Dmitry Baryshkov, Bryan O'Donoghue, Bjorn Andersson, linux-media, linux-arm-msm, linux-kernel, linux-wireless, ath12k, linux-remoteproc On Thu, Aug 07, 2025 at 11:06:10AM +0530, Mukesh Ojha wrote: > On Wed, Aug 06, 2025 at 12:07:05PM -0700, Jeff Johnson wrote: > > On 8/6/2025 10:25 AM, Mukesh Ojha wrote: > > > pas id is not used in qcom_mdt_load_no_init() and it should not > > > be used as it is non-PAS specific function and has no relation > > > to PAS specific mechanism. > > ...> @@ -353,7 +353,7 @@ static int __qcom_mdt_load(struct device *dev, const > > struct firmware *fw, > > > if (!mdt_header_valid(fw)) > > > return -EINVAL; > > > > > > - is_split = qcom_mdt_bins_are_split(fw, fw_name); > > > + is_split = qcom_mdt_bins_are_split(fw); > > > > this should be in the 4/4 patch > > > > Rush to send patches!! > Please don't! Also remember that this isn't a regression fix and we're in the merge window, so we're not going to pick these changes this week anyways. Regards, Bjorn > -- > -Mukesh ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 4/4] soc: qcom: mdt_loader: Remove unused parameter 2025-08-06 17:25 [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Mukesh Ojha 2025-08-06 17:25 ` [PATCH v2 2/4] soc: qcom: mdt_loader: Remove unused parameter Mukesh Ojha 2025-08-06 17:25 ` [PATCH v2 3/4] soc: qcom: mdt_loader: Remove pas id parameter Mukesh Ojha @ 2025-08-06 17:25 ` Mukesh Ojha 2025-08-06 22:01 ` [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Bjorn Andersson 3 siblings, 0 replies; 9+ messages in thread From: Mukesh Ojha @ 2025-08-06 17:25 UTC (permalink / raw) To: Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab, Jeff Johnson, Bjorn Andersson, Mathieu Poirier, Konrad Dybcio, Dmitry Baryshkov Cc: Bryan O'Donoghue, Bjorn Andersson, linux-media, linux-arm-msm, linux-kernel, linux-wireless, ath12k, linux-remoteproc, Mukesh Ojha fw_name in qcom_mdt_bins_are_split() seems unused now, it may have used in the past for logging it but due to code refactor this parameter is unused now. Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com> --- Changes in v2: - made this as separate patch. drivers/soc/qcom/mdt_loader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c index 145bd1374f07..8210fb3dd51a 100644 --- a/drivers/soc/qcom/mdt_loader.c +++ b/drivers/soc/qcom/mdt_loader.c @@ -302,7 +302,7 @@ int qcom_mdt_pas_init(struct device *dev, const struct firmware *fw, } EXPORT_SYMBOL_GPL(qcom_mdt_pas_init); -static bool qcom_mdt_bins_are_split(const struct firmware *fw, const char *fw_name) +static bool qcom_mdt_bins_are_split(const struct firmware *fw) { const struct elf32_phdr *phdrs; const struct elf32_hdr *ehdr; -- 2.50.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() 2025-08-06 17:25 [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Mukesh Ojha ` (2 preceding siblings ...) 2025-08-06 17:25 ` [PATCH v2 4/4] soc: qcom: mdt_loader: Remove unused parameter Mukesh Ojha @ 2025-08-06 22:01 ` Bjorn Andersson 2025-08-07 5:09 ` Mukesh Ojha 3 siblings, 1 reply; 9+ messages in thread From: Bjorn Andersson @ 2025-08-06 22:01 UTC (permalink / raw) To: Mukesh Ojha Cc: Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab, Jeff Johnson, Mathieu Poirier, Konrad Dybcio, Dmitry Baryshkov, Bryan O'Donoghue, Bjorn Andersson, linux-media, linux-arm-msm, linux-kernel, linux-wireless, ath12k, linux-remoteproc On Wed, Aug 06, 2025 at 10:55:28PM +0530, Mukesh Ojha wrote: > Firmware binaries may lack section headers, in which case > the e_shentsize field in the ELF header can be zero. > > Update mdt_header_valid() to correctly handle this scenario > by adjusting the validation logic accordingly. > As I replied earlier today on v1 (probably after you sent this), I've applied the patch I sent out earlier for this problem. Thanks, Bjorn > Fixes: 9f9967fed9d0 ("soc: qcom: mdt_loader: Ensure we don't read past the ELF header") > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> > Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com> > --- > Changes in v2: > - Make this patch as first patch of the series. > - Added R-b tag > > drivers/soc/qcom/mdt_loader.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c > index 0ca268bdf1f8..2a14ba9b0fb6 100644 > --- a/drivers/soc/qcom/mdt_loader.c > +++ b/drivers/soc/qcom/mdt_loader.c > @@ -39,7 +39,7 @@ static bool mdt_header_valid(const struct firmware *fw) > if (phend > fw->size) > return false; > > - if (ehdr->e_shentsize != sizeof(struct elf32_shdr)) > + if (ehdr->e_shentsize && ehdr->e_shentsize != sizeof(struct elf32_shdr)) > return false; > > shend = size_add(size_mul(sizeof(struct elf32_shdr), ehdr->e_shnum), ehdr->e_shoff); > -- > 2.50.1 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() 2025-08-06 22:01 ` [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Bjorn Andersson @ 2025-08-07 5:09 ` Mukesh Ojha 0 siblings, 0 replies; 9+ messages in thread From: Mukesh Ojha @ 2025-08-07 5:09 UTC (permalink / raw) To: Bjorn Andersson Cc: Vikash Garodia, Dikshita Agarwal, Mauro Carvalho Chehab, Jeff Johnson, Mathieu Poirier, Konrad Dybcio, Dmitry Baryshkov, Bryan O'Donoghue, Bjorn Andersson, linux-media, linux-arm-msm, linux-kernel, linux-wireless, ath12k, linux-remoteproc On Wed, Aug 06, 2025 at 03:01:45PM -0700, Bjorn Andersson wrote: > On Wed, Aug 06, 2025 at 10:55:28PM +0530, Mukesh Ojha wrote: > > Firmware binaries may lack section headers, in which case > > the e_shentsize field in the ELF header can be zero. > > > > Update mdt_header_valid() to correctly handle this scenario > > by adjusting the validation logic accordingly. > > > > As I replied earlier today on v1 (probably after you sent this), I've > applied the patch I sent out earlier for this problem. Sure, thank you. -Mukesh ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-08-07 16:50 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-08-06 17:25 [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Mukesh Ojha 2025-08-06 17:25 ` [PATCH v2 2/4] soc: qcom: mdt_loader: Remove unused parameter Mukesh Ojha 2025-08-06 17:25 ` [PATCH v2 3/4] soc: qcom: mdt_loader: Remove pas id parameter Mukesh Ojha 2025-08-06 19:07 ` Jeff Johnson 2025-08-07 5:36 ` Mukesh Ojha 2025-08-07 16:50 ` Bjorn Andersson 2025-08-06 17:25 ` [PATCH v2 4/4] soc: qcom: mdt_loader: Remove unused parameter Mukesh Ojha 2025-08-06 22:01 ` [PATCH v2 1/4] soc: qcom: mdt_loader: Fix check mdt_header_valid() Bjorn Andersson 2025-08-07 5:09 ` Mukesh Ojha
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®