* [PATCH v3] Bluetooth: eir: Fix OOB read in eir_get_service_data()
@ 2026-08-15 6:24 HyeongJun An
2026-08-15 7:04 ` [v3] " bluez.test.bot
0 siblings, 1 reply; 2+ messages in thread
From: HyeongJun An @ 2026-08-15 6:24 UTC (permalink / raw)
To: Marcel Holtmann, Luiz Augusto von Dentz
Cc: linux-bluetooth, linux-kernel, stable, HyeongJun An
eir_get_service_data() walks the advertising data for a Service Data
field with a matching UUID. On a mismatch it advances:
eir += dlen;
eir_len -= dlen;
eir_get_data() reports dlen as the field's data length, but the field
spans dlen + 2 bytes once its length and type bytes count, and more
when non-Service-Data fields were skipped to reach it. The pointer
lands correctly on the next field. eir_len does not, and the shortfall
compounds across fields until eir_get_data() reads the length and type
bytes of a "field" past the end of the buffer.
For an ISO broadcast sink that buffer is hcon->le_per_adv_data[], filled
from the periodic advertising reports of a remote broadcaster. A PA
payload packed with mismatching Service Data fields walks off the array
into the rest of struct hci_conn. A drifted field that matches the BAA
UUID puts those bytes in iso_pi(sk)->base, where user space reads them
back with getsockopt(BT_ISO_BASE).
Recompute eir_len from the end of the buffer each iteration.
Fixes: 8f9ae5b3ae80 ("Bluetooth: eir: Add helpers for managing service data")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-5
Signed-off-by: HyeongJun An <sammiee5311@gmail.com>
---
Changes in v3:
- Commit message only, shortened. No code change from v2.
v2: https://lore.kernel.org/all/20260624143222.883120-1-sammiee5311@gmail.com/
v2 drew no comments. Its bot run was 20/22 PASS. The mgmt-tester and
mesh-tester failures are not from this patch -- eir_get_service_data()
has no callers in mesh or mgmt code, only in hci_sync.c and iso.c, and
iso-tester, which does cover the path, passed. The previous fix to this
function, 20a2aa01f5ae ("Bluetooth: Fix NULL pointer deference on
eir_get_service_data"), also failed mgmt-tester on its bot run and was
merged.
net/bluetooth/eir.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/bluetooth/eir.c b/net/bluetooth/eir.c
index 1de5f9df6eec..a55696820b22 100644
--- a/net/bluetooth/eir.c
+++ b/net/bluetooth/eir.c
@@ -369,6 +369,7 @@ u8 eir_create_scan_rsp(struct hci_dev *hdev, u8 instance, u8 *ptr)
void *eir_get_service_data(u8 *eir, size_t eir_len, u16 uuid, size_t *len)
{
+ const u8 *eir_end = eir + eir_len;
size_t dlen;
while ((eir = eir_get_data(eir, eir_len, EIR_SERVICE_DATA, &dlen))) {
@@ -381,7 +382,7 @@ void *eir_get_service_data(u8 *eir, size_t eir_len, u16 uuid, size_t *len)
}
eir += dlen;
- eir_len -= dlen;
+ eir_len = eir_end - eir;
}
return NULL;
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* RE: [v3] Bluetooth: eir: Fix OOB read in eir_get_service_data()
2026-08-15 6:24 [PATCH v3] Bluetooth: eir: Fix OOB read in eir_get_service_data() HyeongJun An
@ 2026-08-15 7:04 ` bluez.test.bot
0 siblings, 0 replies; 2+ messages in thread
From: bluez.test.bot @ 2026-08-15 7:04 UTC (permalink / raw)
To: linux-bluetooth, sammiee5311
[-- Attachment #1: Type: text/plain, Size: 2389 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=1146395
---Test result---
Test Summary:
CheckPatch PASS 0.61 seconds
VerifyFixes PASS 0.11 seconds
VerifySignedoff PASS 0.11 seconds
GitLint PASS 0.27 seconds
SubjectPrefix PASS 0.10 seconds
BuildKernel PASS 25.80 seconds
CheckAllWarning PASS 28.20 seconds
CheckSparse PASS 27.07 seconds
BuildKernel32 PASS 24.71 seconds
CheckKernelLLVM SKIP 0.00 seconds
TestRunnerSetup PASS 469.06 seconds
TestRunner_l2cap-tester PASS 69.64 seconds
TestRunner_iso-tester PASS 87.24 seconds
TestRunner_bnep-tester PASS 19.03 seconds
TestRunner_mgmt-tester FAIL 229.28 seconds
TestRunner_rfcomm-tester PASS 25.90 seconds
TestRunner_sco-tester PASS 32.23 seconds
TestRunner_ioctl-tester PASS 27.03 seconds
TestRunner_mesh-tester FAIL 25.92 seconds
TestRunner_smp-tester PASS 23.79 seconds
TestRunner_userchan-tester PASS 20.05 seconds
TestRunner_6lowpan-tester PASS 23.11 seconds
IncrementalBuild PASS 23.49 seconds
Details
##############################
Test: CheckKernelLLVM - SKIP
Desc: Build kernel with LLVM + context analysis
Output:
Clang not found
##############################
Test: TestRunner_mgmt-tester - FAIL
Desc: Run mgmt-tester with test-runner
Output:
Total: 501, Passed: 496 (99.0%), Failed: 1, Not Run: 4
Failed Test Cases
Read Exp Feature - Success Failed 0.268 seconds
##############################
Test: TestRunner_mesh-tester - FAIL
Desc: Run mesh-tester with test-runner
Output:
Total: 10, Passed: 8 (80.0%), Failed: 2, Not Run: 0
Failed Test Cases
Mesh - Send cancel - 1 Timed out 2.430 seconds
Mesh - Send cancel - 2 Timed out 1.985 seconds
https://github.com/bluez/bluetooth-next/pull/587
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-15 7:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-15 6:24 [PATCH v3] Bluetooth: eir: Fix OOB read in eir_get_service_data() HyeongJun An
2026-08-15 7:04 ` [v3] " bluez.test.bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox