aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/subsys/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2020-04-20 00:33:55 +0200
committerHauke Mehrtens <hauke@hauke-m.de>2020-05-21 14:39:34 +0200
commit289c6324259e46a35885af112dff5588c866a5a3 (patch)
treee463595936054cde0b7ee4473f5e0fa31d905d4b /package/kernel/mac80211/patches/subsys/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch
parent64f343a881a95fd82359eeb81651a2845a8a2dc4 (diff)
downloadupstream-289c6324259e46a35885af112dff5588c866a5a3.tar.gz
upstream-289c6324259e46a35885af112dff5588c866a5a3.tar.bz2
upstream-289c6324259e46a35885af112dff5588c866a5a3.zip
mac80211: Update to version 5.7-rc3-1
This updates the mac80211 backport. The removed patches are already integrated in the upstream version. The 131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch patch was manually adapted to the changes in kernel 5.7. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'package/kernel/mac80211/patches/subsys/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch')
-rw-r--r--package/kernel/mac80211/patches/subsys/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch99
1 files changed, 65 insertions, 34 deletions
diff --git a/package/kernel/mac80211/patches/subsys/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch b/package/kernel/mac80211/patches/subsys/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch
index 02e523878e..c3bf7ccc7a 100644
--- a/package/kernel/mac80211/patches/subsys/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch
+++ b/package/kernel/mac80211/patches/subsys/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch
@@ -11,14 +11,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/mac80211/aes_cmac.c
+++ b/net/mac80211/aes_cmac.c
-@@ -19,50 +19,126 @@
+@@ -19,67 +19,151 @@
#define CMAC_TLEN_256 16 /* CMAC TLen = 128 bits (16 octets) */
#define AAD_LEN 20
-static const u8 zero[CMAC_TLEN_256];
-void ieee80211_aes_cmac(struct crypto_shash *tfm, const u8 *aad,
-- const u8 *data, size_t data_len, u8 *mic)
+void gf_mulx(u8 *pad)
+{
+ int i, carry;
@@ -34,9 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+void aes_cmac_vector(struct crypto_cipher *tfm, size_t num_elem,
+ const u8 *addr[], const size_t *len, u8 *mac,
+ size_t mac_len)
- {
-- SHASH_DESC_ON_STACK(desc, tfm);
-- u8 out[AES_BLOCK_SIZE];
++{
+ u8 cbc[AES_BLOCK_SIZE], pad[AES_BLOCK_SIZE];
+ const u8 *pos, *end;
+ size_t i, e, left, total_len;
@@ -88,30 +85,48 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ crypto_cipher_encrypt_one(tfm, pad, pad);
+ memcpy(mac, pad, mac_len);
+}
++
++
++void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad,
+ const u8 *data, size_t data_len, u8 *mic)
+ {
+- SHASH_DESC_ON_STACK(desc, tfm);
+- u8 out[AES_BLOCK_SIZE];
++ const u8 *addr[4];
++ size_t len[4];
++ u8 zero[CMAC_TLEN];
+ const __le16 *fc;
- desc->tfm = tfm;
-
+-
- crypto_shash_init(desc);
- crypto_shash_update(desc, aad, AAD_LEN);
-- crypto_shash_update(desc, data, data_len - CMAC_TLEN);
-- crypto_shash_finup(desc, zero, CMAC_TLEN, out);
-+void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad,
-+ const u8 *data, size_t data_len, u8 *mic)
-+{
-+ const u8 *addr[3];
-+ size_t len[3];
-+ u8 zero[CMAC_TLEN];
-+
+ memset(zero, 0, CMAC_TLEN);
+ addr[0] = aad;
+ len[0] = AAD_LEN;
-+ addr[1] = data;
-+ len[1] = data_len - CMAC_TLEN;
-+ addr[2] = zero;
-+ len[2] = CMAC_TLEN;
-
+ fc = (const __le16 *)aad;
+ if (ieee80211_is_beacon(*fc)) {
+ /* mask Timestamp field to zero */
+- crypto_shash_update(desc, zero, 8);
+- crypto_shash_update(desc, data + 8, data_len - 8 - CMAC_TLEN);
++ addr[1] = zero;
++ len[1] = 8;
++ addr[2] = data + 8;
++ len[2] = data_len - 8 - CMAC_TLEN;
++ addr[3] = zero;
++ len[3] = CMAC_TLEN;
++ aes_cmac_vector(tfm, 4, addr, len, mic, CMAC_TLEN);
+ } else {
+- crypto_shash_update(desc, data, data_len - CMAC_TLEN);
++ addr[1] = data;
++ len[1] = data_len - CMAC_TLEN;
++ addr[2] = zero;
++ len[2] = CMAC_TLEN;
++ aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN);
+ }
+- crypto_shash_finup(desc, zero, CMAC_TLEN, out);
+-
- memcpy(mic, out, CMAC_TLEN);
-+ aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN);
}
-void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad,
@@ -119,25 +134,41 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
const u8 *data, size_t data_len, u8 *mic)
{
- SHASH_DESC_ON_STACK(desc, tfm);
-+ const u8 *addr[3];
-+ size_t len[3];
++ const u8 *addr[4];
++ size_t len[4];
+ u8 zero[CMAC_TLEN_256];
-+
-+ memset(zero, 0, CMAC_TLEN_256);
-+ addr[0] = aad;
-+ len[0] = AAD_LEN;
-+ addr[1] = data;
-+ len[1] = data_len - CMAC_TLEN_256;
-+ addr[2] = zero;
-+ len[2] = CMAC_TLEN_256;
+ const __le16 *fc;
- desc->tfm = tfm;
-
- crypto_shash_init(desc);
- crypto_shash_update(desc, aad, AAD_LEN);
-- crypto_shash_update(desc, data, data_len - CMAC_TLEN_256);
++ memset(zero, 0, CMAC_TLEN_256);
++ addr[0] = aad;
++ len[0] = AAD_LEN;
++ addr[1] = data;
+ fc = (const __le16 *)aad;
+ if (ieee80211_is_beacon(*fc)) {
+ /* mask Timestamp field to zero */
+- crypto_shash_update(desc, zero, 8);
+- crypto_shash_update(desc, data + 8,
+- data_len - 8 - CMAC_TLEN_256);
++ addr[1] = zero;
++ len[1] = 8;
++ addr[2] = data + 8;
++ len[2] = data_len - 8 - CMAC_TLEN_256;
++ addr[3] = zero;
++ len[3] = CMAC_TLEN_256;
++ aes_cmac_vector(tfm, 4, addr, len, mic, CMAC_TLEN_256);
+ } else {
+- crypto_shash_update(desc, data, data_len - CMAC_TLEN_256);
++ addr[1] = data;
++ len[1] = data_len - CMAC_TLEN_256;
++ addr[2] = zero;
++ len[2] = CMAC_TLEN_256;
++ aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN_256);
+ }
- crypto_shash_finup(desc, zero, CMAC_TLEN_256, mic);
-+ aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN_256);
}
-struct crypto_shash *ieee80211_aes_cmac_key_setup(const u8 key[],
@@ -188,7 +219,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#endif /* AES_CMAC_H */
--- a/net/mac80211/key.h
+++ b/net/mac80211/key.h
-@@ -93,7 +93,7 @@ struct ieee80211_key {
+@@ -94,7 +94,7 @@ struct ieee80211_key {
} ccmp;
struct {
u8 rx_pn[IEEE80211_CMAC_PN_LEN];