static int hci_set_random_addr_sync(struct hci_dev *hdev, bdaddr_t *rpa)
 {
-       /* If we're advertising or initiating an LE connection we can't
-        * go ahead and change the random address at this time. This is
-        * because the eventual initiator address used for the
+       /* If a random_addr has been set we're advertising or initiating an LE
+        * connection we can't go ahead and change the random address at this
+        * time. This is because the eventual initiator address used for the
         * subsequently created connection will be undefined (some
         * controllers use the new address and others the one we had
         * when the operation started).
         * In this kind of scenario skip the update and let the random
         * address be updated at the next cycle.
         */
-       if (hci_dev_test_flag(hdev, HCI_LE_ADV) ||
-           hci_lookup_le_connect(hdev)) {
+       if (bacmp(&hdev->random_addr, BDADDR_ANY) &&
+           (hci_dev_test_flag(hdev, HCI_LE_ADV) ||
+           hci_lookup_le_connect(hdev))) {
                bt_dev_dbg(hdev, "Deferring random address update");
                hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
                return 0;