summarylogtreecommitdiffstats
path: root/linux58.patch
blob: a1791ad45d2f7692883e7c6c3a18cc603a5cecf5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
From 29968d5c0d2e93e3f5b8d36d6aabec7a7f960220 Mon Sep 17 00:00:00 2001
From: Juan Roberto <juanro.garcia@educarex.es>
Date: Sat, 12 Sep 2020 21:48:09 +0200
Subject: [PATCH] Add Fix for Kernel 5.8 from
 https://github.com/aircrack-ng/rtl8188eus/pull/77

---
 core/rtw_security.c           | 17 ++++++++++++++++-
 include/rtw_security.h        |  2 ++
 os_dep/linux/ioctl_cfg80211.c | 31 +++++++++++++++++++++++++++++--
 os_dep/linux/ioctl_cfg80211.h |  4 ++++
 rtw88_blacklist.conf          |  3 +++
 5 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/core/rtw_security.c b/core/rtw_security.c
index 5807521..9e95ff6 100755
--- a/core/rtw_security.c
+++ b/core/rtw_security.c
@@ -2133,6 +2133,7 @@ u32	rtw_BIP_verify(_adapter *padapter, u8 *whdr_pos, sint flen
 #ifndef PLATFORM_FREEBSD
 #if defined(CONFIG_TDLS)
 /* compress 512-bits */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 static int sha256_compress(struct sha256_state *md, unsigned char *buf)
 {
 	u32 S[8], W[64], t0, t1;
@@ -2179,8 +2180,10 @@ static int sha256_compress(struct sha256_state *md, unsigned char *buf)
 		md->state[i] = md->state[i] + S[i];
 	return 0;
 }
+#endif
 
 /* Initialize the hash state */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 static void sha256_init(struct sha256_state *md)
 {
 	md->curlen = 0;
@@ -2194,6 +2197,7 @@ static void sha256_init(struct sha256_state *md)
 	md->state[6] = 0x1F83D9ABUL;
 	md->state[7] = 0x5BE0CD19UL;
 }
+#endif
 
 /**
    Process a block of memory though the hash
@@ -2202,6 +2206,8 @@ static void sha256_init(struct sha256_state *md)
    @param inlen  The length of the data (octets)
    @return CRYPT_OK if successful
 */
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 static int sha256_process(struct sha256_state *md, unsigned char *in,
 			  unsigned long inlen)
 {
@@ -2235,7 +2241,7 @@ static int sha256_process(struct sha256_state *md, unsigned char *in,
 
 	return 0;
 }
-
+#endif
 
 /**
    Terminate the hash to get the digest
@@ -2243,6 +2249,7 @@ static int sha256_process(struct sha256_state *md, unsigned char *in,
    @param out [out] The destination of the hash (32 bytes)
    @return CRYPT_OK if successful
 */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 static int sha256_done(struct sha256_state *md, unsigned char *out)
 {
 	int i;
@@ -2281,6 +2288,7 @@ static int sha256_done(struct sha256_state *md, unsigned char *out)
 
 	return 0;
 }
+#endif
 
 /**
  * sha256_vector - SHA256 hash for data vector
@@ -2290,6 +2298,8 @@ static int sha256_done(struct sha256_state *md, unsigned char *out)
  * @mac: Buffer for the hash
  * Returns: 0 on success, -1 of failure
  */
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 static int sha256_vector(size_t num_elem, u8 *addr[], size_t *len,
 			 u8 *mac)
 {
@@ -2304,6 +2314,7 @@ static int sha256_vector(size_t num_elem, u8 *addr[], size_t *len,
 		return -1;
 	return 0;
 }
+#endif
 
 static u8 os_strlen(const char *s)
 {
@@ -2344,6 +2355,7 @@ static int os_memcmp(const void *s1, const void *s2, u8 n)
  * @mac: Buffer for the hash (32 bytes)
  */
 #if defined(CONFIG_TDLS)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 static void hmac_sha256_vector(u8 *key, size_t key_len, size_t num_elem,
 			       u8 *addr[], size_t *len, u8 *mac)
 {
@@ -2405,6 +2417,7 @@ static void hmac_sha256_vector(u8 *key, size_t key_len, size_t num_elem,
 	_len[1] = 32;
 	sha256_vector(2, _addr, _len, mac);
 }
+#endif
 #endif /* CONFIG_TDLS */
 #endif /* PLATFORM_FREEBSD */
 /**
@@ -2422,6 +2435,7 @@ static void hmac_sha256_vector(u8 *key, size_t key_len, size_t num_elem,
  */
 #ifndef PLATFORM_FREEBSD /* Baron */
 #if defined(CONFIG_TDLS)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 static void sha256_prf(u8 *key, size_t key_len, char *label,
 		       u8 *data, size_t data_len, u8 *buf, size_t buf_len)
 {
@@ -2459,6 +2473,7 @@ static void sha256_prf(u8 *key, size_t key_len, char *label,
 	}
 }
 #endif
+#endif
 #endif /* PLATFORM_FREEBSD Baron */
 
 /* AES tables*/
diff --git a/include/rtw_security.h b/include/rtw_security.h
index 0adc700..481064c 100755
--- a/include/rtw_security.h
+++ b/include/rtw_security.h
@@ -249,11 +249,13 @@ struct security_priv {
 #define SEC_IS_BIP_KEY_INSTALLED(sec) _FALSE
 #endif
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 struct sha256_state {
 	u64 length;
 	u32 state[8], curlen;
 	u8 buf[64];
 };
+#endif
 
 #define GET_ENCRY_ALGO(psecuritypriv, psta, encry_algo, bmcst)\
 	do {\
diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c
index 128a18a..c7a91f2 100755
--- a/os_dep/linux/ioctl_cfg80211.c
+++ b/os_dep/linux/ioctl_cfg80211.c
@@ -7482,6 +7482,7 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy,
 	return ret;
 }
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0))
 	struct wireless_dev *wdev,
@@ -7489,7 +7490,17 @@ static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
 	struct net_device *ndev,
 #endif
 	u16 frame_type, bool reg)
+#else
+static void cfg80211_rtw_update_mgmt_frame_register(struct wiphy *wiphy,
+						    struct wireless_dev *wdev,
+						    struct mgmt_frame_regs *upd)
+#endif
+
 {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0))
+	u32 rtw_mask = BIT(IEEE80211_STYPE_PROBE_REQ >> 4);
+#endif
+    
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0))
 	struct net_device *ndev = wdev_to_ndev(wdev);
 #endif
@@ -7504,10 +7515,18 @@ static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
 	pwdev_priv = adapter_wdev_data(adapter);
 
 #ifdef CONFIG_DEBUG_CFG80211
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 	RTW_INFO(FUNC_ADPT_FMT" frame_type:%x, reg:%d\n", FUNC_ADPT_ARG(adapter),
 		frame_type, reg);
+#else
+	RTW_INFO(FUNC_ADPT_FMT " old_regs:%x new_regs:%x\n",
+		 FUNC_ADPT_ARG(adapter), pwdev_priv->mgmt_mask, upd->interface_stypes);
+#endif    
 #endif
 
+	/* Wait QC Verify */
+	return;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
 	switch (frame_type) {
 	case IEEE80211_STYPE_AUTH: /* 0x00B0 */
 		if (reg > 0)
@@ -7515,7 +7534,6 @@ static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
 		else
 			CLR_CFG80211_REPORT_MGMT(pwdev_priv, IEEE80211_STYPE_AUTH, reg);
 		break;
-#ifdef not_yet
 	case IEEE80211_STYPE_PROBE_REQ: /* 0x0040 */
 		if (reg > 0)
 			SET_CFG80211_REPORT_MGMT(pwdev_priv, IEEE80211_STYPE_PROBE_REQ, reg);
@@ -7528,11 +7546,16 @@ static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
 		else
 			CLR_CFG80211_REPORT_MGMT(pwdev_priv, IEEE80211_STYPE_ACTION, reg);
 		break;
-#endif
 	default:
 		break;
 	}
+#else
+	if ((upd->interface_stypes & rtw_mask) == (pwdev_priv->mgmt_mask & rtw_mask))
+ 		return;
 
+	pwdev_priv->mgmt_mask = upd->interface_stypes;
+#endif
+	
 exit:
 	return;
 }
@@ -9915,7 +9938,11 @@ static struct cfg80211_ops rtw_cfg80211_ops = {
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE)
 	.mgmt_tx = cfg80211_rtw_mgmt_tx,
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))	
 	.mgmt_frame_register = cfg80211_rtw_mgmt_frame_register,
+#else
+	.update_mgmt_frame_registrations = cfg80211_rtw_update_mgmt_frame_register,
+#endif
 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 34) && LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
 	.action = cfg80211_rtw_mgmt_tx,
 #endif
diff --git a/os_dep/linux/ioctl_cfg80211.h b/os_dep/linux/ioctl_cfg80211.h
index cfbe9cd..f46d7e3 100755
--- a/os_dep/linux/ioctl_cfg80211.h
+++ b/os_dep/linux/ioctl_cfg80211.h
@@ -167,6 +167,10 @@ struct rtw_wdev_priv {
 	bool block;
 	bool block_scan;
 	bool power_mgmt;
+    
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)
+	u32 mgmt_mask;
+	#endif
 
 	/* report mgmt_frame registered */
 	u16 report_mgmt;