From c8743c683a14499b72dc81b64c736aa46cdae9a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Kopy=C5=9Bci=C5=84ski?= Date: Thu, 27 Jul 2023 12:51:03 +0200 Subject: [PATCH] apps/bttester: fix get_attrs response buffer Assigning rsp pointer to new value caused wrong behavior and corrupted response. Data should be copied into buffer instead. --- apps/bttester/src/btp_gatt.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/apps/bttester/src/btp_gatt.c b/apps/bttester/src/btp_gatt.c index 72115e21a..a9d8d7f43 100644 --- a/apps/bttester/src/btp_gatt.c +++ b/apps/bttester/src/btp_gatt.c @@ -1704,6 +1704,10 @@ get_attrs(const void *cmd, uint16_t cmd_len, SYS_LOG_DBG(""); + if (!buf) { + return BTP_STATUS_FAILED; + } + memset(str, 0, sizeof(str)); memset(&uuid, 0, sizeof(uuid)); start_handle = le16toh(cp->start_handle); @@ -1712,7 +1716,7 @@ get_attrs(const void *cmd, uint16_t cmd_len, if (cp->type_length) { if (btp2bt_uuid(cp->type, cp->type_length, &uuid)) { status = BTP_STATUS_FAILED; - goto free; + goto done; } ble_uuid_to_str(&uuid.u, str); @@ -1724,12 +1728,6 @@ get_attrs(const void *cmd, uint16_t cmd_len, SYS_LOG_DBG("start 0x%04x end 0x%04x", start_handle, end_handle); } - rp = os_mbuf_extend(buf, sizeof(*rp)); - if (!rp) { - status = BTP_STATUS_FAILED; - goto free; - } - entry = ble_att_svr_find_by_uuid(entry, uuid_ptr, end_handle); while (entry) { @@ -1742,7 +1740,7 @@ get_attrs(const void *cmd, uint16_t cmd_len, gatt_attr = os_mbuf_extend(buf, sizeof(*gatt_attr)); if (!gatt_attr) { status = BTP_STATUS_FAILED; - goto free; + goto done; } gatt_attr->handle = htole16(entry->ha_handle_id); gatt_attr->permission = flags_hs2btp(entry->ha_flags); @@ -1765,10 +1763,11 @@ get_attrs(const void *cmd, uint16_t cmd_len, } rp->attrs_count = count; + memcpy(rp->attrs, buf->om_data, buf->om_len); *rsp_len = sizeof(*rp) + buf->om_len; -free: +done: os_mbuf_free_chain(buf); return status; }