Diff between 191f4b663978493004239a03ec8d543c15341cd6 and 52362c5f209131f0ae45291ac3b8efd3581e01e2

Changed Files

File Additions Deletions Status
attrib/gatt-service.c +7 -1 modified

Full Patch

diff --git a/attrib/gatt-service.c b/attrib/gatt-service.c
index f592a70..4e1a654 100644
--- a/attrib/gatt-service.c
+++ b/attrib/gatt-service.c
@@ -299,9 +299,15 @@ static void service_attr_del(struct btd_adapter *adapter, uint16_t start_handle,
 {
 	uint16_t handle;
 
-	for (handle = start_handle; handle <= end_handle; handle++)
+	/* For a 128-bit category primary service below handle should be checked
+	 * for both non-zero as well as >= 0xffff. As on last iteration the
+	 * handle will turn to 0 from 0xffff and loop will be infinite.
+	 */
+	for (handle = start_handle; (handle != 0 && handle <= end_handle);
+								handle++) {
 		if (attrib_db_del(adapter, handle) < 0)
 			error("Can't delete handle 0x%04x", handle);
+	}
 }
 
 gboolean gatt_service_add(struct btd_adapter *adapter, uint16_t uuid,