[PATCH v2] gatt-server: Fix integer overflow
zuohsh <[email protected]>
| Newsgroups | org.kernel.vger.linux-bluetooth |
|---|---|
| Message-ID | <[email protected]> |
By using size_t for realloc len and rejecting allocations exceeding
UINT16_MAX , to prevent truncation into the uint16_t field.
---
src/shared/gatt-server.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/shared/gatt-server.c b/src/shared/gatt-server.c
index 709a8f94b..1ec826a69 100644
--- a/src/shared/gatt-server.c
+++ b/src/shared/gatt-server.c
@@ -1174,12 +1174,12 @@ static bool append_prep_data(struct prep_write_data *prep_data, uint16_t handle,
uint16_t length, uint8_t *value)
{
uint8_t *val;
- uint16_t len;
+ size_t len;
if (!length)
return true;
- len = prep_data->length + length;
+ len = (size_t)prep_data->length + (size_t)length;
val = realloc(prep_data->value, len);
if (!val)
@@ -1188,7 +1188,10 @@ static bool append_prep_data(struct prep_write_data *prep_data, uint16_t handle,
memcpy(val + prep_data->length, value, length);
prep_data->value = val;
- prep_data->length = len;
+
+ if (len > UINT16_MAX)
+ return false;
+ prep_data->length = (uint16_t)len;
return true;
}
--
2.43.0
Handle the CheckPatch failure reported by BluezTestBot.