.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) 2014 Fraunhofer ITWM |
---|
3 | | - * |
---|
4 | | - * This program is free software; you can redistribute it and/or modify |
---|
5 | | - * it under the terms of the GNU General Public License version 2 |
---|
6 | | - * as published by the Free Software Foundation. |
---|
7 | | - * |
---|
8 | | - * This program is distributed in the hope that it will be useful, |
---|
9 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
10 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
11 | | - * GNU General Public License for more details. |
---|
12 | 4 | * |
---|
13 | 5 | * Written by: |
---|
14 | 6 | * Phoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de> |
---|
.. | .. |
---|
57 | 49 | |
---|
58 | 50 | msl = container_of(sl, struct mac802154_llsec_seclevel, level); |
---|
59 | 51 | list_del(&sl->list); |
---|
60 | | - kzfree(msl); |
---|
| 52 | + kfree_sensitive(msl); |
---|
61 | 53 | } |
---|
62 | 54 | |
---|
63 | 55 | list_for_each_entry_safe(dev, dn, &sec->table.devices, list) { |
---|
.. | .. |
---|
74 | 66 | mkey = container_of(key->key, struct mac802154_llsec_key, key); |
---|
75 | 67 | list_del(&key->list); |
---|
76 | 68 | llsec_key_put(mkey); |
---|
77 | | - kzfree(key); |
---|
| 69 | + kfree_sensitive(key); |
---|
78 | 70 | } |
---|
79 | 71 | } |
---|
80 | 72 | |
---|
.. | .. |
---|
146 | 138 | goto err_tfm; |
---|
147 | 139 | } |
---|
148 | 140 | |
---|
149 | | - key->tfm0 = crypto_alloc_skcipher("ctr(aes)", 0, CRYPTO_ALG_ASYNC); |
---|
| 141 | + key->tfm0 = crypto_alloc_sync_skcipher("ctr(aes)", 0, 0); |
---|
150 | 142 | if (IS_ERR(key->tfm0)) |
---|
151 | 143 | goto err_tfm; |
---|
152 | 144 | |
---|
153 | | - if (crypto_skcipher_setkey(key->tfm0, template->key, |
---|
| 145 | + if (crypto_sync_skcipher_setkey(key->tfm0, template->key, |
---|
154 | 146 | IEEE802154_LLSEC_KEY_SIZE)) |
---|
155 | 147 | goto err_tfm0; |
---|
156 | 148 | |
---|
157 | 149 | return key; |
---|
158 | 150 | |
---|
159 | 151 | err_tfm0: |
---|
160 | | - crypto_free_skcipher(key->tfm0); |
---|
| 152 | + crypto_free_sync_skcipher(key->tfm0); |
---|
161 | 153 | err_tfm: |
---|
162 | 154 | for (i = 0; i < ARRAY_SIZE(key->tfm); i++) |
---|
163 | 155 | if (!IS_ERR_OR_NULL(key->tfm[i])) |
---|
164 | 156 | crypto_free_aead(key->tfm[i]); |
---|
165 | 157 | |
---|
166 | | - kzfree(key); |
---|
| 158 | + kfree_sensitive(key); |
---|
167 | 159 | return NULL; |
---|
168 | 160 | } |
---|
169 | 161 | |
---|
.. | .. |
---|
177 | 169 | for (i = 0; i < ARRAY_SIZE(key->tfm); i++) |
---|
178 | 170 | crypto_free_aead(key->tfm[i]); |
---|
179 | 171 | |
---|
180 | | - crypto_free_skcipher(key->tfm0); |
---|
181 | | - kzfree(key); |
---|
| 172 | + crypto_free_sync_skcipher(key->tfm0); |
---|
| 173 | + kfree_sensitive(key); |
---|
182 | 174 | } |
---|
183 | 175 | |
---|
184 | 176 | static struct mac802154_llsec_key* |
---|
.. | .. |
---|
269 | 261 | return 0; |
---|
270 | 262 | |
---|
271 | 263 | fail: |
---|
272 | | - kzfree(new); |
---|
| 264 | + kfree_sensitive(new); |
---|
273 | 265 | return -ENOMEM; |
---|
274 | 266 | } |
---|
275 | 267 | |
---|
.. | .. |
---|
349 | 341 | devkey); |
---|
350 | 342 | |
---|
351 | 343 | list_del(&pos->list); |
---|
352 | | - kzfree(devkey); |
---|
| 344 | + kfree_sensitive(devkey); |
---|
353 | 345 | } |
---|
354 | 346 | |
---|
355 | | - kzfree(dev); |
---|
| 347 | + kfree_sensitive(dev); |
---|
356 | 348 | } |
---|
357 | 349 | |
---|
358 | 350 | int mac802154_llsec_dev_add(struct mac802154_llsec *sec, |
---|
.. | .. |
---|
622 | 614 | { |
---|
623 | 615 | u8 iv[16]; |
---|
624 | 616 | struct scatterlist src; |
---|
625 | | - SKCIPHER_REQUEST_ON_STACK(req, key->tfm0); |
---|
| 617 | + SYNC_SKCIPHER_REQUEST_ON_STACK(req, key->tfm0); |
---|
626 | 618 | int err, datalen; |
---|
627 | 619 | unsigned char *data; |
---|
628 | 620 | |
---|
.. | .. |
---|
632 | 624 | datalen = skb_tail_pointer(skb) - data; |
---|
633 | 625 | sg_init_one(&src, data, datalen); |
---|
634 | 626 | |
---|
635 | | - skcipher_request_set_tfm(req, key->tfm0); |
---|
| 627 | + skcipher_request_set_sync_tfm(req, key->tfm0); |
---|
636 | 628 | skcipher_request_set_callback(req, 0, NULL, NULL); |
---|
637 | 629 | skcipher_request_set_crypt(req, &src, &src, datalen, iv); |
---|
638 | 630 | err = crypto_skcipher_encrypt(req); |
---|
.. | .. |
---|
690 | 682 | |
---|
691 | 683 | rc = crypto_aead_encrypt(req); |
---|
692 | 684 | |
---|
693 | | - kzfree(req); |
---|
| 685 | + kfree_sensitive(req); |
---|
694 | 686 | |
---|
695 | 687 | return rc; |
---|
696 | 688 | } |
---|
.. | .. |
---|
840 | 832 | unsigned char *data; |
---|
841 | 833 | int datalen; |
---|
842 | 834 | struct scatterlist src; |
---|
843 | | - SKCIPHER_REQUEST_ON_STACK(req, key->tfm0); |
---|
| 835 | + SYNC_SKCIPHER_REQUEST_ON_STACK(req, key->tfm0); |
---|
844 | 836 | int err; |
---|
845 | 837 | |
---|
846 | 838 | llsec_geniv(iv, dev_addr, &hdr->sec); |
---|
.. | .. |
---|
849 | 841 | |
---|
850 | 842 | sg_init_one(&src, data, datalen); |
---|
851 | 843 | |
---|
852 | | - skcipher_request_set_tfm(req, key->tfm0); |
---|
| 844 | + skcipher_request_set_sync_tfm(req, key->tfm0); |
---|
853 | 845 | skcipher_request_set_callback(req, 0, NULL, NULL); |
---|
854 | 846 | skcipher_request_set_crypt(req, &src, &src, datalen, iv); |
---|
855 | 847 | |
---|
.. | .. |
---|
894 | 886 | |
---|
895 | 887 | rc = crypto_aead_decrypt(req); |
---|
896 | 888 | |
---|
897 | | - kzfree(req); |
---|
| 889 | + kfree_sensitive(req); |
---|
898 | 890 | skb_trim(skb, skb->len - authlen); |
---|
899 | 891 | |
---|
900 | 892 | return rc; |
---|
.. | .. |
---|
934 | 926 | if (!devkey) |
---|
935 | 927 | list_add_rcu(&next->devkey.list, &dev->dev.keys); |
---|
936 | 928 | else |
---|
937 | | - kzfree(next); |
---|
| 929 | + kfree_sensitive(next); |
---|
938 | 930 | |
---|
939 | 931 | spin_unlock_bh(&dev->lock); |
---|
940 | 932 | } |
---|