mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-28 12:53:14 +01:00
Bluetooth: btintel: validate DDC record lengths
Parse DDC record lengths in unsigned storage so 0xFF does not wrap.
Reject records smaller than the mandatory three-byte header, records
exceeding U8_MAX, and records exceeding remaining firmware bytes before
issuing Intel_Write_DDC.
This issue was reported by Claude Mythos.
Fixes: 145f2368c5 ("Bluetooth: btintel: Add Device Configuration support")
Signed-off-by: Sai Teja Aluvala <[email protected]>
Signed-off-by: Luiz Augusto von Dentz <[email protected]>
This commit is contained in:
1 parent
d1ac915fb4
commit
c9c15d4d89
1 file changed
+10
-2
@@ -409,8 +409,16 @@ int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name)
|
||||
/* DDC file contains one or more DDC structure which has
|
||||
* Length (1 byte), DDC ID (2 bytes), and DDC value (Length - 2).
|
||||
*/
|
||||
while (fw->size > fw_ptr - fw->data) {
|
||||
u8 cmd_plen = fw_ptr[0] + sizeof(u8);
|
||||
while (fw->size > (size_t)(fw_ptr - fw->data)) {
|
||||
size_t remaining = fw->size - (fw_ptr - fw->data);
|
||||
unsigned int cmd_plen = fw_ptr[0] + 1U;
|
||||
|
||||
if (cmd_plen < 3 || cmd_plen > U8_MAX || cmd_plen > remaining) {
|
||||
bt_dev_err(hdev, "Malformed DDC record (plen=%u, remaining=%zu)",
|
||||
cmd_plen, remaining);
|
||||
release_firmware(fw);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
skb = __hci_cmd_sync(hdev, 0xfc8b, cmd_plen, fw_ptr,
|
||||
HCI_INIT_TIMEOUT);
|
||||
|
||||
Reference in new issue
Block a user