Rework the code to get rid of some extra kernel module dependencies introduced in the last update. Signed-off-by: Felix Fietkau <nbd@nbd.name>master
parent
efbd4e721d
commit
609208597b
@ -1,81 +0,0 @@ |
|||||||
From f192535ab136905d87bc75a4e848b66f0aef315e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
Date: Sun, 1 Oct 2017 16:05:24 +0200
|
|
||||||
Subject: header: fix compile error on PowerPC (PPC_85xx)
|
|
||||||
|
|
||||||
Including linux/interrupt.h in linux/hrtimer.h causes this error message
|
|
||||||
on PowerPC builds on x86, ARM and MIPS it works:
|
|
||||||
|
|
||||||
CC [M] /backports-4.14-rc2-1/compat/main.o
|
|
||||||
In file included from /backports-4.14-rc2-1/backport-include/linux/printk.h:5:0,
|
|
||||||
from ./include/linux/kernel.h:13,
|
|
||||||
from /backports-4.14-rc2-1/backport-include/linux/kernel.h:3,
|
|
||||||
from ./include/linux/list.h:8,
|
|
||||||
from /backports-4.14-rc2-1/backport-include/linux/list.h:3,
|
|
||||||
from ./include/linux/module.h:9,
|
|
||||||
from /backports-4.14-rc2-1/backport-include/linux/module.h:3,
|
|
||||||
from /backports-4.14-rc2-1/compat/main.c:1:
|
|
||||||
./include/linux/ratelimit.h: In function 'ratelimit_state_exit':
|
|
||||||
./include/linux/ratelimit.h:62:11: error: dereferencing pointer to incomplete type 'struct task_struct'
|
|
||||||
current->comm, rs->missed);
|
|
||||||
^
|
|
||||||
./include/linux/printk.h:279:37: note: in definition of macro 'pr_warning'
|
|
||||||
printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
|
|
||||||
^
|
|
||||||
./include/linux/ratelimit.h:61:3: note: in expansion of macro 'pr_warn'
|
|
||||||
pr_warn("%s: %d output lines suppressed due to ratelimiting\n",
|
|
||||||
^
|
|
||||||
|
|
||||||
The backport of the hrtimer_start() functions needs the
|
|
||||||
linux/interrupt.h because some parts are defined there. Fix this by
|
|
||||||
moving the hrtimer_start() backport to the linux/interrupt.h backport
|
|
||||||
header file.
|
|
||||||
|
|
||||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
---
|
|
||||||
backport-include/linux/hrtimer.h | 17 -----------------
|
|
||||||
backport-include/linux/interrupt.h | 17 ++++++++++++++++-
|
|
||||||
2 files changed, 16 insertions(+), 18 deletions(-)
|
|
||||||
delete mode 100644 backport-include/linux/hrtimer.h
|
|
||||||
|
|
||||||
--- a/backport-include/linux/hrtimer.h
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,17 +0,0 @@
|
|
||||||
-#ifndef _BP_HRTIMER_H
|
|
||||||
-#define _BP_HRTIMER_H
|
|
||||||
-#include <linux/version.h>
|
|
||||||
-#include_next <linux/hrtimer.h>
|
|
||||||
-#include <linux/interrupt.h>
|
|
||||||
-
|
|
||||||
-#if LINUX_VERSION_IS_LESS(4,10,0)
|
|
||||||
-static inline void backport_hrtimer_start(struct hrtimer *timer, s64 time,
|
|
||||||
- const enum hrtimer_mode mode)
|
|
||||||
-{
|
|
||||||
- ktime_t _time = { .tv64 = time };
|
|
||||||
- hrtimer_start(timer, _time, mode);
|
|
||||||
-}
|
|
||||||
-#define hrtimer_start LINUX_BACKPORT(hrtimer_start)
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
-#endif /* _BP_HRTIMER_H */
|
|
||||||
--- a/backport-include/linux/interrupt.h
|
|
||||||
+++ b/backport-include/linux/interrupt.h
|
|
||||||
@@ -1,2 +1,17 @@
|
|
||||||
-#include <linux/hrtimer.h>
|
|
||||||
+#ifndef _BP_LINUX_INTERRUPT_H
|
|
||||||
+#define _BP_LINUX_INTERRUPT_H
|
|
||||||
+#include <linux/version.h>
|
|
||||||
#include_next <linux/interrupt.h>
|
|
||||||
+#include <linux/ktime.h>
|
|
||||||
+
|
|
||||||
+#if LINUX_VERSION_IS_LESS(4,10,0)
|
|
||||||
+static inline void backport_hrtimer_start(struct hrtimer *timer, s64 time,
|
|
||||||
+ const enum hrtimer_mode mode)
|
|
||||||
+{
|
|
||||||
+ ktime_t _time = { .tv64 = time };
|
|
||||||
+ hrtimer_start(timer, _time, mode);
|
|
||||||
+}
|
|
||||||
+#define hrtimer_start LINUX_BACKPORT(hrtimer_start)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#endif /* _BP_LINUX_INTERRUPT_H */
|
|
@ -0,0 +1,32 @@ |
|||||||
|
Disable FILS support, since it pulls in crypto hash support
|
||||||
|
|
||||||
|
--- a/net/mac80211/fils_aead.h
|
||||||
|
+++ b/net/mac80211/fils_aead.h
|
||||||
|
@@ -10,7 +10,7 @@
|
||||||
|
#ifndef FILS_AEAD_H
|
||||||
|
#define FILS_AEAD_H
|
||||||
|
|
||||||
|
-#if LINUX_VERSION_IS_GEQ(4,3,0)
|
||||||
|
+#if 0 /* LINUX_VERSION_IS_GEQ(4,3,0) */
|
||||||
|
int fils_encrypt_assoc_req(struct sk_buff *skb,
|
||||||
|
struct ieee80211_mgd_assoc_data *assoc_data);
|
||||||
|
int fils_decrypt_assoc_resp(struct ieee80211_sub_if_data *sdata,
|
||||||
|
--- a/net/mac80211/fils_aead.c
|
||||||
|
+++ b/net/mac80211/fils_aead.c
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-#if LINUX_VERSION_IS_GEQ(4,3,0)
|
||||||
|
+#if 0 /* LINUX_VERSION_IS_GEQ(4,3,0) */
|
||||||
|
/*
|
||||||
|
* FILS AEAD for (Re)Association Request/Response frames
|
||||||
|
* Copyright 2016, Qualcomm Atheros, Inc.
|
||||||
|
--- a/net/mac80211/main.c
|
||||||
|
+++ b/net/mac80211/main.c
|
||||||
|
@@ -550,7 +550,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||||
|
NL80211_FEATURE_MAC_ON_CREATE |
|
||||||
|
NL80211_FEATURE_USERSPACE_MPM |
|
||||||
|
NL80211_FEATURE_FULL_AP_CLIENT_STATE;
|
||||||
|
-#if LINUX_VERSION_IS_GEQ(4,3,0)
|
||||||
|
+#if 0 /* LINUX_VERSION_IS_GEQ(4,3,0) */
|
||||||
|
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_FILS_STA);
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,198 @@ |
|||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Sat, 7 Oct 2017 09:37:28 +0200
|
||||||
|
Subject: [PATCH] Revert "mac80211: aes-cmac: switch to shash CMAC
|
||||||
|
driver"
|
||||||
|
|
||||||
|
This reverts commit 26717828b75dd5c46e97f7f4a9b937d038bb2852.
|
||||||
|
Reduces mac80211 dependencies for LEDE
|
||||||
|
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/aes_cmac.c
|
||||||
|
+++ b/net/mac80211/aes_cmac.c
|
||||||
|
@@ -22,50 +22,126 @@
|
||||||
|
#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)
|
||||||
|
{
|
||||||
|
- SHASH_DESC_ON_STACK(desc, tfm);
|
||||||
|
- u8 out[AES_BLOCK_SIZE];
|
||||||
|
+ int i, carry;
|
||||||
|
|
||||||
|
- desc->tfm = tfm;
|
||||||
|
+ carry = pad[0] & 0x80;
|
||||||
|
+ for (i = 0; i < AES_BLOCK_SIZE - 1; i++)
|
||||||
|
+ pad[i] = (pad[i] << 1) | (pad[i + 1] >> 7);
|
||||||
|
+ pad[AES_BLOCK_SIZE - 1] <<= 1;
|
||||||
|
+ if (carry)
|
||||||
|
+ pad[AES_BLOCK_SIZE - 1] ^= 0x87;
|
||||||
|
+}
|
||||||
|
|
||||||
|
- 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 aes_cmac_vector(struct crypto_cipher *tfm, size_t num_elem,
|
||||||
|
+ const u8 *addr[], const size_t *len, u8 *mac,
|
||||||
|
+ size_t mac_len)
|
||||||
|
+{
|
||||||
|
+ u8 cbc[AES_BLOCK_SIZE], pad[AES_BLOCK_SIZE];
|
||||||
|
+ const u8 *pos, *end;
|
||||||
|
+ size_t i, e, left, total_len;
|
||||||
|
|
||||||
|
- memcpy(mic, out, CMAC_TLEN);
|
||||||
|
+ memset(cbc, 0, AES_BLOCK_SIZE);
|
||||||
|
+
|
||||||
|
+ total_len = 0;
|
||||||
|
+ for (e = 0; e < num_elem; e++)
|
||||||
|
+ total_len += len[e];
|
||||||
|
+ left = total_len;
|
||||||
|
+
|
||||||
|
+ e = 0;
|
||||||
|
+ pos = addr[0];
|
||||||
|
+ end = pos + len[0];
|
||||||
|
+
|
||||||
|
+ while (left >= AES_BLOCK_SIZE) {
|
||||||
|
+ for (i = 0; i < AES_BLOCK_SIZE; i++) {
|
||||||
|
+ cbc[i] ^= *pos++;
|
||||||
|
+ if (pos >= end) {
|
||||||
|
+ e++;
|
||||||
|
+ pos = addr[e];
|
||||||
|
+ end = pos + len[e];
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (left > AES_BLOCK_SIZE)
|
||||||
|
+ crypto_cipher_encrypt_one(tfm, cbc, cbc);
|
||||||
|
+ left -= AES_BLOCK_SIZE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ memset(pad, 0, AES_BLOCK_SIZE);
|
||||||
|
+ crypto_cipher_encrypt_one(tfm, pad, pad);
|
||||||
|
+ gf_mulx(pad);
|
||||||
|
+
|
||||||
|
+ if (left || total_len == 0) {
|
||||||
|
+ for (i = 0; i < left; i++) {
|
||||||
|
+ cbc[i] ^= *pos++;
|
||||||
|
+ if (pos >= end) {
|
||||||
|
+ e++;
|
||||||
|
+ pos = addr[e];
|
||||||
|
+ end = pos + len[e];
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ cbc[left] ^= 0x80;
|
||||||
|
+ gf_mulx(pad);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < AES_BLOCK_SIZE; i++)
|
||||||
|
+ pad[i] ^= cbc[i];
|
||||||
|
+ crypto_cipher_encrypt_one(tfm, pad, pad);
|
||||||
|
+ memcpy(mac, pad, mac_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad,
|
||||||
|
+
|
||||||
|
+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;
|
||||||
|
+
|
||||||
|
+ aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void ieee80211_aes_cmac_256(struct crypto_cipher *tfm, const u8 *aad,
|
||||||
|
const u8 *data, size_t data_len, u8 *mic)
|
||||||
|
{
|
||||||
|
- SHASH_DESC_ON_STACK(desc, tfm);
|
||||||
|
+ const u8 *addr[3];
|
||||||
|
+ size_t len[3];
|
||||||
|
+ u8 zero[CMAC_TLEN_256];
|
||||||
|
|
||||||
|
- desc->tfm = tfm;
|
||||||
|
+ 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;
|
||||||
|
|
||||||
|
- crypto_shash_init(desc);
|
||||||
|
- crypto_shash_update(desc, aad, AAD_LEN);
|
||||||
|
- crypto_shash_update(desc, data, data_len - 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[],
|
||||||
|
- size_t key_len)
|
||||||
|
+struct crypto_cipher *ieee80211_aes_cmac_key_setup(const u8 key[],
|
||||||
|
+ size_t key_len)
|
||||||
|
{
|
||||||
|
- struct crypto_shash *tfm;
|
||||||
|
+ struct crypto_cipher *tfm;
|
||||||
|
|
||||||
|
- tfm = crypto_alloc_shash("cmac(aes)", 0, 0);
|
||||||
|
+ tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC);
|
||||||
|
if (!IS_ERR(tfm))
|
||||||
|
- crypto_shash_setkey(tfm, key, key_len);
|
||||||
|
+ crypto_cipher_setkey(tfm, key, key_len);
|
||||||
|
|
||||||
|
return tfm;
|
||||||
|
}
|
||||||
|
|
||||||
|
-void ieee80211_aes_cmac_key_free(struct crypto_shash *tfm)
|
||||||
|
+
|
||||||
|
+void ieee80211_aes_cmac_key_free(struct crypto_cipher *tfm)
|
||||||
|
{
|
||||||
|
- crypto_free_shash(tfm);
|
||||||
|
+ crypto_free_cipher(tfm);
|
||||||
|
}
|
||||||
|
--- a/net/mac80211/aes_cmac.h
|
||||||
|
+++ b/net/mac80211/aes_cmac.h
|
||||||
|
@@ -10,14 +10,13 @@
|
||||||
|
#define AES_CMAC_H
|
||||||
|
|
||||||
|
#include <linux/crypto.h>
|
||||||
|
-#include <crypto/hash.h>
|
||||||
|
|
||||||
|
-struct crypto_shash *ieee80211_aes_cmac_key_setup(const u8 key[],
|
||||||
|
- size_t key_len);
|
||||||
|
-void ieee80211_aes_cmac(struct crypto_shash *tfm, const u8 *aad,
|
||||||
|
+struct crypto_cipher *ieee80211_aes_cmac_key_setup(const u8 key[],
|
||||||
|
+ size_t key_len);
|
||||||
|
+void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad,
|
||||||
|
const u8 *data, size_t data_len, u8 *mic);
|
||||||
|
-void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad,
|
||||||
|
+void ieee80211_aes_cmac_256(struct crypto_cipher *tfm, const u8 *aad,
|
||||||
|
const u8 *data, size_t data_len, u8 *mic);
|
||||||
|
-void ieee80211_aes_cmac_key_free(struct crypto_shash *tfm);
|
||||||
|
+void ieee80211_aes_cmac_key_free(struct crypto_cipher *tfm);
|
||||||
|
|
||||||
|
#endif /* AES_CMAC_H */
|
||||||
|
--- a/net/mac80211/key.h
|
||||||
|
+++ b/net/mac80211/key.h
|
||||||
|
@@ -93,7 +93,7 @@ struct ieee80211_key {
|
||||||
|
} ccmp;
|
||||||
|
struct {
|
||||||
|
u8 rx_pn[IEEE80211_CMAC_PN_LEN];
|
||||||
|
- struct crypto_shash *tfm;
|
||||||
|
+ struct crypto_cipher *tfm;
|
||||||
|
u32 replays; /* dot11RSNAStatsCMACReplays */
|
||||||
|
u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
|
||||||
|
} aes_cmac;
|
@ -0,0 +1,10 @@ |
|||||||
|
--- a/net/mac80211/Kconfig
|
||||||
|
+++ b/net/mac80211/Kconfig
|
||||||
|
@@ -5,7 +5,6 @@ config MAC80211
|
||||||
|
depends on CRYPTO
|
||||||
|
depends on CRYPTO_ARC4
|
||||||
|
depends on CRYPTO_AES
|
||||||
|
- depends on CRYPTO_CMAC
|
||||||
|
depends on CRC32
|
||||||
|
---help---
|
||||||
|
This option enables the hardware independent IEEE 802.11
|
@ -1,6 +1,7 @@ |
|||||||
From: Felix Fietkau <nbd@nbd.name>
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
Date: Sun, 23 Jul 2017 14:58:22 +0200
|
Date: Sun, 23 Jul 2017 14:58:22 +0200
|
||||||
Subject: [PATCH] ath9k: fix more-data flag for buffered multicast packets
|
Subject: [PATCH] ath9k: fix more-data flag for buffered multicast
|
||||||
|
packets
|
||||||
|
|
||||||
The flag needs to be cleared for the last packet in the list, not the
|
The flag needs to be cleared for the last packet in the list, not the
|
||||||
first one. Fixes some issues with multicast packet loss for powersave
|
first one. Fixes some issues with multicast packet loss for powersave
|
@ -1,7 +1,7 @@ |
|||||||
From 59f8c22bf1749c4a2b5947bfaebc677c259a1ad6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: dave taht <dave@taht.net>
|
From: dave taht <dave@taht.net>
|
||||||
Date: Wed, 5 Oct 2016 20:09:15 -0700
|
Date: Wed, 5 Oct 2016 20:09:15 -0700
|
||||||
Subject: [PATCH 5/7] Revert "ath10k: disable wake_tx_queue for older devices"
|
Subject: [PATCH] Revert "ath10k: disable wake_tx_queue for older
|
||||||
|
devices"
|
||||||
|
|
||||||
This reverts commit 4ca1807815aa6801aaced7fdefa9edacc2521767
|
This reverts commit 4ca1807815aa6801aaced7fdefa9edacc2521767
|
||||||
in the hope that we've fixed all the performance problems now.
|
in the hope that we've fixed all the performance problems now.
|
Loading…
Reference in new issue