src/device.c: Fix crash issue during bonding 95/300195/3 accepted/tizen/unified/20231106.171628
authorWootak Jung <wootak.jung@samsung.com>
Wed, 18 Oct 2023 07:54:13 +0000 (16:54 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Wed, 18 Oct 2023 08:11:00 +0000 (17:11 +0900)
Usage of rpa_addr and rpa is mixed during upgrade

src/adapter.c:bonding_attempt_complete() hci0 bdaddr 94:8B:C1:14:D4:9B type 0 status 0x0
src/device.c:device_bonding_complete() bonding (nil) status 0x00
src/adapter.c:mgmt_debug() src/shared/mgmt.c:can_read_data() [0x0000] event 0x0018
src/adapter.c:new_irk_callback() hci0 new IRK for 94:8B:C1:14:D4:9B RPA 00:00:00:00:00:00
Jan 01 09:09:37 localhost audit[4350]: ANOM_ABEND auid=4294967295 uid=551 gid=551 ses=4294967295 subj=System pid=4350 comm="bluetoothd" exe="/usr/libexec/bluetooth/bluetoothd" sig=11 res=1

Change-Id: I4b67e1fe2728391fe8cb3339e7784748d00861a0
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
src/device.c

index a1f88f8..5f0ccca 100644 (file)
@@ -604,7 +604,7 @@ static gboolean store_device_info_cb(gpointer user_data)
        ba2str(&device->bdaddr, device_addr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-       if (device->rpa)
+       if (device->rpa_addr)
                ba2str(device->rpa_addr, device_addr);
 #endif
        create_filename(filename, PATH_MAX, "/%s/%s/info",
@@ -714,7 +714,7 @@ static gboolean store_device_info_cb(gpointer user_data)
                                                "LegacyManufacturerDataLen", NULL);
        }
 
-       if (device->rpa) {
+       if (device->rpa_addr) {
                char irk_addr[18];
 
                ba2str(&device->bdaddr, irk_addr);
@@ -814,7 +814,7 @@ void device_store_cached_name(struct btd_device *dev, const char *name)
        ba2str(&dev->bdaddr, d_addr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-       if (dev->rpa)
+       if (dev->rpa_addr)
                ba2str(dev->rpa_addr, d_addr);
 #endif
 
@@ -1177,7 +1177,7 @@ static gboolean dev_property_get_address(const GDBusPropertyTable *property,
        const char *ptr = dstaddr;
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-       if (device->rpa)
+       if (device->rpa_addr)
                ba2str(device->rpa_addr, dstaddr);
        else
 #endif
@@ -3139,7 +3139,7 @@ static void store_services(struct btd_device *device)
        ba2str(&device->bdaddr, dst_addr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-       if (device->rpa)
+       if (device->rpa_addr)
                ba2str(device->rpa_addr, dst_addr);
 #endif
 
@@ -5239,7 +5239,7 @@ static DBusMessage *device_get_ida(DBusConnection *conn, DBusMessage *msg,
                return btd_error_not_supported(msg);
        }
 
-       if (device->rpa) {
+       if (device->rpa_addr) {
                // There is the first RPA. So it's paired device.
                if (device->bredr)
                        ba2str(device->rpa_addr, device_idaddr);
@@ -5921,7 +5921,7 @@ static void load_info(struct btd_device *device, const char *local,
                                                                NULL);
 
        if (str) {
-               device->rpa = g_malloc0(sizeof(bdaddr_t));
+               device->rpa_addr = g_malloc0(sizeof(bdaddr_t));
                bacpy(device->rpa_addr, &device->bdaddr);
                str2ba(str, &device->bdaddr);
                g_free(str);
@@ -6550,15 +6550,15 @@ static struct btd_device *device_new(struct btd_adapter *adapter,
 void device_print_addr(struct btd_device *dev)
 {
        char ida[18];
-       char rpa[18];
+       char rpa_addr[18];
 
        ba2str(&dev->bdaddr, ida);
 
-       if (dev->rpa) {
-               ba2str(dev->rpa_addr, rpa);
+       if (dev->rpa_addr) {
+               ba2str(dev->rpa_addr, rpa_addr);
 
                DBG("IDA %s [%d] : RPA [%s], BREDR [%d], LE [%d]",
-                               ida, dev->bdaddr_type, rpa,
+                               ida, dev->bdaddr_type, rpa_addr,
                                dev->bredr ? 1 : 0, dev->le ? 1 : 0);
        } else {
                DBG("ADDR %s [%d] : BREDR [%d], LE [%d]",
@@ -6638,7 +6638,7 @@ char *btd_device_get_storage_path(struct btd_device *device, const char *name)
        ba2str(&device->bdaddr, dstaddr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-       if (device->rpa)
+       if (device->rpa_addr)
                ba2str(device->rpa_addr, dstaddr);
 #endif
 
@@ -6792,7 +6792,7 @@ void device_set_bredr_support(struct btd_device *device)
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
        char addr_str[18];
 
-       if (device->rpa) {
+       if (device->rpa_addr) {
                ba2str(device->rpa_addr, addr_str);
                error("Cannot set bredr support to RPA device [%s]", addr_str);
                return;
@@ -6816,11 +6816,11 @@ void device_set_bredr_support(struct btd_device *device)
 }
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-void device_set_rpa_addr(struct btd_device *device, const bdaddr_t *rpa)
+void device_set_rpa_addr(struct btd_device *device, const bdaddr_t *rpa_addr)
 {
        if (device->rpa_addr == NULL) {
-               device->rpa = g_malloc0(sizeof(bdaddr_t));
-               bacpy(device->rpa_addr, rpa);
+               device->rpa_addr = g_malloc0(sizeof(bdaddr_t));
+               bacpy(device->rpa_addr, rpa_addr);
        } else
                error("RPA is already set");
 }
@@ -7003,7 +7003,7 @@ static void device_remove_stored(struct btd_device *device)
        ba2str(&device->bdaddr, device_addr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-       if (device->rpa)
+       if (device->rpa_addr)
                ba2str(device->rpa_addr, device_addr);
 #endif
 
@@ -7086,12 +7086,12 @@ void device_unpair(struct btd_device *device, gboolean remove_stored)
 
        gatt_db_clear(device->db);
 
-       if (device->rpa) {
+       if (device->rpa_addr) {
                bacpy(&device->bdaddr, device->rpa_addr);
                device->bdaddr_type = BDADDR_LE_RANDOM;
 
                g_free(device->rpa_addr);
-               device->rpa = NULL;
+               device->rpa_addr = NULL;
        }
 
        device->bredr_state.paired = 0;
@@ -7199,7 +7199,7 @@ int device_rpa_cmp(gconstpointer a, gconstpointer b)
        const char *address = b;
        char addr[18];
 
-       if (!device->rpa)
+       if (!device->rpa_addr)
                return -1;
 
        ba2str(device->rpa_addr, addr);
@@ -7221,7 +7221,7 @@ int device_rpa_ida_cmp(gconstpointer a, gconstpointer b)
        const char *address = b;
        char addr[18];
 
-       if (!device->rpa || device->le == false)
+       if (!device->rpa_addr || device->le == false)
                return -1;
 
        ba2str(&device->bdaddr, addr);
@@ -7274,7 +7274,7 @@ int device_addr_type_strict_cmp(gconstpointer a, gconstpointer b)
        if (!dev->le)
                return -1;
 
-       if (cmp && dev->rpa && addr->bdaddr_type == BDADDR_LE_RANDOM &&
+       if (cmp && dev->rpa_addr && addr->bdaddr_type == BDADDR_LE_RANDOM &&
                        (addr->bdaddr.b[5] >> 6) == 0x01)
                return bacmp(dev->rpa_addr, &addr->bdaddr);
 
@@ -7302,7 +7302,7 @@ int device_addr_type_cmp(gconstpointer a, gconstpointer b)
                                        addr_is_public(dev->bdaddr_type))
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
        {
-               if (dev->rpa && addr->bdaddr_type == BDADDR_BREDR) {
+               if (dev->rpa_addr && addr->bdaddr_type == BDADDR_BREDR) {
                        char addr_str[18];
 
                        ba2str(&dev->bdaddr, addr_str);
@@ -8758,7 +8758,7 @@ const uint8_t *device_get_irk_value(struct btd_device *device)
 
 bool device_get_rpa_exist(struct btd_device *device)
 {
-       return device->rpa ? true : false;
+       return device->rpa_addr ? true : false;
 }
 
 void device_set_auth_addr_type(struct btd_device *device, uint8_t type)
@@ -8783,7 +8783,7 @@ void device_get_tizen_addr(struct btd_device *device, uint8_t type,
                return;
        }
 
-       if (device->rpa) {
+       if (device->rpa_addr) {
                bacpy(&addr->bdaddr, device->rpa_addr);
                addr->bdaddr_type = BDADDR_LE_RANDOM;
                return;
@@ -9355,7 +9355,7 @@ void device_bonding_complete(struct btd_device *device, uint8_t bdaddr_type,
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
                if (bdaddr_type == BDADDR_BREDR && state->svc_resolved) {
                        DBG("Link key has been changed. Report it");
-                       if (!device->rpa)
+                       if (!device->rpa_addr)
                                g_dbus_emit_property_changed(dbus_conn,
                                                device->path, DEVICE_INTERFACE,
                                                "Paired");
@@ -10039,7 +10039,7 @@ static sdp_list_t *read_device_records(struct btd_device *device)
        ba2str(&device->bdaddr, peer);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-       if (device->rpa)
+       if (device->rpa_addr)
                ba2str(device->rpa_addr, peer);
 #endif
 
@@ -10222,7 +10222,7 @@ void device_set_adv_report_info(struct btd_device *device, void *data, uint8_t d
        ba2str(&device->bdaddr, peer_addr);
 
        /* Replace address type for paired RPA device since IDA passed from controller */
-       if (device->rpa) {
+       if (device->rpa_addr) {
                ba2str(device->rpa_addr, peer_addr);
                addr_type = BDADDR_LE_RANDOM;
        } else