Message ID | 20210115190229.186479-1-luiz.dentz@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Luiz Von Dentz |
Headers | show |
Series | [BlueZ] shared/crypto: Transform bt_cryto in a singleton | expand |
This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=415727 ---Test result--- ############################## Test: CheckPatch - PASS ############################## Test: CheckGitLint - PASS ############################## Test: CheckBuild - PASS ############################## Test: MakeCheck - PASS --- Regards, Linux Bluetooth
Hi, On Fri, Jan 15, 2021 at 11:15 AM <bluez.test.bot@gmail.com> wrote: > > This is automated email and please do not reply to this email! > > Dear submitter, > > Thank you for submitting the patches to the linux bluetooth mailing list. > This is a CI test results with your patch series: > PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=415727 > > ---Test result--- > > ############################## > Test: CheckPatch - PASS > > ############################## > Test: CheckGitLint - PASS > > ############################## > Test: CheckBuild - PASS > > ############################## > Test: MakeCheck - PASS > > > > --- > Regards, > Linux Bluetooth Pushed.
diff --git a/src/shared/crypto.c b/src/shared/crypto.c index 6d14903e4..d5efa416d 100644 --- a/src/shared/crypto.c +++ b/src/shared/crypto.c @@ -126,34 +126,40 @@ static int cmac_aes_setup(void) return fd; } +static struct bt_crypto *singleton; + struct bt_crypto *bt_crypto_new(void) { - struct bt_crypto *crypto; + if (singleton) + return bt_crypto_ref(singleton); - crypto = new0(struct bt_crypto, 1); + singleton = new0(struct bt_crypto, 1); - crypto->ecb_aes = ecb_aes_setup(); - if (crypto->ecb_aes < 0) { - free(crypto); + singleton->ecb_aes = ecb_aes_setup(); + if (singleton->ecb_aes < 0) { + free(singleton); + singleton = NULL; return NULL; } - crypto->urandom = urandom_setup(); - if (crypto->urandom < 0) { - close(crypto->ecb_aes); - free(crypto); + singleton->urandom = urandom_setup(); + if (singleton->urandom < 0) { + close(singleton->ecb_aes); + free(singleton); + singleton = NULL; return NULL; } - crypto->cmac_aes = cmac_aes_setup(); - if (crypto->cmac_aes < 0) { - close(crypto->urandom); - close(crypto->ecb_aes); - free(crypto); + singleton->cmac_aes = cmac_aes_setup(); + if (singleton->cmac_aes < 0) { + close(singleton->urandom); + close(singleton->ecb_aes); + free(singleton); + singleton = NULL; return NULL; } - return bt_crypto_ref(crypto); + return bt_crypto_ref(singleton); } struct bt_crypto *bt_crypto_ref(struct bt_crypto *crypto) @@ -179,6 +185,7 @@ void bt_crypto_unref(struct bt_crypto *crypto) close(crypto->cmac_aes); free(crypto); + singleton = NULL; } bool bt_crypto_random_bytes(struct bt_crypto *crypto,
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> This makes bt_crypto always return the same instance thus avoiding the problem of having multiple PF sockets opened which may hit the file descriptor limit. --- src/shared/crypto.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-)