Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.15/0100-4.15.1-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3079 - (show annotations) (download)
Mon Feb 5 11:35:51 2018 UTC (6 years, 2 months ago) by niro
File size: 62211 byte(s)
-linux-4.15.1
1 diff --git a/Makefile b/Makefile
2 index c8b8e902d5a4..af101b556ba0 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 15
9 -SUBLEVEL = 0
10 +SUBLEVEL = 1
11 EXTRAVERSION =
12 NAME = Fearless Coyote
13
14 diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S
15 index 3d09e3aca18d..12e8484a8ee7 100644
16 --- a/arch/x86/crypto/aesni-intel_asm.S
17 +++ b/arch/x86/crypto/aesni-intel_asm.S
18 @@ -90,30 +90,6 @@ SHIFT_MASK: .octa 0x0f0e0d0c0b0a09080706050403020100
19 ALL_F: .octa 0xffffffffffffffffffffffffffffffff
20 .octa 0x00000000000000000000000000000000
21
22 -.section .rodata
23 -.align 16
24 -.type aad_shift_arr, @object
25 -.size aad_shift_arr, 272
26 -aad_shift_arr:
27 - .octa 0xffffffffffffffffffffffffffffffff
28 - .octa 0xffffffffffffffffffffffffffffff0C
29 - .octa 0xffffffffffffffffffffffffffff0D0C
30 - .octa 0xffffffffffffffffffffffffff0E0D0C
31 - .octa 0xffffffffffffffffffffffff0F0E0D0C
32 - .octa 0xffffffffffffffffffffff0C0B0A0908
33 - .octa 0xffffffffffffffffffff0D0C0B0A0908
34 - .octa 0xffffffffffffffffff0E0D0C0B0A0908
35 - .octa 0xffffffffffffffff0F0E0D0C0B0A0908
36 - .octa 0xffffffffffffff0C0B0A090807060504
37 - .octa 0xffffffffffff0D0C0B0A090807060504
38 - .octa 0xffffffffff0E0D0C0B0A090807060504
39 - .octa 0xffffffff0F0E0D0C0B0A090807060504
40 - .octa 0xffffff0C0B0A09080706050403020100
41 - .octa 0xffff0D0C0B0A09080706050403020100
42 - .octa 0xff0E0D0C0B0A09080706050403020100
43 - .octa 0x0F0E0D0C0B0A09080706050403020100
44 -
45 -
46 .text
47
48
49 @@ -257,6 +233,37 @@ aad_shift_arr:
50 pxor \TMP1, \GH # result is in TMP1
51 .endm
52
53 +# Reads DLEN bytes starting at DPTR and stores in XMMDst
54 +# where 0 < DLEN < 16
55 +# Clobbers %rax, DLEN and XMM1
56 +.macro READ_PARTIAL_BLOCK DPTR DLEN XMM1 XMMDst
57 + cmp $8, \DLEN
58 + jl _read_lt8_\@
59 + mov (\DPTR), %rax
60 + MOVQ_R64_XMM %rax, \XMMDst
61 + sub $8, \DLEN
62 + jz _done_read_partial_block_\@
63 + xor %eax, %eax
64 +_read_next_byte_\@:
65 + shl $8, %rax
66 + mov 7(\DPTR, \DLEN, 1), %al
67 + dec \DLEN
68 + jnz _read_next_byte_\@
69 + MOVQ_R64_XMM %rax, \XMM1
70 + pslldq $8, \XMM1
71 + por \XMM1, \XMMDst
72 + jmp _done_read_partial_block_\@
73 +_read_lt8_\@:
74 + xor %eax, %eax
75 +_read_next_byte_lt8_\@:
76 + shl $8, %rax
77 + mov -1(\DPTR, \DLEN, 1), %al
78 + dec \DLEN
79 + jnz _read_next_byte_lt8_\@
80 + MOVQ_R64_XMM %rax, \XMMDst
81 +_done_read_partial_block_\@:
82 +.endm
83 +
84 /*
85 * if a = number of total plaintext bytes
86 * b = floor(a/16)
87 @@ -273,62 +280,30 @@ aad_shift_arr:
88 XMM2 XMM3 XMM4 XMMDst TMP6 TMP7 i i_seq operation
89 MOVADQ SHUF_MASK(%rip), %xmm14
90 mov arg7, %r10 # %r10 = AAD
91 - mov arg8, %r12 # %r12 = aadLen
92 - mov %r12, %r11
93 + mov arg8, %r11 # %r11 = aadLen
94 pxor %xmm\i, %xmm\i
95 pxor \XMM2, \XMM2
96
97 cmp $16, %r11
98 - jl _get_AAD_rest8\num_initial_blocks\operation
99 + jl _get_AAD_rest\num_initial_blocks\operation
100 _get_AAD_blocks\num_initial_blocks\operation:
101 movdqu (%r10), %xmm\i
102 PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data
103 pxor %xmm\i, \XMM2
104 GHASH_MUL \XMM2, \TMP3, \TMP1, \TMP2, \TMP4, \TMP5, \XMM1
105 add $16, %r10
106 - sub $16, %r12
107 sub $16, %r11
108 cmp $16, %r11
109 jge _get_AAD_blocks\num_initial_blocks\operation
110
111 movdqu \XMM2, %xmm\i
112 +
113 + /* read the last <16B of AAD */
114 +_get_AAD_rest\num_initial_blocks\operation:
115 cmp $0, %r11
116 je _get_AAD_done\num_initial_blocks\operation
117
118 - pxor %xmm\i,%xmm\i
119 -
120 - /* read the last <16B of AAD. since we have at least 4B of
121 - data right after the AAD (the ICV, and maybe some CT), we can
122 - read 4B/8B blocks safely, and then get rid of the extra stuff */
123 -_get_AAD_rest8\num_initial_blocks\operation:
124 - cmp $4, %r11
125 - jle _get_AAD_rest4\num_initial_blocks\operation
126 - movq (%r10), \TMP1
127 - add $8, %r10
128 - sub $8, %r11
129 - pslldq $8, \TMP1
130 - psrldq $8, %xmm\i
131 - pxor \TMP1, %xmm\i
132 - jmp _get_AAD_rest8\num_initial_blocks\operation
133 -_get_AAD_rest4\num_initial_blocks\operation:
134 - cmp $0, %r11
135 - jle _get_AAD_rest0\num_initial_blocks\operation
136 - mov (%r10), %eax
137 - movq %rax, \TMP1
138 - add $4, %r10
139 - sub $4, %r10
140 - pslldq $12, \TMP1
141 - psrldq $4, %xmm\i
142 - pxor \TMP1, %xmm\i
143 -_get_AAD_rest0\num_initial_blocks\operation:
144 - /* finalize: shift out the extra bytes we read, and align
145 - left. since pslldq can only shift by an immediate, we use
146 - vpshufb and an array of shuffle masks */
147 - movq %r12, %r11
148 - salq $4, %r11
149 - movdqu aad_shift_arr(%r11), \TMP1
150 - PSHUFB_XMM \TMP1, %xmm\i
151 -_get_AAD_rest_final\num_initial_blocks\operation:
152 + READ_PARTIAL_BLOCK %r10, %r11, \TMP1, %xmm\i
153 PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data
154 pxor \XMM2, %xmm\i
155 GHASH_MUL %xmm\i, \TMP3, \TMP1, \TMP2, \TMP4, \TMP5, \XMM1
156 @@ -532,62 +507,30 @@ _initial_blocks_done\num_initial_blocks\operation:
157 XMM2 XMM3 XMM4 XMMDst TMP6 TMP7 i i_seq operation
158 MOVADQ SHUF_MASK(%rip), %xmm14
159 mov arg7, %r10 # %r10 = AAD
160 - mov arg8, %r12 # %r12 = aadLen
161 - mov %r12, %r11
162 + mov arg8, %r11 # %r11 = aadLen
163 pxor %xmm\i, %xmm\i
164 pxor \XMM2, \XMM2
165
166 cmp $16, %r11
167 - jl _get_AAD_rest8\num_initial_blocks\operation
168 + jl _get_AAD_rest\num_initial_blocks\operation
169 _get_AAD_blocks\num_initial_blocks\operation:
170 movdqu (%r10), %xmm\i
171 PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data
172 pxor %xmm\i, \XMM2
173 GHASH_MUL \XMM2, \TMP3, \TMP1, \TMP2, \TMP4, \TMP5, \XMM1
174 add $16, %r10
175 - sub $16, %r12
176 sub $16, %r11
177 cmp $16, %r11
178 jge _get_AAD_blocks\num_initial_blocks\operation
179
180 movdqu \XMM2, %xmm\i
181 +
182 + /* read the last <16B of AAD */
183 +_get_AAD_rest\num_initial_blocks\operation:
184 cmp $0, %r11
185 je _get_AAD_done\num_initial_blocks\operation
186
187 - pxor %xmm\i,%xmm\i
188 -
189 - /* read the last <16B of AAD. since we have at least 4B of
190 - data right after the AAD (the ICV, and maybe some PT), we can
191 - read 4B/8B blocks safely, and then get rid of the extra stuff */
192 -_get_AAD_rest8\num_initial_blocks\operation:
193 - cmp $4, %r11
194 - jle _get_AAD_rest4\num_initial_blocks\operation
195 - movq (%r10), \TMP1
196 - add $8, %r10
197 - sub $8, %r11
198 - pslldq $8, \TMP1
199 - psrldq $8, %xmm\i
200 - pxor \TMP1, %xmm\i
201 - jmp _get_AAD_rest8\num_initial_blocks\operation
202 -_get_AAD_rest4\num_initial_blocks\operation:
203 - cmp $0, %r11
204 - jle _get_AAD_rest0\num_initial_blocks\operation
205 - mov (%r10), %eax
206 - movq %rax, \TMP1
207 - add $4, %r10
208 - sub $4, %r10
209 - pslldq $12, \TMP1
210 - psrldq $4, %xmm\i
211 - pxor \TMP1, %xmm\i
212 -_get_AAD_rest0\num_initial_blocks\operation:
213 - /* finalize: shift out the extra bytes we read, and align
214 - left. since pslldq can only shift by an immediate, we use
215 - vpshufb and an array of shuffle masks */
216 - movq %r12, %r11
217 - salq $4, %r11
218 - movdqu aad_shift_arr(%r11), \TMP1
219 - PSHUFB_XMM \TMP1, %xmm\i
220 -_get_AAD_rest_final\num_initial_blocks\operation:
221 + READ_PARTIAL_BLOCK %r10, %r11, \TMP1, %xmm\i
222 PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data
223 pxor \XMM2, %xmm\i
224 GHASH_MUL %xmm\i, \TMP3, \TMP1, \TMP2, \TMP4, \TMP5, \XMM1
225 @@ -1386,14 +1329,6 @@ _esb_loop_\@:
226 *
227 * AAD Format with 64-bit Extended Sequence Number
228 *
229 -* aadLen:
230 -* from the definition of the spec, aadLen can only be 8 or 12 bytes.
231 -* The code supports 16 too but for other sizes, the code will fail.
232 -*
233 -* TLen:
234 -* from the definition of the spec, TLen can only be 8, 12 or 16 bytes.
235 -* For other sizes, the code will fail.
236 -*
237 * poly = x^128 + x^127 + x^126 + x^121 + 1
238 *
239 *****************************************************************************/
240 @@ -1487,19 +1422,16 @@ _zero_cipher_left_decrypt:
241 PSHUFB_XMM %xmm10, %xmm0
242
243 ENCRYPT_SINGLE_BLOCK %xmm0, %xmm1 # E(K, Yn)
244 - sub $16, %r11
245 - add %r13, %r11
246 - movdqu (%arg3,%r11,1), %xmm1 # receive the last <16 byte block
247 - lea SHIFT_MASK+16(%rip), %r12
248 - sub %r13, %r12
249 -# adjust the shuffle mask pointer to be able to shift 16-%r13 bytes
250 -# (%r13 is the number of bytes in plaintext mod 16)
251 - movdqu (%r12), %xmm2 # get the appropriate shuffle mask
252 - PSHUFB_XMM %xmm2, %xmm1 # right shift 16-%r13 butes
253
254 + lea (%arg3,%r11,1), %r10
255 + mov %r13, %r12
256 + READ_PARTIAL_BLOCK %r10 %r12 %xmm2 %xmm1
257 +
258 + lea ALL_F+16(%rip), %r12
259 + sub %r13, %r12
260 movdqa %xmm1, %xmm2
261 pxor %xmm1, %xmm0 # Ciphertext XOR E(K, Yn)
262 - movdqu ALL_F-SHIFT_MASK(%r12), %xmm1
263 + movdqu (%r12), %xmm1
264 # get the appropriate mask to mask out top 16-%r13 bytes of %xmm0
265 pand %xmm1, %xmm0 # mask out top 16-%r13 bytes of %xmm0
266 pand %xmm1, %xmm2
267 @@ -1508,9 +1440,6 @@ _zero_cipher_left_decrypt:
268
269 pxor %xmm2, %xmm8
270 GHASH_MUL %xmm8, %xmm13, %xmm9, %xmm10, %xmm11, %xmm5, %xmm6
271 - # GHASH computation for the last <16 byte block
272 - sub %r13, %r11
273 - add $16, %r11
274
275 # output %r13 bytes
276 MOVQ_R64_XMM %xmm0, %rax
277 @@ -1664,14 +1593,6 @@ ENDPROC(aesni_gcm_dec)
278 *
279 * AAD Format with 64-bit Extended Sequence Number
280 *
281 -* aadLen:
282 -* from the definition of the spec, aadLen can only be 8 or 12 bytes.
283 -* The code supports 16 too but for other sizes, the code will fail.
284 -*
285 -* TLen:
286 -* from the definition of the spec, TLen can only be 8, 12 or 16 bytes.
287 -* For other sizes, the code will fail.
288 -*
289 * poly = x^128 + x^127 + x^126 + x^121 + 1
290 ***************************************************************************/
291 ENTRY(aesni_gcm_enc)
292 @@ -1764,19 +1685,16 @@ _zero_cipher_left_encrypt:
293 movdqa SHUF_MASK(%rip), %xmm10
294 PSHUFB_XMM %xmm10, %xmm0
295
296 -
297 ENCRYPT_SINGLE_BLOCK %xmm0, %xmm1 # Encrypt(K, Yn)
298 - sub $16, %r11
299 - add %r13, %r11
300 - movdqu (%arg3,%r11,1), %xmm1 # receive the last <16 byte blocks
301 - lea SHIFT_MASK+16(%rip), %r12
302 +
303 + lea (%arg3,%r11,1), %r10
304 + mov %r13, %r12
305 + READ_PARTIAL_BLOCK %r10 %r12 %xmm2 %xmm1
306 +
307 + lea ALL_F+16(%rip), %r12
308 sub %r13, %r12
309 - # adjust the shuffle mask pointer to be able to shift 16-r13 bytes
310 - # (%r13 is the number of bytes in plaintext mod 16)
311 - movdqu (%r12), %xmm2 # get the appropriate shuffle mask
312 - PSHUFB_XMM %xmm2, %xmm1 # shift right 16-r13 byte
313 pxor %xmm1, %xmm0 # Plaintext XOR Encrypt(K, Yn)
314 - movdqu ALL_F-SHIFT_MASK(%r12), %xmm1
315 + movdqu (%r12), %xmm1
316 # get the appropriate mask to mask out top 16-r13 bytes of xmm0
317 pand %xmm1, %xmm0 # mask out top 16-r13 bytes of xmm0
318 movdqa SHUF_MASK(%rip), %xmm10
319 @@ -1785,9 +1703,6 @@ _zero_cipher_left_encrypt:
320 pxor %xmm0, %xmm8
321 GHASH_MUL %xmm8, %xmm13, %xmm9, %xmm10, %xmm11, %xmm5, %xmm6
322 # GHASH computation for the last <16 byte block
323 - sub %r13, %r11
324 - add $16, %r11
325 -
326 movdqa SHUF_MASK(%rip), %xmm10
327 PSHUFB_XMM %xmm10, %xmm0
328
329 diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
330 index 3bf3dcf29825..34cf1c1f8c98 100644
331 --- a/arch/x86/crypto/aesni-intel_glue.c
332 +++ b/arch/x86/crypto/aesni-intel_glue.c
333 @@ -690,8 +690,8 @@ static int common_rfc4106_set_key(struct crypto_aead *aead, const u8 *key,
334 rfc4106_set_hash_subkey(ctx->hash_subkey, key, key_len);
335 }
336
337 -static int rfc4106_set_key(struct crypto_aead *parent, const u8 *key,
338 - unsigned int key_len)
339 +static int gcmaes_wrapper_set_key(struct crypto_aead *parent, const u8 *key,
340 + unsigned int key_len)
341 {
342 struct cryptd_aead **ctx = crypto_aead_ctx(parent);
343 struct cryptd_aead *cryptd_tfm = *ctx;
344 @@ -716,8 +716,8 @@ static int common_rfc4106_set_authsize(struct crypto_aead *aead,
345
346 /* This is the Integrity Check Value (aka the authentication tag length and can
347 * be 8, 12 or 16 bytes long. */
348 -static int rfc4106_set_authsize(struct crypto_aead *parent,
349 - unsigned int authsize)
350 +static int gcmaes_wrapper_set_authsize(struct crypto_aead *parent,
351 + unsigned int authsize)
352 {
353 struct cryptd_aead **ctx = crypto_aead_ctx(parent);
354 struct cryptd_aead *cryptd_tfm = *ctx;
355 @@ -824,7 +824,7 @@ static int gcmaes_decrypt(struct aead_request *req, unsigned int assoclen,
356 if (sg_is_last(req->src) &&
357 (!PageHighMem(sg_page(req->src)) ||
358 req->src->offset + req->src->length <= PAGE_SIZE) &&
359 - sg_is_last(req->dst) &&
360 + sg_is_last(req->dst) && req->dst->length &&
361 (!PageHighMem(sg_page(req->dst)) ||
362 req->dst->offset + req->dst->length <= PAGE_SIZE)) {
363 one_entry_in_sg = 1;
364 @@ -929,7 +929,7 @@ static int helper_rfc4106_decrypt(struct aead_request *req)
365 aes_ctx);
366 }
367
368 -static int rfc4106_encrypt(struct aead_request *req)
369 +static int gcmaes_wrapper_encrypt(struct aead_request *req)
370 {
371 struct crypto_aead *tfm = crypto_aead_reqtfm(req);
372 struct cryptd_aead **ctx = crypto_aead_ctx(tfm);
373 @@ -945,7 +945,7 @@ static int rfc4106_encrypt(struct aead_request *req)
374 return crypto_aead_encrypt(req);
375 }
376
377 -static int rfc4106_decrypt(struct aead_request *req)
378 +static int gcmaes_wrapper_decrypt(struct aead_request *req)
379 {
380 struct crypto_aead *tfm = crypto_aead_reqtfm(req);
381 struct cryptd_aead **ctx = crypto_aead_ctx(tfm);
382 @@ -1117,7 +1117,7 @@ static int generic_gcmaes_decrypt(struct aead_request *req)
383 {
384 __be32 counter = cpu_to_be32(1);
385 struct crypto_aead *tfm = crypto_aead_reqtfm(req);
386 - struct aesni_rfc4106_gcm_ctx *ctx = aesni_rfc4106_gcm_ctx_get(tfm);
387 + struct generic_gcmaes_ctx *ctx = generic_gcmaes_ctx_get(tfm);
388 void *aes_ctx = &(ctx->aes_key_expanded);
389 u8 iv[16] __attribute__ ((__aligned__(AESNI_ALIGN)));
390
391 @@ -1128,6 +1128,30 @@ static int generic_gcmaes_decrypt(struct aead_request *req)
392 aes_ctx);
393 }
394
395 +static int generic_gcmaes_init(struct crypto_aead *aead)
396 +{
397 + struct cryptd_aead *cryptd_tfm;
398 + struct cryptd_aead **ctx = crypto_aead_ctx(aead);
399 +
400 + cryptd_tfm = cryptd_alloc_aead("__driver-generic-gcm-aes-aesni",
401 + CRYPTO_ALG_INTERNAL,
402 + CRYPTO_ALG_INTERNAL);
403 + if (IS_ERR(cryptd_tfm))
404 + return PTR_ERR(cryptd_tfm);
405 +
406 + *ctx = cryptd_tfm;
407 + crypto_aead_set_reqsize(aead, crypto_aead_reqsize(&cryptd_tfm->base));
408 +
409 + return 0;
410 +}
411 +
412 +static void generic_gcmaes_exit(struct crypto_aead *aead)
413 +{
414 + struct cryptd_aead **ctx = crypto_aead_ctx(aead);
415 +
416 + cryptd_free_aead(*ctx);
417 +}
418 +
419 static struct aead_alg aesni_aead_algs[] = { {
420 .setkey = common_rfc4106_set_key,
421 .setauthsize = common_rfc4106_set_authsize,
422 @@ -1147,10 +1171,10 @@ static struct aead_alg aesni_aead_algs[] = { {
423 }, {
424 .init = rfc4106_init,
425 .exit = rfc4106_exit,
426 - .setkey = rfc4106_set_key,
427 - .setauthsize = rfc4106_set_authsize,
428 - .encrypt = rfc4106_encrypt,
429 - .decrypt = rfc4106_decrypt,
430 + .setkey = gcmaes_wrapper_set_key,
431 + .setauthsize = gcmaes_wrapper_set_authsize,
432 + .encrypt = gcmaes_wrapper_encrypt,
433 + .decrypt = gcmaes_wrapper_decrypt,
434 .ivsize = GCM_RFC4106_IV_SIZE,
435 .maxauthsize = 16,
436 .base = {
437 @@ -1169,14 +1193,32 @@ static struct aead_alg aesni_aead_algs[] = { {
438 .decrypt = generic_gcmaes_decrypt,
439 .ivsize = GCM_AES_IV_SIZE,
440 .maxauthsize = 16,
441 + .base = {
442 + .cra_name = "__generic-gcm-aes-aesni",
443 + .cra_driver_name = "__driver-generic-gcm-aes-aesni",
444 + .cra_priority = 0,
445 + .cra_flags = CRYPTO_ALG_INTERNAL,
446 + .cra_blocksize = 1,
447 + .cra_ctxsize = sizeof(struct generic_gcmaes_ctx),
448 + .cra_alignmask = AESNI_ALIGN - 1,
449 + .cra_module = THIS_MODULE,
450 + },
451 +}, {
452 + .init = generic_gcmaes_init,
453 + .exit = generic_gcmaes_exit,
454 + .setkey = gcmaes_wrapper_set_key,
455 + .setauthsize = gcmaes_wrapper_set_authsize,
456 + .encrypt = gcmaes_wrapper_encrypt,
457 + .decrypt = gcmaes_wrapper_decrypt,
458 + .ivsize = GCM_AES_IV_SIZE,
459 + .maxauthsize = 16,
460 .base = {
461 .cra_name = "gcm(aes)",
462 .cra_driver_name = "generic-gcm-aesni",
463 .cra_priority = 400,
464 .cra_flags = CRYPTO_ALG_ASYNC,
465 .cra_blocksize = 1,
466 - .cra_ctxsize = sizeof(struct generic_gcmaes_ctx),
467 - .cra_alignmask = AESNI_ALIGN - 1,
468 + .cra_ctxsize = sizeof(struct cryptd_aead *),
469 .cra_module = THIS_MODULE,
470 },
471 } };
472 diff --git a/crypto/Kconfig b/crypto/Kconfig
473 index f7911963bb79..9327fbfccf5a 100644
474 --- a/crypto/Kconfig
475 +++ b/crypto/Kconfig
476 @@ -130,7 +130,7 @@ config CRYPTO_DH
477
478 config CRYPTO_ECDH
479 tristate "ECDH algorithm"
480 - select CRYTPO_KPP
481 + select CRYPTO_KPP
482 select CRYPTO_RNG_DEFAULT
483 help
484 Generic implementation of the ECDH algorithm
485 diff --git a/crypto/af_alg.c b/crypto/af_alg.c
486 index 35d4dcea381f..5231f421ad00 100644
487 --- a/crypto/af_alg.c
488 +++ b/crypto/af_alg.c
489 @@ -150,7 +150,7 @@ EXPORT_SYMBOL_GPL(af_alg_release_parent);
490
491 static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
492 {
493 - const u32 forbidden = CRYPTO_ALG_INTERNAL;
494 + const u32 allowed = CRYPTO_ALG_KERN_DRIVER_ONLY;
495 struct sock *sk = sock->sk;
496 struct alg_sock *ask = alg_sk(sk);
497 struct sockaddr_alg *sa = (void *)uaddr;
498 @@ -158,6 +158,10 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
499 void *private;
500 int err;
501
502 + /* If caller uses non-allowed flag, return error. */
503 + if ((sa->salg_feat & ~allowed) || (sa->salg_mask & ~allowed))
504 + return -EINVAL;
505 +
506 if (sock->state == SS_CONNECTED)
507 return -EINVAL;
508
509 @@ -176,9 +180,7 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
510 if (IS_ERR(type))
511 return PTR_ERR(type);
512
513 - private = type->bind(sa->salg_name,
514 - sa->salg_feat & ~forbidden,
515 - sa->salg_mask & ~forbidden);
516 + private = type->bind(sa->salg_name, sa->salg_feat, sa->salg_mask);
517 if (IS_ERR(private)) {
518 module_put(type->owner);
519 return PTR_ERR(private);
520 diff --git a/crypto/sha3_generic.c b/crypto/sha3_generic.c
521 index 7e8ed96236ce..a68be626017c 100644
522 --- a/crypto/sha3_generic.c
523 +++ b/crypto/sha3_generic.c
524 @@ -18,6 +18,7 @@
525 #include <linux/types.h>
526 #include <crypto/sha3.h>
527 #include <asm/byteorder.h>
528 +#include <asm/unaligned.h>
529
530 #define KECCAK_ROUNDS 24
531
532 @@ -149,7 +150,7 @@ static int sha3_update(struct shash_desc *desc, const u8 *data,
533 unsigned int i;
534
535 for (i = 0; i < sctx->rsizw; i++)
536 - sctx->st[i] ^= ((u64 *) src)[i];
537 + sctx->st[i] ^= get_unaligned_le64(src + 8 * i);
538 keccakf(sctx->st);
539
540 done += sctx->rsiz;
541 @@ -174,7 +175,7 @@ static int sha3_final(struct shash_desc *desc, u8 *out)
542 sctx->buf[sctx->rsiz - 1] |= 0x80;
543
544 for (i = 0; i < sctx->rsizw; i++)
545 - sctx->st[i] ^= ((u64 *) sctx->buf)[i];
546 + sctx->st[i] ^= get_unaligned_le64(sctx->buf + 8 * i);
547
548 keccakf(sctx->st);
549
550 diff --git a/drivers/android/binder.c b/drivers/android/binder.c
551 index a7ecfde66b7b..ec0917fb7cca 100644
552 --- a/drivers/android/binder.c
553 +++ b/drivers/android/binder.c
554 @@ -4302,6 +4302,18 @@ static int binder_thread_release(struct binder_proc *proc,
555 if (t)
556 spin_lock(&t->lock);
557 }
558 +
559 + /*
560 + * If this thread used poll, make sure we remove the waitqueue
561 + * from any epoll data structures holding it with POLLFREE.
562 + * waitqueue_active() is safe to use here because we're holding
563 + * the inner lock.
564 + */
565 + if ((thread->looper & BINDER_LOOPER_STATE_POLL) &&
566 + waitqueue_active(&thread->wait)) {
567 + wake_up_poll(&thread->wait, POLLHUP | POLLFREE);
568 + }
569 +
570 binder_inner_proc_unlock(thread->proc);
571
572 if (send_reply)
573 diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
574 index 6f6f745605af..bef8c65af8fc 100644
575 --- a/drivers/android/binder_alloc.c
576 +++ b/drivers/android/binder_alloc.c
577 @@ -666,7 +666,7 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc,
578 goto err_already_mapped;
579 }
580
581 - area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP);
582 + area = get_vm_area(vma->vm_end - vma->vm_start, VM_ALLOC);
583 if (area == NULL) {
584 ret = -ENOMEM;
585 failure_string = "get_vm_area";
586 diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
587 index 71664b22ec9d..e0e6461b9200 100644
588 --- a/drivers/bluetooth/hci_serdev.c
589 +++ b/drivers/bluetooth/hci_serdev.c
590 @@ -303,6 +303,7 @@ int hci_uart_register_device(struct hci_uart *hu,
591 hci_set_drvdata(hdev, hu);
592
593 INIT_WORK(&hu->write_work, hci_uart_write_work);
594 + percpu_init_rwsem(&hu->proto_lock);
595
596 /* Only when vendor specific setup callback is provided, consider
597 * the manufacturer information valid. This avoids filling in the
598 diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c
599 index 0c5a5820b06e..da9d040bccc2 100644
600 --- a/drivers/crypto/inside-secure/safexcel_hash.c
601 +++ b/drivers/crypto/inside-secure/safexcel_hash.c
602 @@ -34,6 +34,8 @@ struct safexcel_ahash_req {
603 bool hmac;
604 bool needs_inv;
605
606 + int nents;
607 +
608 u8 state_sz; /* expected sate size, only set once */
609 u32 state[SHA256_DIGEST_SIZE / sizeof(u32)] __aligned(sizeof(u32));
610
611 @@ -152,8 +154,10 @@ static int safexcel_handle_req_result(struct safexcel_crypto_priv *priv, int rin
612 memcpy(areq->result, sreq->state,
613 crypto_ahash_digestsize(ahash));
614
615 - dma_unmap_sg(priv->dev, areq->src,
616 - sg_nents_for_len(areq->src, areq->nbytes), DMA_TO_DEVICE);
617 + if (sreq->nents) {
618 + dma_unmap_sg(priv->dev, areq->src, sreq->nents, DMA_TO_DEVICE);
619 + sreq->nents = 0;
620 + }
621
622 safexcel_free_context(priv, async, sreq->state_sz);
623
624 @@ -178,7 +182,7 @@ static int safexcel_ahash_send_req(struct crypto_async_request *async, int ring,
625 struct safexcel_command_desc *cdesc, *first_cdesc = NULL;
626 struct safexcel_result_desc *rdesc;
627 struct scatterlist *sg;
628 - int i, nents, queued, len, cache_len, extra, n_cdesc = 0, ret = 0;
629 + int i, queued, len, cache_len, extra, n_cdesc = 0, ret = 0;
630
631 queued = len = req->len - req->processed;
632 if (queued < crypto_ahash_blocksize(ahash))
633 @@ -186,17 +190,31 @@ static int safexcel_ahash_send_req(struct crypto_async_request *async, int ring,
634 else
635 cache_len = queued - areq->nbytes;
636
637 - /*
638 - * If this is not the last request and the queued data does not fit
639 - * into full blocks, cache it for the next send() call.
640 - */
641 - extra = queued & (crypto_ahash_blocksize(ahash) - 1);
642 - if (!req->last_req && extra) {
643 - sg_pcopy_to_buffer(areq->src, sg_nents(areq->src),
644 - req->cache_next, extra, areq->nbytes - extra);
645 -
646 - queued -= extra;
647 - len -= extra;
648 + if (!req->last_req) {
649 + /* If this is not the last request and the queued data does not
650 + * fit into full blocks, cache it for the next send() call.
651 + */
652 + extra = queued & (crypto_ahash_blocksize(ahash) - 1);
653 + if (!extra)
654 + /* If this is not the last request and the queued data
655 + * is a multiple of a block, cache the last one for now.
656 + */
657 + extra = queued - crypto_ahash_blocksize(ahash);
658 +
659 + if (extra) {
660 + sg_pcopy_to_buffer(areq->src, sg_nents(areq->src),
661 + req->cache_next, extra,
662 + areq->nbytes - extra);
663 +
664 + queued -= extra;
665 + len -= extra;
666 +
667 + if (!queued) {
668 + *commands = 0;
669 + *results = 0;
670 + return 0;
671 + }
672 + }
673 }
674
675 spin_lock_bh(&priv->ring[ring].egress_lock);
676 @@ -234,15 +252,15 @@ static int safexcel_ahash_send_req(struct crypto_async_request *async, int ring,
677 }
678
679 /* Now handle the current ahash request buffer(s) */
680 - nents = dma_map_sg(priv->dev, areq->src,
681 - sg_nents_for_len(areq->src, areq->nbytes),
682 - DMA_TO_DEVICE);
683 - if (!nents) {
684 + req->nents = dma_map_sg(priv->dev, areq->src,
685 + sg_nents_for_len(areq->src, areq->nbytes),
686 + DMA_TO_DEVICE);
687 + if (!req->nents) {
688 ret = -ENOMEM;
689 goto cdesc_rollback;
690 }
691
692 - for_each_sg(areq->src, sg, nents, i) {
693 + for_each_sg(areq->src, sg, req->nents, i) {
694 int sglen = sg_dma_len(sg);
695
696 /* Do not overflow the request */
697 diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig
698 index 2b4c39fdfa91..86210f75d233 100644
699 --- a/drivers/firmware/efi/Kconfig
700 +++ b/drivers/firmware/efi/Kconfig
701 @@ -159,7 +159,10 @@ config RESET_ATTACK_MITIGATION
702 using the TCG Platform Reset Attack Mitigation specification. This
703 protects against an attacker forcibly rebooting the system while it
704 still contains secrets in RAM, booting another OS and extracting the
705 - secrets.
706 + secrets. This should only be enabled when userland is configured to
707 + clear the MemoryOverwriteRequest flag on clean shutdown after secrets
708 + have been evicted, since otherwise it will trigger even on clean
709 + reboots.
710
711 endmenu
712
713 diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c
714 index 5fad89dfab7e..3ae7c1876bf4 100644
715 --- a/drivers/gpio/gpio-ath79.c
716 +++ b/drivers/gpio/gpio-ath79.c
717 @@ -324,3 +324,6 @@ static struct platform_driver ath79_gpio_driver = {
718 };
719
720 module_platform_driver(ath79_gpio_driver);
721 +
722 +MODULE_DESCRIPTION("Atheros AR71XX/AR724X/AR913X GPIO API support");
723 +MODULE_LICENSE("GPL v2");
724 diff --git a/drivers/gpio/gpio-iop.c b/drivers/gpio/gpio-iop.c
725 index 98c7ff2a76e7..8d62db447ec1 100644
726 --- a/drivers/gpio/gpio-iop.c
727 +++ b/drivers/gpio/gpio-iop.c
728 @@ -58,3 +58,7 @@ static int __init iop3xx_gpio_init(void)
729 return platform_driver_register(&iop3xx_gpio_driver);
730 }
731 arch_initcall(iop3xx_gpio_init);
732 +
733 +MODULE_DESCRIPTION("GPIO handling for Intel IOP3xx processors");
734 +MODULE_AUTHOR("Lennert Buytenhek <buytenh@wantstofly.org>");
735 +MODULE_LICENSE("GPL");
736 diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c
737 index e6e5cca624a7..a365feff2377 100644
738 --- a/drivers/gpio/gpio-stmpe.c
739 +++ b/drivers/gpio/gpio-stmpe.c
740 @@ -190,6 +190,16 @@ static void stmpe_gpio_irq_sync_unlock(struct irq_data *d)
741 };
742 int i, j;
743
744 + /*
745 + * STMPE1600: to be able to get IRQ from pins,
746 + * a read must be done on GPMR register, or a write in
747 + * GPSR or GPCR registers
748 + */
749 + if (stmpe->partnum == STMPE1600) {
750 + stmpe_reg_read(stmpe, stmpe->regs[STMPE_IDX_GPMR_LSB]);
751 + stmpe_reg_read(stmpe, stmpe->regs[STMPE_IDX_GPMR_CSB]);
752 + }
753 +
754 for (i = 0; i < CACHE_NR_REGS; i++) {
755 /* STMPE801 and STMPE1600 don't have RE and FE registers */
756 if ((stmpe->partnum == STMPE801 ||
757 @@ -227,21 +237,11 @@ static void stmpe_gpio_irq_unmask(struct irq_data *d)
758 {
759 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
760 struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(gc);
761 - struct stmpe *stmpe = stmpe_gpio->stmpe;
762 int offset = d->hwirq;
763 int regoffset = offset / 8;
764 int mask = BIT(offset % 8);
765
766 stmpe_gpio->regs[REG_IE][regoffset] |= mask;
767 -
768 - /*
769 - * STMPE1600 workaround: to be able to get IRQ from pins,
770 - * a read must be done on GPMR register, or a write in
771 - * GPSR or GPCR registers
772 - */
773 - if (stmpe->partnum == STMPE1600)
774 - stmpe_reg_read(stmpe,
775 - stmpe->regs[STMPE_IDX_GPMR_LSB + regoffset]);
776 }
777
778 static void stmpe_dbg_show_one(struct seq_file *s,
779 diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
780 index 14532d9576e4..f6efcf94f6ad 100644
781 --- a/drivers/gpio/gpiolib.c
782 +++ b/drivers/gpio/gpiolib.c
783 @@ -732,6 +732,9 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p)
784 struct gpioevent_data ge;
785 int ret, level;
786
787 + /* Do not leak kernel stack to userspace */
788 + memset(&ge, 0, sizeof(ge));
789 +
790 ge.timestamp = ktime_get_real_ns();
791 level = gpiod_get_value_cansleep(le->desc);
792
793 diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
794 index ee71ad9b6cc1..76531796bd3c 100644
795 --- a/drivers/hid/wacom_sys.c
796 +++ b/drivers/hid/wacom_sys.c
797 @@ -2347,23 +2347,23 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
798 int i;
799 unsigned long flags;
800
801 - spin_lock_irqsave(&remote->remote_lock, flags);
802 - remote->remotes[index].registered = false;
803 - spin_unlock_irqrestore(&remote->remote_lock, flags);
804 + for (i = 0; i < WACOM_MAX_REMOTES; i++) {
805 + if (remote->remotes[i].serial == serial) {
806
807 - if (remote->remotes[index].battery.battery)
808 - devres_release_group(&wacom->hdev->dev,
809 - &remote->remotes[index].battery.bat_desc);
810 + spin_lock_irqsave(&remote->remote_lock, flags);
811 + remote->remotes[i].registered = false;
812 + spin_unlock_irqrestore(&remote->remote_lock, flags);
813
814 - if (remote->remotes[index].group.name)
815 - devres_release_group(&wacom->hdev->dev,
816 - &remote->remotes[index]);
817 + if (remote->remotes[i].battery.battery)
818 + devres_release_group(&wacom->hdev->dev,
819 + &remote->remotes[i].battery.bat_desc);
820 +
821 + if (remote->remotes[i].group.name)
822 + devres_release_group(&wacom->hdev->dev,
823 + &remote->remotes[i]);
824
825 - for (i = 0; i < WACOM_MAX_REMOTES; i++) {
826 - if (remote->remotes[i].serial == serial) {
827 remote->remotes[i].serial = 0;
828 remote->remotes[i].group.name = NULL;
829 - remote->remotes[i].registered = false;
830 remote->remotes[i].battery.battery = NULL;
831 wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
832 }
833 diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
834 index 16af6886e828..7dbff253c05c 100644
835 --- a/drivers/hid/wacom_wac.c
836 +++ b/drivers/hid/wacom_wac.c
837 @@ -1924,7 +1924,6 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
838 struct wacom_features *features = &wacom_wac->features;
839 unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
840 int i;
841 - bool is_touch_on = value;
842 bool do_report = false;
843
844 /*
845 @@ -1969,16 +1968,17 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
846 break;
847
848 case WACOM_HID_WD_MUTE_DEVICE:
849 - if (wacom_wac->shared->touch_input && value) {
850 - wacom_wac->shared->is_touch_on = !wacom_wac->shared->is_touch_on;
851 - is_touch_on = wacom_wac->shared->is_touch_on;
852 - }
853 -
854 - /* fall through*/
855 case WACOM_HID_WD_TOUCHONOFF:
856 if (wacom_wac->shared->touch_input) {
857 + bool *is_touch_on = &wacom_wac->shared->is_touch_on;
858 +
859 + if (equivalent_usage == WACOM_HID_WD_MUTE_DEVICE && value)
860 + *is_touch_on = !(*is_touch_on);
861 + else if (equivalent_usage == WACOM_HID_WD_TOUCHONOFF)
862 + *is_touch_on = value;
863 +
864 input_report_switch(wacom_wac->shared->touch_input,
865 - SW_MUTE_DEVICE, !is_touch_on);
866 + SW_MUTE_DEVICE, !(*is_touch_on));
867 input_sync(wacom_wac->shared->touch_input);
868 }
869 break;
870 diff --git a/drivers/iio/adc/stm32-adc.c b/drivers/iio/adc/stm32-adc.c
871 index c9d96f935dba..cecf1e5b244c 100644
872 --- a/drivers/iio/adc/stm32-adc.c
873 +++ b/drivers/iio/adc/stm32-adc.c
874 @@ -1315,6 +1315,7 @@ static int stm32_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)
875 {
876 struct stm32_adc *adc = iio_priv(indio_dev);
877 unsigned int watermark = STM32_DMA_BUFFER_SIZE / 2;
878 + unsigned int rx_buf_sz = STM32_DMA_BUFFER_SIZE;
879
880 /*
881 * dma cyclic transfers are used, buffer is split into two periods.
882 @@ -1323,7 +1324,7 @@ static int stm32_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)
883 * - one buffer (period) driver can push with iio_trigger_poll().
884 */
885 watermark = min(watermark, val * (unsigned)(sizeof(u16)));
886 - adc->rx_buf_sz = watermark * 2;
887 + adc->rx_buf_sz = min(rx_buf_sz, watermark * 2 * adc->num_conv);
888
889 return 0;
890 }
891 diff --git a/drivers/iio/chemical/ccs811.c b/drivers/iio/chemical/ccs811.c
892 index 97bce8345c6a..fbe2431f5b81 100644
893 --- a/drivers/iio/chemical/ccs811.c
894 +++ b/drivers/iio/chemical/ccs811.c
895 @@ -96,7 +96,6 @@ static const struct iio_chan_spec ccs811_channels[] = {
896 .channel2 = IIO_MOD_CO2,
897 .modified = 1,
898 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
899 - BIT(IIO_CHAN_INFO_OFFSET) |
900 BIT(IIO_CHAN_INFO_SCALE),
901 .scan_index = 0,
902 .scan_type = {
903 @@ -255,24 +254,18 @@ static int ccs811_read_raw(struct iio_dev *indio_dev,
904 switch (chan->channel2) {
905 case IIO_MOD_CO2:
906 *val = 0;
907 - *val2 = 12834;
908 + *val2 = 100;
909 return IIO_VAL_INT_PLUS_MICRO;
910 case IIO_MOD_VOC:
911 *val = 0;
912 - *val2 = 84246;
913 - return IIO_VAL_INT_PLUS_MICRO;
914 + *val2 = 100;
915 + return IIO_VAL_INT_PLUS_NANO;
916 default:
917 return -EINVAL;
918 }
919 default:
920 return -EINVAL;
921 }
922 - case IIO_CHAN_INFO_OFFSET:
923 - if (!(chan->type == IIO_CONCENTRATION &&
924 - chan->channel2 == IIO_MOD_CO2))
925 - return -EINVAL;
926 - *val = -400;
927 - return IIO_VAL_INT;
928 default:
929 return -EINVAL;
930 }
931 diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
932 index 141ea228aac6..f5954981e9ee 100644
933 --- a/drivers/input/rmi4/rmi_driver.c
934 +++ b/drivers/input/rmi4/rmi_driver.c
935 @@ -41,6 +41,13 @@ void rmi_free_function_list(struct rmi_device *rmi_dev)
936
937 rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, "Freeing function list\n");
938
939 + /* Doing it in the reverse order so F01 will be removed last */
940 + list_for_each_entry_safe_reverse(fn, tmp,
941 + &data->function_list, node) {
942 + list_del(&fn->node);
943 + rmi_unregister_function(fn);
944 + }
945 +
946 devm_kfree(&rmi_dev->dev, data->irq_memory);
947 data->irq_memory = NULL;
948 data->irq_status = NULL;
949 @@ -50,13 +57,6 @@ void rmi_free_function_list(struct rmi_device *rmi_dev)
950
951 data->f01_container = NULL;
952 data->f34_container = NULL;
953 -
954 - /* Doing it in the reverse order so F01 will be removed last */
955 - list_for_each_entry_safe_reverse(fn, tmp,
956 - &data->function_list, node) {
957 - list_del(&fn->node);
958 - rmi_unregister_function(fn);
959 - }
960 }
961
962 static int reset_one_function(struct rmi_function *fn)
963 diff --git a/drivers/input/rmi4/rmi_f03.c b/drivers/input/rmi4/rmi_f03.c
964 index ad71a5e768dc..7ccbb370a9a8 100644
965 --- a/drivers/input/rmi4/rmi_f03.c
966 +++ b/drivers/input/rmi4/rmi_f03.c
967 @@ -32,6 +32,7 @@ struct f03_data {
968 struct rmi_function *fn;
969
970 struct serio *serio;
971 + bool serio_registered;
972
973 unsigned int overwrite_buttons;
974
975 @@ -138,6 +139,37 @@ static int rmi_f03_initialize(struct f03_data *f03)
976 return 0;
977 }
978
979 +static int rmi_f03_pt_open(struct serio *serio)
980 +{
981 + struct f03_data *f03 = serio->port_data;
982 + struct rmi_function *fn = f03->fn;
983 + const u8 ob_len = f03->rx_queue_length * RMI_F03_OB_SIZE;
984 + const u16 data_addr = fn->fd.data_base_addr + RMI_F03_OB_OFFSET;
985 + u8 obs[RMI_F03_QUEUE_LENGTH * RMI_F03_OB_SIZE];
986 + int error;
987 +
988 + /*
989 + * Consume any pending data. Some devices like to spam with
990 + * 0xaa 0x00 announcements which may confuse us as we try to
991 + * probe the device.
992 + */
993 + error = rmi_read_block(fn->rmi_dev, data_addr, &obs, ob_len);
994 + if (!error)
995 + rmi_dbg(RMI_DEBUG_FN, &fn->dev,
996 + "%s: Consumed %*ph (%d) from PS2 guest\n",
997 + __func__, ob_len, obs, ob_len);
998 +
999 + return fn->rmi_dev->driver->set_irq_bits(fn->rmi_dev, fn->irq_mask);
1000 +}
1001 +
1002 +static void rmi_f03_pt_close(struct serio *serio)
1003 +{
1004 + struct f03_data *f03 = serio->port_data;
1005 + struct rmi_function *fn = f03->fn;
1006 +
1007 + fn->rmi_dev->driver->clear_irq_bits(fn->rmi_dev, fn->irq_mask);
1008 +}
1009 +
1010 static int rmi_f03_register_pt(struct f03_data *f03)
1011 {
1012 struct serio *serio;
1013 @@ -148,6 +180,8 @@ static int rmi_f03_register_pt(struct f03_data *f03)
1014
1015 serio->id.type = SERIO_PS_PSTHRU;
1016 serio->write = rmi_f03_pt_write;
1017 + serio->open = rmi_f03_pt_open;
1018 + serio->close = rmi_f03_pt_close;
1019 serio->port_data = f03;
1020
1021 strlcpy(serio->name, "Synaptics RMI4 PS/2 pass-through",
1022 @@ -184,17 +218,27 @@ static int rmi_f03_probe(struct rmi_function *fn)
1023 f03->device_count);
1024
1025 dev_set_drvdata(dev, f03);
1026 -
1027 - error = rmi_f03_register_pt(f03);
1028 - if (error)
1029 - return error;
1030 -
1031 return 0;
1032 }
1033
1034 static int rmi_f03_config(struct rmi_function *fn)
1035 {
1036 - fn->rmi_dev->driver->set_irq_bits(fn->rmi_dev, fn->irq_mask);
1037 + struct f03_data *f03 = dev_get_drvdata(&fn->dev);
1038 + int error;
1039 +
1040 + if (!f03->serio_registered) {
1041 + error = rmi_f03_register_pt(f03);
1042 + if (error)
1043 + return error;
1044 +
1045 + f03->serio_registered = true;
1046 + } else {
1047 + /*
1048 + * We must be re-configuring the sensor, just enable
1049 + * interrupts for this function.
1050 + */
1051 + fn->rmi_dev->driver->set_irq_bits(fn->rmi_dev, fn->irq_mask);
1052 + }
1053
1054 return 0;
1055 }
1056 @@ -204,7 +248,7 @@ static int rmi_f03_attention(struct rmi_function *fn, unsigned long *irq_bits)
1057 struct rmi_device *rmi_dev = fn->rmi_dev;
1058 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);
1059 struct f03_data *f03 = dev_get_drvdata(&fn->dev);
1060 - u16 data_addr = fn->fd.data_base_addr;
1061 + const u16 data_addr = fn->fd.data_base_addr + RMI_F03_OB_OFFSET;
1062 const u8 ob_len = f03->rx_queue_length * RMI_F03_OB_SIZE;
1063 u8 obs[RMI_F03_QUEUE_LENGTH * RMI_F03_OB_SIZE];
1064 u8 ob_status;
1065 @@ -226,8 +270,7 @@ static int rmi_f03_attention(struct rmi_function *fn, unsigned long *irq_bits)
1066 drvdata->attn_data.size -= ob_len;
1067 } else {
1068 /* Grab all of the data registers, and check them for data */
1069 - error = rmi_read_block(fn->rmi_dev, data_addr + RMI_F03_OB_OFFSET,
1070 - &obs, ob_len);
1071 + error = rmi_read_block(fn->rmi_dev, data_addr, &obs, ob_len);
1072 if (error) {
1073 dev_err(&fn->dev,
1074 "%s: Failed to read F03 output buffers: %d\n",
1075 @@ -266,7 +309,8 @@ static void rmi_f03_remove(struct rmi_function *fn)
1076 {
1077 struct f03_data *f03 = dev_get_drvdata(&fn->dev);
1078
1079 - serio_unregister_port(f03->serio);
1080 + if (f03->serio_registered)
1081 + serio_unregister_port(f03->serio);
1082 }
1083
1084 struct rmi_function_handler rmi_f03_handler = {
1085 diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
1086 index f4f17552c9b8..4a0ccda4d04b 100644
1087 --- a/drivers/misc/mei/pci-me.c
1088 +++ b/drivers/misc/mei/pci-me.c
1089 @@ -238,8 +238,11 @@ static int mei_me_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1090 */
1091 mei_me_set_pm_domain(dev);
1092
1093 - if (mei_pg_is_enabled(dev))
1094 + if (mei_pg_is_enabled(dev)) {
1095 pm_runtime_put_noidle(&pdev->dev);
1096 + if (hw->d0i3_supported)
1097 + pm_runtime_allow(&pdev->dev);
1098 + }
1099
1100 dev_dbg(&pdev->dev, "initialization successful.\n");
1101
1102 diff --git a/drivers/mtd/nand/denali_pci.c b/drivers/mtd/nand/denali_pci.c
1103 index 57fb7ae31412..49cb3e1f8bd0 100644
1104 --- a/drivers/mtd/nand/denali_pci.c
1105 +++ b/drivers/mtd/nand/denali_pci.c
1106 @@ -125,3 +125,7 @@ static struct pci_driver denali_pci_driver = {
1107 .remove = denali_pci_remove,
1108 };
1109 module_pci_driver(denali_pci_driver);
1110 +
1111 +MODULE_DESCRIPTION("PCI driver for Denali NAND controller");
1112 +MODULE_AUTHOR("Intel Corporation and its suppliers");
1113 +MODULE_LICENSE("GPL v2");
1114 diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
1115 index c208753ff5b7..c69a5b3ae8c8 100644
1116 --- a/drivers/net/ethernet/intel/igb/igb_main.c
1117 +++ b/drivers/net/ethernet/intel/igb/igb_main.c
1118 @@ -3676,7 +3676,7 @@ static int __igb_close(struct net_device *netdev, bool suspending)
1119
1120 int igb_close(struct net_device *netdev)
1121 {
1122 - if (netif_device_present(netdev))
1123 + if (netif_device_present(netdev) || netdev->dismantle)
1124 return __igb_close(netdev, false);
1125 return 0;
1126 }
1127 diff --git a/drivers/power/reset/zx-reboot.c b/drivers/power/reset/zx-reboot.c
1128 index 7549c7f74a3c..c03e96e6a041 100644
1129 --- a/drivers/power/reset/zx-reboot.c
1130 +++ b/drivers/power/reset/zx-reboot.c
1131 @@ -82,3 +82,7 @@ static struct platform_driver zx_reboot_driver = {
1132 },
1133 };
1134 module_platform_driver(zx_reboot_driver);
1135 +
1136 +MODULE_DESCRIPTION("ZTE SoCs reset driver");
1137 +MODULE_AUTHOR("Jun Nie <jun.nie@linaro.org>");
1138 +MODULE_LICENSE("GPL v2");
1139 diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
1140 index af3e4d3f9735..7173ae53c526 100644
1141 --- a/drivers/scsi/aacraid/aachba.c
1142 +++ b/drivers/scsi/aacraid/aachba.c
1143 @@ -913,8 +913,15 @@ static void setinqstr(struct aac_dev *dev, void *data, int tindex)
1144 memset(str, ' ', sizeof(*str));
1145
1146 if (sup_adap_info->adapter_type_text[0]) {
1147 - char *cp = sup_adap_info->adapter_type_text;
1148 int c;
1149 + char *cp;
1150 + char *cname = kmemdup(sup_adap_info->adapter_type_text,
1151 + sizeof(sup_adap_info->adapter_type_text),
1152 + GFP_ATOMIC);
1153 + if (!cname)
1154 + return;
1155 +
1156 + cp = cname;
1157 if ((cp[0] == 'A') && (cp[1] == 'O') && (cp[2] == 'C'))
1158 inqstrcpy("SMC", str->vid);
1159 else {
1160 @@ -923,7 +930,7 @@ static void setinqstr(struct aac_dev *dev, void *data, int tindex)
1161 ++cp;
1162 c = *cp;
1163 *cp = '\0';
1164 - inqstrcpy(sup_adap_info->adapter_type_text, str->vid);
1165 + inqstrcpy(cname, str->vid);
1166 *cp = c;
1167 while (*cp && *cp != ' ')
1168 ++cp;
1169 @@ -937,8 +944,8 @@ static void setinqstr(struct aac_dev *dev, void *data, int tindex)
1170 cp[sizeof(str->pid)] = '\0';
1171 }
1172 inqstrcpy (cp, str->pid);
1173 - if (c)
1174 - cp[sizeof(str->pid)] = c;
1175 +
1176 + kfree(cname);
1177 } else {
1178 struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype);
1179
1180 diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
1181 index 80a8cb26cdea..d9b20dada109 100644
1182 --- a/drivers/scsi/aacraid/commsup.c
1183 +++ b/drivers/scsi/aacraid/commsup.c
1184 @@ -1643,14 +1643,7 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type)
1185 out:
1186 aac->in_reset = 0;
1187 scsi_unblock_requests(host);
1188 - /*
1189 - * Issue bus rescan to catch any configuration that might have
1190 - * occurred
1191 - */
1192 - if (!retval) {
1193 - dev_info(&aac->pdev->dev, "Issuing bus rescan\n");
1194 - scsi_scan_host(host);
1195 - }
1196 +
1197 if (jafo) {
1198 spin_lock_irq(host->host_lock);
1199 }
1200 diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
1201 index 3b3d1d050cac..40fc7a590e81 100644
1202 --- a/drivers/scsi/storvsc_drv.c
1203 +++ b/drivers/scsi/storvsc_drv.c
1204 @@ -1834,8 +1834,10 @@ static int storvsc_probe(struct hv_device *device,
1205 fc_host_node_name(host) = stor_device->node_name;
1206 fc_host_port_name(host) = stor_device->port_name;
1207 stor_device->rport = fc_remote_port_add(host, 0, &ids);
1208 - if (!stor_device->rport)
1209 + if (!stor_device->rport) {
1210 + ret = -ENOMEM;
1211 goto err_out4;
1212 + }
1213 }
1214 #endif
1215 return 0;
1216 diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
1217 index 79ddefe4180d..40390d31a93b 100644
1218 --- a/drivers/spi/spi-imx.c
1219 +++ b/drivers/spi/spi-imx.c
1220 @@ -1668,12 +1668,23 @@ static int spi_imx_remove(struct platform_device *pdev)
1221 {
1222 struct spi_master *master = platform_get_drvdata(pdev);
1223 struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
1224 + int ret;
1225
1226 spi_bitbang_stop(&spi_imx->bitbang);
1227
1228 + ret = clk_enable(spi_imx->clk_per);
1229 + if (ret)
1230 + return ret;
1231 +
1232 + ret = clk_enable(spi_imx->clk_ipg);
1233 + if (ret) {
1234 + clk_disable(spi_imx->clk_per);
1235 + return ret;
1236 + }
1237 +
1238 writel(0, spi_imx->base + MXC_CSPICTRL);
1239 - clk_unprepare(spi_imx->clk_ipg);
1240 - clk_unprepare(spi_imx->clk_per);
1241 + clk_disable_unprepare(spi_imx->clk_ipg);
1242 + clk_disable_unprepare(spi_imx->clk_per);
1243 spi_imx_sdma_exit(spi_imx);
1244 spi_master_put(master);
1245
1246 diff --git a/drivers/staging/ccree/ssi_cipher.c b/drivers/staging/ccree/ssi_cipher.c
1247 index ee85cbf7c9ae..980ff42128b4 100644
1248 --- a/drivers/staging/ccree/ssi_cipher.c
1249 +++ b/drivers/staging/ccree/ssi_cipher.c
1250 @@ -908,6 +908,7 @@ static int ssi_ablkcipher_decrypt(struct ablkcipher_request *req)
1251 scatterwalk_map_and_copy(req_ctx->backup_info, req->src,
1252 (req->nbytes - ivsize), ivsize, 0);
1253 req_ctx->is_giv = false;
1254 + req_ctx->backup_info = NULL;
1255
1256 return ssi_blkcipher_process(tfm, req_ctx, req->dst, req->src, req->nbytes, req->info, ivsize, (void *)req, DRV_CRYPTO_DIRECTION_DECRYPT);
1257 }
1258 diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
1259 index 1a3c481fa92a..ce16c3440319 100644
1260 --- a/drivers/staging/ccree/ssi_driver.c
1261 +++ b/drivers/staging/ccree/ssi_driver.c
1262 @@ -117,7 +117,7 @@ static irqreturn_t cc_isr(int irq, void *dev_id)
1263 irr &= ~SSI_COMP_IRQ_MASK;
1264 complete_request(drvdata);
1265 }
1266 -#ifdef CC_SUPPORT_FIPS
1267 +#ifdef CONFIG_CRYPTO_FIPS
1268 /* TEE FIPS interrupt */
1269 if (likely((irr & SSI_GPR0_IRQ_MASK) != 0)) {
1270 /* Mask interrupt - will be unmasked in Deferred service handler */
1271 diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
1272 index 8024843521ab..7b256d716251 100644
1273 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
1274 +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
1275 @@ -826,14 +826,15 @@ struct kib_conn *kiblnd_create_conn(struct kib_peer *peer, struct rdma_cm_id *cm
1276 return conn;
1277
1278 failed_2:
1279 - kiblnd_destroy_conn(conn, true);
1280 + kiblnd_destroy_conn(conn);
1281 + LIBCFS_FREE(conn, sizeof(*conn));
1282 failed_1:
1283 LIBCFS_FREE(init_qp_attr, sizeof(*init_qp_attr));
1284 failed_0:
1285 return NULL;
1286 }
1287
1288 -void kiblnd_destroy_conn(struct kib_conn *conn, bool free_conn)
1289 +void kiblnd_destroy_conn(struct kib_conn *conn)
1290 {
1291 struct rdma_cm_id *cmid = conn->ibc_cmid;
1292 struct kib_peer *peer = conn->ibc_peer;
1293 @@ -896,8 +897,6 @@ void kiblnd_destroy_conn(struct kib_conn *conn, bool free_conn)
1294 rdma_destroy_id(cmid);
1295 atomic_dec(&net->ibn_nconns);
1296 }
1297 -
1298 - LIBCFS_FREE(conn, sizeof(*conn));
1299 }
1300
1301 int kiblnd_close_peer_conns_locked(struct kib_peer *peer, int why)
1302 diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
1303 index 171eced213f8..b18911d09e9a 100644
1304 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
1305 +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
1306 @@ -1016,7 +1016,7 @@ int kiblnd_close_peer_conns_locked(struct kib_peer *peer, int why);
1307 struct kib_conn *kiblnd_create_conn(struct kib_peer *peer,
1308 struct rdma_cm_id *cmid,
1309 int state, int version);
1310 -void kiblnd_destroy_conn(struct kib_conn *conn, bool free_conn);
1311 +void kiblnd_destroy_conn(struct kib_conn *conn);
1312 void kiblnd_close_conn(struct kib_conn *conn, int error);
1313 void kiblnd_close_conn_locked(struct kib_conn *conn, int error);
1314
1315 diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
1316 index 40e3af5d8b04..2f25642ea1a6 100644
1317 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
1318 +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
1319 @@ -3314,11 +3314,13 @@ kiblnd_connd(void *arg)
1320 spin_unlock_irqrestore(lock, flags);
1321 dropped_lock = 1;
1322
1323 - kiblnd_destroy_conn(conn, !peer);
1324 + kiblnd_destroy_conn(conn);
1325
1326 spin_lock_irqsave(lock, flags);
1327 - if (!peer)
1328 + if (!peer) {
1329 + kfree(conn);
1330 continue;
1331 + }
1332
1333 conn->ibc_peer = peer;
1334 if (peer->ibp_reconnected < KIB_RECONN_HIGH_RACE)
1335 diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
1336 index 5bb0c42c88dd..7070203e3157 100644
1337 --- a/drivers/tty/serial/8250/8250_dw.c
1338 +++ b/drivers/tty/serial/8250/8250_dw.c
1339 @@ -252,31 +252,25 @@ static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios,
1340 struct ktermios *old)
1341 {
1342 unsigned int baud = tty_termios_baud_rate(termios);
1343 - unsigned int target_rate, min_rate, max_rate;
1344 struct dw8250_data *d = p->private_data;
1345 long rate;
1346 - int i, ret;
1347 + int ret;
1348
1349 if (IS_ERR(d->clk) || !old)
1350 goto out;
1351
1352 - /* Find a clk rate within +/-1.6% of an integer multiple of baudx16 */
1353 - target_rate = baud * 16;
1354 - min_rate = target_rate - (target_rate >> 6);
1355 - max_rate = target_rate + (target_rate >> 6);
1356 -
1357 - for (i = 1; i <= UART_DIV_MAX; i++) {
1358 - rate = clk_round_rate(d->clk, i * target_rate);
1359 - if (rate >= i * min_rate && rate <= i * max_rate)
1360 - break;
1361 - }
1362 - if (i <= UART_DIV_MAX) {
1363 - clk_disable_unprepare(d->clk);
1364 + clk_disable_unprepare(d->clk);
1365 + rate = clk_round_rate(d->clk, baud * 16);
1366 + if (rate < 0)
1367 + ret = rate;
1368 + else if (rate == 0)
1369 + ret = -ENOENT;
1370 + else
1371 ret = clk_set_rate(d->clk, rate);
1372 - clk_prepare_enable(d->clk);
1373 - if (!ret)
1374 - p->uartclk = rate;
1375 - }
1376 + clk_prepare_enable(d->clk);
1377 +
1378 + if (!ret)
1379 + p->uartclk = rate;
1380
1381 out:
1382 p->status &= ~UPSTAT_AUTOCTS;
1383 diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c
1384 index 1e67a7e4a5fd..160b8906d9b9 100644
1385 --- a/drivers/tty/serial/8250/8250_of.c
1386 +++ b/drivers/tty/serial/8250/8250_of.c
1387 @@ -136,8 +136,11 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
1388 }
1389
1390 info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL);
1391 - if (IS_ERR(info->rst))
1392 + if (IS_ERR(info->rst)) {
1393 + ret = PTR_ERR(info->rst);
1394 goto err_dispose;
1395 + }
1396 +
1397 ret = reset_control_deassert(info->rst);
1398 if (ret)
1399 goto err_dispose;
1400 diff --git a/drivers/tty/serial/8250/8250_uniphier.c b/drivers/tty/serial/8250/8250_uniphier.c
1401 index 45ef506293ae..28d88ccf5a0c 100644
1402 --- a/drivers/tty/serial/8250/8250_uniphier.c
1403 +++ b/drivers/tty/serial/8250/8250_uniphier.c
1404 @@ -250,12 +250,13 @@ static int uniphier_uart_probe(struct platform_device *pdev)
1405 up.dl_read = uniphier_serial_dl_read;
1406 up.dl_write = uniphier_serial_dl_write;
1407
1408 - priv->line = serial8250_register_8250_port(&up);
1409 - if (priv->line < 0) {
1410 + ret = serial8250_register_8250_port(&up);
1411 + if (ret < 0) {
1412 dev_err(dev, "failed to register 8250 port\n");
1413 clk_disable_unprepare(priv->clk);
1414 return ret;
1415 }
1416 + priv->line = ret;
1417
1418 platform_set_drvdata(pdev, priv);
1419
1420 diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
1421 index e4b3d9123a03..e9145ed0d6e7 100644
1422 --- a/drivers/tty/serial/imx.c
1423 +++ b/drivers/tty/serial/imx.c
1424 @@ -2238,12 +2238,14 @@ static void serial_imx_enable_wakeup(struct imx_port *sport, bool on)
1425 val &= ~UCR3_AWAKEN;
1426 writel(val, sport->port.membase + UCR3);
1427
1428 - val = readl(sport->port.membase + UCR1);
1429 - if (on)
1430 - val |= UCR1_RTSDEN;
1431 - else
1432 - val &= ~UCR1_RTSDEN;
1433 - writel(val, sport->port.membase + UCR1);
1434 + if (sport->have_rtscts) {
1435 + val = readl(sport->port.membase + UCR1);
1436 + if (on)
1437 + val |= UCR1_RTSDEN;
1438 + else
1439 + val &= ~UCR1_RTSDEN;
1440 + writel(val, sport->port.membase + UCR1);
1441 + }
1442 }
1443
1444 static int imx_serial_port_suspend_noirq(struct device *dev)
1445 diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
1446 index dc60aeea87d8..4b506f2d3522 100644
1447 --- a/drivers/tty/tty_io.c
1448 +++ b/drivers/tty/tty_io.c
1449 @@ -1323,6 +1323,9 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
1450 "%s: %s driver does not set tty->port. This will crash the kernel later. Fix the driver!\n",
1451 __func__, tty->driver->name);
1452
1453 + retval = tty_ldisc_lock(tty, 5 * HZ);
1454 + if (retval)
1455 + goto err_release_lock;
1456 tty->port->itty = tty;
1457
1458 /*
1459 @@ -1333,6 +1336,7 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
1460 retval = tty_ldisc_setup(tty, tty->link);
1461 if (retval)
1462 goto err_release_tty;
1463 + tty_ldisc_unlock(tty);
1464 /* Return the tty locked so that it cannot vanish under the caller */
1465 return tty;
1466
1467 @@ -1345,9 +1349,11 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
1468
1469 /* call the tty release_tty routine to clean out this slot */
1470 err_release_tty:
1471 - tty_unlock(tty);
1472 + tty_ldisc_unlock(tty);
1473 tty_info_ratelimited(tty, "ldisc open failed (%d), clearing slot %d\n",
1474 retval, idx);
1475 +err_release_lock:
1476 + tty_unlock(tty);
1477 release_tty(tty, idx);
1478 return ERR_PTR(retval);
1479 }
1480 diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
1481 index 24ec5c7e6b20..4e7946c0484b 100644
1482 --- a/drivers/tty/tty_ldisc.c
1483 +++ b/drivers/tty/tty_ldisc.c
1484 @@ -337,7 +337,7 @@ static inline void __tty_ldisc_unlock(struct tty_struct *tty)
1485 ldsem_up_write(&tty->ldisc_sem);
1486 }
1487
1488 -static int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout)
1489 +int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout)
1490 {
1491 int ret;
1492
1493 @@ -348,7 +348,7 @@ static int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout)
1494 return 0;
1495 }
1496
1497 -static void tty_ldisc_unlock(struct tty_struct *tty)
1498 +void tty_ldisc_unlock(struct tty_struct *tty)
1499 {
1500 clear_bit(TTY_LDISC_HALTED, &tty->flags);
1501 __tty_ldisc_unlock(tty);
1502 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1503 index 8e0636c963a7..18bbe3fedb8b 100644
1504 --- a/drivers/usb/class/cdc-acm.c
1505 +++ b/drivers/usb/class/cdc-acm.c
1506 @@ -425,7 +425,7 @@ static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
1507
1508 res = usb_submit_urb(acm->read_urbs[index], mem_flags);
1509 if (res) {
1510 - if (res != -EPERM) {
1511 + if (res != -EPERM && res != -ENODEV) {
1512 dev_err(&acm->data->dev,
1513 "urb %d failed submission with %d\n",
1514 index, res);
1515 @@ -1752,6 +1752,9 @@ static const struct usb_device_id acm_ids[] = {
1516 { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1517 .driver_info = SINGLE_RX_URB, /* firmware bug */
1518 },
1519 + { USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */
1520 + .driver_info = SINGLE_RX_URB,
1521 + },
1522 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1523 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1524 },
1525 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
1526 index b6cf5ab5a0a1..f9bd351637cd 100644
1527 --- a/drivers/usb/gadget/function/f_fs.c
1528 +++ b/drivers/usb/gadget/function/f_fs.c
1529 @@ -3700,7 +3700,8 @@ static void ffs_closed(struct ffs_data *ffs)
1530 ci = opts->func_inst.group.cg_item.ci_parent->ci_parent;
1531 ffs_dev_unlock();
1532
1533 - unregister_gadget_item(ci);
1534 + if (test_bit(FFS_FL_BOUND, &ffs->flags))
1535 + unregister_gadget_item(ci);
1536 return;
1537 done:
1538 ffs_dev_unlock();
1539 diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
1540 index 1b3efb14aec7..ac0541529499 100644
1541 --- a/drivers/usb/gadget/udc/core.c
1542 +++ b/drivers/usb/gadget/udc/core.c
1543 @@ -912,7 +912,7 @@ int usb_gadget_ep_match_desc(struct usb_gadget *gadget,
1544 return 0;
1545
1546 /* "high bandwidth" works only at high speed */
1547 - if (!gadget_is_dualspeed(gadget) && usb_endpoint_maxp(desc) & (3<<11))
1548 + if (!gadget_is_dualspeed(gadget) && usb_endpoint_maxp_mult(desc) > 1)
1549 return 0;
1550
1551 switch (type) {
1552 diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
1553 index a8d5f2e4878d..c66b93664d54 100644
1554 --- a/drivers/usb/serial/Kconfig
1555 +++ b/drivers/usb/serial/Kconfig
1556 @@ -63,6 +63,7 @@ config USB_SERIAL_SIMPLE
1557 - Google USB serial devices
1558 - HP4x calculators
1559 - a number of Motorola phones
1560 + - Motorola Tetra devices
1561 - Novatel Wireless GPS receivers
1562 - Siemens USB/MPI adapter.
1563 - ViVOtech ViVOpay USB device.
1564 diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
1565 index 219265ce3711..17283f4b4779 100644
1566 --- a/drivers/usb/serial/io_edgeport.c
1567 +++ b/drivers/usb/serial/io_edgeport.c
1568 @@ -2282,7 +2282,6 @@ static int write_cmd_usb(struct edgeport_port *edge_port,
1569 /* something went wrong */
1570 dev_err(dev, "%s - usb_submit_urb(write command) failed, status = %d\n",
1571 __func__, status);
1572 - usb_kill_urb(urb);
1573 usb_free_urb(urb);
1574 atomic_dec(&CmdUrbs);
1575 return status;
1576 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1577 index b6320e3be429..5db8ed517e0e 100644
1578 --- a/drivers/usb/serial/option.c
1579 +++ b/drivers/usb/serial/option.c
1580 @@ -380,6 +380,9 @@ static void option_instat_callback(struct urb *urb);
1581 #define FOUR_G_SYSTEMS_PRODUCT_W14 0x9603
1582 #define FOUR_G_SYSTEMS_PRODUCT_W100 0x9b01
1583
1584 +/* Fujisoft products */
1585 +#define FUJISOFT_PRODUCT_FS040U 0x9b02
1586 +
1587 /* iBall 3.5G connect wireless modem */
1588 #define IBALL_3_5G_CONNECT 0x9605
1589
1590 @@ -1894,6 +1897,8 @@ static const struct usb_device_id option_ids[] = {
1591 { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W100),
1592 .driver_info = (kernel_ulong_t)&four_g_w100_blacklist
1593 },
1594 + {USB_DEVICE(LONGCHEER_VENDOR_ID, FUJISOFT_PRODUCT_FS040U),
1595 + .driver_info = (kernel_ulong_t)&net_intf3_blacklist},
1596 { USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, SPEEDUP_PRODUCT_SU9800, 0xff) },
1597 { USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, 0x9801, 0xff),
1598 .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
1599 diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
1600 index 57ae832a49ff..46dd09da2434 100644
1601 --- a/drivers/usb/serial/pl2303.c
1602 +++ b/drivers/usb/serial/pl2303.c
1603 @@ -38,6 +38,7 @@ static const struct usb_device_id id_table[] = {
1604 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
1605 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
1606 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
1607 + { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_CHILITAG) },
1608 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) },
1609 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) },
1610 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
1611 diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
1612 index f98fd84890de..fcd72396a7b6 100644
1613 --- a/drivers/usb/serial/pl2303.h
1614 +++ b/drivers/usb/serial/pl2303.h
1615 @@ -12,6 +12,7 @@
1616 #define PL2303_PRODUCT_ID_DCU11 0x1234
1617 #define PL2303_PRODUCT_ID_PHAROS 0xaaa0
1618 #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2
1619 +#define PL2303_PRODUCT_ID_CHILITAG 0xaaa8
1620 #define PL2303_PRODUCT_ID_ALDIGA 0x0611
1621 #define PL2303_PRODUCT_ID_MMX 0x0612
1622 #define PL2303_PRODUCT_ID_GPRS 0x0609
1623 diff --git a/drivers/usb/serial/usb-serial-simple.c b/drivers/usb/serial/usb-serial-simple.c
1624 index 74172fe158df..4ef79e29cb26 100644
1625 --- a/drivers/usb/serial/usb-serial-simple.c
1626 +++ b/drivers/usb/serial/usb-serial-simple.c
1627 @@ -77,6 +77,11 @@ DEVICE(vivopay, VIVOPAY_IDS);
1628 { USB_DEVICE(0x22b8, 0x2c64) } /* Motorola V950 phone */
1629 DEVICE(moto_modem, MOTO_IDS);
1630
1631 +/* Motorola Tetra driver */
1632 +#define MOTOROLA_TETRA_IDS() \
1633 + { USB_DEVICE(0x0cad, 0x9011) } /* Motorola Solutions TETRA PEI */
1634 +DEVICE(motorola_tetra, MOTOROLA_TETRA_IDS);
1635 +
1636 /* Novatel Wireless GPS driver */
1637 #define NOVATEL_IDS() \
1638 { USB_DEVICE(0x09d7, 0x0100) } /* NovAtel FlexPack GPS */
1639 @@ -107,6 +112,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
1640 &google_device,
1641 &vivopay_device,
1642 &moto_modem_device,
1643 + &motorola_tetra_device,
1644 &novatel_gps_device,
1645 &hp4x_device,
1646 &suunto_device,
1647 @@ -122,6 +128,7 @@ static const struct usb_device_id id_table[] = {
1648 GOOGLE_IDS(),
1649 VIVOPAY_IDS(),
1650 MOTO_IDS(),
1651 + MOTOROLA_TETRA_IDS(),
1652 NOVATEL_IDS(),
1653 HP4X_IDS(),
1654 SUUNTO_IDS(),
1655 diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
1656 index 5d04c40ee40a..3b1b9695177a 100644
1657 --- a/drivers/usb/storage/uas.c
1658 +++ b/drivers/usb/storage/uas.c
1659 @@ -1076,20 +1076,19 @@ static int uas_post_reset(struct usb_interface *intf)
1660 return 0;
1661
1662 err = uas_configure_endpoints(devinfo);
1663 - if (err) {
1664 + if (err && err != ENODEV)
1665 shost_printk(KERN_ERR, shost,
1666 "%s: alloc streams error %d after reset",
1667 __func__, err);
1668 - return 1;
1669 - }
1670
1671 + /* we must unblock the host in every case lest we deadlock */
1672 spin_lock_irqsave(shost->host_lock, flags);
1673 scsi_report_bus_reset(shost, 0);
1674 spin_unlock_irqrestore(shost->host_lock, flags);
1675
1676 scsi_unblock_requests(shost);
1677
1678 - return 0;
1679 + return err ? 1 : 0;
1680 }
1681
1682 static int uas_suspend(struct usb_interface *intf, pm_message_t message)
1683 diff --git a/include/linux/tty.h b/include/linux/tty.h
1684 index 7ac8ba208b1f..0a6c71e0ad01 100644
1685 --- a/include/linux/tty.h
1686 +++ b/include/linux/tty.h
1687 @@ -405,6 +405,8 @@ extern const char *tty_name(const struct tty_struct *tty);
1688 extern struct tty_struct *tty_kopen(dev_t device);
1689 extern void tty_kclose(struct tty_struct *tty);
1690 extern int tty_dev_name_to_number(const char *name, dev_t *number);
1691 +extern int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout);
1692 +extern void tty_ldisc_unlock(struct tty_struct *tty);
1693 #else
1694 static inline void tty_kref_put(struct tty_struct *tty)
1695 { }
1696 diff --git a/lib/test_firmware.c b/lib/test_firmware.c
1697 index 64a4c76cba2b..e7008688769b 100644
1698 --- a/lib/test_firmware.c
1699 +++ b/lib/test_firmware.c
1700 @@ -371,6 +371,7 @@ static ssize_t config_num_requests_store(struct device *dev,
1701 if (test_fw_config->reqs) {
1702 pr_err("Must call release_all_firmware prior to changing config\n");
1703 rc = -EINVAL;
1704 + mutex_unlock(&test_fw_mutex);
1705 goto out;
1706 }
1707 mutex_unlock(&test_fw_mutex);
1708 diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
1709 index ee4613fa5840..f19f4841a97a 100644
1710 --- a/security/integrity/ima/ima_policy.c
1711 +++ b/security/integrity/ima/ima_policy.c
1712 @@ -743,7 +743,7 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
1713 case Opt_fsuuid:
1714 ima_log_string(ab, "fsuuid", args[0].from);
1715
1716 - if (uuid_is_null(&entry->fsuuid)) {
1717 + if (!uuid_is_null(&entry->fsuuid)) {
1718 result = -EINVAL;
1719 break;
1720 }
1721 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1722 index 9aafc6c86132..1750e00c5bb4 100644
1723 --- a/sound/pci/hda/patch_realtek.c
1724 +++ b/sound/pci/hda/patch_realtek.c
1725 @@ -3154,11 +3154,13 @@ static void alc256_shutup(struct hda_codec *codec)
1726 if (hp_pin_sense)
1727 msleep(85);
1728
1729 + /* 3k pull low control for Headset jack. */
1730 + /* NOTE: call this before clearing the pin, otherwise codec stalls */
1731 + alc_update_coef_idx(codec, 0x46, 0, 3 << 12);
1732 +
1733 snd_hda_codec_write(codec, hp_pin, 0,
1734 AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
1735
1736 - alc_update_coef_idx(codec, 0x46, 0, 3 << 12); /* 3k pull low control for Headset jack. */
1737 -
1738 if (hp_pin_sense)
1739 msleep(100);
1740
1741 diff --git a/tools/gpio/gpio-event-mon.c b/tools/gpio/gpio-event-mon.c
1742 index 1c14c2595158..4b36323ea64b 100644
1743 --- a/tools/gpio/gpio-event-mon.c
1744 +++ b/tools/gpio/gpio-event-mon.c
1745 @@ -23,6 +23,7 @@
1746 #include <getopt.h>
1747 #include <inttypes.h>
1748 #include <sys/ioctl.h>
1749 +#include <sys/types.h>
1750 #include <linux/gpio.h>
1751
1752 int monitor_device(const char *device_name,
1753 diff --git a/tools/usb/usbip/src/usbip_bind.c b/tools/usb/usbip/src/usbip_bind.c
1754 index fa46141ae68b..e121cfb1746a 100644
1755 --- a/tools/usb/usbip/src/usbip_bind.c
1756 +++ b/tools/usb/usbip/src/usbip_bind.c
1757 @@ -144,6 +144,7 @@ static int bind_device(char *busid)
1758 int rc;
1759 struct udev *udev;
1760 struct udev_device *dev;
1761 + const char *devpath;
1762
1763 /* Check whether the device with this bus ID exists. */
1764 udev = udev_new();
1765 @@ -152,8 +153,16 @@ static int bind_device(char *busid)
1766 err("device with the specified bus ID does not exist");
1767 return -1;
1768 }
1769 + devpath = udev_device_get_devpath(dev);
1770 udev_unref(udev);
1771
1772 + /* If the device is already attached to vhci_hcd - bail out */
1773 + if (strstr(devpath, USBIP_VHCI_DRV_NAME)) {
1774 + err("bind loop detected: device: %s is attached to %s\n",
1775 + devpath, USBIP_VHCI_DRV_NAME);
1776 + return -1;
1777 + }
1778 +
1779 rc = unbind_other(busid);
1780 if (rc == UNBIND_ST_FAILED) {
1781 err("could not unbind driver from device on busid %s", busid);
1782 diff --git a/tools/usb/usbip/src/usbip_list.c b/tools/usb/usbip/src/usbip_list.c
1783 index f1b38e866dd7..d65a9f444174 100644
1784 --- a/tools/usb/usbip/src/usbip_list.c
1785 +++ b/tools/usb/usbip/src/usbip_list.c
1786 @@ -187,6 +187,7 @@ static int list_devices(bool parsable)
1787 const char *busid;
1788 char product_name[128];
1789 int ret = -1;
1790 + const char *devpath;
1791
1792 /* Create libudev context. */
1793 udev = udev_new();
1794 @@ -209,6 +210,14 @@ static int list_devices(bool parsable)
1795 path = udev_list_entry_get_name(dev_list_entry);
1796 dev = udev_device_new_from_syspath(udev, path);
1797
1798 + /* Ignore devices attached to vhci_hcd */
1799 + devpath = udev_device_get_devpath(dev);
1800 + if (strstr(devpath, USBIP_VHCI_DRV_NAME)) {
1801 + dbg("Skip the device %s already attached to %s\n",
1802 + devpath, USBIP_VHCI_DRV_NAME);
1803 + continue;
1804 + }
1805 +
1806 /* Get device information. */
1807 idVendor = udev_device_get_sysattr_value(dev, "idVendor");
1808 idProduct = udev_device_get_sysattr_value(dev, "idProduct");