mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-10-01 01:35:54 -04:00
964877bbf6
wgetb96ee4a2d1
.patch -O telephony-01.patch wgetc16e6e78c1
.patch -O media-01.patch wgetd5771450d7
.patch -O media-02.patch wgeta1370bd00c
.patch -O nn-01.patch wgetce2776f4ca
.patch -O bt-01.patch wget585f583ef5
.patch -O bt-02.patch wgetc9905e7968
.patch -O bt-03.patch wgetc93ec045f5
.patch -O bt-04.patch wget89fb17d172
.patch -O bt-05.patch wget14aed2455e
.patch -O bt-06.patch wgetcd438ebc52
.patch -O bt-07.patch wget27e7cdc4e5
.patch -O nfc-01.patch wgetdfeb4270b8
.patch -O launcher-01.patch wgetb1993f6cec
.patch -O native-01.patch wgetdf4a9362cd
.patch -O fwb-01.patch wgetb55563bb9d
.patch -O fwb-02.patch wgeta80971a281
.patch -O fwb-03.patch wget7e173b4383
.patch -O fwb-04.patch wget44191b1c6b
.patch -O fwb-05.patch wget8dc8dfe572
.patch -O fwb-06.patch wget00a4224100
.patch -O av-01.patch wget21623d1f43
.patch -O settings-01.patch wgetfa5ec443d9
.patch -O settings-02.patch wgetba4da9c7b3
.patch -O settings-03.patch Signed-off-by: Tad <tad@spotco.us>
45 lines
1.7 KiB
Diff
45 lines
1.7 KiB
Diff
From 14aed2455e4e800e4bde6175ad3c4910ffcf7b0e Mon Sep 17 00:00:00 2001
|
|
From: Brian Delwiche <delwiche@google.com>
|
|
Date: Tue, 11 Apr 2023 23:05:45 +0000
|
|
Subject: [PATCH] Fix UAF in gatt_cl.cc
|
|
|
|
gatt_cl.cc accesses a header field after the buffer holding it may have
|
|
been freed.
|
|
|
|
Track the relevant state as a local variable instead.
|
|
|
|
Bug: 274617156
|
|
Test: atest: bluetooth, validated against fuzzer
|
|
Tag: #security
|
|
Ignore-AOSP-First: Security
|
|
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:cbaa83627b328eee8f2e26188909a5ebfb0388d5)
|
|
Merged-In: I085ecfa1a9ba098ecbfecbd3cb3e263ae13f9724
|
|
Change-Id: I085ecfa1a9ba098ecbfecbd3cb3e263ae13f9724
|
|
---
|
|
system/stack/gatt/gatt_cl.cc | 7 ++++++-
|
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/system/stack/gatt/gatt_cl.cc b/system/stack/gatt/gatt_cl.cc
|
|
index d026633ccd..029e5cba45 100644
|
|
--- a/system/stack/gatt/gatt_cl.cc
|
|
+++ b/system/stack/gatt/gatt_cl.cc
|
|
@@ -609,12 +609,17 @@ void gatt_process_prep_write_rsp(tGATT_TCB& tcb, tGATT_CLCB* p_clcb,
|
|
|
|
memcpy(value.value, p, value.len);
|
|
|
|
+ bool subtype_is_write_prepare = (p_clcb->op_subtype == GATT_WRITE_PREPARE);
|
|
+
|
|
if (!gatt_check_write_long_terminate(tcb, p_clcb, &value)) {
|
|
gatt_send_prepare_write(tcb, p_clcb);
|
|
return;
|
|
}
|
|
|
|
- if (p_clcb->op_subtype == GATT_WRITE_PREPARE) {
|
|
+ // We now know that we have not terminated, or else we would have returned
|
|
+ // early. We free the buffer only if the subtype is not equal to
|
|
+ // GATT_WRITE_PREPARE, so checking here is adequate to prevent UAF.
|
|
+ if (subtype_is_write_prepare) {
|
|
/* application should verify handle offset
|
|
and value are matched or not */
|
|
gatt_end_operation(p_clcb, p_clcb->status, &value);
|