Bluetooth: audio: Add security requirements check
The LE Audio related profiles define specific security requirements that client have to met to gain access to related characteristics. This introduces internal wrapper API for GATT characteristics and CCC descriptors to ensure the security. Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
This commit is contained in:
parent
2241efedfb
commit
e0d36beb72
21 changed files with 646 additions and 573 deletions
|
@ -27,6 +27,7 @@
|
|||
#define LOG_MODULE_NAME bt_pacs
|
||||
#include "common/log.h"
|
||||
|
||||
#include "audio_internal.h"
|
||||
#include "pacs_internal.h"
|
||||
#include "unicast_server.h"
|
||||
|
||||
|
@ -437,63 +438,53 @@ static void src_loc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value)
|
|||
BT_GATT_SERVICE_DEFINE(pacs_svc,
|
||||
BT_GATT_PRIMARY_SERVICE(BT_UUID_PACS),
|
||||
#if defined(CONFIG_BT_PAC_SNK)
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_PACS_SNK,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
snk_read, NULL, NULL),
|
||||
BT_GATT_CCC(snk_cfg_changed,
|
||||
BT_GATT_PERM_READ | BT_GATT_PERM_WRITE_ENCRYPT),
|
||||
BT_AUDIO_CHRC(BT_UUID_PACS_SNK,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
snk_read, NULL, NULL),
|
||||
BT_AUDIO_CCC(snk_cfg_changed),
|
||||
#if defined(CONFIG_BT_PAC_SNK_LOC_WRITEABLE)
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_PACS_SNK_LOC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE |
|
||||
BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT |
|
||||
BT_GATT_PERM_WRITE_ENCRYPT,
|
||||
snk_loc_read, snk_loc_write, NULL),
|
||||
BT_AUDIO_CHRC(BT_UUID_PACS_SNK_LOC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT,
|
||||
snk_loc_read, snk_loc_write, NULL),
|
||||
#elif defined(CONFIG_BT_PAC_SNK_LOC)
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_PACS_SNK_LOC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
snk_loc_read, NULL, NULL),
|
||||
BT_AUDIO_CHRC(BT_UUID_PACS_SNK_LOC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
snk_loc_read, NULL, NULL),
|
||||
#endif /* CONFIG_BT_PAC_SNK_LOC_WRITEABLE */
|
||||
BT_GATT_CCC(snk_loc_cfg_changed,
|
||||
BT_GATT_PERM_READ | BT_GATT_PERM_WRITE_ENCRYPT),
|
||||
BT_AUDIO_CCC(snk_loc_cfg_changed),
|
||||
#endif /* CONFIG_BT_PAC_SNK */
|
||||
#if defined(CONFIG_BT_PAC_SRC)
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_PACS_SRC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
src_read, NULL, NULL),
|
||||
BT_GATT_CCC(src_cfg_changed,
|
||||
BT_GATT_PERM_READ | BT_GATT_PERM_WRITE_ENCRYPT),
|
||||
BT_AUDIO_CHRC(BT_UUID_PACS_SRC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
src_read, NULL, NULL),
|
||||
BT_AUDIO_CCC(src_cfg_changed),
|
||||
#if defined(CONFIG_BT_PAC_SRC_LOC_WRITEABLE)
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_PACS_SRC_LOC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE |
|
||||
BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT |
|
||||
BT_GATT_PERM_WRITE_ENCRYPT,
|
||||
src_loc_read, src_loc_write, NULL),
|
||||
BT_AUDIO_CHRC(BT_UUID_PACS_SRC_LOC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT BT_GATT_PERM_WRITE_ENCRYPT,
|
||||
src_loc_read, src_loc_write, NULL),
|
||||
#elif defined(CONFIG_BT_PAC_SRC_LOC)
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_PACS_SRC_LOC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
src_loc_read, NULL, NULL),
|
||||
BT_AUDIO_CHRC(BT_UUID_PACS_SRC_LOC,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
src_loc_read, NULL, NULL),
|
||||
#endif /* CONFIG_BT_PAC_SRC_LOC_WRITEABLE */
|
||||
BT_GATT_CCC(src_loc_cfg_changed,
|
||||
BT_GATT_PERM_READ | BT_GATT_PERM_WRITE_ENCRYPT),
|
||||
BT_AUDIO_CCC(src_loc_cfg_changed),
|
||||
#endif /* CONFIG_BT_PAC_SRC */
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_PACS_AVAILABLE_CONTEXT,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
available_contexts_read, NULL, NULL),
|
||||
BT_GATT_CCC(available_context_cfg_changed,
|
||||
BT_GATT_PERM_READ | BT_GATT_PERM_WRITE_ENCRYPT),
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_PACS_SUPPORTED_CONTEXT,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
supported_context_read, NULL, NULL),
|
||||
BT_GATT_CCC(supported_context_cfg_changed,
|
||||
BT_GATT_PERM_READ | BT_GATT_PERM_WRITE_ENCRYPT)
|
||||
BT_AUDIO_CHRC(BT_UUID_PACS_AVAILABLE_CONTEXT,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
available_contexts_read, NULL, NULL),
|
||||
BT_AUDIO_CCC(available_context_cfg_changed),
|
||||
BT_AUDIO_CHRC(BT_UUID_PACS_SUPPORTED_CONTEXT,
|
||||
BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY,
|
||||
BT_GATT_PERM_READ_ENCRYPT,
|
||||
supported_context_read, NULL, NULL),
|
||||
BT_AUDIO_CCC(supported_context_cfg_changed)
|
||||
);
|
||||
|
||||
static struct k_work_delayable *bt_pacs_get_work(enum bt_audio_dir dir)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue