* [PATCH] Bluetooth: hci_aml: validate firmware segment lengths
@ 2026-07-30 12:20 Laxman Acharya Padhya
2026-07-30 13:27 ` bluez.test.bot
2026-07-31 18:50 ` [PATCH] " patchwork-bot+bluetooth
0 siblings, 2 replies; 3+ messages in thread
From: Laxman Acharya Padhya @ 2026-07-30 12:20 UTC (permalink / raw)
To: yang.li, marcel, luiz.dentz; +Cc: linux-bluetooth, linux-kernel, stable
aml_download_firmware() reads two lengths from the firmware header and
uses them to build pointers before checking that the header and segment
data are present. A truncated or inconsistent firmware image can make
the driver read past firmware->data while constructing TCI commands.
Reject images shorter than the header and ensure that the ICCM and DCCM
ranges fit within the loaded firmware before downloading either segment.
Fixes: 37bac77e4649 ("Bluetooth: hci_uart: Add support for Amlogic HCI UART")
Cc: stable@vger.kernel.org
Signed-off-by: Laxman Acharya Padhya <acharyalaxman8848@gmail.com>
---
drivers/bluetooth/hci_aml.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/drivers/bluetooth/hci_aml.c b/drivers/bluetooth/hci_aml.c
index 959d9e67b..067fbf278 100644
--- a/drivers/bluetooth/hci_aml.c
+++ b/drivers/bluetooth/hci_aml.c
@@ -247,7 +247,7 @@ static int aml_download_firmware(struct hci_dev *hdev, const char *fw_name)
struct hci_uart *hu = hci_get_drvdata(hdev);
struct aml_serdev *amldev = serdev_device_get_drvdata(hu->serdev);
const struct firmware *firmware = NULL;
- struct aml_fw_len *fw_len = NULL;
+ const struct aml_fw_len *fw_len = NULL;
u8 *iccm_start = NULL, *dccm_start = NULL;
u32 iccm_len, dccm_len;
u32 value = 0;
@@ -281,7 +281,21 @@ static int aml_download_firmware(struct hci_dev *hdev, const char *fw_name)
goto exit;
}
- fw_len = (struct aml_fw_len *)firmware->data;
+ if (firmware->size < sizeof(*fw_len)) {
+ bt_dev_err(hdev, "Firmware is too small for its header");
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ fw_len = (const struct aml_fw_len *)firmware->data;
+ if (fw_len->iccm_len < amldev->aml_dev_data->iccm_offset ||
+ fw_len->iccm_len > firmware->size - sizeof(*fw_len) ||
+ fw_len->dccm_len > firmware->size - sizeof(*fw_len) -
+ fw_len->iccm_len) {
+ bt_dev_err(hdev, "Invalid firmware segment lengths");
+ ret = -EINVAL;
+ goto exit;
+ }
/* Download ICCM */
iccm_start = (u8 *)(firmware->data) + sizeof(struct aml_fw_len)
--
2.51.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: Bluetooth: hci_aml: validate firmware segment lengths
2026-07-30 12:20 [PATCH] Bluetooth: hci_aml: validate firmware segment lengths Laxman Acharya Padhya
@ 2026-07-30 13:27 ` bluez.test.bot
2026-07-31 18:50 ` [PATCH] " patchwork-bot+bluetooth
1 sibling, 0 replies; 3+ messages in thread
From: bluez.test.bot @ 2026-07-30 13:27 UTC (permalink / raw)
To: linux-bluetooth, acharyalaxman8848
[-- Attachment #1: Type: text/plain, Size: 1181 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=1137388
---Test result---
Test Summary:
CheckPatch PASS 0.74 seconds
VerifyFixes PASS 0.13 seconds
VerifySignedoff PASS 0.13 seconds
GitLint PASS 0.38 seconds
SubjectPrefix PASS 0.12 seconds
BuildKernel PASS 25.21 seconds
CheckAllWarning PASS 28.29 seconds
CheckSparse PASS 26.82 seconds
BuildKernel32 PASS 24.67 seconds
CheckKernelLLVM SKIP 0.00 seconds
TestRunnerSetup PASS 458.17 seconds
IncrementalBuild PASS 24.40 seconds
Details
##############################
Test: CheckKernelLLVM - SKIP
Desc: Build kernel with LLVM + context analysis
Output:
Clang not found
https://github.com/bluez/bluetooth-next/pull/517
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Bluetooth: hci_aml: validate firmware segment lengths
2026-07-30 12:20 [PATCH] Bluetooth: hci_aml: validate firmware segment lengths Laxman Acharya Padhya
2026-07-30 13:27 ` bluez.test.bot
@ 2026-07-31 18:50 ` patchwork-bot+bluetooth
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+bluetooth @ 2026-07-31 18:50 UTC (permalink / raw)
To: Laxman Acharya Padhya
Cc: yang.li, marcel, luiz.dentz, linux-bluetooth, linux-kernel,
stable
Hello:
This patch was applied to bluetooth/bluetooth-next.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:
On Thu, 30 Jul 2026 18:05:28 +0545 you wrote:
> aml_download_firmware() reads two lengths from the firmware header and
> uses them to build pointers before checking that the header and segment
> data are present. A truncated or inconsistent firmware image can make
> the driver read past firmware->data while constructing TCI commands.
>
> Reject images shorter than the header and ensure that the ICCM and DCCM
> ranges fit within the loaded firmware before downloading either segment.
>
> [...]
Here is the summary with links:
- Bluetooth: hci_aml: validate firmware segment lengths
https://git.kernel.org/bluetooth/bluetooth-next/c/e08aeef6ec5b
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-31 18:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-30 12:20 [PATCH] Bluetooth: hci_aml: validate firmware segment lengths Laxman Acharya Padhya
2026-07-30 13:27 ` bluez.test.bot
2026-07-31 18:50 ` [PATCH] " patchwork-bot+bluetooth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).