From 41a5413023fa85bc711d461eb736a0624542df2d Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 3 Jun 2020 10:31:59 -0700 Subject: [PATCH] gatt: Fix possible crash when unable to generate hash gatt_db_get_hash actually depends on crypto so platforms that don't have it enabled shall not register GATT_CHARAC_DB_HASH as otherwise it would cause a crash due to hash being NULL. --- src/gatt-database.c | 8 ++++++-- src/shared/gatt-db.c | 8 ++++++++ src/shared/gatt-db.h | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/gatt-database.c b/src/gatt-database.c index 8cbe09bae..95ba39897 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c @@ -1211,10 +1211,14 @@ static void populate_gatt_service(struct btd_gatt_database *database) cli_feat_read_cb, cli_feat_write_cb, database); - bt_uuid16_create(&uuid, GATT_CHARAC_DB_HASH); - database->db_hash = gatt_db_service_add_characteristic(service, + + /* Only expose database hash chrc if supported */ + if (gatt_db_hash_support(database->db)) { + bt_uuid16_create(&uuid, GATT_CHARAC_DB_HASH); + database->db_hash = gatt_db_service_add_characteristic(service, &uuid, BT_ATT_PERM_READ, BT_GATT_CHRC_PROP_READ, db_hash_read_cb, NULL, database); + } /* Only enable EATT if there is a socket listening */ if (database->eatt_io) { diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c index b44f7b5e9..5eccab3b9 100644 --- a/src/shared/gatt-db.c +++ b/src/shared/gatt-db.c @@ -597,6 +597,14 @@ uint8_t *gatt_db_get_hash(struct gatt_db *db) return db->hash; } +bool gatt_db_hash_support(struct gatt_db *db) +{ + if (!db || !db->crypto) + return false; + + return true; +} + static struct gatt_db_service *find_insert_loc(struct gatt_db *db, uint16_t start, uint16_t end, struct gatt_db_service **after) diff --git a/src/shared/gatt-db.h b/src/shared/gatt-db.h index 08f037428..a0fd66c53 100644 --- a/src/shared/gatt-db.h +++ b/src/shared/gatt-db.h @@ -41,6 +41,7 @@ bool gatt_db_remove_service(struct gatt_db *db, bool gatt_db_clear(struct gatt_db *db); bool gatt_db_clear_range(struct gatt_db *db, uint16_t start_handle, uint16_t end_handle); +bool gatt_db_hash_support(struct gatt_db *db); uint8_t *gatt_db_get_hash(struct gatt_db *db); struct gatt_db_attribute *gatt_db_insert_service(struct gatt_db *db, -- 2.47.3