From bd068e475dda53888e615fa5d235d98cbecbafe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Kopy=C5=9Bci=C5=84ski?= Date: Wed, 11 Aug 2021 10:19:12 +0200 Subject: [PATCH] Tests: bluetooth: tester: find connection for get_attr_val_rp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To check security of connection in read_value() we need to actually pass connection not NULL. This is affecting GATT/SR/GAR/BI-11-C Signed-off-by: Krzysztof Kopyściński --- tests/bluetooth/tester/src/gatt.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/bluetooth/tester/src/gatt.c b/tests/bluetooth/tester/src/gatt.c index 732c1e8638d..88a76e2a397 100644 --- a/tests/bluetooth/tester/src/gatt.c +++ b/tests/bluetooth/tester/src/gatt.c @@ -76,6 +76,11 @@ static struct { uint8_t buf[MAX_BUFFER_SIZE]; } gatt_buf; +struct get_attr_data { + struct net_buf_simple *buf; + struct bt_conn *conn; +}; + static void *gatt_buf_add(const void *data, size_t len) { void *ptr = gatt_buf.buf + gatt_buf.len; @@ -1908,7 +1913,9 @@ static uint8_t err_to_att(int err) static uint8_t get_attr_val_rp(const struct bt_gatt_attr *attr, uint16_t handle, void *user_data) { - struct net_buf_simple *buf = user_data; + struct get_attr_data *u_data = user_data; + struct net_buf_simple *buf = u_data->buf; + struct bt_conn *conn = u_data->conn; struct gatt_get_attribute_value_rp *rp; ssize_t read, to_read; @@ -1924,7 +1931,7 @@ static uint8_t get_attr_val_rp(const struct bt_gatt_attr *attr, uint16_t handle, break; } - read = attr->read(NULL, attr, buf->data + buf->len, to_read, + read = attr->read(conn, attr, buf->data + buf->len, to_read, rp->value_length); if (read < 0) { rp->att_response = err_to_att(read); @@ -1944,10 +1951,15 @@ static void get_attr_val(uint8_t *data, uint16_t len) const struct gatt_get_attribute_value_cmd *cmd = (void *) data; struct net_buf_simple *buf = NET_BUF_SIMPLE(BTP_DATA_MAX_SIZE); uint16_t handle = sys_le16_to_cpu(cmd->handle); + struct bt_conn *conn; + + conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, (bt_addr_le_t *)cmd); net_buf_simple_init(buf, 0); - bt_gatt_foreach_attr(handle, handle, get_attr_val_rp, buf); + struct get_attr_data cb_data = { .buf = buf, .conn = conn }; + + bt_gatt_foreach_attr(handle, handle, get_attr_val_rp, &cb_data); if (buf->len) { tester_send(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTE_VALUE,