goto complete;
                }
 
+               /* This should return the active RPA, but since the RPA
+                * is only programmed on demand, it is really hard to fill
+                * this in at the moment. For now disallow retrieving
+                * local out-of-band data when privacy is in use.
+                *
+                * Returning the identity address will not help here since
+                * pairing happens before the identity resolving key is
+                * known and thus the connection establishment happens
+                * based on the RPA and not the identity address.
+                */
                if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
-                       memcpy(addr, &hdev->rpa, 6);
-                       addr[6] = 0x01;
-               } else if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
-                          !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
-                          (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
-                           bacmp(&hdev->static_addr, BDADDR_ANY))) {
+                       hci_dev_unlock(hdev);
+                       status = MGMT_STATUS_REJECTED;
+                       goto complete;
+               }
+
+               if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
+                  !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
+                  (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
+                   bacmp(&hdev->static_addr, BDADDR_ANY))) {
                        memcpy(addr, &hdev->static_addr, 6);
                        addr[6] = 0x01;
                } else {