hci_dev_lock(hdev);
 
+       if (!hdev_is_powered(hdev)) {
+               err = cmd_status(sk, index, MGMT_OP_GET_CONNECTIONS,
+                                               MGMT_STATUS_NOT_POWERED);
+               goto unlock;
+       }
+
        count = 0;
        list_for_each_entry(c, &hdev->conn_hash.list, list) {
                if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
 
        err = cmd_complete(sk, index, MGMT_OP_GET_CONNECTIONS, 0, rp, rp_len);
 
-unlock:
        kfree(rp);
+
+unlock:
        hci_dev_unlock(hdev);
        hci_dev_put(hdev);
        return err;
 
        hci_dev_lock(hdev);
 
+       if (!hdev_is_powered(hdev)) {
+               err = cmd_status(sk, index, MGMT_OP_PAIR_DEVICE,
+                                               MGMT_STATUS_NOT_POWERED);
+               goto unlock;
+       }
+
        sec_level = BT_SECURITY_MEDIUM;
        if (cp->io_cap == 0x03)
                auth_type = HCI_AT_DEDICATED_BONDING;
 
        hci_dev_lock(hdev);
 
+       if (!hdev_is_powered(hdev)) {
+               err = cmd_status(sk, index, MGMT_OP_CANCEL_PAIR_DEVICE,
+                                               MGMT_STATUS_NOT_POWERED);
+               goto unlock;
+       }
+
        cmd = mgmt_pending_find(MGMT_OP_PAIR_DEVICE, hdev);
        if (!cmd) {
                err = cmd_status(sk, index, MGMT_OP_CANCEL_PAIR_DEVICE,
 
        hci_dev_lock(hdev);
 
+       if (!hdev_is_powered(hdev)) {
+               err = cmd_complete(sk, index, MGMT_OP_ADD_REMOTE_OOB_DATA,
+                                               MGMT_STATUS_NOT_POWERED,
+                                               &cp->addr, sizeof(cp->addr));
+               goto unlock;
+       }
+
        err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr, cp->hash,
                                                                cp->randomizer);
        if (err < 0)
        err = cmd_complete(sk, index, MGMT_OP_ADD_REMOTE_OOB_DATA, status,
                                                &cp->addr, sizeof(cp->addr));
 
+unlock:
        hci_dev_unlock(hdev);
        hci_dev_put(hdev);
 
 
        hci_dev_lock(hdev);
 
+       if (!hdev_is_powered(hdev)) {
+               err = cmd_complete(sk, index, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
+                                               MGMT_STATUS_NOT_POWERED,
+                                               &cp->addr, sizeof(cp->addr));
+               goto unlock;
+       }
+
        err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr);
        if (err < 0)
                status = MGMT_STATUS_INVALID_PARAMS;
        err = cmd_complete(sk, index, MGMT_OP_REMOVE_REMOTE_OOB_DATA, status,
                                                &cp->addr, sizeof(cp->addr));
 
+unlock:
        hci_dev_unlock(hdev);
        hci_dev_put(hdev);