mirror of https://github.com/ARMmbed/mbed-os.git
Cordio BLE: fix OOB read in event processing (#387)
parent
8576b0406c
commit
784417f65c
|
@ -1331,6 +1331,11 @@ static void hciEvtProcessLeExtAdvReport(uint8_t *p, uint8_t len)
|
||||||
while (i-- > 0)
|
while (i-- > 0)
|
||||||
{
|
{
|
||||||
ptr += HCI_EXT_ADV_RPT_DATA_LEN_OFFSET;
|
ptr += HCI_EXT_ADV_RPT_DATA_LEN_OFFSET;
|
||||||
|
// discard event if it doesn't contain enough data
|
||||||
|
if (ptr >= p + len)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
BSTREAM_TO_UINT8(dataLen, ptr);
|
BSTREAM_TO_UINT8(dataLen, ptr);
|
||||||
ptr += dataLen;
|
ptr += dataLen;
|
||||||
|
|
||||||
|
@ -1342,6 +1347,12 @@ static void hciEvtProcessLeExtAdvReport(uint8_t *p, uint8_t len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// finally check that the last report is fully contained within the event
|
||||||
|
if (ptr > p + len)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* allocate temp buffer that can hold max length ext adv/scan rsp data */
|
/* allocate temp buffer that can hold max length ext adv/scan rsp data */
|
||||||
if ((pMsg = WsfBufAlloc(sizeof(hciLeExtAdvReportEvt_t) + maxLen)) != NULL)
|
if ((pMsg = WsfBufAlloc(sizeof(hciLeExtAdvReportEvt_t) + maxLen)) != NULL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue