Contents of /trunk/kernel-alx/patches-4.14/0132-4.14.33-all-fixes.patch
Parent Directory | Revision Log
Revision 3238 -
(show annotations)
(download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 10 months ago) by niro
File size: 78800 byte(s)
Fri Nov 9 12:14:58 2018 UTC (5 years, 10 months ago) by niro
File size: 78800 byte(s)
-added up to patches-4.14.79
1 | diff --git a/Documentation/devicetree/bindings/serial/8250.txt b/Documentation/devicetree/bindings/serial/8250.txt |
2 | index dad3b2ec66d4..aeb6db4e35c3 100644 |
3 | --- a/Documentation/devicetree/bindings/serial/8250.txt |
4 | +++ b/Documentation/devicetree/bindings/serial/8250.txt |
5 | @@ -24,6 +24,7 @@ Required properties: |
6 | - "ti,da830-uart" |
7 | - "aspeed,ast2400-vuart" |
8 | - "aspeed,ast2500-vuart" |
9 | + - "nuvoton,npcm750-uart" |
10 | - "serial" if the port type is unknown. |
11 | - reg : offset and length of the register set for the device. |
12 | - interrupts : should contain uart interrupt. |
13 | diff --git a/Makefile b/Makefile |
14 | index c4c681b53ff0..00dd6af8eab4 100644 |
15 | --- a/Makefile |
16 | +++ b/Makefile |
17 | @@ -1,7 +1,7 @@ |
18 | # SPDX-License-Identifier: GPL-2.0 |
19 | VERSION = 4 |
20 | PATCHLEVEL = 14 |
21 | -SUBLEVEL = 32 |
22 | +SUBLEVEL = 33 |
23 | EXTRAVERSION = |
24 | NAME = Petit Gorille |
25 | |
26 | diff --git a/arch/arm/boot/dts/am335x-pepper.dts b/arch/arm/boot/dts/am335x-pepper.dts |
27 | index 9fb7426070ce..03c7d77023c6 100644 |
28 | --- a/arch/arm/boot/dts/am335x-pepper.dts |
29 | +++ b/arch/arm/boot/dts/am335x-pepper.dts |
30 | @@ -139,7 +139,7 @@ |
31 | &audio_codec { |
32 | status = "okay"; |
33 | |
34 | - reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>; |
35 | + gpio-reset = <&gpio1 16 GPIO_ACTIVE_LOW>; |
36 | AVDD-supply = <&ldo3_reg>; |
37 | IOVDD-supply = <&ldo3_reg>; |
38 | DRVDD-supply = <&ldo3_reg>; |
39 | diff --git a/arch/arm/boot/dts/dra76-evm.dts b/arch/arm/boot/dts/dra76-evm.dts |
40 | index b024a65c6e27..f64aab450315 100644 |
41 | --- a/arch/arm/boot/dts/dra76-evm.dts |
42 | +++ b/arch/arm/boot/dts/dra76-evm.dts |
43 | @@ -148,6 +148,7 @@ |
44 | compatible = "ti,tps65917"; |
45 | reg = <0x58>; |
46 | ti,system-power-controller; |
47 | + ti,palmas-override-powerhold; |
48 | interrupt-controller; |
49 | #interrupt-cells = <2>; |
50 | |
51 | diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts |
52 | index c66ee8432a85..4acd32a1c4ef 100644 |
53 | --- a/arch/arm/boot/dts/omap3-n900.dts |
54 | +++ b/arch/arm/boot/dts/omap3-n900.dts |
55 | @@ -558,7 +558,7 @@ |
56 | tlv320aic3x: tlv320aic3x@18 { |
57 | compatible = "ti,tlv320aic3x"; |
58 | reg = <0x18>; |
59 | - reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>; /* 60 */ |
60 | + gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */ |
61 | ai3x-gpio-func = < |
62 | 0 /* AIC3X_GPIO1_FUNC_DISABLED */ |
63 | 5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */ |
64 | @@ -575,7 +575,7 @@ |
65 | tlv320aic3x_aux: tlv320aic3x@19 { |
66 | compatible = "ti,tlv320aic3x"; |
67 | reg = <0x19>; |
68 | - reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>; /* 60 */ |
69 | + gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */ |
70 | |
71 | AVDD-supply = <&vmmc2>; |
72 | DRVDD-supply = <&vmmc2>; |
73 | diff --git a/arch/arm/boot/dts/sun6i-a31s-sinovoip-bpi-m2.dts b/arch/arm/boot/dts/sun6i-a31s-sinovoip-bpi-m2.dts |
74 | index 51e6f1d21c32..b2758dd8ce43 100644 |
75 | --- a/arch/arm/boot/dts/sun6i-a31s-sinovoip-bpi-m2.dts |
76 | +++ b/arch/arm/boot/dts/sun6i-a31s-sinovoip-bpi-m2.dts |
77 | @@ -42,7 +42,6 @@ |
78 | |
79 | /dts-v1/; |
80 | #include "sun6i-a31s.dtsi" |
81 | -#include "sunxi-common-regulators.dtsi" |
82 | #include <dt-bindings/gpio/gpio.h> |
83 | |
84 | / { |
85 | @@ -99,6 +98,7 @@ |
86 | pinctrl-0 = <&gmac_pins_rgmii_a>, <&gmac_phy_reset_pin_bpi_m2>; |
87 | phy = <&phy1>; |
88 | phy-mode = "rgmii"; |
89 | + phy-supply = <®_dldo1>; |
90 | snps,reset-gpio = <&pio 0 21 GPIO_ACTIVE_HIGH>; /* PA21 */ |
91 | snps,reset-active-low; |
92 | snps,reset-delays-us = <0 10000 30000>; |
93 | @@ -118,7 +118,7 @@ |
94 | &mmc0 { |
95 | pinctrl-names = "default"; |
96 | pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bpi_m2>; |
97 | - vmmc-supply = <®_vcc3v0>; |
98 | + vmmc-supply = <®_dcdc1>; |
99 | bus-width = <4>; |
100 | cd-gpios = <&pio 0 4 GPIO_ACTIVE_HIGH>; /* PA4 */ |
101 | cd-inverted; |
102 | @@ -132,7 +132,7 @@ |
103 | &mmc2 { |
104 | pinctrl-names = "default"; |
105 | pinctrl-0 = <&mmc2_pins_a>; |
106 | - vmmc-supply = <®_vcc3v0>; |
107 | + vmmc-supply = <®_aldo1>; |
108 | mmc-pwrseq = <&mmc2_pwrseq>; |
109 | bus-width = <4>; |
110 | non-removable; |
111 | @@ -163,6 +163,8 @@ |
112 | reg = <0x68>; |
113 | interrupt-parent = <&nmi_intc>; |
114 | interrupts = <0 IRQ_TYPE_LEVEL_LOW>; |
115 | + eldoin-supply = <®_dcdc1>; |
116 | + x-powers,drive-vbus-en; |
117 | }; |
118 | }; |
119 | |
120 | @@ -193,7 +195,28 @@ |
121 | |
122 | #include "axp22x.dtsi" |
123 | |
124 | +®_aldo1 { |
125 | + regulator-min-microvolt = <3300000>; |
126 | + regulator-max-microvolt = <3300000>; |
127 | + regulator-name = "vcc-wifi"; |
128 | +}; |
129 | + |
130 | +®_aldo2 { |
131 | + regulator-always-on; |
132 | + regulator-min-microvolt = <2500000>; |
133 | + regulator-max-microvolt = <2500000>; |
134 | + regulator-name = "vcc-gmac"; |
135 | +}; |
136 | + |
137 | +®_aldo3 { |
138 | + regulator-always-on; |
139 | + regulator-min-microvolt = <3000000>; |
140 | + regulator-max-microvolt = <3000000>; |
141 | + regulator-name = "avcc"; |
142 | +}; |
143 | + |
144 | ®_dc5ldo { |
145 | + regulator-always-on; |
146 | regulator-min-microvolt = <700000>; |
147 | regulator-max-microvolt = <1320000>; |
148 | regulator-name = "vdd-cpus"; |
149 | @@ -233,6 +256,40 @@ |
150 | regulator-name = "vcc-dram"; |
151 | }; |
152 | |
153 | +®_dldo1 { |
154 | + regulator-min-microvolt = <3000000>; |
155 | + regulator-max-microvolt = <3000000>; |
156 | + regulator-name = "vcc-mac"; |
157 | +}; |
158 | + |
159 | +®_dldo2 { |
160 | + regulator-min-microvolt = <2800000>; |
161 | + regulator-max-microvolt = <2800000>; |
162 | + regulator-name = "avdd-csi"; |
163 | +}; |
164 | + |
165 | +®_dldo3 { |
166 | + regulator-always-on; |
167 | + regulator-min-microvolt = <3300000>; |
168 | + regulator-max-microvolt = <3300000>; |
169 | + regulator-name = "vcc-pb"; |
170 | +}; |
171 | + |
172 | +®_eldo1 { |
173 | + regulator-min-microvolt = <1800000>; |
174 | + regulator-max-microvolt = <1800000>; |
175 | + regulator-name = "vdd-csi"; |
176 | + status = "okay"; |
177 | +}; |
178 | + |
179 | +®_ldo_io1 { |
180 | + regulator-always-on; |
181 | + regulator-min-microvolt = <1800000>; |
182 | + regulator-max-microvolt = <1800000>; |
183 | + regulator-name = "vcc-pm-cpus"; |
184 | + status = "okay"; |
185 | +}; |
186 | + |
187 | &uart0 { |
188 | pinctrl-names = "default"; |
189 | pinctrl-0 = <&uart0_pins_a>; |
190 | diff --git a/arch/arm/crypto/Makefile b/arch/arm/crypto/Makefile |
191 | index 30ef8e291271..c9919c2b7ad1 100644 |
192 | --- a/arch/arm/crypto/Makefile |
193 | +++ b/arch/arm/crypto/Makefile |
194 | @@ -54,6 +54,7 @@ crct10dif-arm-ce-y := crct10dif-ce-core.o crct10dif-ce-glue.o |
195 | crc32-arm-ce-y:= crc32-ce-core.o crc32-ce-glue.o |
196 | chacha20-neon-y := chacha20-neon-core.o chacha20-neon-glue.o |
197 | |
198 | +ifdef REGENERATE_ARM_CRYPTO |
199 | quiet_cmd_perl = PERL $@ |
200 | cmd_perl = $(PERL) $(<) > $(@) |
201 | |
202 | @@ -62,5 +63,6 @@ $(src)/sha256-core.S_shipped: $(src)/sha256-armv4.pl |
203 | |
204 | $(src)/sha512-core.S_shipped: $(src)/sha512-armv4.pl |
205 | $(call cmd,perl) |
206 | +endif |
207 | |
208 | .PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S |
209 | diff --git a/arch/arm/plat-omap/include/plat/sram.h b/arch/arm/plat-omap/include/plat/sram.h |
210 | index fb061cf0d736..30a07730807a 100644 |
211 | --- a/arch/arm/plat-omap/include/plat/sram.h |
212 | +++ b/arch/arm/plat-omap/include/plat/sram.h |
213 | @@ -5,13 +5,4 @@ void omap_map_sram(unsigned long start, unsigned long size, |
214 | unsigned long skip, int cached); |
215 | void omap_sram_reset(void); |
216 | |
217 | -extern void *omap_sram_push_address(unsigned long size); |
218 | - |
219 | -/* Macro to push a function to the internal SRAM, using the fncpy API */ |
220 | -#define omap_sram_push(funcp, size) ({ \ |
221 | - typeof(&(funcp)) _res = NULL; \ |
222 | - void *_sram_address = omap_sram_push_address(size); \ |
223 | - if (_sram_address) \ |
224 | - _res = fncpy(_sram_address, &(funcp), size); \ |
225 | - _res; \ |
226 | -}) |
227 | +extern void *omap_sram_push(void *funcp, unsigned long size); |
228 | diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c |
229 | index a5bc92d7e476..921840acf65c 100644 |
230 | --- a/arch/arm/plat-omap/sram.c |
231 | +++ b/arch/arm/plat-omap/sram.c |
232 | @@ -23,6 +23,7 @@ |
233 | #include <asm/fncpy.h> |
234 | #include <asm/tlb.h> |
235 | #include <asm/cacheflush.h> |
236 | +#include <asm/set_memory.h> |
237 | |
238 | #include <asm/mach/map.h> |
239 | |
240 | @@ -42,7 +43,7 @@ static void __iomem *omap_sram_ceil; |
241 | * Note that fncpy requires the returned address to be aligned |
242 | * to an 8-byte boundary. |
243 | */ |
244 | -void *omap_sram_push_address(unsigned long size) |
245 | +static void *omap_sram_push_address(unsigned long size) |
246 | { |
247 | unsigned long available, new_ceil = (unsigned long)omap_sram_ceil; |
248 | |
249 | @@ -60,6 +61,30 @@ void *omap_sram_push_address(unsigned long size) |
250 | return (void *)omap_sram_ceil; |
251 | } |
252 | |
253 | +void *omap_sram_push(void *funcp, unsigned long size) |
254 | +{ |
255 | + void *sram; |
256 | + unsigned long base; |
257 | + int pages; |
258 | + void *dst = NULL; |
259 | + |
260 | + sram = omap_sram_push_address(size); |
261 | + if (!sram) |
262 | + return NULL; |
263 | + |
264 | + base = (unsigned long)sram & PAGE_MASK; |
265 | + pages = PAGE_ALIGN(size) / PAGE_SIZE; |
266 | + |
267 | + set_memory_rw(base, pages); |
268 | + |
269 | + dst = fncpy(sram, funcp, size); |
270 | + |
271 | + set_memory_ro(base, pages); |
272 | + set_memory_x(base, pages); |
273 | + |
274 | + return dst; |
275 | +} |
276 | + |
277 | /* |
278 | * The SRAM context is lost during off-idle and stack |
279 | * needs to be reset. |
280 | @@ -75,6 +100,9 @@ void omap_sram_reset(void) |
281 | void __init omap_map_sram(unsigned long start, unsigned long size, |
282 | unsigned long skip, int cached) |
283 | { |
284 | + unsigned long base; |
285 | + int pages; |
286 | + |
287 | if (size == 0) |
288 | return; |
289 | |
290 | @@ -95,4 +123,10 @@ void __init omap_map_sram(unsigned long start, unsigned long size, |
291 | */ |
292 | memset_io(omap_sram_base + omap_sram_skip, 0, |
293 | omap_sram_size - omap_sram_skip); |
294 | + |
295 | + base = (unsigned long)omap_sram_base; |
296 | + pages = PAGE_ALIGN(omap_sram_size) / PAGE_SIZE; |
297 | + |
298 | + set_memory_ro(base, pages); |
299 | + set_memory_x(base, pages); |
300 | } |
301 | diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c |
302 | index a71a48e71fff..aa7496be311d 100644 |
303 | --- a/arch/arm/vfp/vfpmodule.c |
304 | +++ b/arch/arm/vfp/vfpmodule.c |
305 | @@ -648,7 +648,7 @@ int vfp_restore_user_hwstate(struct user_vfp __user *ufp, |
306 | */ |
307 | static int vfp_dying_cpu(unsigned int cpu) |
308 | { |
309 | - vfp_force_reload(cpu, current_thread_info()); |
310 | + vfp_current_hw_state[cpu] = NULL; |
311 | return 0; |
312 | } |
313 | |
314 | diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile |
315 | index b5edc5918c28..12fd81af1d1c 100644 |
316 | --- a/arch/arm64/crypto/Makefile |
317 | +++ b/arch/arm64/crypto/Makefile |
318 | @@ -58,6 +58,7 @@ CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS |
319 | $(obj)/aes-glue-%.o: $(src)/aes-glue.c FORCE |
320 | $(call if_changed_rule,cc_o_c) |
321 | |
322 | +ifdef REGENERATE_ARM64_CRYPTO |
323 | quiet_cmd_perlasm = PERLASM $@ |
324 | cmd_perlasm = $(PERL) $(<) void $(@) |
325 | |
326 | @@ -66,5 +67,6 @@ $(src)/sha256-core.S_shipped: $(src)/sha512-armv8.pl |
327 | |
328 | $(src)/sha512-core.S_shipped: $(src)/sha512-armv8.pl |
329 | $(call cmd,perlasm) |
330 | +endif |
331 | |
332 | .PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S |
333 | diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S |
334 | index e91b40aa5417..f9ca4bb3d48e 100644 |
335 | --- a/arch/powerpc/kernel/exceptions-64s.S |
336 | +++ b/arch/powerpc/kernel/exceptions-64s.S |
337 | @@ -704,7 +704,7 @@ EXC_COMMON_BEGIN(bad_addr_slb) |
338 | ld r3, PACA_EXSLB+EX_DAR(r13) |
339 | std r3, _DAR(r1) |
340 | beq cr6, 2f |
341 | - li r10, 0x480 /* fix trap number for I-SLB miss */ |
342 | + li r10, 0x481 /* fix trap number for I-SLB miss */ |
343 | std r10, _TRAP(r1) |
344 | 2: bl save_nvgprs |
345 | addi r3, r1, STACK_FRAME_OVERHEAD |
346 | diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c |
347 | index 4e65bf82f5e0..0ce8b0e5d7ba 100644 |
348 | --- a/arch/powerpc/kernel/irq.c |
349 | +++ b/arch/powerpc/kernel/irq.c |
350 | @@ -430,6 +430,14 @@ void force_external_irq_replay(void) |
351 | */ |
352 | WARN_ON(!arch_irqs_disabled()); |
353 | |
354 | + /* |
355 | + * Interrupts must always be hard disabled before irq_happened is |
356 | + * modified (to prevent lost update in case of interrupt between |
357 | + * load and store). |
358 | + */ |
359 | + __hard_irq_disable(); |
360 | + local_paca->irq_happened |= PACA_IRQ_HARD_DIS; |
361 | + |
362 | /* Indicate in the PACA that we have an interrupt to replay */ |
363 | local_paca->irq_happened |= PACA_IRQ_EE; |
364 | } |
365 | diff --git a/arch/x86/crypto/cast5_avx_glue.c b/arch/x86/crypto/cast5_avx_glue.c |
366 | index dbea6020ffe7..575292a33bdf 100644 |
367 | --- a/arch/x86/crypto/cast5_avx_glue.c |
368 | +++ b/arch/x86/crypto/cast5_avx_glue.c |
369 | @@ -66,8 +66,6 @@ static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk, |
370 | void (*fn)(struct cast5_ctx *ctx, u8 *dst, const u8 *src); |
371 | int err; |
372 | |
373 | - fn = (enc) ? cast5_ecb_enc_16way : cast5_ecb_dec_16way; |
374 | - |
375 | err = blkcipher_walk_virt(desc, walk); |
376 | desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP; |
377 | |
378 | @@ -79,6 +77,7 @@ static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk, |
379 | |
380 | /* Process multi-block batch */ |
381 | if (nbytes >= bsize * CAST5_PARALLEL_BLOCKS) { |
382 | + fn = (enc) ? cast5_ecb_enc_16way : cast5_ecb_dec_16way; |
383 | do { |
384 | fn(ctx, wdst, wsrc); |
385 | |
386 | diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h |
387 | index 8ec99a55e6b9..bf253ad93bbc 100644 |
388 | --- a/arch/x86/include/asm/hw_irq.h |
389 | +++ b/arch/x86/include/asm/hw_irq.h |
390 | @@ -34,6 +34,7 @@ extern asmlinkage void kvm_posted_intr_wakeup_ipi(void); |
391 | extern asmlinkage void kvm_posted_intr_nested_ipi(void); |
392 | extern asmlinkage void error_interrupt(void); |
393 | extern asmlinkage void irq_work_interrupt(void); |
394 | +extern asmlinkage void uv_bau_message_intr1(void); |
395 | |
396 | extern asmlinkage void spurious_interrupt(void); |
397 | extern asmlinkage void thermal_interrupt(void); |
398 | diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c |
399 | index a59624080015..0c5256653d6c 100644 |
400 | --- a/arch/x86/kernel/idt.c |
401 | +++ b/arch/x86/kernel/idt.c |
402 | @@ -140,6 +140,9 @@ static const __initconst struct idt_data apic_idts[] = { |
403 | # ifdef CONFIG_IRQ_WORK |
404 | INTG(IRQ_WORK_VECTOR, irq_work_interrupt), |
405 | # endif |
406 | +#ifdef CONFIG_X86_UV |
407 | + INTG(UV_BAU_MESSAGE, uv_bau_message_intr1), |
408 | +#endif |
409 | INTG(SPURIOUS_APIC_VECTOR, spurious_interrupt), |
410 | INTG(ERROR_APIC_VECTOR, error_interrupt), |
411 | #endif |
412 | diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c |
413 | index 7d5d53f36a7a..0b530c53de1f 100644 |
414 | --- a/arch/x86/platform/uv/tlb_uv.c |
415 | +++ b/arch/x86/platform/uv/tlb_uv.c |
416 | @@ -2254,8 +2254,6 @@ static int __init uv_bau_init(void) |
417 | init_uvhub(uvhub, vector, uv_base_pnode); |
418 | } |
419 | |
420 | - alloc_intr_gate(vector, uv_bau_message_intr1); |
421 | - |
422 | for_each_possible_blade(uvhub) { |
423 | if (uv_blade_nr_possible_cpus(uvhub)) { |
424 | unsigned long val; |
425 | diff --git a/block/bio.c b/block/bio.c |
426 | index 7f978eac9a7a..dbaa82c967f4 100644 |
427 | --- a/block/bio.c |
428 | +++ b/block/bio.c |
429 | @@ -43,9 +43,9 @@ |
430 | * break badly! cannot be bigger than what you can fit into an |
431 | * unsigned short |
432 | */ |
433 | -#define BV(x) { .nr_vecs = x, .name = "biovec-"__stringify(x) } |
434 | +#define BV(x, n) { .nr_vecs = x, .name = "biovec-"#n } |
435 | static struct biovec_slab bvec_slabs[BVEC_POOL_NR] __read_mostly = { |
436 | - BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES), |
437 | + BV(1, 1), BV(4, 4), BV(16, 16), BV(64, 64), BV(128, 128), BV(BIO_MAX_PAGES, max), |
438 | }; |
439 | #undef BV |
440 | |
441 | diff --git a/block/partitions/msdos.c b/block/partitions/msdos.c |
442 | index 0af3a3db6fb0..82c44f7df911 100644 |
443 | --- a/block/partitions/msdos.c |
444 | +++ b/block/partitions/msdos.c |
445 | @@ -301,7 +301,9 @@ static void parse_bsd(struct parsed_partitions *state, |
446 | continue; |
447 | bsd_start = le32_to_cpu(p->p_offset); |
448 | bsd_size = le32_to_cpu(p->p_size); |
449 | - if (memcmp(flavour, "bsd\0", 4) == 0) |
450 | + /* FreeBSD has relative offset if C partition offset is zero */ |
451 | + if (memcmp(flavour, "bsd\0", 4) == 0 && |
452 | + le32_to_cpu(l->d_partitions[2].p_offset) == 0) |
453 | bsd_start += offset; |
454 | if (offset == bsd_start && size == bsd_size) |
455 | /* full parent partition, we have it already */ |
456 | diff --git a/crypto/ahash.c b/crypto/ahash.c |
457 | index f75b5c1f7152..3980e9e45289 100644 |
458 | --- a/crypto/ahash.c |
459 | +++ b/crypto/ahash.c |
460 | @@ -92,13 +92,14 @@ int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err) |
461 | |
462 | if (nbytes && walk->offset & alignmask && !err) { |
463 | walk->offset = ALIGN(walk->offset, alignmask + 1); |
464 | - walk->data += walk->offset; |
465 | - |
466 | nbytes = min(nbytes, |
467 | ((unsigned int)(PAGE_SIZE)) - walk->offset); |
468 | walk->entrylen -= nbytes; |
469 | |
470 | - return nbytes; |
471 | + if (nbytes) { |
472 | + walk->data += walk->offset; |
473 | + return nbytes; |
474 | + } |
475 | } |
476 | |
477 | if (walk->flags & CRYPTO_ALG_ASYNC) |
478 | diff --git a/crypto/lrw.c b/crypto/lrw.c |
479 | index eb681e9fe574..fdba6dd6db63 100644 |
480 | --- a/crypto/lrw.c |
481 | +++ b/crypto/lrw.c |
482 | @@ -313,7 +313,7 @@ static void exit_crypt(struct skcipher_request *req) |
483 | rctx->left = 0; |
484 | |
485 | if (rctx->ext) |
486 | - kfree(rctx->ext); |
487 | + kzfree(rctx->ext); |
488 | } |
489 | |
490 | static int do_encrypt(struct skcipher_request *req, int err) |
491 | diff --git a/crypto/testmgr.h b/crypto/testmgr.h |
492 | index d54971d2d1c8..fbc0fab5e79e 100644 |
493 | --- a/crypto/testmgr.h |
494 | +++ b/crypto/testmgr.h |
495 | @@ -548,7 +548,7 @@ static const struct akcipher_testvec rsa_tv_template[] = { |
496 | static const struct akcipher_testvec pkcs1pad_rsa_tv_template[] = { |
497 | { |
498 | .key = |
499 | - "\x30\x82\x03\x1f\x02\x01\x10\x02\x82\x01\x01\x00\xd7\x1e\x77\x82" |
500 | + "\x30\x82\x03\x1f\x02\x01\x00\x02\x82\x01\x01\x00\xd7\x1e\x77\x82" |
501 | "\x8c\x92\x31\xe7\x69\x02\xa2\xd5\x5c\x78\xde\xa2\x0c\x8f\xfe\x28" |
502 | "\x59\x31\xdf\x40\x9c\x60\x61\x06\xb9\x2f\x62\x40\x80\x76\xcb\x67" |
503 | "\x4a\xb5\x59\x56\x69\x17\x07\xfa\xf9\x4c\xbd\x6c\x37\x7a\x46\x7d" |
504 | @@ -597,8 +597,8 @@ static const struct akcipher_testvec pkcs1pad_rsa_tv_template[] = { |
505 | "\xfe\xf8\x27\x1b\xd6\x55\x60\x5e\x48\xb7\x6d\x9a\xa8\x37\xf9\x7a" |
506 | "\xde\x1b\xcd\x5d\x1a\x30\xd4\xe9\x9e\x5b\x3c\x15\xf8\x9c\x1f\xda" |
507 | "\xd1\x86\x48\x55\xce\x83\xee\x8e\x51\xc7\xde\x32\x12\x47\x7d\x46" |
508 | - "\xb8\x35\xdf\x41\x02\x01\x30\x02\x01\x30\x02\x01\x30\x02\x01\x30" |
509 | - "\x02\x01\x30", |
510 | + "\xb8\x35\xdf\x41\x02\x01\x00\x02\x01\x00\x02\x01\x00\x02\x01\x00" |
511 | + "\x02\x01\x00", |
512 | .key_len = 804, |
513 | /* |
514 | * m is SHA256 hash of following message: |
515 | diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c |
516 | index 6df7d6676a48..41be9ff7d70a 100644 |
517 | --- a/drivers/base/arch_topology.c |
518 | +++ b/drivers/base/arch_topology.c |
519 | @@ -166,11 +166,11 @@ bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu) |
520 | } |
521 | |
522 | #ifdef CONFIG_CPU_FREQ |
523 | -static cpumask_var_t cpus_to_visit __initdata; |
524 | -static void __init parsing_done_workfn(struct work_struct *work); |
525 | -static __initdata DECLARE_WORK(parsing_done_work, parsing_done_workfn); |
526 | +static cpumask_var_t cpus_to_visit; |
527 | +static void parsing_done_workfn(struct work_struct *work); |
528 | +static DECLARE_WORK(parsing_done_work, parsing_done_workfn); |
529 | |
530 | -static int __init |
531 | +static int |
532 | init_cpu_capacity_callback(struct notifier_block *nb, |
533 | unsigned long val, |
534 | void *data) |
535 | @@ -206,7 +206,7 @@ init_cpu_capacity_callback(struct notifier_block *nb, |
536 | return 0; |
537 | } |
538 | |
539 | -static struct notifier_block init_cpu_capacity_notifier __initdata = { |
540 | +static struct notifier_block init_cpu_capacity_notifier = { |
541 | .notifier_call = init_cpu_capacity_callback, |
542 | }; |
543 | |
544 | @@ -232,7 +232,7 @@ static int __init register_cpufreq_notifier(void) |
545 | } |
546 | core_initcall(register_cpufreq_notifier); |
547 | |
548 | -static void __init parsing_done_workfn(struct work_struct *work) |
549 | +static void parsing_done_workfn(struct work_struct *work) |
550 | { |
551 | cpufreq_unregister_notifier(&init_cpu_capacity_notifier, |
552 | CPUFREQ_POLICY_NOTIFIER); |
553 | diff --git a/drivers/char/mem.c b/drivers/char/mem.c |
554 | index 3a70dba2c645..f11224a5dc5c 100644 |
555 | --- a/drivers/char/mem.c |
556 | +++ b/drivers/char/mem.c |
557 | @@ -137,7 +137,7 @@ static ssize_t read_mem(struct file *file, char __user *buf, |
558 | |
559 | while (count > 0) { |
560 | unsigned long remaining; |
561 | - int allowed; |
562 | + int allowed, probe; |
563 | |
564 | sz = size_inside_page(p, count); |
565 | |
566 | @@ -160,9 +160,9 @@ static ssize_t read_mem(struct file *file, char __user *buf, |
567 | if (!ptr) |
568 | goto failed; |
569 | |
570 | - err = probe_kernel_read(bounce, ptr, sz); |
571 | + probe = probe_kernel_read(bounce, ptr, sz); |
572 | unxlate_dev_mem_ptr(p, ptr); |
573 | - if (err) |
574 | + if (probe) |
575 | goto failed; |
576 | |
577 | remaining = copy_to_user(buf, bounce, sz); |
578 | diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c |
579 | index bb1e148ebfd4..ea43b147a7fe 100644 |
580 | --- a/drivers/cpufreq/cpufreq.c |
581 | +++ b/drivers/cpufreq/cpufreq.c |
582 | @@ -631,8 +631,6 @@ static int cpufreq_parse_governor(char *str_governor, unsigned int *policy, |
583 | *governor = t; |
584 | err = 0; |
585 | } |
586 | - if (t && !try_module_get(t->owner)) |
587 | - t = NULL; |
588 | |
589 | mutex_unlock(&cpufreq_governor_mutex); |
590 | } |
591 | @@ -761,10 +759,6 @@ static ssize_t store_scaling_governor(struct cpufreq_policy *policy, |
592 | return -EINVAL; |
593 | |
594 | ret = cpufreq_set_policy(policy, &new_policy); |
595 | - |
596 | - if (new_policy.governor) |
597 | - module_put(new_policy.governor->owner); |
598 | - |
599 | return ret ? ret : count; |
600 | } |
601 | |
602 | diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c |
603 | index e1d4ae1153c4..39f70411f28f 100644 |
604 | --- a/drivers/crypto/caam/ctrl.c |
605 | +++ b/drivers/crypto/caam/ctrl.c |
606 | @@ -813,9 +813,6 @@ static int caam_probe(struct platform_device *pdev) |
607 | return 0; |
608 | |
609 | caam_remove: |
610 | -#ifdef CONFIG_DEBUG_FS |
611 | - debugfs_remove_recursive(ctrlpriv->dfs_root); |
612 | -#endif |
613 | caam_remove(pdev); |
614 | return ret; |
615 | |
616 | diff --git a/drivers/crypto/ccp/ccp-crypto-rsa.c b/drivers/crypto/ccp/ccp-crypto-rsa.c |
617 | index e6db8672d89c..05850dfd7940 100644 |
618 | --- a/drivers/crypto/ccp/ccp-crypto-rsa.c |
619 | +++ b/drivers/crypto/ccp/ccp-crypto-rsa.c |
620 | @@ -60,10 +60,9 @@ static int ccp_rsa_complete(struct crypto_async_request *async_req, int ret) |
621 | |
622 | static unsigned int ccp_rsa_maxsize(struct crypto_akcipher *tfm) |
623 | { |
624 | - if (ccp_version() > CCP_VERSION(3, 0)) |
625 | - return CCP5_RSA_MAXMOD; |
626 | - else |
627 | - return CCP_RSA_MAXMOD; |
628 | + struct ccp_ctx *ctx = akcipher_tfm_ctx(tfm); |
629 | + |
630 | + return ctx->u.rsa.n_len; |
631 | } |
632 | |
633 | static int ccp_rsa_crypt(struct akcipher_request *req, bool encrypt) |
634 | diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c |
635 | index 4bcef78a08aa..d4c81cb73bee 100644 |
636 | --- a/drivers/crypto/inside-secure/safexcel.c |
637 | +++ b/drivers/crypto/inside-secure/safexcel.c |
638 | @@ -789,7 +789,7 @@ static int safexcel_probe(struct platform_device *pdev) |
639 | return PTR_ERR(priv->base); |
640 | } |
641 | |
642 | - priv->clk = of_clk_get(dev->of_node, 0); |
643 | + priv->clk = devm_clk_get(&pdev->dev, NULL); |
644 | if (!IS_ERR(priv->clk)) { |
645 | ret = clk_prepare_enable(priv->clk); |
646 | if (ret) { |
647 | diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c |
648 | index d4a6e9c2e9aa..124f9b1cf1b0 100644 |
649 | --- a/drivers/i2c/busses/i2c-stm32f7.c |
650 | +++ b/drivers/i2c/busses/i2c-stm32f7.c |
651 | @@ -887,6 +887,11 @@ static int stm32f7_i2c_probe(struct platform_device *pdev) |
652 | } |
653 | |
654 | setup = of_device_get_match_data(&pdev->dev); |
655 | + if (!setup) { |
656 | + dev_err(&pdev->dev, "Can't get device data\n"); |
657 | + ret = -ENODEV; |
658 | + goto clk_free; |
659 | + } |
660 | i2c_dev->setup = *setup; |
661 | |
662 | ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-rising-time-ns", |
663 | diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c |
664 | index d2f74721b3ba..40475ebf3a61 100644 |
665 | --- a/drivers/infiniband/core/addr.c |
666 | +++ b/drivers/infiniband/core/addr.c |
667 | @@ -207,6 +207,22 @@ int rdma_addr_size(struct sockaddr *addr) |
668 | } |
669 | EXPORT_SYMBOL(rdma_addr_size); |
670 | |
671 | +int rdma_addr_size_in6(struct sockaddr_in6 *addr) |
672 | +{ |
673 | + int ret = rdma_addr_size((struct sockaddr *) addr); |
674 | + |
675 | + return ret <= sizeof(*addr) ? ret : 0; |
676 | +} |
677 | +EXPORT_SYMBOL(rdma_addr_size_in6); |
678 | + |
679 | +int rdma_addr_size_kss(struct __kernel_sockaddr_storage *addr) |
680 | +{ |
681 | + int ret = rdma_addr_size((struct sockaddr *) addr); |
682 | + |
683 | + return ret <= sizeof(*addr) ? ret : 0; |
684 | +} |
685 | +EXPORT_SYMBOL(rdma_addr_size_kss); |
686 | + |
687 | static struct rdma_addr_client self; |
688 | |
689 | void rdma_addr_register_client(struct rdma_addr_client *client) |
690 | @@ -597,6 +613,15 @@ static void process_one_req(struct work_struct *_work) |
691 | list_del(&req->list); |
692 | mutex_unlock(&lock); |
693 | |
694 | + /* |
695 | + * Although the work will normally have been canceled by the |
696 | + * workqueue, it can still be requeued as long as it is on the |
697 | + * req_list, so it could have been requeued before we grabbed &lock. |
698 | + * We need to cancel it after it is removed from req_list to really be |
699 | + * sure it is safe to free. |
700 | + */ |
701 | + cancel_delayed_work(&req->work); |
702 | + |
703 | req->callback(req->status, (struct sockaddr *)&req->src_addr, |
704 | req->addr, req->context); |
705 | put_client(req->client); |
706 | diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c |
707 | index 77ca9da570a2..722235bed075 100644 |
708 | --- a/drivers/infiniband/core/ucma.c |
709 | +++ b/drivers/infiniband/core/ucma.c |
710 | @@ -132,7 +132,7 @@ static inline struct ucma_context *_ucma_find_context(int id, |
711 | ctx = idr_find(&ctx_idr, id); |
712 | if (!ctx) |
713 | ctx = ERR_PTR(-ENOENT); |
714 | - else if (ctx->file != file) |
715 | + else if (ctx->file != file || !ctx->cm_id) |
716 | ctx = ERR_PTR(-EINVAL); |
717 | return ctx; |
718 | } |
719 | @@ -456,6 +456,7 @@ static ssize_t ucma_create_id(struct ucma_file *file, const char __user *inbuf, |
720 | struct rdma_ucm_create_id cmd; |
721 | struct rdma_ucm_create_id_resp resp; |
722 | struct ucma_context *ctx; |
723 | + struct rdma_cm_id *cm_id; |
724 | enum ib_qp_type qp_type; |
725 | int ret; |
726 | |
727 | @@ -476,10 +477,10 @@ static ssize_t ucma_create_id(struct ucma_file *file, const char __user *inbuf, |
728 | return -ENOMEM; |
729 | |
730 | ctx->uid = cmd.uid; |
731 | - ctx->cm_id = rdma_create_id(current->nsproxy->net_ns, |
732 | - ucma_event_handler, ctx, cmd.ps, qp_type); |
733 | - if (IS_ERR(ctx->cm_id)) { |
734 | - ret = PTR_ERR(ctx->cm_id); |
735 | + cm_id = rdma_create_id(current->nsproxy->net_ns, |
736 | + ucma_event_handler, ctx, cmd.ps, qp_type); |
737 | + if (IS_ERR(cm_id)) { |
738 | + ret = PTR_ERR(cm_id); |
739 | goto err1; |
740 | } |
741 | |
742 | @@ -489,14 +490,19 @@ static ssize_t ucma_create_id(struct ucma_file *file, const char __user *inbuf, |
743 | ret = -EFAULT; |
744 | goto err2; |
745 | } |
746 | + |
747 | + ctx->cm_id = cm_id; |
748 | return 0; |
749 | |
750 | err2: |
751 | - rdma_destroy_id(ctx->cm_id); |
752 | + rdma_destroy_id(cm_id); |
753 | err1: |
754 | mutex_lock(&mut); |
755 | idr_remove(&ctx_idr, ctx->id); |
756 | mutex_unlock(&mut); |
757 | + mutex_lock(&file->mut); |
758 | + list_del(&ctx->list); |
759 | + mutex_unlock(&file->mut); |
760 | kfree(ctx); |
761 | return ret; |
762 | } |
763 | @@ -626,6 +632,9 @@ static ssize_t ucma_bind_ip(struct ucma_file *file, const char __user *inbuf, |
764 | if (copy_from_user(&cmd, inbuf, sizeof(cmd))) |
765 | return -EFAULT; |
766 | |
767 | + if (!rdma_addr_size_in6(&cmd.addr)) |
768 | + return -EINVAL; |
769 | + |
770 | ctx = ucma_get_ctx(file, cmd.id); |
771 | if (IS_ERR(ctx)) |
772 | return PTR_ERR(ctx); |
773 | @@ -639,22 +648,21 @@ static ssize_t ucma_bind(struct ucma_file *file, const char __user *inbuf, |
774 | int in_len, int out_len) |
775 | { |
776 | struct rdma_ucm_bind cmd; |
777 | - struct sockaddr *addr; |
778 | struct ucma_context *ctx; |
779 | int ret; |
780 | |
781 | if (copy_from_user(&cmd, inbuf, sizeof(cmd))) |
782 | return -EFAULT; |
783 | |
784 | - addr = (struct sockaddr *) &cmd.addr; |
785 | - if (cmd.reserved || !cmd.addr_size || (cmd.addr_size != rdma_addr_size(addr))) |
786 | + if (cmd.reserved || !cmd.addr_size || |
787 | + cmd.addr_size != rdma_addr_size_kss(&cmd.addr)) |
788 | return -EINVAL; |
789 | |
790 | ctx = ucma_get_ctx(file, cmd.id); |
791 | if (IS_ERR(ctx)) |
792 | return PTR_ERR(ctx); |
793 | |
794 | - ret = rdma_bind_addr(ctx->cm_id, addr); |
795 | + ret = rdma_bind_addr(ctx->cm_id, (struct sockaddr *) &cmd.addr); |
796 | ucma_put_ctx(ctx); |
797 | return ret; |
798 | } |
799 | @@ -670,13 +678,16 @@ static ssize_t ucma_resolve_ip(struct ucma_file *file, |
800 | if (copy_from_user(&cmd, inbuf, sizeof(cmd))) |
801 | return -EFAULT; |
802 | |
803 | + if (!rdma_addr_size_in6(&cmd.src_addr) || |
804 | + !rdma_addr_size_in6(&cmd.dst_addr)) |
805 | + return -EINVAL; |
806 | + |
807 | ctx = ucma_get_ctx(file, cmd.id); |
808 | if (IS_ERR(ctx)) |
809 | return PTR_ERR(ctx); |
810 | |
811 | ret = rdma_resolve_addr(ctx->cm_id, (struct sockaddr *) &cmd.src_addr, |
812 | - (struct sockaddr *) &cmd.dst_addr, |
813 | - cmd.timeout_ms); |
814 | + (struct sockaddr *) &cmd.dst_addr, cmd.timeout_ms); |
815 | ucma_put_ctx(ctx); |
816 | return ret; |
817 | } |
818 | @@ -686,24 +697,23 @@ static ssize_t ucma_resolve_addr(struct ucma_file *file, |
819 | int in_len, int out_len) |
820 | { |
821 | struct rdma_ucm_resolve_addr cmd; |
822 | - struct sockaddr *src, *dst; |
823 | struct ucma_context *ctx; |
824 | int ret; |
825 | |
826 | if (copy_from_user(&cmd, inbuf, sizeof(cmd))) |
827 | return -EFAULT; |
828 | |
829 | - src = (struct sockaddr *) &cmd.src_addr; |
830 | - dst = (struct sockaddr *) &cmd.dst_addr; |
831 | - if (cmd.reserved || (cmd.src_size && (cmd.src_size != rdma_addr_size(src))) || |
832 | - !cmd.dst_size || (cmd.dst_size != rdma_addr_size(dst))) |
833 | + if (cmd.reserved || |
834 | + (cmd.src_size && (cmd.src_size != rdma_addr_size_kss(&cmd.src_addr))) || |
835 | + !cmd.dst_size || (cmd.dst_size != rdma_addr_size_kss(&cmd.dst_addr))) |
836 | return -EINVAL; |
837 | |
838 | ctx = ucma_get_ctx(file, cmd.id); |
839 | if (IS_ERR(ctx)) |
840 | return PTR_ERR(ctx); |
841 | |
842 | - ret = rdma_resolve_addr(ctx->cm_id, src, dst, cmd.timeout_ms); |
843 | + ret = rdma_resolve_addr(ctx->cm_id, (struct sockaddr *) &cmd.src_addr, |
844 | + (struct sockaddr *) &cmd.dst_addr, cmd.timeout_ms); |
845 | ucma_put_ctx(ctx); |
846 | return ret; |
847 | } |
848 | @@ -1155,6 +1165,11 @@ static ssize_t ucma_init_qp_attr(struct ucma_file *file, |
849 | if (IS_ERR(ctx)) |
850 | return PTR_ERR(ctx); |
851 | |
852 | + if (!ctx->cm_id->device) { |
853 | + ret = -EINVAL; |
854 | + goto out; |
855 | + } |
856 | + |
857 | resp.qp_attr_mask = 0; |
858 | memset(&qp_attr, 0, sizeof qp_attr); |
859 | qp_attr.qp_state = cmd.qp_state; |
860 | @@ -1320,7 +1335,7 @@ static ssize_t ucma_notify(struct ucma_file *file, const char __user *inbuf, |
861 | { |
862 | struct rdma_ucm_notify cmd; |
863 | struct ucma_context *ctx; |
864 | - int ret; |
865 | + int ret = -EINVAL; |
866 | |
867 | if (copy_from_user(&cmd, inbuf, sizeof(cmd))) |
868 | return -EFAULT; |
869 | @@ -1329,7 +1344,9 @@ static ssize_t ucma_notify(struct ucma_file *file, const char __user *inbuf, |
870 | if (IS_ERR(ctx)) |
871 | return PTR_ERR(ctx); |
872 | |
873 | - ret = rdma_notify(ctx->cm_id, (enum ib_event_type) cmd.event); |
874 | + if (ctx->cm_id->device) |
875 | + ret = rdma_notify(ctx->cm_id, (enum ib_event_type)cmd.event); |
876 | + |
877 | ucma_put_ctx(ctx); |
878 | return ret; |
879 | } |
880 | @@ -1415,7 +1432,7 @@ static ssize_t ucma_join_ip_multicast(struct ucma_file *file, |
881 | join_cmd.response = cmd.response; |
882 | join_cmd.uid = cmd.uid; |
883 | join_cmd.id = cmd.id; |
884 | - join_cmd.addr_size = rdma_addr_size((struct sockaddr *) &cmd.addr); |
885 | + join_cmd.addr_size = rdma_addr_size_in6(&cmd.addr); |
886 | if (!join_cmd.addr_size) |
887 | return -EINVAL; |
888 | |
889 | @@ -1434,7 +1451,7 @@ static ssize_t ucma_join_multicast(struct ucma_file *file, |
890 | if (copy_from_user(&cmd, inbuf, sizeof(cmd))) |
891 | return -EFAULT; |
892 | |
893 | - if (!rdma_addr_size((struct sockaddr *)&cmd.addr)) |
894 | + if (!rdma_addr_size_kss(&cmd.addr)) |
895 | return -EINVAL; |
896 | |
897 | return ucma_process_join(file, &cmd, out_len); |
898 | diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c |
899 | index 3d9c294e84db..9a234da8cac2 100644 |
900 | --- a/drivers/input/mouse/alps.c |
901 | +++ b/drivers/input/mouse/alps.c |
902 | @@ -2544,13 +2544,31 @@ static int alps_update_btn_info_ss4_v2(unsigned char otp[][4], |
903 | } |
904 | |
905 | static int alps_update_dual_info_ss4_v2(unsigned char otp[][4], |
906 | - struct alps_data *priv) |
907 | + struct alps_data *priv, |
908 | + struct psmouse *psmouse) |
909 | { |
910 | bool is_dual = false; |
911 | + int reg_val = 0; |
912 | + struct ps2dev *ps2dev = &psmouse->ps2dev; |
913 | |
914 | - if (IS_SS4PLUS_DEV(priv->dev_id)) |
915 | + if (IS_SS4PLUS_DEV(priv->dev_id)) { |
916 | is_dual = (otp[0][0] >> 4) & 0x01; |
917 | |
918 | + if (!is_dual) { |
919 | + /* For support TrackStick of Thinkpad L/E series */ |
920 | + if (alps_exit_command_mode(psmouse) == 0 && |
921 | + alps_enter_command_mode(psmouse) == 0) { |
922 | + reg_val = alps_command_mode_read_reg(psmouse, |
923 | + 0xD7); |
924 | + } |
925 | + alps_exit_command_mode(psmouse); |
926 | + ps2_command(ps2dev, NULL, PSMOUSE_CMD_ENABLE); |
927 | + |
928 | + if (reg_val == 0x0C || reg_val == 0x1D) |
929 | + is_dual = true; |
930 | + } |
931 | + } |
932 | + |
933 | if (is_dual) |
934 | priv->flags |= ALPS_DUALPOINT | |
935 | ALPS_DUALPOINT_WITH_PRESSURE; |
936 | @@ -2573,7 +2591,7 @@ static int alps_set_defaults_ss4_v2(struct psmouse *psmouse, |
937 | |
938 | alps_update_btn_info_ss4_v2(otp, priv); |
939 | |
940 | - alps_update_dual_info_ss4_v2(otp, priv); |
941 | + alps_update_dual_info_ss4_v2(otp, priv, psmouse); |
942 | |
943 | return 0; |
944 | } |
945 | diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h |
946 | index 6cbbdc6e9687..b353d494ad40 100644 |
947 | --- a/drivers/input/serio/i8042-x86ia64io.h |
948 | +++ b/drivers/input/serio/i8042-x86ia64io.h |
949 | @@ -530,6 +530,20 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { |
950 | { } |
951 | }; |
952 | |
953 | +static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = { |
954 | + { |
955 | + /* |
956 | + * Sony Vaio VGN-CS series require MUX or the touch sensor |
957 | + * buttons will disturb touchpad operation |
958 | + */ |
959 | + .matches = { |
960 | + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), |
961 | + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"), |
962 | + }, |
963 | + }, |
964 | + { } |
965 | +}; |
966 | + |
967 | /* |
968 | * On some Asus laptops, just running self tests cause problems. |
969 | */ |
970 | @@ -620,6 +634,13 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { |
971 | DMI_MATCH(DMI_PRODUCT_NAME, "20046"), |
972 | }, |
973 | }, |
974 | + { |
975 | + /* Lenovo ThinkPad L460 */ |
976 | + .matches = { |
977 | + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), |
978 | + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"), |
979 | + }, |
980 | + }, |
981 | { |
982 | /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */ |
983 | .matches = { |
984 | @@ -1163,6 +1184,9 @@ static int __init i8042_platform_init(void) |
985 | if (dmi_check_system(i8042_dmi_nomux_table)) |
986 | i8042_nomux = true; |
987 | |
988 | + if (dmi_check_system(i8042_dmi_forcemux_table)) |
989 | + i8042_nomux = false; |
990 | + |
991 | if (dmi_check_system(i8042_dmi_notimeout_table)) |
992 | i8042_notimeout = true; |
993 | |
994 | diff --git a/drivers/media/usb/usbtv/usbtv-core.c b/drivers/media/usb/usbtv/usbtv-core.c |
995 | index 71fb5734995b..68df16b3ce72 100644 |
996 | --- a/drivers/media/usb/usbtv/usbtv-core.c |
997 | +++ b/drivers/media/usb/usbtv/usbtv-core.c |
998 | @@ -112,6 +112,8 @@ static int usbtv_probe(struct usb_interface *intf, |
999 | return 0; |
1000 | |
1001 | usbtv_audio_fail: |
1002 | + /* we must not free at this point */ |
1003 | + usb_get_dev(usbtv->udev); |
1004 | usbtv_video_free(usbtv); |
1005 | |
1006 | usbtv_video_fail: |
1007 | diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c |
1008 | index e825f013e54e..22efc039f302 100644 |
1009 | --- a/drivers/misc/mei/main.c |
1010 | +++ b/drivers/misc/mei/main.c |
1011 | @@ -507,7 +507,6 @@ static long mei_ioctl(struct file *file, unsigned int cmd, unsigned long data) |
1012 | break; |
1013 | |
1014 | default: |
1015 | - dev_err(dev->dev, ": unsupported ioctl %d.\n", cmd); |
1016 | rets = -ENOIOCTLCMD; |
1017 | } |
1018 | |
1019 | diff --git a/drivers/mtd/chips/jedec_probe.c b/drivers/mtd/chips/jedec_probe.c |
1020 | index 7c0b27d132b1..b479bd81120b 100644 |
1021 | --- a/drivers/mtd/chips/jedec_probe.c |
1022 | +++ b/drivers/mtd/chips/jedec_probe.c |
1023 | @@ -1889,6 +1889,8 @@ static inline u32 jedec_read_mfr(struct map_info *map, uint32_t base, |
1024 | do { |
1025 | uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8), map, cfi); |
1026 | mask = (1 << (cfi->device_type * 8)) - 1; |
1027 | + if (ofs >= map->size) |
1028 | + return 0; |
1029 | result = map_read(map, base + ofs); |
1030 | bank++; |
1031 | } while ((result.x[0] & mask) == CFI_MFR_CONTINUATION); |
1032 | diff --git a/drivers/mtd/nand/atmel/pmecc.c b/drivers/mtd/nand/atmel/pmecc.c |
1033 | index 8268636675ef..4124bf91bee6 100644 |
1034 | --- a/drivers/mtd/nand/atmel/pmecc.c |
1035 | +++ b/drivers/mtd/nand/atmel/pmecc.c |
1036 | @@ -426,7 +426,7 @@ static int get_strength(struct atmel_pmecc_user *user) |
1037 | |
1038 | static int get_sectorsize(struct atmel_pmecc_user *user) |
1039 | { |
1040 | - return user->cache.cfg & PMECC_LOOKUP_TABLE_SIZE_1024 ? 1024 : 512; |
1041 | + return user->cache.cfg & PMECC_CFG_SECTOR1024 ? 1024 : 512; |
1042 | } |
1043 | |
1044 | static void atmel_pmecc_gen_syndrome(struct atmel_pmecc_user *user, int sector) |
1045 | diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c |
1046 | index 86944bc3b273..74bd260ca02a 100644 |
1047 | --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c |
1048 | +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c |
1049 | @@ -666,7 +666,7 @@ static void hns_gmac_get_strings(u32 stringset, u8 *data) |
1050 | |
1051 | static int hns_gmac_get_sset_count(int stringset) |
1052 | { |
1053 | - if (stringset == ETH_SS_STATS || stringset == ETH_SS_PRIV_FLAGS) |
1054 | + if (stringset == ETH_SS_STATS) |
1055 | return ARRAY_SIZE(g_gmac_stats_string); |
1056 | |
1057 | return 0; |
1058 | diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c |
1059 | index b62816c1574e..93e71e27401b 100644 |
1060 | --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c |
1061 | +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c |
1062 | @@ -422,7 +422,7 @@ void hns_ppe_update_stats(struct hns_ppe_cb *ppe_cb) |
1063 | |
1064 | int hns_ppe_get_sset_count(int stringset) |
1065 | { |
1066 | - if (stringset == ETH_SS_STATS || stringset == ETH_SS_PRIV_FLAGS) |
1067 | + if (stringset == ETH_SS_STATS) |
1068 | return ETH_PPE_STATIC_NUM; |
1069 | return 0; |
1070 | } |
1071 | diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c |
1072 | index 6f3570cfb501..e2e28532e4dc 100644 |
1073 | --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c |
1074 | +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c |
1075 | @@ -876,7 +876,7 @@ void hns_rcb_get_stats(struct hnae_queue *queue, u64 *data) |
1076 | */ |
1077 | int hns_rcb_get_ring_sset_count(int stringset) |
1078 | { |
1079 | - if (stringset == ETH_SS_STATS || stringset == ETH_SS_PRIV_FLAGS) |
1080 | + if (stringset == ETH_SS_STATS) |
1081 | return HNS_RING_STATIC_REG_NUM; |
1082 | |
1083 | return 0; |
1084 | diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c |
1085 | index 7ea7f8a4aa2a..2e14a3ae1d8b 100644 |
1086 | --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c |
1087 | +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c |
1088 | @@ -993,8 +993,10 @@ int hns_get_sset_count(struct net_device *netdev, int stringset) |
1089 | cnt--; |
1090 | |
1091 | return cnt; |
1092 | - } else { |
1093 | + } else if (stringset == ETH_SS_STATS) { |
1094 | return (HNS_NET_STATS_CNT + ops->get_sset_count(h, stringset)); |
1095 | + } else { |
1096 | + return -EOPNOTSUPP; |
1097 | } |
1098 | } |
1099 | |
1100 | diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c |
1101 | index 489492b608cf..380916bff9e0 100644 |
1102 | --- a/drivers/parport/parport_pc.c |
1103 | +++ b/drivers/parport/parport_pc.c |
1104 | @@ -2646,6 +2646,7 @@ enum parport_pc_pci_cards { |
1105 | netmos_9901, |
1106 | netmos_9865, |
1107 | quatech_sppxp100, |
1108 | + wch_ch382l, |
1109 | }; |
1110 | |
1111 | |
1112 | @@ -2708,6 +2709,7 @@ static struct parport_pc_pci { |
1113 | /* netmos_9901 */ { 1, { { 0, -1 }, } }, |
1114 | /* netmos_9865 */ { 1, { { 0, -1 }, } }, |
1115 | /* quatech_sppxp100 */ { 1, { { 0, 1 }, } }, |
1116 | + /* wch_ch382l */ { 1, { { 2, -1 }, } }, |
1117 | }; |
1118 | |
1119 | static const struct pci_device_id parport_pc_pci_tbl[] = { |
1120 | @@ -2797,6 +2799,8 @@ static const struct pci_device_id parport_pc_pci_tbl[] = { |
1121 | /* Quatech SPPXP-100 Parallel port PCI ExpressCard */ |
1122 | { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100, |
1123 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 }, |
1124 | + /* WCH CH382L PCI-E single parallel port card */ |
1125 | + { 0x1c00, 0x3050, 0x1c00, 0x3050, 0, 0, wch_ch382l }, |
1126 | { 0, } /* terminate list */ |
1127 | }; |
1128 | MODULE_DEVICE_TABLE(pci, parport_pc_pci_tbl); |
1129 | diff --git a/drivers/phy/qualcomm/phy-qcom-ufs.c b/drivers/phy/qualcomm/phy-qcom-ufs.c |
1130 | index 43865ef340e2..3afba145f2e6 100644 |
1131 | --- a/drivers/phy/qualcomm/phy-qcom-ufs.c |
1132 | +++ b/drivers/phy/qualcomm/phy-qcom-ufs.c |
1133 | @@ -689,3 +689,8 @@ int ufs_qcom_phy_power_off(struct phy *generic_phy) |
1134 | return 0; |
1135 | } |
1136 | EXPORT_SYMBOL_GPL(ufs_qcom_phy_power_off); |
1137 | + |
1138 | +MODULE_AUTHOR("Yaniv Gardi <ygardi@codeaurora.org>"); |
1139 | +MODULE_AUTHOR("Vivek Gautam <vivek.gautam@codeaurora.org>"); |
1140 | +MODULE_DESCRIPTION("Universal Flash Storage (UFS) QCOM PHY"); |
1141 | +MODULE_LICENSE("GPL v2"); |
1142 | diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c |
1143 | index 398347fedc47..2cac160993bb 100644 |
1144 | --- a/drivers/staging/comedi/drivers/ni_mio_common.c |
1145 | +++ b/drivers/staging/comedi/drivers/ni_mio_common.c |
1146 | @@ -1284,6 +1284,8 @@ static void ack_a_interrupt(struct comedi_device *dev, unsigned short a_status) |
1147 | ack |= NISTC_INTA_ACK_AI_START; |
1148 | if (a_status & NISTC_AI_STATUS1_STOP) |
1149 | ack |= NISTC_INTA_ACK_AI_STOP; |
1150 | + if (a_status & NISTC_AI_STATUS1_OVER) |
1151 | + ack |= NISTC_INTA_ACK_AI_ERR; |
1152 | if (ack) |
1153 | ni_stc_writew(dev, ack, NISTC_INTA_ACK_REG); |
1154 | } |
1155 | diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c |
1156 | index 951680640ad5..3613a6aabfb3 100644 |
1157 | --- a/drivers/tty/serial/8250/8250_of.c |
1158 | +++ b/drivers/tty/serial/8250/8250_of.c |
1159 | @@ -321,6 +321,7 @@ static const struct of_device_id of_platform_serial_table[] = { |
1160 | { .compatible = "mrvl,mmp-uart", |
1161 | .data = (void *)PORT_XSCALE, }, |
1162 | { .compatible = "ti,da830-uart", .data = (void *)PORT_DA830, }, |
1163 | + { .compatible = "nuvoton,npcm750-uart", .data = (void *)PORT_NPCM, }, |
1164 | { /* end of list */ }, |
1165 | }; |
1166 | MODULE_DEVICE_TABLE(of, of_platform_serial_table); |
1167 | diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c |
1168 | index 8dcfd4978a03..fde34c84e707 100644 |
1169 | --- a/drivers/tty/serial/8250/8250_port.c |
1170 | +++ b/drivers/tty/serial/8250/8250_port.c |
1171 | @@ -51,6 +51,10 @@ |
1172 | #define UART_EXAR_SLEEP 0x8b /* Sleep mode */ |
1173 | #define UART_EXAR_DVID 0x8d /* Device identification */ |
1174 | |
1175 | +/* Nuvoton NPCM timeout register */ |
1176 | +#define UART_NPCM_TOR 7 |
1177 | +#define UART_NPCM_TOIE BIT(7) /* Timeout Interrupt Enable */ |
1178 | + |
1179 | /* |
1180 | * Debugging. |
1181 | */ |
1182 | @@ -297,6 +301,15 @@ static const struct serial8250_config uart_config[] = { |
1183 | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT, |
1184 | .flags = UART_CAP_FIFO, |
1185 | }, |
1186 | + [PORT_NPCM] = { |
1187 | + .name = "Nuvoton 16550", |
1188 | + .fifo_size = 16, |
1189 | + .tx_loadsz = 16, |
1190 | + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 | |
1191 | + UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT, |
1192 | + .rxtrig_bytes = {1, 4, 8, 14}, |
1193 | + .flags = UART_CAP_FIFO, |
1194 | + }, |
1195 | }; |
1196 | |
1197 | /* Uart divisor latch read */ |
1198 | @@ -2168,6 +2181,15 @@ int serial8250_do_startup(struct uart_port *port) |
1199 | UART_DA830_PWREMU_MGMT_FREE); |
1200 | } |
1201 | |
1202 | + if (port->type == PORT_NPCM) { |
1203 | + /* |
1204 | + * Nuvoton calls the scratch register 'UART_TOR' (timeout |
1205 | + * register). Enable it, and set TIOC (timeout interrupt |
1206 | + * comparator) to be 0x20 for correct operation. |
1207 | + */ |
1208 | + serial_port_out(port, UART_NPCM_TOR, UART_NPCM_TOIE | 0x20); |
1209 | + } |
1210 | + |
1211 | #ifdef CONFIG_SERIAL_8250_RSA |
1212 | /* |
1213 | * If this is an RSA port, see if we can kick it up to the |
1214 | @@ -2490,6 +2512,15 @@ static unsigned int xr17v35x_get_divisor(struct uart_8250_port *up, |
1215 | return quot_16 >> 4; |
1216 | } |
1217 | |
1218 | +/* Nuvoton NPCM UARTs have a custom divisor calculation */ |
1219 | +static unsigned int npcm_get_divisor(struct uart_8250_port *up, |
1220 | + unsigned int baud) |
1221 | +{ |
1222 | + struct uart_port *port = &up->port; |
1223 | + |
1224 | + return DIV_ROUND_CLOSEST(port->uartclk, 16 * baud + 2) - 2; |
1225 | +} |
1226 | + |
1227 | static unsigned int serial8250_get_divisor(struct uart_8250_port *up, |
1228 | unsigned int baud, |
1229 | unsigned int *frac) |
1230 | @@ -2510,6 +2541,8 @@ static unsigned int serial8250_get_divisor(struct uart_8250_port *up, |
1231 | quot = 0x8002; |
1232 | else if (up->port.type == PORT_XR17V35X) |
1233 | quot = xr17v35x_get_divisor(up, baud, frac); |
1234 | + else if (up->port.type == PORT_NPCM) |
1235 | + quot = npcm_get_divisor(up, baud); |
1236 | else |
1237 | quot = uart_get_divisor(port, baud); |
1238 | |
1239 | diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c |
1240 | index 5a5813d01cf8..de67abbda921 100644 |
1241 | --- a/drivers/tty/vt/vt.c |
1242 | +++ b/drivers/tty/vt/vt.c |
1243 | @@ -1352,6 +1352,11 @@ static void csi_m(struct vc_data *vc) |
1244 | case 3: |
1245 | vc->vc_italic = 1; |
1246 | break; |
1247 | + case 21: |
1248 | + /* |
1249 | + * No console drivers support double underline, so |
1250 | + * convert it to a single underline. |
1251 | + */ |
1252 | case 4: |
1253 | vc->vc_underline = 1; |
1254 | break; |
1255 | @@ -1387,7 +1392,6 @@ static void csi_m(struct vc_data *vc) |
1256 | vc->vc_disp_ctrl = 1; |
1257 | vc->vc_toggle_meta = 1; |
1258 | break; |
1259 | - case 21: |
1260 | case 22: |
1261 | vc->vc_intensity = 1; |
1262 | break; |
1263 | diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c |
1264 | index c2631145f404..9bd60ec83ac6 100644 |
1265 | --- a/drivers/usb/dwc2/hcd.c |
1266 | +++ b/drivers/usb/dwc2/hcd.c |
1267 | @@ -3277,7 +3277,6 @@ static void dwc2_conn_id_status_change(struct work_struct *work) |
1268 | dwc2_core_init(hsotg, false); |
1269 | dwc2_enable_global_interrupts(hsotg); |
1270 | spin_lock_irqsave(&hsotg->lock, flags); |
1271 | - dwc2_hsotg_disconnect(hsotg); |
1272 | dwc2_hsotg_core_init_disconnected(hsotg, false); |
1273 | spin_unlock_irqrestore(&hsotg->lock, flags); |
1274 | dwc2_hsotg_core_connect(hsotg); |
1275 | @@ -3296,8 +3295,12 @@ static void dwc2_conn_id_status_change(struct work_struct *work) |
1276 | if (count > 250) |
1277 | dev_err(hsotg->dev, |
1278 | "Connection id status change timed out\n"); |
1279 | - hsotg->op_state = OTG_STATE_A_HOST; |
1280 | |
1281 | + spin_lock_irqsave(&hsotg->lock, flags); |
1282 | + dwc2_hsotg_disconnect(hsotg); |
1283 | + spin_unlock_irqrestore(&hsotg->lock, flags); |
1284 | + |
1285 | + hsotg->op_state = OTG_STATE_A_HOST; |
1286 | /* Initialize the Core for Host mode */ |
1287 | dwc2_core_init(hsotg, false); |
1288 | dwc2_enable_global_interrupts(hsotg); |
1289 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c |
1290 | index aed182d24d23..2836acf73a07 100644 |
1291 | --- a/drivers/usb/serial/cp210x.c |
1292 | +++ b/drivers/usb/serial/cp210x.c |
1293 | @@ -158,6 +158,7 @@ static const struct usb_device_id id_table[] = { |
1294 | { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */ |
1295 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ |
1296 | { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */ |
1297 | + { USB_DEVICE(0x155A, 0x1006) }, /* ELDAT Easywave RX09 */ |
1298 | { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */ |
1299 | { USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */ |
1300 | { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ |
1301 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c |
1302 | index d038e543c246..a2a5232751cb 100644 |
1303 | --- a/drivers/usb/serial/ftdi_sio.c |
1304 | +++ b/drivers/usb/serial/ftdi_sio.c |
1305 | @@ -773,6 +773,7 @@ static const struct usb_device_id id_table_combined[] = { |
1306 | .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk }, |
1307 | { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) }, |
1308 | { USB_DEVICE(NOVITUS_VID, NOVITUS_BONO_E_PID) }, |
1309 | + { USB_DEVICE(FTDI_VID, RTSYSTEMS_USB_VX8_PID) }, |
1310 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) }, |
1311 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) }, |
1312 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) }, |
1313 | @@ -935,6 +936,7 @@ static const struct usb_device_id id_table_combined[] = { |
1314 | { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) }, |
1315 | { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) }, |
1316 | { USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) }, |
1317 | + { USB_DEVICE(FTDI_VID, FTDI_FHE_PID) }, |
1318 | { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) }, |
1319 | { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID), |
1320 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
1321 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h |
1322 | index 8b4ecd2bd297..975d02666c5a 100644 |
1323 | --- a/drivers/usb/serial/ftdi_sio_ids.h |
1324 | +++ b/drivers/usb/serial/ftdi_sio_ids.h |
1325 | @@ -923,6 +923,9 @@ |
1326 | /* |
1327 | * RT Systems programming cables for various ham radios |
1328 | */ |
1329 | +/* This device uses the VID of FTDI */ |
1330 | +#define RTSYSTEMS_USB_VX8_PID 0x9e50 /* USB-VX8 USB to 7 pin modular plug for Yaesu VX-8 radio */ |
1331 | + |
1332 | #define RTSYSTEMS_VID 0x2100 /* Vendor ID */ |
1333 | #define RTSYSTEMS_USB_S03_PID 0x9001 /* RTS-03 USB to Serial Adapter */ |
1334 | #define RTSYSTEMS_USB_59_PID 0x9e50 /* USB-59 USB to 8 pin plug */ |
1335 | @@ -1441,6 +1444,12 @@ |
1336 | */ |
1337 | #define FTDI_CINTERION_MC55I_PID 0xA951 |
1338 | |
1339 | +/* |
1340 | + * Product: FirmwareHubEmulator |
1341 | + * Manufacturer: Harman Becker Automotive Systems |
1342 | + */ |
1343 | +#define FTDI_FHE_PID 0xA9A0 |
1344 | + |
1345 | /* |
1346 | * Product: Comet Caller ID decoder |
1347 | * Manufacturer: Crucible Technologies |
1348 | diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c |
1349 | index 59a01a0844c9..dfa360d18ae2 100644 |
1350 | --- a/fs/btrfs/inode.c |
1351 | +++ b/fs/btrfs/inode.c |
1352 | @@ -1257,6 +1257,8 @@ static noinline int csum_exist_in_range(struct btrfs_fs_info *fs_info, |
1353 | list_del(&sums->list); |
1354 | kfree(sums); |
1355 | } |
1356 | + if (ret < 0) |
1357 | + return ret; |
1358 | return 1; |
1359 | } |
1360 | |
1361 | @@ -1389,10 +1391,23 @@ static noinline int run_delalloc_nocow(struct inode *inode, |
1362 | goto out_check; |
1363 | if (btrfs_extent_readonly(fs_info, disk_bytenr)) |
1364 | goto out_check; |
1365 | - if (btrfs_cross_ref_exist(root, ino, |
1366 | - found_key.offset - |
1367 | - extent_offset, disk_bytenr)) |
1368 | + ret = btrfs_cross_ref_exist(root, ino, |
1369 | + found_key.offset - |
1370 | + extent_offset, disk_bytenr); |
1371 | + if (ret) { |
1372 | + /* |
1373 | + * ret could be -EIO if the above fails to read |
1374 | + * metadata. |
1375 | + */ |
1376 | + if (ret < 0) { |
1377 | + if (cow_start != (u64)-1) |
1378 | + cur_offset = cow_start; |
1379 | + goto error; |
1380 | + } |
1381 | + |
1382 | + WARN_ON_ONCE(nolock); |
1383 | goto out_check; |
1384 | + } |
1385 | disk_bytenr += extent_offset; |
1386 | disk_bytenr += cur_offset - found_key.offset; |
1387 | num_bytes = min(end + 1, extent_end) - cur_offset; |
1388 | @@ -1410,10 +1425,22 @@ static noinline int run_delalloc_nocow(struct inode *inode, |
1389 | * this ensure that csum for a given extent are |
1390 | * either valid or do not exist. |
1391 | */ |
1392 | - if (csum_exist_in_range(fs_info, disk_bytenr, |
1393 | - num_bytes)) { |
1394 | + ret = csum_exist_in_range(fs_info, disk_bytenr, |
1395 | + num_bytes); |
1396 | + if (ret) { |
1397 | if (!nolock) |
1398 | btrfs_end_write_no_snapshotting(root); |
1399 | + |
1400 | + /* |
1401 | + * ret could be -EIO if the above fails to read |
1402 | + * metadata. |
1403 | + */ |
1404 | + if (ret < 0) { |
1405 | + if (cow_start != (u64)-1) |
1406 | + cur_offset = cow_start; |
1407 | + goto error; |
1408 | + } |
1409 | + WARN_ON_ONCE(nolock); |
1410 | goto out_check; |
1411 | } |
1412 | if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr)) { |
1413 | diff --git a/fs/ceph/file.c b/fs/ceph/file.c |
1414 | index 5c17125f45c7..0024d3e61bcd 100644 |
1415 | --- a/fs/ceph/file.c |
1416 | +++ b/fs/ceph/file.c |
1417 | @@ -635,7 +635,8 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *to, |
1418 | struct ceph_aio_request { |
1419 | struct kiocb *iocb; |
1420 | size_t total_len; |
1421 | - int write; |
1422 | + bool write; |
1423 | + bool should_dirty; |
1424 | int error; |
1425 | struct list_head osd_reqs; |
1426 | unsigned num_reqs; |
1427 | @@ -745,7 +746,7 @@ static void ceph_aio_complete_req(struct ceph_osd_request *req) |
1428 | } |
1429 | } |
1430 | |
1431 | - ceph_put_page_vector(osd_data->pages, num_pages, !aio_req->write); |
1432 | + ceph_put_page_vector(osd_data->pages, num_pages, aio_req->should_dirty); |
1433 | ceph_osdc_put_request(req); |
1434 | |
1435 | if (rc < 0) |
1436 | @@ -842,6 +843,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter, |
1437 | size_t count = iov_iter_count(iter); |
1438 | loff_t pos = iocb->ki_pos; |
1439 | bool write = iov_iter_rw(iter) == WRITE; |
1440 | + bool should_dirty = !write && iter_is_iovec(iter); |
1441 | |
1442 | if (write && ceph_snap(file_inode(file)) != CEPH_NOSNAP) |
1443 | return -EROFS; |
1444 | @@ -909,6 +911,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter, |
1445 | if (aio_req) { |
1446 | aio_req->iocb = iocb; |
1447 | aio_req->write = write; |
1448 | + aio_req->should_dirty = should_dirty; |
1449 | INIT_LIST_HEAD(&aio_req->osd_reqs); |
1450 | if (write) { |
1451 | aio_req->mtime = mtime; |
1452 | @@ -966,7 +969,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter, |
1453 | len = ret; |
1454 | } |
1455 | |
1456 | - ceph_put_page_vector(pages, num_pages, !write); |
1457 | + ceph_put_page_vector(pages, num_pages, should_dirty); |
1458 | |
1459 | ceph_osdc_put_request(req); |
1460 | if (ret < 0) |
1461 | diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h |
1462 | index 19748a5b0e77..835c2271196a 100644 |
1463 | --- a/include/linux/bitmap.h |
1464 | +++ b/include/linux/bitmap.h |
1465 | @@ -262,12 +262,20 @@ static inline void bitmap_complement(unsigned long *dst, const unsigned long *sr |
1466 | __bitmap_complement(dst, src, nbits); |
1467 | } |
1468 | |
1469 | +#ifdef __LITTLE_ENDIAN |
1470 | +#define BITMAP_MEM_ALIGNMENT 8 |
1471 | +#else |
1472 | +#define BITMAP_MEM_ALIGNMENT (8 * sizeof(unsigned long)) |
1473 | +#endif |
1474 | +#define BITMAP_MEM_MASK (BITMAP_MEM_ALIGNMENT - 1) |
1475 | + |
1476 | static inline int bitmap_equal(const unsigned long *src1, |
1477 | const unsigned long *src2, unsigned int nbits) |
1478 | { |
1479 | if (small_const_nbits(nbits)) |
1480 | return !((*src1 ^ *src2) & BITMAP_LAST_WORD_MASK(nbits)); |
1481 | - if (__builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8)) |
1482 | + if (__builtin_constant_p(nbits & BITMAP_MEM_MASK) && |
1483 | + IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT)) |
1484 | return !memcmp(src1, src2, nbits / 8); |
1485 | return __bitmap_equal(src1, src2, nbits); |
1486 | } |
1487 | @@ -318,8 +326,10 @@ static __always_inline void bitmap_set(unsigned long *map, unsigned int start, |
1488 | { |
1489 | if (__builtin_constant_p(nbits) && nbits == 1) |
1490 | __set_bit(start, map); |
1491 | - else if (__builtin_constant_p(start & 7) && IS_ALIGNED(start, 8) && |
1492 | - __builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8)) |
1493 | + else if (__builtin_constant_p(start & BITMAP_MEM_MASK) && |
1494 | + IS_ALIGNED(start, BITMAP_MEM_ALIGNMENT) && |
1495 | + __builtin_constant_p(nbits & BITMAP_MEM_MASK) && |
1496 | + IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT)) |
1497 | memset((char *)map + start / 8, 0xff, nbits / 8); |
1498 | else |
1499 | __bitmap_set(map, start, nbits); |
1500 | @@ -330,8 +340,10 @@ static __always_inline void bitmap_clear(unsigned long *map, unsigned int start, |
1501 | { |
1502 | if (__builtin_constant_p(nbits) && nbits == 1) |
1503 | __clear_bit(start, map); |
1504 | - else if (__builtin_constant_p(start & 7) && IS_ALIGNED(start, 8) && |
1505 | - __builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8)) |
1506 | + else if (__builtin_constant_p(start & BITMAP_MEM_MASK) && |
1507 | + IS_ALIGNED(start, BITMAP_MEM_ALIGNMENT) && |
1508 | + __builtin_constant_p(nbits & BITMAP_MEM_MASK) && |
1509 | + IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT)) |
1510 | memset((char *)map + start / 8, 0, nbits / 8); |
1511 | else |
1512 | __bitmap_clear(map, start, nbits); |
1513 | diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h |
1514 | index 33f7530f96b9..8e46c35d654b 100644 |
1515 | --- a/include/linux/netfilter/x_tables.h |
1516 | +++ b/include/linux/netfilter/x_tables.h |
1517 | @@ -285,6 +285,8 @@ unsigned int *xt_alloc_entry_offsets(unsigned int size); |
1518 | bool xt_find_jump_offset(const unsigned int *offsets, |
1519 | unsigned int target, unsigned int size); |
1520 | |
1521 | +int xt_check_proc_name(const char *name, unsigned int size); |
1522 | + |
1523 | int xt_check_match(struct xt_mtchk_param *, unsigned int size, u_int8_t proto, |
1524 | bool inv_proto); |
1525 | int xt_check_target(struct xt_tgchk_param *, unsigned int size, u_int8_t proto, |
1526 | diff --git a/include/rdma/ib_addr.h b/include/rdma/ib_addr.h |
1527 | index b2a10c762304..bec461bd6472 100644 |
1528 | --- a/include/rdma/ib_addr.h |
1529 | +++ b/include/rdma/ib_addr.h |
1530 | @@ -129,6 +129,8 @@ int rdma_copy_addr(struct rdma_dev_addr *dev_addr, struct net_device *dev, |
1531 | const unsigned char *dst_dev_addr); |
1532 | |
1533 | int rdma_addr_size(struct sockaddr *addr); |
1534 | +int rdma_addr_size_in6(struct sockaddr_in6 *addr); |
1535 | +int rdma_addr_size_kss(struct __kernel_sockaddr_storage *addr); |
1536 | |
1537 | int rdma_addr_find_smac_by_sgid(union ib_gid *sgid, u8 *smac, u16 *vlan_id); |
1538 | int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid, |
1539 | diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h |
1540 | index 1c8413f93e3d..dce5f9dae121 100644 |
1541 | --- a/include/uapi/linux/serial_core.h |
1542 | +++ b/include/uapi/linux/serial_core.h |
1543 | @@ -76,6 +76,9 @@ |
1544 | #define PORT_SUNZILOG 38 |
1545 | #define PORT_SUNSAB 39 |
1546 | |
1547 | +/* Nuvoton UART */ |
1548 | +#define PORT_NPCM 40 |
1549 | + |
1550 | /* Intel EG20 */ |
1551 | #define PORT_PCH_8LINE 44 |
1552 | #define PORT_PCH_2LINE 45 |
1553 | diff --git a/ipc/shm.c b/ipc/shm.c |
1554 | index bd652755d32c..b469e910f887 100644 |
1555 | --- a/ipc/shm.c |
1556 | +++ b/ipc/shm.c |
1557 | @@ -386,6 +386,17 @@ static int shm_fault(struct vm_fault *vmf) |
1558 | return sfd->vm_ops->fault(vmf); |
1559 | } |
1560 | |
1561 | +static int shm_split(struct vm_area_struct *vma, unsigned long addr) |
1562 | +{ |
1563 | + struct file *file = vma->vm_file; |
1564 | + struct shm_file_data *sfd = shm_file_data(file); |
1565 | + |
1566 | + if (sfd->vm_ops && sfd->vm_ops->split) |
1567 | + return sfd->vm_ops->split(vma, addr); |
1568 | + |
1569 | + return 0; |
1570 | +} |
1571 | + |
1572 | #ifdef CONFIG_NUMA |
1573 | static int shm_set_policy(struct vm_area_struct *vma, struct mempolicy *new) |
1574 | { |
1575 | @@ -510,6 +521,7 @@ static const struct vm_operations_struct shm_vm_ops = { |
1576 | .open = shm_open, /* callback for a new vm-area open */ |
1577 | .close = shm_close, /* callback for when the vm-area is released */ |
1578 | .fault = shm_fault, |
1579 | + .split = shm_split, |
1580 | #if defined(CONFIG_NUMA) |
1581 | .set_policy = shm_set_policy, |
1582 | .get_policy = shm_get_policy, |
1583 | diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c |
1584 | index 3f8cb1e14588..253ae2da13c3 100644 |
1585 | --- a/kernel/events/hw_breakpoint.c |
1586 | +++ b/kernel/events/hw_breakpoint.c |
1587 | @@ -427,16 +427,9 @@ EXPORT_SYMBOL_GPL(register_user_hw_breakpoint); |
1588 | * modify_user_hw_breakpoint - modify a user-space hardware breakpoint |
1589 | * @bp: the breakpoint structure to modify |
1590 | * @attr: new breakpoint attributes |
1591 | - * @triggered: callback to trigger when we hit the breakpoint |
1592 | - * @tsk: pointer to 'task_struct' of the process to which the address belongs |
1593 | */ |
1594 | int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr) |
1595 | { |
1596 | - u64 old_addr = bp->attr.bp_addr; |
1597 | - u64 old_len = bp->attr.bp_len; |
1598 | - int old_type = bp->attr.bp_type; |
1599 | - int err = 0; |
1600 | - |
1601 | /* |
1602 | * modify_user_hw_breakpoint can be invoked with IRQs disabled and hence it |
1603 | * will not be possible to raise IPIs that invoke __perf_event_disable. |
1604 | @@ -451,27 +444,18 @@ int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *att |
1605 | bp->attr.bp_addr = attr->bp_addr; |
1606 | bp->attr.bp_type = attr->bp_type; |
1607 | bp->attr.bp_len = attr->bp_len; |
1608 | + bp->attr.disabled = 1; |
1609 | |
1610 | - if (attr->disabled) |
1611 | - goto end; |
1612 | - |
1613 | - err = validate_hw_breakpoint(bp); |
1614 | - if (!err) |
1615 | - perf_event_enable(bp); |
1616 | + if (!attr->disabled) { |
1617 | + int err = validate_hw_breakpoint(bp); |
1618 | |
1619 | - if (err) { |
1620 | - bp->attr.bp_addr = old_addr; |
1621 | - bp->attr.bp_type = old_type; |
1622 | - bp->attr.bp_len = old_len; |
1623 | - if (!bp->attr.disabled) |
1624 | - perf_event_enable(bp); |
1625 | + if (err) |
1626 | + return err; |
1627 | |
1628 | - return err; |
1629 | + perf_event_enable(bp); |
1630 | + bp->attr.disabled = 0; |
1631 | } |
1632 | |
1633 | -end: |
1634 | - bp->attr.disabled = attr->disabled; |
1635 | - |
1636 | return 0; |
1637 | } |
1638 | EXPORT_SYMBOL_GPL(modify_user_hw_breakpoint); |
1639 | diff --git a/mm/percpu-km.c b/mm/percpu-km.c |
1640 | index d2a76642c4ae..0d88d7bd5706 100644 |
1641 | --- a/mm/percpu-km.c |
1642 | +++ b/mm/percpu-km.c |
1643 | @@ -34,7 +34,7 @@ |
1644 | #include <linux/log2.h> |
1645 | |
1646 | static int pcpu_populate_chunk(struct pcpu_chunk *chunk, |
1647 | - int page_start, int page_end) |
1648 | + int page_start, int page_end, gfp_t gfp) |
1649 | { |
1650 | return 0; |
1651 | } |
1652 | @@ -45,18 +45,18 @@ static void pcpu_depopulate_chunk(struct pcpu_chunk *chunk, |
1653 | /* nada */ |
1654 | } |
1655 | |
1656 | -static struct pcpu_chunk *pcpu_create_chunk(void) |
1657 | +static struct pcpu_chunk *pcpu_create_chunk(gfp_t gfp) |
1658 | { |
1659 | const int nr_pages = pcpu_group_sizes[0] >> PAGE_SHIFT; |
1660 | struct pcpu_chunk *chunk; |
1661 | struct page *pages; |
1662 | int i; |
1663 | |
1664 | - chunk = pcpu_alloc_chunk(); |
1665 | + chunk = pcpu_alloc_chunk(gfp); |
1666 | if (!chunk) |
1667 | return NULL; |
1668 | |
1669 | - pages = alloc_pages(GFP_KERNEL, order_base_2(nr_pages)); |
1670 | + pages = alloc_pages(gfp | GFP_KERNEL, order_base_2(nr_pages)); |
1671 | if (!pages) { |
1672 | pcpu_free_chunk(chunk); |
1673 | return NULL; |
1674 | diff --git a/mm/percpu-vm.c b/mm/percpu-vm.c |
1675 | index 15dab691ea70..f48ff9fc86fe 100644 |
1676 | --- a/mm/percpu-vm.c |
1677 | +++ b/mm/percpu-vm.c |
1678 | @@ -37,7 +37,7 @@ static struct page **pcpu_get_pages(void) |
1679 | lockdep_assert_held(&pcpu_alloc_mutex); |
1680 | |
1681 | if (!pages) |
1682 | - pages = pcpu_mem_zalloc(pages_size); |
1683 | + pages = pcpu_mem_zalloc(pages_size, 0); |
1684 | return pages; |
1685 | } |
1686 | |
1687 | @@ -73,18 +73,21 @@ static void pcpu_free_pages(struct pcpu_chunk *chunk, |
1688 | * @pages: array to put the allocated pages into, indexed by pcpu_page_idx() |
1689 | * @page_start: page index of the first page to be allocated |
1690 | * @page_end: page index of the last page to be allocated + 1 |
1691 | + * @gfp: allocation flags passed to the underlying allocator |
1692 | * |
1693 | * Allocate pages [@page_start,@page_end) into @pages for all units. |
1694 | * The allocation is for @chunk. Percpu core doesn't care about the |
1695 | * content of @pages and will pass it verbatim to pcpu_map_pages(). |
1696 | */ |
1697 | static int pcpu_alloc_pages(struct pcpu_chunk *chunk, |
1698 | - struct page **pages, int page_start, int page_end) |
1699 | + struct page **pages, int page_start, int page_end, |
1700 | + gfp_t gfp) |
1701 | { |
1702 | - const gfp_t gfp = GFP_KERNEL | __GFP_HIGHMEM | __GFP_COLD; |
1703 | unsigned int cpu, tcpu; |
1704 | int i; |
1705 | |
1706 | + gfp |= GFP_KERNEL | __GFP_HIGHMEM | __GFP_COLD; |
1707 | + |
1708 | for_each_possible_cpu(cpu) { |
1709 | for (i = page_start; i < page_end; i++) { |
1710 | struct page **pagep = &pages[pcpu_page_idx(cpu, i)]; |
1711 | @@ -262,6 +265,7 @@ static void pcpu_post_map_flush(struct pcpu_chunk *chunk, |
1712 | * @chunk: chunk of interest |
1713 | * @page_start: the start page |
1714 | * @page_end: the end page |
1715 | + * @gfp: allocation flags passed to the underlying memory allocator |
1716 | * |
1717 | * For each cpu, populate and map pages [@page_start,@page_end) into |
1718 | * @chunk. |
1719 | @@ -270,7 +274,7 @@ static void pcpu_post_map_flush(struct pcpu_chunk *chunk, |
1720 | * pcpu_alloc_mutex, does GFP_KERNEL allocation. |
1721 | */ |
1722 | static int pcpu_populate_chunk(struct pcpu_chunk *chunk, |
1723 | - int page_start, int page_end) |
1724 | + int page_start, int page_end, gfp_t gfp) |
1725 | { |
1726 | struct page **pages; |
1727 | |
1728 | @@ -278,7 +282,7 @@ static int pcpu_populate_chunk(struct pcpu_chunk *chunk, |
1729 | if (!pages) |
1730 | return -ENOMEM; |
1731 | |
1732 | - if (pcpu_alloc_pages(chunk, pages, page_start, page_end)) |
1733 | + if (pcpu_alloc_pages(chunk, pages, page_start, page_end, gfp)) |
1734 | return -ENOMEM; |
1735 | |
1736 | if (pcpu_map_pages(chunk, pages, page_start, page_end)) { |
1737 | @@ -325,12 +329,12 @@ static void pcpu_depopulate_chunk(struct pcpu_chunk *chunk, |
1738 | pcpu_free_pages(chunk, pages, page_start, page_end); |
1739 | } |
1740 | |
1741 | -static struct pcpu_chunk *pcpu_create_chunk(void) |
1742 | +static struct pcpu_chunk *pcpu_create_chunk(gfp_t gfp) |
1743 | { |
1744 | struct pcpu_chunk *chunk; |
1745 | struct vm_struct **vms; |
1746 | |
1747 | - chunk = pcpu_alloc_chunk(); |
1748 | + chunk = pcpu_alloc_chunk(gfp); |
1749 | if (!chunk) |
1750 | return NULL; |
1751 | |
1752 | diff --git a/mm/percpu.c b/mm/percpu.c |
1753 | index a0e0c82c1e4c..c80e796bf35c 100644 |
1754 | --- a/mm/percpu.c |
1755 | +++ b/mm/percpu.c |
1756 | @@ -447,10 +447,12 @@ static void pcpu_next_fit_region(struct pcpu_chunk *chunk, int alloc_bits, |
1757 | /** |
1758 | * pcpu_mem_zalloc - allocate memory |
1759 | * @size: bytes to allocate |
1760 | + * @gfp: allocation flags |
1761 | * |
1762 | * Allocate @size bytes. If @size is smaller than PAGE_SIZE, |
1763 | - * kzalloc() is used; otherwise, vzalloc() is used. The returned |
1764 | - * memory is always zeroed. |
1765 | + * kzalloc() is used; otherwise, the equivalent of vzalloc() is used. |
1766 | + * This is to facilitate passing through whitelisted flags. The |
1767 | + * returned memory is always zeroed. |
1768 | * |
1769 | * CONTEXT: |
1770 | * Does GFP_KERNEL allocation. |
1771 | @@ -458,15 +460,16 @@ static void pcpu_next_fit_region(struct pcpu_chunk *chunk, int alloc_bits, |
1772 | * RETURNS: |
1773 | * Pointer to the allocated area on success, NULL on failure. |
1774 | */ |
1775 | -static void *pcpu_mem_zalloc(size_t size) |
1776 | +static void *pcpu_mem_zalloc(size_t size, gfp_t gfp) |
1777 | { |
1778 | if (WARN_ON_ONCE(!slab_is_available())) |
1779 | return NULL; |
1780 | |
1781 | if (size <= PAGE_SIZE) |
1782 | - return kzalloc(size, GFP_KERNEL); |
1783 | + return kzalloc(size, gfp | GFP_KERNEL); |
1784 | else |
1785 | - return vzalloc(size); |
1786 | + return __vmalloc(size, gfp | GFP_KERNEL | __GFP_ZERO, |
1787 | + PAGE_KERNEL); |
1788 | } |
1789 | |
1790 | /** |
1791 | @@ -1154,12 +1157,12 @@ static struct pcpu_chunk * __init pcpu_alloc_first_chunk(unsigned long tmp_addr, |
1792 | return chunk; |
1793 | } |
1794 | |
1795 | -static struct pcpu_chunk *pcpu_alloc_chunk(void) |
1796 | +static struct pcpu_chunk *pcpu_alloc_chunk(gfp_t gfp) |
1797 | { |
1798 | struct pcpu_chunk *chunk; |
1799 | int region_bits; |
1800 | |
1801 | - chunk = pcpu_mem_zalloc(pcpu_chunk_struct_size); |
1802 | + chunk = pcpu_mem_zalloc(pcpu_chunk_struct_size, gfp); |
1803 | if (!chunk) |
1804 | return NULL; |
1805 | |
1806 | @@ -1168,17 +1171,17 @@ static struct pcpu_chunk *pcpu_alloc_chunk(void) |
1807 | region_bits = pcpu_chunk_map_bits(chunk); |
1808 | |
1809 | chunk->alloc_map = pcpu_mem_zalloc(BITS_TO_LONGS(region_bits) * |
1810 | - sizeof(chunk->alloc_map[0])); |
1811 | + sizeof(chunk->alloc_map[0]), gfp); |
1812 | if (!chunk->alloc_map) |
1813 | goto alloc_map_fail; |
1814 | |
1815 | chunk->bound_map = pcpu_mem_zalloc(BITS_TO_LONGS(region_bits + 1) * |
1816 | - sizeof(chunk->bound_map[0])); |
1817 | + sizeof(chunk->bound_map[0]), gfp); |
1818 | if (!chunk->bound_map) |
1819 | goto bound_map_fail; |
1820 | |
1821 | chunk->md_blocks = pcpu_mem_zalloc(pcpu_chunk_nr_blocks(chunk) * |
1822 | - sizeof(chunk->md_blocks[0])); |
1823 | + sizeof(chunk->md_blocks[0]), gfp); |
1824 | if (!chunk->md_blocks) |
1825 | goto md_blocks_fail; |
1826 | |
1827 | @@ -1277,9 +1280,10 @@ static void pcpu_chunk_depopulated(struct pcpu_chunk *chunk, |
1828 | * pcpu_addr_to_page - translate address to physical address |
1829 | * pcpu_verify_alloc_info - check alloc_info is acceptable during init |
1830 | */ |
1831 | -static int pcpu_populate_chunk(struct pcpu_chunk *chunk, int off, int size); |
1832 | +static int pcpu_populate_chunk(struct pcpu_chunk *chunk, int off, int size, |
1833 | + gfp_t gfp); |
1834 | static void pcpu_depopulate_chunk(struct pcpu_chunk *chunk, int off, int size); |
1835 | -static struct pcpu_chunk *pcpu_create_chunk(void); |
1836 | +static struct pcpu_chunk *pcpu_create_chunk(gfp_t gfp); |
1837 | static void pcpu_destroy_chunk(struct pcpu_chunk *chunk); |
1838 | static struct page *pcpu_addr_to_page(void *addr); |
1839 | static int __init pcpu_verify_alloc_info(const struct pcpu_alloc_info *ai); |
1840 | @@ -1421,7 +1425,7 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, |
1841 | } |
1842 | |
1843 | if (list_empty(&pcpu_slot[pcpu_nr_slots - 1])) { |
1844 | - chunk = pcpu_create_chunk(); |
1845 | + chunk = pcpu_create_chunk(0); |
1846 | if (!chunk) { |
1847 | err = "failed to allocate new chunk"; |
1848 | goto fail; |
1849 | @@ -1450,7 +1454,7 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, |
1850 | page_start, page_end) { |
1851 | WARN_ON(chunk->immutable); |
1852 | |
1853 | - ret = pcpu_populate_chunk(chunk, rs, re); |
1854 | + ret = pcpu_populate_chunk(chunk, rs, re, 0); |
1855 | |
1856 | spin_lock_irqsave(&pcpu_lock, flags); |
1857 | if (ret) { |
1858 | @@ -1561,10 +1565,17 @@ void __percpu *__alloc_reserved_percpu(size_t size, size_t align) |
1859 | * pcpu_balance_workfn - manage the amount of free chunks and populated pages |
1860 | * @work: unused |
1861 | * |
1862 | - * Reclaim all fully free chunks except for the first one. |
1863 | + * Reclaim all fully free chunks except for the first one. This is also |
1864 | + * responsible for maintaining the pool of empty populated pages. However, |
1865 | + * it is possible that this is called when physical memory is scarce causing |
1866 | + * OOM killer to be triggered. We should avoid doing so until an actual |
1867 | + * allocation causes the failure as it is possible that requests can be |
1868 | + * serviced from already backed regions. |
1869 | */ |
1870 | static void pcpu_balance_workfn(struct work_struct *work) |
1871 | { |
1872 | + /* gfp flags passed to underlying allocators */ |
1873 | + const gfp_t gfp = __GFP_NORETRY | __GFP_NOWARN; |
1874 | LIST_HEAD(to_free); |
1875 | struct list_head *free_head = &pcpu_slot[pcpu_nr_slots - 1]; |
1876 | struct pcpu_chunk *chunk, *next; |
1877 | @@ -1645,7 +1656,7 @@ static void pcpu_balance_workfn(struct work_struct *work) |
1878 | chunk->nr_pages) { |
1879 | int nr = min(re - rs, nr_to_pop); |
1880 | |
1881 | - ret = pcpu_populate_chunk(chunk, rs, rs + nr); |
1882 | + ret = pcpu_populate_chunk(chunk, rs, rs + nr, gfp); |
1883 | if (!ret) { |
1884 | nr_to_pop -= nr; |
1885 | spin_lock_irq(&pcpu_lock); |
1886 | @@ -1662,7 +1673,7 @@ static void pcpu_balance_workfn(struct work_struct *work) |
1887 | |
1888 | if (nr_to_pop) { |
1889 | /* ran out of chunks to populate, create a new one and retry */ |
1890 | - chunk = pcpu_create_chunk(); |
1891 | + chunk = pcpu_create_chunk(gfp); |
1892 | if (chunk) { |
1893 | spin_lock_irq(&pcpu_lock); |
1894 | pcpu_chunk_relocate(chunk, -1); |
1895 | diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c |
1896 | index a0ef89772c36..a27704ff13a9 100644 |
1897 | --- a/net/bluetooth/smp.c |
1898 | +++ b/net/bluetooth/smp.c |
1899 | @@ -2287,8 +2287,14 @@ static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb) |
1900 | else |
1901 | sec_level = authreq_to_seclevel(auth); |
1902 | |
1903 | - if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK)) |
1904 | + if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK)) { |
1905 | + /* If link is already encrypted with sufficient security we |
1906 | + * still need refresh encryption as per Core Spec 5.0 Vol 3, |
1907 | + * Part H 2.4.6 |
1908 | + */ |
1909 | + smp_ltk_encrypt(conn, hcon->sec_level); |
1910 | return 0; |
1911 | + } |
1912 | |
1913 | if (sec_level > hcon->pending_sec_level) |
1914 | hcon->pending_sec_level = sec_level; |
1915 | diff --git a/net/bridge/netfilter/ebt_among.c b/net/bridge/netfilter/ebt_among.c |
1916 | index 59baaecd3e54..0b589a6b365c 100644 |
1917 | --- a/net/bridge/netfilter/ebt_among.c |
1918 | +++ b/net/bridge/netfilter/ebt_among.c |
1919 | @@ -177,6 +177,28 @@ static bool poolsize_invalid(const struct ebt_mac_wormhash *w) |
1920 | return w && w->poolsize >= (INT_MAX / sizeof(struct ebt_mac_wormhash_tuple)); |
1921 | } |
1922 | |
1923 | +static bool wormhash_offset_invalid(int off, unsigned int len) |
1924 | +{ |
1925 | + if (off == 0) /* not present */ |
1926 | + return false; |
1927 | + |
1928 | + if (off < (int)sizeof(struct ebt_among_info) || |
1929 | + off % __alignof__(struct ebt_mac_wormhash)) |
1930 | + return true; |
1931 | + |
1932 | + off += sizeof(struct ebt_mac_wormhash); |
1933 | + |
1934 | + return off > len; |
1935 | +} |
1936 | + |
1937 | +static bool wormhash_sizes_valid(const struct ebt_mac_wormhash *wh, int a, int b) |
1938 | +{ |
1939 | + if (a == 0) |
1940 | + a = sizeof(struct ebt_among_info); |
1941 | + |
1942 | + return ebt_mac_wormhash_size(wh) + a == b; |
1943 | +} |
1944 | + |
1945 | static int ebt_among_mt_check(const struct xt_mtchk_param *par) |
1946 | { |
1947 | const struct ebt_among_info *info = par->matchinfo; |
1948 | @@ -189,6 +211,10 @@ static int ebt_among_mt_check(const struct xt_mtchk_param *par) |
1949 | if (expected_length > em->match_size) |
1950 | return -EINVAL; |
1951 | |
1952 | + if (wormhash_offset_invalid(info->wh_dst_ofs, em->match_size) || |
1953 | + wormhash_offset_invalid(info->wh_src_ofs, em->match_size)) |
1954 | + return -EINVAL; |
1955 | + |
1956 | wh_dst = ebt_among_wh_dst(info); |
1957 | if (poolsize_invalid(wh_dst)) |
1958 | return -EINVAL; |
1959 | @@ -201,6 +227,14 @@ static int ebt_among_mt_check(const struct xt_mtchk_param *par) |
1960 | if (poolsize_invalid(wh_src)) |
1961 | return -EINVAL; |
1962 | |
1963 | + if (info->wh_src_ofs < info->wh_dst_ofs) { |
1964 | + if (!wormhash_sizes_valid(wh_src, info->wh_src_ofs, info->wh_dst_ofs)) |
1965 | + return -EINVAL; |
1966 | + } else { |
1967 | + if (!wormhash_sizes_valid(wh_dst, info->wh_dst_ofs, info->wh_src_ofs)) |
1968 | + return -EINVAL; |
1969 | + } |
1970 | + |
1971 | expected_length += ebt_mac_wormhash_size(wh_src); |
1972 | |
1973 | if (em->match_size != EBT_ALIGN(expected_length)) { |
1974 | diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c |
1975 | index 997a96896f1a..37fef48c8826 100644 |
1976 | --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c |
1977 | +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c |
1978 | @@ -159,8 +159,20 @@ static unsigned int ipv4_conntrack_local(void *priv, |
1979 | ip_hdrlen(skb) < sizeof(struct iphdr)) |
1980 | return NF_ACCEPT; |
1981 | |
1982 | - if (ip_is_fragment(ip_hdr(skb))) /* IP_NODEFRAG setsockopt set */ |
1983 | + if (ip_is_fragment(ip_hdr(skb))) { /* IP_NODEFRAG setsockopt set */ |
1984 | + enum ip_conntrack_info ctinfo; |
1985 | + struct nf_conn *tmpl; |
1986 | + |
1987 | + tmpl = nf_ct_get(skb, &ctinfo); |
1988 | + if (tmpl && nf_ct_is_template(tmpl)) { |
1989 | + /* when skipping ct, clear templates to avoid fooling |
1990 | + * later targets/matches |
1991 | + */ |
1992 | + skb->_nfct = 0; |
1993 | + nf_ct_put(tmpl); |
1994 | + } |
1995 | return NF_ACCEPT; |
1996 | + } |
1997 | |
1998 | return nf_conntrack_in(state->net, PF_INET, state->hook, skb); |
1999 | } |
2000 | diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c |
2001 | index 413f01be0c9b..bcdc2d557de1 100644 |
2002 | --- a/net/ipv6/ip6_vti.c |
2003 | +++ b/net/ipv6/ip6_vti.c |
2004 | @@ -626,7 +626,6 @@ static void vti6_link_config(struct ip6_tnl *t) |
2005 | { |
2006 | struct net_device *dev = t->dev; |
2007 | struct __ip6_tnl_parm *p = &t->parms; |
2008 | - struct net_device *tdev = NULL; |
2009 | |
2010 | memcpy(dev->dev_addr, &p->laddr, sizeof(struct in6_addr)); |
2011 | memcpy(dev->broadcast, &p->raddr, sizeof(struct in6_addr)); |
2012 | @@ -639,25 +638,6 @@ static void vti6_link_config(struct ip6_tnl *t) |
2013 | dev->flags |= IFF_POINTOPOINT; |
2014 | else |
2015 | dev->flags &= ~IFF_POINTOPOINT; |
2016 | - |
2017 | - if (p->flags & IP6_TNL_F_CAP_XMIT) { |
2018 | - int strict = (ipv6_addr_type(&p->raddr) & |
2019 | - (IPV6_ADDR_MULTICAST | IPV6_ADDR_LINKLOCAL)); |
2020 | - struct rt6_info *rt = rt6_lookup(t->net, |
2021 | - &p->raddr, &p->laddr, |
2022 | - p->link, strict); |
2023 | - |
2024 | - if (rt) |
2025 | - tdev = rt->dst.dev; |
2026 | - ip6_rt_put(rt); |
2027 | - } |
2028 | - |
2029 | - if (!tdev && p->link) |
2030 | - tdev = __dev_get_by_index(t->net, p->link); |
2031 | - |
2032 | - if (tdev) |
2033 | - dev->mtu = max_t(int, tdev->mtu - dev->hard_header_len, |
2034 | - IPV6_MIN_MTU); |
2035 | } |
2036 | |
2037 | /** |
2038 | diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c |
2039 | index 490d7360222e..316869df91e8 100644 |
2040 | --- a/net/l2tp/l2tp_core.c |
2041 | +++ b/net/l2tp/l2tp_core.c |
2042 | @@ -113,6 +113,13 @@ struct l2tp_net { |
2043 | spinlock_t l2tp_session_hlist_lock; |
2044 | }; |
2045 | |
2046 | +#if IS_ENABLED(CONFIG_IPV6) |
2047 | +static bool l2tp_sk_is_v6(struct sock *sk) |
2048 | +{ |
2049 | + return sk->sk_family == PF_INET6 && |
2050 | + !ipv6_addr_v4mapped(&sk->sk_v6_daddr); |
2051 | +} |
2052 | +#endif |
2053 | |
2054 | static inline struct l2tp_tunnel *l2tp_tunnel(struct sock *sk) |
2055 | { |
2056 | @@ -1130,7 +1137,7 @@ static int l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb, |
2057 | /* Queue the packet to IP for output */ |
2058 | skb->ignore_df = 1; |
2059 | #if IS_ENABLED(CONFIG_IPV6) |
2060 | - if (tunnel->sock->sk_family == PF_INET6 && !tunnel->v4mapped) |
2061 | + if (l2tp_sk_is_v6(tunnel->sock)) |
2062 | error = inet6_csk_xmit(tunnel->sock, skb, NULL); |
2063 | else |
2064 | #endif |
2065 | @@ -1193,6 +1200,15 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len |
2066 | goto out_unlock; |
2067 | } |
2068 | |
2069 | + /* The user-space may change the connection status for the user-space |
2070 | + * provided socket at run time: we must check it under the socket lock |
2071 | + */ |
2072 | + if (tunnel->fd >= 0 && sk->sk_state != TCP_ESTABLISHED) { |
2073 | + kfree_skb(skb); |
2074 | + ret = NET_XMIT_DROP; |
2075 | + goto out_unlock; |
2076 | + } |
2077 | + |
2078 | /* Get routing info from the tunnel socket */ |
2079 | skb_dst_drop(skb); |
2080 | skb_dst_set(skb, dst_clone(__sk_dst_check(sk, 0))); |
2081 | @@ -1212,7 +1228,7 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len |
2082 | |
2083 | /* Calculate UDP checksum if configured to do so */ |
2084 | #if IS_ENABLED(CONFIG_IPV6) |
2085 | - if (sk->sk_family == PF_INET6 && !tunnel->v4mapped) |
2086 | + if (l2tp_sk_is_v6(sk)) |
2087 | udp6_set_csum(udp_get_no_check6_tx(sk), |
2088 | skb, &inet6_sk(sk)->saddr, |
2089 | &sk->sk_v6_daddr, udp_len); |
2090 | @@ -1616,24 +1632,6 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32 |
2091 | if (cfg != NULL) |
2092 | tunnel->debug = cfg->debug; |
2093 | |
2094 | -#if IS_ENABLED(CONFIG_IPV6) |
2095 | - if (sk->sk_family == PF_INET6) { |
2096 | - struct ipv6_pinfo *np = inet6_sk(sk); |
2097 | - |
2098 | - if (ipv6_addr_v4mapped(&np->saddr) && |
2099 | - ipv6_addr_v4mapped(&sk->sk_v6_daddr)) { |
2100 | - struct inet_sock *inet = inet_sk(sk); |
2101 | - |
2102 | - tunnel->v4mapped = true; |
2103 | - inet->inet_saddr = np->saddr.s6_addr32[3]; |
2104 | - inet->inet_rcv_saddr = sk->sk_v6_rcv_saddr.s6_addr32[3]; |
2105 | - inet->inet_daddr = sk->sk_v6_daddr.s6_addr32[3]; |
2106 | - } else { |
2107 | - tunnel->v4mapped = false; |
2108 | - } |
2109 | - } |
2110 | -#endif |
2111 | - |
2112 | /* Mark socket as an encapsulation socket. See net/ipv4/udp.c */ |
2113 | tunnel->encap = encap; |
2114 | if (encap == L2TP_ENCAPTYPE_UDP) { |
2115 | diff --git a/net/l2tp/l2tp_core.h b/net/l2tp/l2tp_core.h |
2116 | index 67c79d9b5c6c..9e2f1fda1b03 100644 |
2117 | --- a/net/l2tp/l2tp_core.h |
2118 | +++ b/net/l2tp/l2tp_core.h |
2119 | @@ -195,9 +195,6 @@ struct l2tp_tunnel { |
2120 | struct sock *sock; /* Parent socket */ |
2121 | int fd; /* Parent fd, if tunnel socket |
2122 | * was created by userspace */ |
2123 | -#if IS_ENABLED(CONFIG_IPV6) |
2124 | - bool v4mapped; |
2125 | -#endif |
2126 | |
2127 | struct work_struct del_work; |
2128 | |
2129 | diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c |
2130 | index 60c92158a2cd..a450a1c8804b 100644 |
2131 | --- a/net/netfilter/x_tables.c |
2132 | +++ b/net/netfilter/x_tables.c |
2133 | @@ -423,6 +423,36 @@ textify_hooks(char *buf, size_t size, unsigned int mask, uint8_t nfproto) |
2134 | return buf; |
2135 | } |
2136 | |
2137 | +/** |
2138 | + * xt_check_proc_name - check that name is suitable for /proc file creation |
2139 | + * |
2140 | + * @name: file name candidate |
2141 | + * @size: length of buffer |
2142 | + * |
2143 | + * some x_tables modules wish to create a file in /proc. |
2144 | + * This function makes sure that the name is suitable for this |
2145 | + * purpose, it checks that name is NUL terminated and isn't a 'special' |
2146 | + * name, like "..". |
2147 | + * |
2148 | + * returns negative number on error or 0 if name is useable. |
2149 | + */ |
2150 | +int xt_check_proc_name(const char *name, unsigned int size) |
2151 | +{ |
2152 | + if (name[0] == '\0') |
2153 | + return -EINVAL; |
2154 | + |
2155 | + if (strnlen(name, size) == size) |
2156 | + return -ENAMETOOLONG; |
2157 | + |
2158 | + if (strcmp(name, ".") == 0 || |
2159 | + strcmp(name, "..") == 0 || |
2160 | + strchr(name, '/')) |
2161 | + return -EINVAL; |
2162 | + |
2163 | + return 0; |
2164 | +} |
2165 | +EXPORT_SYMBOL(xt_check_proc_name); |
2166 | + |
2167 | int xt_check_match(struct xt_mtchk_param *par, |
2168 | unsigned int size, u_int8_t proto, bool inv_proto) |
2169 | { |
2170 | @@ -1008,7 +1038,12 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size) |
2171 | if ((size >> PAGE_SHIFT) + 2 > totalram_pages) |
2172 | return NULL; |
2173 | |
2174 | - info = kvmalloc(sz, GFP_KERNEL); |
2175 | + /* __GFP_NORETRY is not fully supported by kvmalloc but it should |
2176 | + * work reasonably well if sz is too large and bail out rather |
2177 | + * than shoot all processes down before realizing there is nothing |
2178 | + * more to reclaim. |
2179 | + */ |
2180 | + info = kvmalloc(sz, GFP_KERNEL | __GFP_NORETRY); |
2181 | if (!info) |
2182 | return NULL; |
2183 | |
2184 | diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c |
2185 | index b8a3e740ffd4..0c034597b9b8 100644 |
2186 | --- a/net/netfilter/xt_hashlimit.c |
2187 | +++ b/net/netfilter/xt_hashlimit.c |
2188 | @@ -915,8 +915,9 @@ static int hashlimit_mt_check_v1(const struct xt_mtchk_param *par) |
2189 | struct hashlimit_cfg3 cfg = {}; |
2190 | int ret; |
2191 | |
2192 | - if (info->name[sizeof(info->name) - 1] != '\0') |
2193 | - return -EINVAL; |
2194 | + ret = xt_check_proc_name(info->name, sizeof(info->name)); |
2195 | + if (ret) |
2196 | + return ret; |
2197 | |
2198 | ret = cfg_copy(&cfg, (void *)&info->cfg, 1); |
2199 | |
2200 | @@ -933,8 +934,9 @@ static int hashlimit_mt_check_v2(const struct xt_mtchk_param *par) |
2201 | struct hashlimit_cfg3 cfg = {}; |
2202 | int ret; |
2203 | |
2204 | - if (info->name[sizeof(info->name) - 1] != '\0') |
2205 | - return -EINVAL; |
2206 | + ret = xt_check_proc_name(info->name, sizeof(info->name)); |
2207 | + if (ret) |
2208 | + return ret; |
2209 | |
2210 | ret = cfg_copy(&cfg, (void *)&info->cfg, 2); |
2211 | |
2212 | @@ -948,9 +950,11 @@ static int hashlimit_mt_check_v2(const struct xt_mtchk_param *par) |
2213 | static int hashlimit_mt_check(const struct xt_mtchk_param *par) |
2214 | { |
2215 | struct xt_hashlimit_mtinfo3 *info = par->matchinfo; |
2216 | + int ret; |
2217 | |
2218 | - if (info->name[sizeof(info->name) - 1] != '\0') |
2219 | - return -EINVAL; |
2220 | + ret = xt_check_proc_name(info->name, sizeof(info->name)); |
2221 | + if (ret) |
2222 | + return ret; |
2223 | |
2224 | return hashlimit_mt_check_common(par, &info->hinfo, &info->cfg, |
2225 | info->name, 3); |
2226 | diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c |
2227 | index 245fa350a7a8..cf96d230e5a3 100644 |
2228 | --- a/net/netfilter/xt_recent.c |
2229 | +++ b/net/netfilter/xt_recent.c |
2230 | @@ -361,9 +361,9 @@ static int recent_mt_check(const struct xt_mtchk_param *par, |
2231 | info->hit_count, XT_RECENT_MAX_NSTAMPS - 1); |
2232 | return -EINVAL; |
2233 | } |
2234 | - if (info->name[0] == '\0' || |
2235 | - strnlen(info->name, XT_RECENT_NAME_LEN) == XT_RECENT_NAME_LEN) |
2236 | - return -EINVAL; |
2237 | + ret = xt_check_proc_name(info->name, sizeof(info->name)); |
2238 | + if (ret) |
2239 | + return ret; |
2240 | |
2241 | if (ip_pkt_list_tot && info->hit_count < ip_pkt_list_tot) |
2242 | nstamp_mask = roundup_pow_of_two(ip_pkt_list_tot) - 1; |
2243 | diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c |
2244 | index ccfdc7115a83..a00ec715aa46 100644 |
2245 | --- a/net/xfrm/xfrm_ipcomp.c |
2246 | +++ b/net/xfrm/xfrm_ipcomp.c |
2247 | @@ -283,7 +283,7 @@ static struct crypto_comp * __percpu *ipcomp_alloc_tfms(const char *alg_name) |
2248 | struct crypto_comp *tfm; |
2249 | |
2250 | /* This can be any valid CPU ID so we don't need locking. */ |
2251 | - tfm = __this_cpu_read(*pos->tfms); |
2252 | + tfm = this_cpu_read(*pos->tfms); |
2253 | |
2254 | if (!strcmp(crypto_comp_name(tfm), alg_name)) { |
2255 | pos->users++; |
2256 | diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c |
2257 | index bab20c626943..8f13fb57eab5 100644 |
2258 | --- a/net/xfrm/xfrm_state.c |
2259 | +++ b/net/xfrm/xfrm_state.c |
2260 | @@ -2050,6 +2050,11 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen |
2261 | struct xfrm_mgr *km; |
2262 | struct xfrm_policy *pol = NULL; |
2263 | |
2264 | +#ifdef CONFIG_COMPAT |
2265 | + if (in_compat_syscall()) |
2266 | + return -EOPNOTSUPP; |
2267 | +#endif |
2268 | + |
2269 | if (!optval && !optlen) { |
2270 | xfrm_sk_policy_insert(sk, XFRM_POLICY_IN, NULL); |
2271 | xfrm_sk_policy_insert(sk, XFRM_POLICY_OUT, NULL); |
2272 | diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c |
2273 | index 0edf38d2afd9..dbfcfefd6d69 100644 |
2274 | --- a/net/xfrm/xfrm_user.c |
2275 | +++ b/net/xfrm/xfrm_user.c |
2276 | @@ -121,22 +121,17 @@ static inline int verify_replay(struct xfrm_usersa_info *p, |
2277 | struct nlattr *rt = attrs[XFRMA_REPLAY_ESN_VAL]; |
2278 | struct xfrm_replay_state_esn *rs; |
2279 | |
2280 | - if (p->flags & XFRM_STATE_ESN) { |
2281 | - if (!rt) |
2282 | - return -EINVAL; |
2283 | + if (!rt) |
2284 | + return (p->flags & XFRM_STATE_ESN) ? -EINVAL : 0; |
2285 | |
2286 | - rs = nla_data(rt); |
2287 | + rs = nla_data(rt); |
2288 | |
2289 | - if (rs->bmp_len > XFRMA_REPLAY_ESN_MAX / sizeof(rs->bmp[0]) / 8) |
2290 | - return -EINVAL; |
2291 | - |
2292 | - if (nla_len(rt) < xfrm_replay_state_esn_len(rs) && |
2293 | - nla_len(rt) != sizeof(*rs)) |
2294 | - return -EINVAL; |
2295 | - } |
2296 | + if (rs->bmp_len > XFRMA_REPLAY_ESN_MAX / sizeof(rs->bmp[0]) / 8) |
2297 | + return -EINVAL; |
2298 | |
2299 | - if (!rt) |
2300 | - return 0; |
2301 | + if (nla_len(rt) < xfrm_replay_state_esn_len(rs) && |
2302 | + nla_len(rt) != sizeof(*rs)) |
2303 | + return -EINVAL; |
2304 | |
2305 | /* As only ESP and AH support ESN feature. */ |
2306 | if ((p->id.proto != IPPROTO_ESP) && (p->id.proto != IPPROTO_AH)) |
2307 | diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c |
2308 | index 012881461058..d6e9a18fd821 100644 |
2309 | --- a/sound/core/oss/pcm_oss.c |
2310 | +++ b/sound/core/oss/pcm_oss.c |
2311 | @@ -1326,7 +1326,7 @@ static ssize_t snd_pcm_oss_write2(struct snd_pcm_substream *substream, const cha |
2312 | static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const char __user *buf, size_t bytes) |
2313 | { |
2314 | size_t xfer = 0; |
2315 | - ssize_t tmp; |
2316 | + ssize_t tmp = 0; |
2317 | struct snd_pcm_runtime *runtime = substream->runtime; |
2318 | |
2319 | if (atomic_read(&substream->mmap_count)) |
2320 | @@ -1433,7 +1433,7 @@ static ssize_t snd_pcm_oss_read2(struct snd_pcm_substream *substream, char *buf, |
2321 | static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __user *buf, size_t bytes) |
2322 | { |
2323 | size_t xfer = 0; |
2324 | - ssize_t tmp; |
2325 | + ssize_t tmp = 0; |
2326 | struct snd_pcm_runtime *runtime = substream->runtime; |
2327 | |
2328 | if (atomic_read(&substream->mmap_count)) |
2329 | diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c |
2330 | index 499f75b18e09..eba2bedcbc81 100644 |
2331 | --- a/sound/core/pcm_native.c |
2332 | +++ b/sound/core/pcm_native.c |
2333 | @@ -3424,7 +3424,7 @@ int snd_pcm_lib_default_mmap(struct snd_pcm_substream *substream, |
2334 | area, |
2335 | substream->runtime->dma_area, |
2336 | substream->runtime->dma_addr, |
2337 | - area->vm_end - area->vm_start); |
2338 | + substream->runtime->dma_bytes); |
2339 | #endif /* CONFIG_X86 */ |
2340 | /* mmap with fault handler */ |
2341 | area->vm_ops = &snd_pcm_vm_ops_data_fault; |
2342 | diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c |
2343 | index ed56cd307059..58f94f399efb 100644 |
2344 | --- a/sound/usb/quirks.c |
2345 | +++ b/sound/usb/quirks.c |
2346 | @@ -1177,6 +1177,7 @@ static bool is_teac_dsd_dac(unsigned int id) |
2347 | switch (id) { |
2348 | case USB_ID(0x0644, 0x8043): /* TEAC UD-501/UD-503/NT-503 */ |
2349 | case USB_ID(0x0644, 0x8044): /* Esoteric D-05X */ |
2350 | + case USB_ID(0x0644, 0x804a): /* TEAC UD-301 */ |
2351 | return true; |
2352 | } |
2353 | return false; |