Skip to content

Commit

Permalink
Fix OOB write in build_read_multi_rsp of gatt_sr.cc
Browse files Browse the repository at this point in the history
build_read_multi_rsp is missing a bounds check, which can lead to an
OOB write when the mtu parameter is set to zero.

Add that bounds check.

Bug: 323850943
Test: atest GattSrTest
Test: researcher POC
Tag: #security
Flag: EXEMPT trivial validity checks
Ignore-AOSP-First: Security
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:cad927034a371b82a4a07a16ec442eb261f6153f)
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e5ab6c617683a00c4e2996f1bc15c4c6e7f70f48)
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:269a60348a373fa5bb20098c45125223726f13ff)
Merged-In: I18e4325dbc9d6814220332288c85b114d0415c2f
Change-Id: I18e4325dbc9d6814220332288c85b114d0415c2f
  • Loading branch information
Brian Delwiche authored and aoleary committed Dec 30, 2024
1 parent 95a3ab9 commit cba3f48
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
1 change: 1 addition & 0 deletions system/stack/eatt/eatt.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ class EattChannel {

void EattChannelSetTxMTU(uint16_t tx_mtu) {
this->tx_mtu_ = std::min<uint16_t>(tx_mtu, EATT_MAX_TX_MTU);
this->tx_mtu_ = std::max<uint16_t>(this->tx_mtu_, EATT_MIN_MTU_MPS);
}
};

Expand Down
7 changes: 7 additions & 0 deletions system/stack/gatt/gatt_sr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,13 @@ static void build_read_multi_rsp(tGATT_SR_CMD* p_cmd, uint16_t mtu) {
uint8_t* p;
bool is_overflow = false;

// We need at least one extra byte for the opcode
if (mtu == 0) {
LOG(ERROR) << "Invalid MTU";
p_cmd->status = GATT_ILLEGAL_PARAMETER;
return;
}

len = sizeof(BT_HDR) + L2CAP_MIN_OFFSET + mtu;
BT_HDR* p_buf = (BT_HDR*)osi_calloc(len);
p_buf->offset = L2CAP_MIN_OFFSET;
Expand Down

0 comments on commit cba3f48

Please sign in to comment.