Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 711eafe3 authored by Johan Hedberg's avatar Johan Hedberg Committed by Marcel Holtmann
Browse files

Bluetooth: Move SMP (de)initialization to smp.c



As preparation for moving SMP to use l2cap_chan infrastructure we need
to move the (de)initialization functions to smp.c (where they'll
eventually need access to the local L2CAP channel callbacks).

Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 54506918
Loading
Loading
Loading
Loading
+2 −30
Original line number Diff line number Diff line
@@ -1764,34 +1764,6 @@ static void hci_init4_req(struct hci_request *req, unsigned long opt)
	}
}

static int hci_register_smp(struct hci_dev *hdev)
{
	int err;

	BT_DBG("%s", hdev->name);

	hdev->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0,
					       CRYPTO_ALG_ASYNC);
	if (IS_ERR(hdev->tfm_aes)) {
		BT_ERR("Unable to create crypto context");
		err = PTR_ERR(hdev->tfm_aes);
		hdev->tfm_aes = NULL;
		return err;
	}

	return 0;
}

static void hci_unregister_smp(struct hci_dev *hdev)
{
	BT_DBG("%s", hdev->name);

	if (hdev->tfm_aes) {
		crypto_free_blkcipher(hdev->tfm_aes);
		hdev->tfm_aes = NULL;
	}
}

static int __hci_init(struct hci_dev *hdev)
{
	int err;
@@ -1927,7 +1899,7 @@ static int __hci_init(struct hci_dev *hdev)
				   hdev->debugfs,
				   &hdev->discov_interleaved_timeout);

		hci_register_smp(hdev);
		smp_register(hdev);
	}

	return 0;
@@ -4224,7 +4196,7 @@ void hci_unregister_dev(struct hci_dev *hdev)
		rfkill_destroy(hdev->rfkill);
	}

	hci_unregister_smp(hdev);
	smp_unregister(hdev);

	device_del(&hdev->dev);

+26 −0
Original line number Diff line number Diff line
@@ -1455,3 +1455,29 @@ int smp_distribute_keys(struct l2cap_conn *conn)

	return 0;
}

int smp_register(struct hci_dev *hdev)
{
	BT_DBG("%s", hdev->name);

	hdev->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0,
					       CRYPTO_ALG_ASYNC);
	if (IS_ERR(hdev->tfm_aes)) {
		int err = PTR_ERR(hdev->tfm_aes);
		BT_ERR("Unable to create crypto context");
		hdev->tfm_aes = NULL;
		return err;
	}

	return 0;
}

void smp_unregister(struct hci_dev *hdev)
{
	BT_DBG("%s", hdev->name);

	if (hdev->tfm_aes) {
		crypto_free_blkcipher(hdev->tfm_aes);
		hdev->tfm_aes = NULL;
	}
}
+3 −0
Original line number Diff line number Diff line
@@ -136,4 +136,7 @@ bool smp_irk_matches(struct crypto_blkcipher *tfm, u8 irk[16],
		     bdaddr_t *bdaddr);
int smp_generate_rpa(struct crypto_blkcipher *tfm, u8 irk[16], bdaddr_t *rpa);

int smp_register(struct hci_dev *hdev);
void smp_unregister(struct hci_dev *hdev);

#endif /* __SMP_H */