Skip to content

Commit

Permalink
bluetooth: gatt: Fix ATT Read By Type by DB change unaware client
Browse files Browse the repository at this point in the history
When change unaware client send ATT request it shall get Database
Out of Sync error. Reading GATT database hash is an exception here.

This was affecting GATT/SR/GAS/BV-05-C qualification test case.

Signed-off-by: Szymon Janc <[email protected]>
(cherry picked from commit 77cbd27)
  • Loading branch information
sjanc authored and github-actions[bot] committed Aug 27, 2024
1 parent e84c516 commit 82f9ccd
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions subsys/bluetooth/host/att.c
Original file line number Diff line number Diff line change
Expand Up @@ -1549,6 +1549,23 @@ static uint8_t att_read_type_req(struct bt_att_chan *chan, struct net_buf *buf)
return 0;
}

/* Reading Database Hash is special as it may be used to make client change aware
* (Core Specification 5.4 Vol 3. Part G. 2.5.2.1 Robust Caching).
*
* GATT client shall always use GATT Read Using Characteristic UUID sub-procedure for
* reading Database Hash
* (Core Specification 5.4 Vol 3. Part G. 7.3 Databse Hash)
*/
if (bt_uuid_cmp(&u.uuid, BT_UUID_GATT_DB_HASH) != 0) {
if (!bt_gatt_change_aware(chan->att->conn, true)) {
if (!atomic_test_and_set_bit(chan->flags, ATT_OUT_OF_SYNC_SENT)) {
return BT_ATT_ERR_DB_OUT_OF_SYNC;
} else {
return 0;
}
}
}

return att_read_type_rsp(chan, &u.uuid, start_handle, end_handle);
}

Expand Down

0 comments on commit 82f9ccd

Please sign in to comment.