diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-09-21 14:40:14 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-09-21 14:40:14 -0700 |
commit | fbf17ac497bb2e0077c4cfa22583439e157693fe (patch) | |
tree | 9916cd24ca5c4e9da1be5ef87c29ca63f2855831 /src/gatt-database.c | |
parent | 115514d85a17dcc03da4f784c9d65c1e98491296 (diff) | |
download | bluez-fbf17ac497bb2e0077c4cfa22583439e157693fe.tar.gz |
gatt: Fix not setting permissions for CCC
CCC shall always have both Read and Write permissions set in addition to
what application set.
Fixes: https://github.com/bluez/bluez/issues/399
Diffstat (limited to 'src/gatt-database.c')
-rw-r--r-- | src/gatt-database.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/gatt-database.c b/src/gatt-database.c index 89a3dc475..a212dfc4e 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c @@ -1238,7 +1238,8 @@ static void populate_gatt_service(struct btd_gatt_database *database) NULL, NULL, database); database->svc_chngd_ccc = service_add_ccc(service, database, NULL, NULL, - 0, NULL); + BT_ATT_PERM_READ | + BT_ATT_PERM_WRITE, NULL); bt_uuid16_create(&uuid, GATT_CHARAC_CLI_FEAT); database->cli_feat = gatt_db_service_add_characteristic(service, @@ -1726,8 +1727,10 @@ static bool parse_chrc_flags(DBusMessageIter *array, uint8_t *props, *perm |= BT_ATT_PERM_WRITE; } else if (!strcmp("notify", flag)) { *props |= BT_GATT_CHRC_PROP_NOTIFY; + *ccc_perm |= BT_ATT_PERM_WRITE; } else if (!strcmp("indicate", flag)) { *props |= BT_GATT_CHRC_PROP_INDICATE; + *ccc_perm |= BT_ATT_PERM_WRITE; } else if (!strcmp("authenticated-signed-writes", flag)) { *props |= BT_GATT_CHRC_PROP_AUTH; *perm |= BT_ATT_PERM_WRITE; @@ -2896,6 +2899,9 @@ static bool database_add_ccc(struct external_service *service, !(chrc->props & BT_GATT_CHRC_PROP_INDICATE)) return true; + /* Always set read/write permissions */ + chrc->ccc_perm |= BT_ATT_PERM_WRITE | BT_ATT_PERM_READ; + chrc->ccc = service_add_ccc(service->attrib, service->app->database, ccc_write_cb, chrc, chrc->ccc_perm, NULL); if (!chrc->ccc) { |