Magellan Linux

Contents of /trunk/kernel-alx/patches-4.14/0140-4.14.41-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (show annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 6 months ago) by niro
File size: 74198 byte(s)
-added up to patches-4.14.79
1 diff --git a/Documentation/arm64/silicon-errata.txt b/Documentation/arm64/silicon-errata.txt
2 index f3d0d316d5f1..e4fe6adc372b 100644
3 --- a/Documentation/arm64/silicon-errata.txt
4 +++ b/Documentation/arm64/silicon-errata.txt
5 @@ -55,6 +55,7 @@ stable kernels.
6 | ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 |
7 | ARM | Cortex-A72 | #853709 | N/A |
8 | ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
9 +| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
10 | ARM | MMU-500 | #841119,#826419 | N/A |
11 | | | | |
12 | Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
13 diff --git a/Makefile b/Makefile
14 index 6eede39f898a..c23d0b0c6c45 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 = 40
22 +SUBLEVEL = 41
23 EXTRAVERSION =
24 NAME = Petit Gorille
25
26 diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
27 index c2abb4e88ff2..2d5f7aca156d 100644
28 --- a/arch/arm64/Kconfig
29 +++ b/arch/arm64/Kconfig
30 @@ -443,6 +443,20 @@ config ARM64_ERRATUM_843419
31
32 If unsure, say Y.
33
34 +config ARM64_ERRATUM_1024718
35 + bool "Cortex-A55: 1024718: Update of DBM/AP bits without break before make might result in incorrect update"
36 + default y
37 + help
38 + This option adds work around for Arm Cortex-A55 Erratum 1024718.
39 +
40 + Affected Cortex-A55 cores (r0p0, r0p1, r1p0) could cause incorrect
41 + update of the hardware dirty bit when the DBM/AP bits are updated
42 + without a break-before-make. The work around is to disable the usage
43 + of hardware DBM locally on the affected cores. CPUs not affected by
44 + erratum will continue to use the feature.
45 +
46 + If unsure, say Y.
47 +
48 config CAVIUM_ERRATUM_22375
49 bool "Cavium erratum 22375, 24313"
50 default y
51 diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
52 index 463619dcadd4..25b2a4161c7a 100644
53 --- a/arch/arm64/include/asm/assembler.h
54 +++ b/arch/arm64/include/asm/assembler.h
55 @@ -25,6 +25,7 @@
56
57 #include <asm/asm-offsets.h>
58 #include <asm/cpufeature.h>
59 +#include <asm/cputype.h>
60 #include <asm/page.h>
61 #include <asm/pgtable-hwdef.h>
62 #include <asm/ptrace.h>
63 @@ -495,4 +496,43 @@ alternative_endif
64 and \phys, \pte, #(((1 << (48 - PAGE_SHIFT)) - 1) << PAGE_SHIFT)
65 .endm
66
67 +/*
68 + * Check the MIDR_EL1 of the current CPU for a given model and a range of
69 + * variant/revision. See asm/cputype.h for the macros used below.
70 + *
71 + * model: MIDR_CPU_MODEL of CPU
72 + * rv_min: Minimum of MIDR_CPU_VAR_REV()
73 + * rv_max: Maximum of MIDR_CPU_VAR_REV()
74 + * res: Result register.
75 + * tmp1, tmp2, tmp3: Temporary registers
76 + *
77 + * Corrupts: res, tmp1, tmp2, tmp3
78 + * Returns: 0, if the CPU id doesn't match. Non-zero otherwise
79 + */
80 + .macro cpu_midr_match model, rv_min, rv_max, res, tmp1, tmp2, tmp3
81 + mrs \res, midr_el1
82 + mov_q \tmp1, (MIDR_REVISION_MASK | MIDR_VARIANT_MASK)
83 + mov_q \tmp2, MIDR_CPU_MODEL_MASK
84 + and \tmp3, \res, \tmp2 // Extract model
85 + and \tmp1, \res, \tmp1 // rev & variant
86 + mov_q \tmp2, \model
87 + cmp \tmp3, \tmp2
88 + cset \res, eq
89 + cbz \res, .Ldone\@ // Model matches ?
90 +
91 + .if (\rv_min != 0) // Skip min check if rv_min == 0
92 + mov_q \tmp3, \rv_min
93 + cmp \tmp1, \tmp3
94 + cset \res, ge
95 + .endif // \rv_min != 0
96 + /* Skip rv_max check if rv_min == rv_max && rv_min != 0 */
97 + .if ((\rv_min != \rv_max) || \rv_min == 0)
98 + mov_q \tmp2, \rv_max
99 + cmp \tmp1, \tmp2
100 + cset \tmp2, le
101 + and \res, \res, \tmp2
102 + .endif
103 +.Ldone\@:
104 + .endm
105 +
106 #endif /* __ASM_ASSEMBLER_H */
107 diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h
108 index be7bd19c87ec..30da0918d046 100644
109 --- a/arch/arm64/include/asm/cputype.h
110 +++ b/arch/arm64/include/asm/cputype.h
111 @@ -78,6 +78,7 @@
112
113 #define ARM_CPU_PART_AEM_V8 0xD0F
114 #define ARM_CPU_PART_FOUNDATION 0xD00
115 +#define ARM_CPU_PART_CORTEX_A55 0xD05
116 #define ARM_CPU_PART_CORTEX_A57 0xD07
117 #define ARM_CPU_PART_CORTEX_A72 0xD08
118 #define ARM_CPU_PART_CORTEX_A53 0xD03
119 @@ -98,6 +99,7 @@
120 #define QCOM_CPU_PART_KRYO 0x200
121
122 #define MIDR_CORTEX_A53 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)
123 +#define MIDR_CORTEX_A55 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A55)
124 #define MIDR_CORTEX_A57 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)
125 #define MIDR_CORTEX_A72 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A72)
126 #define MIDR_CORTEX_A73 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A73)
127 diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
128 index 139320a7f7a2..e338165000e6 100644
129 --- a/arch/arm64/mm/proc.S
130 +++ b/arch/arm64/mm/proc.S
131 @@ -438,6 +438,11 @@ ENTRY(__cpu_setup)
132 cbz x9, 2f
133 cmp x9, #2
134 b.lt 1f
135 +#ifdef CONFIG_ARM64_ERRATUM_1024718
136 + /* Disable hardware DBM on Cortex-A55 r0p0, r0p1 & r1p0 */
137 + cpu_midr_match MIDR_CORTEX_A55, MIDR_CPU_VAR_REV(0, 0), MIDR_CPU_VAR_REV(1, 0), x1, x2, x3, x4
138 + cbnz x1, 1f
139 +#endif
140 orr x10, x10, #TCR_HD // hardware Dirty flag update
141 1: orr x10, x10, #TCR_HA // hardware Access flag update
142 2:
143 diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c
144 index c5d7435455f1..27a41695fcfd 100644
145 --- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
146 +++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
147 @@ -19,6 +19,9 @@
148 #include <asm/pgalloc.h>
149 #include <asm/pte-walk.h>
150
151 +static void mark_pages_dirty(struct kvm *kvm, struct kvm_memory_slot *memslot,
152 + unsigned long gfn, unsigned int order);
153 +
154 /*
155 * Supported radix tree geometry.
156 * Like p9, we support either 5 or 9 bits at the first (lowest) level,
157 @@ -195,6 +198,12 @@ static void kvmppc_pte_free(pte_t *ptep)
158 kmem_cache_free(kvm_pte_cache, ptep);
159 }
160
161 +/* Like pmd_huge() and pmd_large(), but works regardless of config options */
162 +static inline int pmd_is_leaf(pmd_t pmd)
163 +{
164 + return !!(pmd_val(pmd) & _PAGE_PTE);
165 +}
166 +
167 static int kvmppc_create_pte(struct kvm *kvm, pte_t pte, unsigned long gpa,
168 unsigned int level, unsigned long mmu_seq)
169 {
170 @@ -219,7 +228,7 @@ static int kvmppc_create_pte(struct kvm *kvm, pte_t pte, unsigned long gpa,
171 else
172 new_pmd = pmd_alloc_one(kvm->mm, gpa);
173
174 - if (level == 0 && !(pmd && pmd_present(*pmd)))
175 + if (level == 0 && !(pmd && pmd_present(*pmd) && !pmd_is_leaf(*pmd)))
176 new_ptep = kvmppc_pte_alloc();
177
178 /* Check if we might have been invalidated; let the guest retry if so */
179 @@ -244,12 +253,30 @@ static int kvmppc_create_pte(struct kvm *kvm, pte_t pte, unsigned long gpa,
180 new_pmd = NULL;
181 }
182 pmd = pmd_offset(pud, gpa);
183 - if (pmd_large(*pmd)) {
184 - /* Someone else has instantiated a large page here; retry */
185 - ret = -EAGAIN;
186 - goto out_unlock;
187 - }
188 - if (level == 1 && !pmd_none(*pmd)) {
189 + if (pmd_is_leaf(*pmd)) {
190 + unsigned long lgpa = gpa & PMD_MASK;
191 +
192 + /*
193 + * If we raced with another CPU which has just put
194 + * a 2MB pte in after we saw a pte page, try again.
195 + */
196 + if (level == 0 && !new_ptep) {
197 + ret = -EAGAIN;
198 + goto out_unlock;
199 + }
200 + /* Valid 2MB page here already, remove it */
201 + old = kvmppc_radix_update_pte(kvm, pmdp_ptep(pmd),
202 + ~0UL, 0, lgpa, PMD_SHIFT);
203 + kvmppc_radix_tlbie_page(kvm, lgpa, PMD_SHIFT);
204 + if (old & _PAGE_DIRTY) {
205 + unsigned long gfn = lgpa >> PAGE_SHIFT;
206 + struct kvm_memory_slot *memslot;
207 + memslot = gfn_to_memslot(kvm, gfn);
208 + if (memslot)
209 + mark_pages_dirty(kvm, memslot, gfn,
210 + PMD_SHIFT - PAGE_SHIFT);
211 + }
212 + } else if (level == 1 && !pmd_none(*pmd)) {
213 /*
214 * There's a page table page here, but we wanted
215 * to install a large page. Tell the caller and let
216 @@ -412,28 +439,24 @@ int kvmppc_book3s_radix_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu,
217 } else {
218 page = pages[0];
219 pfn = page_to_pfn(page);
220 - if (PageHuge(page)) {
221 - page = compound_head(page);
222 - pte_size <<= compound_order(page);
223 + if (PageCompound(page)) {
224 + pte_size <<= compound_order(compound_head(page));
225 /* See if we can insert a 2MB large-page PTE here */
226 if (pte_size >= PMD_SIZE &&
227 - (gpa & PMD_MASK & PAGE_MASK) ==
228 - (hva & PMD_MASK & PAGE_MASK)) {
229 + (gpa & (PMD_SIZE - PAGE_SIZE)) ==
230 + (hva & (PMD_SIZE - PAGE_SIZE))) {
231 level = 1;
232 pfn &= ~((PMD_SIZE >> PAGE_SHIFT) - 1);
233 }
234 }
235 /* See if we can provide write access */
236 if (writing) {
237 - /*
238 - * We assume gup_fast has set dirty on the host PTE.
239 - */
240 pgflags |= _PAGE_WRITE;
241 } else {
242 local_irq_save(flags);
243 ptep = find_current_mm_pte(current->mm->pgd,
244 hva, NULL, NULL);
245 - if (ptep && pte_write(*ptep) && pte_dirty(*ptep))
246 + if (ptep && pte_write(*ptep))
247 pgflags |= _PAGE_WRITE;
248 local_irq_restore(flags);
249 }
250 @@ -459,18 +482,15 @@ int kvmppc_book3s_radix_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu,
251 pte = pfn_pte(pfn, __pgprot(pgflags));
252 ret = kvmppc_create_pte(kvm, pte, gpa, level, mmu_seq);
253 }
254 - if (ret == 0 || ret == -EAGAIN)
255 - ret = RESUME_GUEST;
256
257 if (page) {
258 - /*
259 - * We drop pages[0] here, not page because page might
260 - * have been set to the head page of a compound, but
261 - * we have to drop the reference on the correct tail
262 - * page to match the get inside gup()
263 - */
264 - put_page(pages[0]);
265 + if (!ret && (pgflags & _PAGE_WRITE))
266 + set_page_dirty_lock(page);
267 + put_page(page);
268 }
269 +
270 + if (ret == 0 || ret == -EAGAIN)
271 + ret = RESUME_GUEST;
272 return ret;
273 }
274
275 @@ -676,7 +696,7 @@ void kvmppc_free_radix(struct kvm *kvm)
276 continue;
277 pmd = pmd_offset(pud, 0);
278 for (im = 0; im < PTRS_PER_PMD; ++im, ++pmd) {
279 - if (pmd_huge(*pmd)) {
280 + if (pmd_is_leaf(*pmd)) {
281 pmd_clear(pmd);
282 continue;
283 }
284 diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
285 index e094dc90ff1b..377d1420bd02 100644
286 --- a/arch/powerpc/kvm/book3s_hv.c
287 +++ b/arch/powerpc/kvm/book3s_hv.c
288 @@ -2847,7 +2847,7 @@ static noinline void kvmppc_run_core(struct kvmppc_vcore *vc)
289 */
290 trace_hardirqs_on();
291
292 - guest_enter();
293 + guest_enter_irqoff();
294
295 srcu_idx = srcu_read_lock(&vc->kvm->srcu);
296
297 @@ -2855,8 +2855,6 @@ static noinline void kvmppc_run_core(struct kvmppc_vcore *vc)
298
299 srcu_read_unlock(&vc->kvm->srcu, srcu_idx);
300
301 - guest_exit();
302 -
303 trace_hardirqs_off();
304 set_irq_happened(trap);
305
306 @@ -2890,6 +2888,7 @@ static noinline void kvmppc_run_core(struct kvmppc_vcore *vc)
307 kvmppc_set_host_core(pcpu);
308
309 local_irq_enable();
310 + guest_exit();
311
312 /* Let secondaries go back to the offline loop */
313 for (i = 0; i < controlled_threads; ++i) {
314 @@ -3619,15 +3618,17 @@ static int kvmppc_hv_setup_htab_rma(struct kvm_vcpu *vcpu)
315 goto up_out;
316
317 psize = vma_kernel_pagesize(vma);
318 - porder = __ilog2(psize);
319
320 up_read(&current->mm->mmap_sem);
321
322 /* We can handle 4k, 64k or 16M pages in the VRMA */
323 - err = -EINVAL;
324 - if (!(psize == 0x1000 || psize == 0x10000 ||
325 - psize == 0x1000000))
326 - goto out_srcu;
327 + if (psize >= 0x1000000)
328 + psize = 0x1000000;
329 + else if (psize >= 0x10000)
330 + psize = 0x10000;
331 + else
332 + psize = 0x1000;
333 + porder = __ilog2(psize);
334
335 senc = slb_pgsize_encoding(psize);
336 kvm->arch.vrma_slb_v = senc | SLB_VSID_B_1T |
337 diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
338 index 2b3194b9608f..663a398449b7 100644
339 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
340 +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
341 @@ -308,7 +308,6 @@ kvm_novcpu_exit:
342 stw r12, STACK_SLOT_TRAP(r1)
343 bl kvmhv_commence_exit
344 nop
345 - lwz r12, STACK_SLOT_TRAP(r1)
346 b kvmhv_switch_to_host
347
348 /*
349 @@ -1136,6 +1135,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
350
351 secondary_too_late:
352 li r12, 0
353 + stw r12, STACK_SLOT_TRAP(r1)
354 cmpdi r4, 0
355 beq 11f
356 stw r12, VCPU_TRAP(r4)
357 @@ -1445,12 +1445,12 @@ mc_cont:
358 1:
359 #endif /* CONFIG_KVM_XICS */
360
361 + stw r12, STACK_SLOT_TRAP(r1)
362 mr r3, r12
363 /* Increment exit count, poke other threads to exit */
364 bl kvmhv_commence_exit
365 nop
366 ld r9, HSTATE_KVM_VCPU(r13)
367 - lwz r12, VCPU_TRAP(r9)
368
369 /* Stop others sending VCPU interrupts to this physical CPU */
370 li r0, -1
371 @@ -1816,6 +1816,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_POWER9_DD1)
372 * POWER7/POWER8 guest -> host partition switch code.
373 * We don't have to lock against tlbies but we do
374 * have to coordinate the hardware threads.
375 + * Here STACK_SLOT_TRAP(r1) contains the trap number.
376 */
377 kvmhv_switch_to_host:
378 /* Secondary threads wait for primary to do partition switch */
379 @@ -1868,11 +1869,11 @@ BEGIN_FTR_SECTION
380 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
381
382 /* If HMI, call kvmppc_realmode_hmi_handler() */
383 + lwz r12, STACK_SLOT_TRAP(r1)
384 cmpwi r12, BOOK3S_INTERRUPT_HMI
385 bne 27f
386 bl kvmppc_realmode_hmi_handler
387 nop
388 - li r12, BOOK3S_INTERRUPT_HMI
389 /*
390 * At this point kvmppc_realmode_hmi_handler would have resync-ed
391 * the TB. Hence it is not required to subtract guest timebase
392 @@ -1950,6 +1951,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_TYPE_RADIX)
393 li r0, KVM_GUEST_MODE_NONE
394 stb r0, HSTATE_IN_GUEST(r13)
395
396 + lwz r12, STACK_SLOT_TRAP(r1) /* return trap # in r12 */
397 ld r0, SFS+PPC_LR_STKOFF(r1)
398 addi r1, r1, SFS
399 mtlr r0
400 diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
401 index 589af1eec7c1..011a47b4587c 100644
402 --- a/arch/x86/events/core.c
403 +++ b/arch/x86/events/core.c
404 @@ -27,6 +27,7 @@
405 #include <linux/cpu.h>
406 #include <linux/bitops.h>
407 #include <linux/device.h>
408 +#include <linux/nospec.h>
409
410 #include <asm/apic.h>
411 #include <asm/stacktrace.h>
412 @@ -304,17 +305,20 @@ set_ext_hw_attr(struct hw_perf_event *hwc, struct perf_event *event)
413
414 config = attr->config;
415
416 - cache_type = (config >> 0) & 0xff;
417 + cache_type = (config >> 0) & 0xff;
418 if (cache_type >= PERF_COUNT_HW_CACHE_MAX)
419 return -EINVAL;
420 + cache_type = array_index_nospec(cache_type, PERF_COUNT_HW_CACHE_MAX);
421
422 cache_op = (config >> 8) & 0xff;
423 if (cache_op >= PERF_COUNT_HW_CACHE_OP_MAX)
424 return -EINVAL;
425 + cache_op = array_index_nospec(cache_op, PERF_COUNT_HW_CACHE_OP_MAX);
426
427 cache_result = (config >> 16) & 0xff;
428 if (cache_result >= PERF_COUNT_HW_CACHE_RESULT_MAX)
429 return -EINVAL;
430 + cache_result = array_index_nospec(cache_result, PERF_COUNT_HW_CACHE_RESULT_MAX);
431
432 val = hw_cache_event_ids[cache_type][cache_op][cache_result];
433
434 @@ -421,6 +425,8 @@ int x86_setup_perfctr(struct perf_event *event)
435 if (attr->config >= x86_pmu.max_events)
436 return -EINVAL;
437
438 + attr->config = array_index_nospec((unsigned long)attr->config, x86_pmu.max_events);
439 +
440 /*
441 * The generic map:
442 */
443 diff --git a/arch/x86/events/intel/cstate.c b/arch/x86/events/intel/cstate.c
444 index 72db0664a53d..357e82dc0e2a 100644
445 --- a/arch/x86/events/intel/cstate.c
446 +++ b/arch/x86/events/intel/cstate.c
447 @@ -91,6 +91,7 @@
448 #include <linux/module.h>
449 #include <linux/slab.h>
450 #include <linux/perf_event.h>
451 +#include <linux/nospec.h>
452 #include <asm/cpu_device_id.h>
453 #include <asm/intel-family.h>
454 #include "../perf_event.h"
455 @@ -301,6 +302,7 @@ static int cstate_pmu_event_init(struct perf_event *event)
456 } else if (event->pmu == &cstate_pkg_pmu) {
457 if (cfg >= PERF_CSTATE_PKG_EVENT_MAX)
458 return -EINVAL;
459 + cfg = array_index_nospec((unsigned long)cfg, PERF_CSTATE_PKG_EVENT_MAX);
460 if (!pkg_msr[cfg].attr)
461 return -EINVAL;
462 event->hw.event_base = pkg_msr[cfg].msr;
463 diff --git a/arch/x86/events/msr.c b/arch/x86/events/msr.c
464 index 14efaa0e8684..81dd57280441 100644
465 --- a/arch/x86/events/msr.c
466 +++ b/arch/x86/events/msr.c
467 @@ -1,5 +1,6 @@
468 // SPDX-License-Identifier: GPL-2.0
469 #include <linux/perf_event.h>
470 +#include <linux/nospec.h>
471 #include <asm/intel-family.h>
472
473 enum perf_msr_id {
474 @@ -145,9 +146,6 @@ static int msr_event_init(struct perf_event *event)
475 if (event->attr.type != event->pmu->type)
476 return -ENOENT;
477
478 - if (cfg >= PERF_MSR_EVENT_MAX)
479 - return -EINVAL;
480 -
481 /* unsupported modes and filters */
482 if (event->attr.exclude_user ||
483 event->attr.exclude_kernel ||
484 @@ -158,6 +156,11 @@ static int msr_event_init(struct perf_event *event)
485 event->attr.sample_period) /* no sampling */
486 return -EINVAL;
487
488 + if (cfg >= PERF_MSR_EVENT_MAX)
489 + return -EINVAL;
490 +
491 + cfg = array_index_nospec((unsigned long)cfg, PERF_MSR_EVENT_MAX);
492 +
493 if (!msr[cfg].attr)
494 return -EINVAL;
495
496 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
497 index 8cfdb6484fd0..ab8993fe58cc 100644
498 --- a/arch/x86/kvm/lapic.c
499 +++ b/arch/x86/kvm/lapic.c
500 @@ -1418,23 +1418,6 @@ static void start_sw_tscdeadline(struct kvm_lapic *apic)
501 local_irq_restore(flags);
502 }
503
504 -static void start_sw_period(struct kvm_lapic *apic)
505 -{
506 - if (!apic->lapic_timer.period)
507 - return;
508 -
509 - if (apic_lvtt_oneshot(apic) &&
510 - ktime_after(ktime_get(),
511 - apic->lapic_timer.target_expiration)) {
512 - apic_timer_expired(apic);
513 - return;
514 - }
515 -
516 - hrtimer_start(&apic->lapic_timer.timer,
517 - apic->lapic_timer.target_expiration,
518 - HRTIMER_MODE_ABS_PINNED);
519 -}
520 -
521 static bool set_target_expiration(struct kvm_lapic *apic)
522 {
523 ktime_t now;
524 @@ -1491,6 +1474,26 @@ static void advance_periodic_target_expiration(struct kvm_lapic *apic)
525 apic->lapic_timer.period);
526 }
527
528 +static void start_sw_period(struct kvm_lapic *apic)
529 +{
530 + if (!apic->lapic_timer.period)
531 + return;
532 +
533 + if (ktime_after(ktime_get(),
534 + apic->lapic_timer.target_expiration)) {
535 + apic_timer_expired(apic);
536 +
537 + if (apic_lvtt_oneshot(apic))
538 + return;
539 +
540 + advance_periodic_target_expiration(apic);
541 + }
542 +
543 + hrtimer_start(&apic->lapic_timer.timer,
544 + apic->lapic_timer.target_expiration,
545 + HRTIMER_MODE_ABS_PINNED);
546 +}
547 +
548 bool kvm_lapic_hv_timer_in_use(struct kvm_vcpu *vcpu)
549 {
550 if (!lapic_in_kernel(vcpu))
551 diff --git a/crypto/af_alg.c b/crypto/af_alg.c
552 index 4e4640bb82b9..815ee1075574 100644
553 --- a/crypto/af_alg.c
554 +++ b/crypto/af_alg.c
555 @@ -158,16 +158,16 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
556 void *private;
557 int err;
558
559 - /* If caller uses non-allowed flag, return error. */
560 - if ((sa->salg_feat & ~allowed) || (sa->salg_mask & ~allowed))
561 - return -EINVAL;
562 -
563 if (sock->state == SS_CONNECTED)
564 return -EINVAL;
565
566 if (addr_len < sizeof(*sa))
567 return -EINVAL;
568
569 + /* If caller uses non-allowed flag, return error. */
570 + if ((sa->salg_feat & ~allowed) || (sa->salg_mask & ~allowed))
571 + return -EINVAL;
572 +
573 sa->salg_type[sizeof(sa->salg_type) - 1] = 0;
574 sa->salg_name[sizeof(sa->salg_name) + addr_len - sizeof(*sa) - 1] = 0;
575
576 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
577 index c6fe2974b336..473f150d6b22 100644
578 --- a/drivers/ata/libata-core.c
579 +++ b/drivers/ata/libata-core.c
580 @@ -4539,6 +4539,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
581 ATA_HORKAGE_ZERO_AFTER_TRIM |
582 ATA_HORKAGE_NOLPM, },
583
584 + /* Sandisk devices which are known to not handle LPM well */
585 + { "SanDisk SD7UB3Q*G1001", NULL, ATA_HORKAGE_NOLPM, },
586 +
587 /* devices that don't properly handle queued TRIM commands */
588 { "Micron_M500_*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
589 ATA_HORKAGE_ZERO_AFTER_TRIM, },
590 diff --git a/drivers/atm/zatm.c b/drivers/atm/zatm.c
591 index 1ef67db03c8e..9c9a22958717 100644
592 --- a/drivers/atm/zatm.c
593 +++ b/drivers/atm/zatm.c
594 @@ -28,6 +28,7 @@
595 #include <asm/io.h>
596 #include <linux/atomic.h>
597 #include <linux/uaccess.h>
598 +#include <linux/nospec.h>
599
600 #include "uPD98401.h"
601 #include "uPD98402.h"
602 @@ -1458,6 +1459,8 @@ static int zatm_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
603 return -EFAULT;
604 if (pool < 0 || pool > ZATM_LAST_POOL)
605 return -EINVAL;
606 + pool = array_index_nospec(pool,
607 + ZATM_LAST_POOL + 1);
608 spin_lock_irqsave(&zatm_dev->lock, flags);
609 info = zatm_dev->pool_info[pool];
610 if (cmd == ZATM_GETPOOLZ) {
611 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
612 index e9dff868c028..7fcc4d7f4909 100644
613 --- a/drivers/bluetooth/btusb.c
614 +++ b/drivers/bluetooth/btusb.c
615 @@ -235,6 +235,7 @@ static const struct usb_device_id blacklist_table[] = {
616 { USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 },
617 { USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 },
618 { USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 },
619 + { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
620 { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 },
621 { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
622 { USB_DEVICE(0x0cf3, 0x311e), .driver_info = BTUSB_ATH3012 },
623 @@ -267,7 +268,6 @@ static const struct usb_device_id blacklist_table[] = {
624 { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
625
626 /* QCA ROME chipset */
627 - { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_QCA_ROME },
628 { USB_DEVICE(0x0cf3, 0xe007), .driver_info = BTUSB_QCA_ROME },
629 { USB_DEVICE(0x0cf3, 0xe009), .driver_info = BTUSB_QCA_ROME },
630 { USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME },
631 @@ -395,6 +395,13 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = {
632 DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 3060"),
633 },
634 },
635 + {
636 + /* Dell XPS 9360 (QCA ROME device 0cf3:e300) */
637 + .matches = {
638 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
639 + DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9360"),
640 + },
641 + },
642 {}
643 };
644
645 @@ -2895,6 +2902,12 @@ static int btusb_config_oob_wake(struct hci_dev *hdev)
646 }
647 #endif
648
649 +static void btusb_check_needs_reset_resume(struct usb_interface *intf)
650 +{
651 + if (dmi_check_system(btusb_needs_reset_resume_table))
652 + interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME;
653 +}
654 +
655 static int btusb_probe(struct usb_interface *intf,
656 const struct usb_device_id *id)
657 {
658 @@ -3030,9 +3043,6 @@ static int btusb_probe(struct usb_interface *intf,
659 hdev->send = btusb_send_frame;
660 hdev->notify = btusb_notify;
661
662 - if (dmi_check_system(btusb_needs_reset_resume_table))
663 - interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME;
664 -
665 #ifdef CONFIG_PM
666 err = btusb_config_oob_wake(hdev);
667 if (err)
668 @@ -3119,6 +3129,7 @@ static int btusb_probe(struct usb_interface *intf,
669 if (id->driver_info & BTUSB_QCA_ROME) {
670 data->setup_on_usb = btusb_setup_qca;
671 hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
672 + btusb_check_needs_reset_resume(intf);
673 }
674
675 #ifdef CONFIG_BT_HCIBTUSB_RTL
676 diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
677 index bfc53995064a..f03fe916eb9d 100644
678 --- a/drivers/gpio/gpio-aspeed.c
679 +++ b/drivers/gpio/gpio-aspeed.c
680 @@ -375,7 +375,7 @@ static void aspeed_gpio_irq_set_mask(struct irq_data *d, bool set)
681 if (set)
682 reg |= bit;
683 else
684 - reg &= bit;
685 + reg &= ~bit;
686 iowrite32(reg, addr);
687
688 spin_unlock_irqrestore(&gpio->lock, flags);
689 diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
690 index b4c8b25453a6..68ea6e712bf9 100644
691 --- a/drivers/gpio/gpiolib.c
692 +++ b/drivers/gpio/gpiolib.c
693 @@ -443,7 +443,7 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
694 struct gpiohandle_request handlereq;
695 struct linehandle_state *lh;
696 struct file *file;
697 - int fd, i, ret;
698 + int fd, i, count = 0, ret;
699
700 if (copy_from_user(&handlereq, ip, sizeof(handlereq)))
701 return -EFAULT;
702 @@ -489,6 +489,7 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
703 if (ret)
704 goto out_free_descs;
705 lh->descs[i] = desc;
706 + count = i;
707
708 if (lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW)
709 set_bit(FLAG_ACTIVE_LOW, &desc->flags);
710 @@ -555,7 +556,7 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
711 out_put_unused_fd:
712 put_unused_fd(fd);
713 out_free_descs:
714 - for (; i >= 0; i--)
715 + for (i = 0; i < count; i++)
716 gpiod_free(lh->descs[i]);
717 kfree(lh->label);
718 out_free_lh:
719 @@ -812,7 +813,7 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)
720 desc = &gdev->descs[offset];
721 ret = gpiod_request(desc, le->label);
722 if (ret)
723 - goto out_free_desc;
724 + goto out_free_label;
725 le->desc = desc;
726 le->eflags = eflags;
727
728 diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
729 index 2fd383d7253a..0d8a417e2cd6 100644
730 --- a/drivers/gpu/drm/drm_atomic.c
731 +++ b/drivers/gpu/drm/drm_atomic.c
732 @@ -151,6 +151,8 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)
733 state->connectors[i].state);
734 state->connectors[i].ptr = NULL;
735 state->connectors[i].state = NULL;
736 + state->connectors[i].old_state = NULL;
737 + state->connectors[i].new_state = NULL;
738 drm_connector_put(connector);
739 }
740
741 @@ -172,6 +174,8 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)
742 state->crtcs[i].commit = NULL;
743 state->crtcs[i].ptr = NULL;
744 state->crtcs[i].state = NULL;
745 + state->crtcs[i].old_state = NULL;
746 + state->crtcs[i].new_state = NULL;
747 }
748
749 for (i = 0; i < config->num_total_plane; i++) {
750 @@ -184,6 +188,8 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)
751 state->planes[i].state);
752 state->planes[i].ptr = NULL;
753 state->planes[i].state = NULL;
754 + state->planes[i].old_state = NULL;
755 + state->planes[i].new_state = NULL;
756 }
757
758 for (i = 0; i < state->num_private_objs; i++) {
759 @@ -196,6 +202,8 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)
760 state->private_objs[i].state);
761 state->private_objs[i].ptr = NULL;
762 state->private_objs[i].state = NULL;
763 + state->private_objs[i].old_state = NULL;
764 + state->private_objs[i].new_state = NULL;
765 }
766 state->num_private_objs = 0;
767
768 diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
769 index 8e215777c7f4..240308f1b6dd 100644
770 --- a/drivers/gpu/drm/i915/intel_lvds.c
771 +++ b/drivers/gpu/drm/i915/intel_lvds.c
772 @@ -317,7 +317,8 @@ static void intel_enable_lvds(struct intel_encoder *encoder,
773
774 I915_WRITE(PP_CONTROL(0), I915_READ(PP_CONTROL(0)) | PANEL_POWER_ON);
775 POSTING_READ(lvds_encoder->reg);
776 - if (intel_wait_for_register(dev_priv, PP_STATUS(0), PP_ON, PP_ON, 1000))
777 +
778 + if (intel_wait_for_register(dev_priv, PP_STATUS(0), PP_ON, PP_ON, 5000))
779 DRM_ERROR("timed out waiting for panel to power on\n");
780
781 intel_panel_enable_backlight(pipe_config, conn_state);
782 diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
783 index 6e196bc01118..a29474528e85 100644
784 --- a/drivers/gpu/drm/nouveau/nv50_display.c
785 +++ b/drivers/gpu/drm/nouveau/nv50_display.c
786 @@ -3216,10 +3216,11 @@ nv50_mstm_destroy_connector(struct drm_dp_mst_topology_mgr *mgr,
787
788 drm_connector_unregister(&mstc->connector);
789
790 - drm_modeset_lock_all(drm->dev);
791 drm_fb_helper_remove_one_connector(&drm->fbcon->helper, &mstc->connector);
792 +
793 + drm_modeset_lock(&drm->dev->mode_config.connection_mutex, NULL);
794 mstc->port = NULL;
795 - drm_modeset_unlock_all(drm->dev);
796 + drm_modeset_unlock(&drm->dev->mode_config.connection_mutex);
797
798 drm_connector_unreference(&mstc->connector);
799 }
800 @@ -3229,9 +3230,7 @@ nv50_mstm_register_connector(struct drm_connector *connector)
801 {
802 struct nouveau_drm *drm = nouveau_drm(connector->dev);
803
804 - drm_modeset_lock_all(drm->dev);
805 drm_fb_helper_add_one_connector(&drm->fbcon->helper, connector);
806 - drm_modeset_unlock_all(drm->dev);
807
808 drm_connector_register(connector);
809 }
810 diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
811 index 2968b3ebb895..77c56264c05b 100644
812 --- a/drivers/gpu/drm/vc4/vc4_plane.c
813 +++ b/drivers/gpu/drm/vc4/vc4_plane.c
814 @@ -535,7 +535,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
815 * the scl fields here.
816 */
817 if (num_planes == 1) {
818 - scl0 = vc4_get_scl_field(state, 1);
819 + scl0 = vc4_get_scl_field(state, 0);
820 scl1 = scl0;
821 } else {
822 scl0 = vc4_get_scl_field(state, 1);
823 diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
824 index 3cc2052f972c..cbc56372ff97 100644
825 --- a/drivers/md/dm-integrity.c
826 +++ b/drivers/md/dm-integrity.c
827 @@ -2439,7 +2439,7 @@ static void dm_integrity_free_journal_scatterlist(struct dm_integrity_c *ic, str
828 unsigned i;
829 for (i = 0; i < ic->journal_sections; i++)
830 kvfree(sl[i]);
831 - kfree(sl);
832 + kvfree(sl);
833 }
834
835 static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_integrity_c *ic, struct page_list *pl)
836 diff --git a/drivers/net/can/spi/hi311x.c b/drivers/net/can/spi/hi311x.c
837 index 5590c559a8ca..53e320c92a8b 100644
838 --- a/drivers/net/can/spi/hi311x.c
839 +++ b/drivers/net/can/spi/hi311x.c
840 @@ -91,6 +91,7 @@
841 #define HI3110_STAT_BUSOFF BIT(2)
842 #define HI3110_STAT_ERRP BIT(3)
843 #define HI3110_STAT_ERRW BIT(4)
844 +#define HI3110_STAT_TXMTY BIT(7)
845
846 #define HI3110_BTR0_SJW_SHIFT 6
847 #define HI3110_BTR0_BRP_SHIFT 0
848 @@ -427,8 +428,10 @@ static int hi3110_get_berr_counter(const struct net_device *net,
849 struct hi3110_priv *priv = netdev_priv(net);
850 struct spi_device *spi = priv->spi;
851
852 + mutex_lock(&priv->hi3110_lock);
853 bec->txerr = hi3110_read(spi, HI3110_READ_TEC);
854 bec->rxerr = hi3110_read(spi, HI3110_READ_REC);
855 + mutex_unlock(&priv->hi3110_lock);
856
857 return 0;
858 }
859 @@ -735,10 +738,7 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
860 }
861 }
862
863 - if (intf == 0)
864 - break;
865 -
866 - if (intf & HI3110_INT_TXCPLT) {
867 + if (priv->tx_len && statf & HI3110_STAT_TXMTY) {
868 net->stats.tx_packets++;
869 net->stats.tx_bytes += priv->tx_len - 1;
870 can_led_event(net, CAN_LED_EVENT_TX);
871 @@ -748,6 +748,9 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
872 }
873 netif_wake_queue(net);
874 }
875 +
876 + if (intf == 0)
877 + break;
878 }
879 mutex_unlock(&priv->hi3110_lock);
880 return IRQ_HANDLED;
881 diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c
882 index 63587b8e6825..daed57d3d209 100644
883 --- a/drivers/net/can/usb/kvaser_usb.c
884 +++ b/drivers/net/can/usb/kvaser_usb.c
885 @@ -1179,7 +1179,7 @@ static void kvaser_usb_rx_can_msg(const struct kvaser_usb *dev,
886
887 skb = alloc_can_skb(priv->netdev, &cf);
888 if (!skb) {
889 - stats->tx_dropped++;
890 + stats->rx_dropped++;
891 return;
892 }
893
894 diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
895 index 044af553204c..7ef0a8e1c3e8 100644
896 --- a/drivers/nvme/host/nvme.h
897 +++ b/drivers/nvme/host/nvme.h
898 @@ -80,6 +80,11 @@ enum nvme_quirks {
899 * Supports the LighNVM command set if indicated in vs[1].
900 */
901 NVME_QUIRK_LIGHTNVM = (1 << 6),
902 +
903 + /*
904 + * Set MEDIUM priority on SQ creation
905 + */
906 + NVME_QUIRK_MEDIUM_PRIO_SQ = (1 << 7),
907 };
908
909 /*
910 diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
911 index cdd2fd509ddc..eab17405e815 100644
912 --- a/drivers/nvme/host/pci.c
913 +++ b/drivers/nvme/host/pci.c
914 @@ -947,9 +947,18 @@ static int adapter_alloc_cq(struct nvme_dev *dev, u16 qid,
915 static int adapter_alloc_sq(struct nvme_dev *dev, u16 qid,
916 struct nvme_queue *nvmeq)
917 {
918 + struct nvme_ctrl *ctrl = &dev->ctrl;
919 struct nvme_command c;
920 int flags = NVME_QUEUE_PHYS_CONTIG;
921
922 + /*
923 + * Some drives have a bug that auto-enables WRRU if MEDIUM isn't
924 + * set. Since URGENT priority is zeroes, it makes all queues
925 + * URGENT.
926 + */
927 + if (ctrl->quirks & NVME_QUIRK_MEDIUM_PRIO_SQ)
928 + flags |= NVME_SQ_PRIO_MEDIUM;
929 +
930 /*
931 * Note: we (ab)use the fact the the prp fields survive if no data
932 * is attached to the request.
933 @@ -2523,7 +2532,8 @@ static const struct pci_device_id nvme_id_table[] = {
934 .driver_data = NVME_QUIRK_STRIPE_SIZE |
935 NVME_QUIRK_DEALLOCATE_ZEROES, },
936 { PCI_VDEVICE(INTEL, 0xf1a5), /* Intel 600P/P3100 */
937 - .driver_data = NVME_QUIRK_NO_DEEPEST_PS },
938 + .driver_data = NVME_QUIRK_NO_DEEPEST_PS |
939 + NVME_QUIRK_MEDIUM_PRIO_SQ },
940 { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */
941 .driver_data = NVME_QUIRK_IDENTIFY_CNS, },
942 { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */
943 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
944 index 74f1c57ab93b..62a0677b32f1 100644
945 --- a/drivers/pci/pci.c
946 +++ b/drivers/pci/pci.c
947 @@ -1892,7 +1892,7 @@ void pci_pme_active(struct pci_dev *dev, bool enable)
948 EXPORT_SYMBOL(pci_pme_active);
949
950 /**
951 - * pci_enable_wake - enable PCI device as wakeup event source
952 + * __pci_enable_wake - enable PCI device as wakeup event source
953 * @dev: PCI device affected
954 * @state: PCI state from which device will issue wakeup events
955 * @enable: True to enable event generation; false to disable
956 @@ -1910,7 +1910,7 @@ EXPORT_SYMBOL(pci_pme_active);
957 * Error code depending on the platform is returned if both the platform and
958 * the native mechanism fail to enable the generation of wake-up events
959 */
960 -int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable)
961 +static int __pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable)
962 {
963 int ret = 0;
964
965 @@ -1951,6 +1951,23 @@ int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable)
966
967 return ret;
968 }
969 +
970 +/**
971 + * pci_enable_wake - change wakeup settings for a PCI device
972 + * @pci_dev: Target device
973 + * @state: PCI state from which device will issue wakeup events
974 + * @enable: Whether or not to enable event generation
975 + *
976 + * If @enable is set, check device_may_wakeup() for the device before calling
977 + * __pci_enable_wake() for it.
978 + */
979 +int pci_enable_wake(struct pci_dev *pci_dev, pci_power_t state, bool enable)
980 +{
981 + if (enable && !device_may_wakeup(&pci_dev->dev))
982 + return -EINVAL;
983 +
984 + return __pci_enable_wake(pci_dev, state, enable);
985 +}
986 EXPORT_SYMBOL(pci_enable_wake);
987
988 /**
989 @@ -1963,9 +1980,9 @@ EXPORT_SYMBOL(pci_enable_wake);
990 * should not be called twice in a row to enable wake-up due to PCI PM vs ACPI
991 * ordering constraints.
992 *
993 - * This function only returns error code if the device is not capable of
994 - * generating PME# from both D3_hot and D3_cold, and the platform is unable to
995 - * enable wake-up power for it.
996 + * This function only returns error code if the device is not allowed to wake
997 + * up the system from sleep or it is not capable of generating PME# from both
998 + * D3_hot and D3_cold and the platform is unable to enable wake-up power for it.
999 */
1000 int pci_wake_from_d3(struct pci_dev *dev, bool enable)
1001 {
1002 @@ -2096,7 +2113,7 @@ int pci_finish_runtime_suspend(struct pci_dev *dev)
1003
1004 dev->runtime_d3cold = target_state == PCI_D3cold;
1005
1006 - pci_enable_wake(dev, target_state, pci_dev_run_wake(dev));
1007 + __pci_enable_wake(dev, target_state, pci_dev_run_wake(dev));
1008
1009 error = pci_set_power_state(dev, target_state);
1010
1011 @@ -2120,16 +2137,16 @@ bool pci_dev_run_wake(struct pci_dev *dev)
1012 {
1013 struct pci_bus *bus = dev->bus;
1014
1015 - if (device_can_wakeup(&dev->dev))
1016 - return true;
1017 -
1018 if (!dev->pme_support)
1019 return false;
1020
1021 /* PME-capable in principle, but not from the target power state */
1022 - if (!pci_pme_capable(dev, pci_target_state(dev, false)))
1023 + if (!pci_pme_capable(dev, pci_target_state(dev, true)))
1024 return false;
1025
1026 + if (device_can_wakeup(&dev->dev))
1027 + return true;
1028 +
1029 while (bus->parent) {
1030 struct pci_dev *bridge = bus->self;
1031
1032 diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
1033 index ed805c7c5ace..ac83f721db24 100644
1034 --- a/drivers/thermal/samsung/exynos_tmu.c
1035 +++ b/drivers/thermal/samsung/exynos_tmu.c
1036 @@ -185,6 +185,7 @@
1037 * @regulator: pointer to the TMU regulator structure.
1038 * @reg_conf: pointer to structure to register with core thermal.
1039 * @ntrip: number of supported trip points.
1040 + * @enabled: current status of TMU device
1041 * @tmu_initialize: SoC specific TMU initialization method
1042 * @tmu_control: SoC specific TMU control method
1043 * @tmu_read: SoC specific TMU temperature read method
1044 @@ -205,6 +206,7 @@ struct exynos_tmu_data {
1045 struct regulator *regulator;
1046 struct thermal_zone_device *tzd;
1047 unsigned int ntrip;
1048 + bool enabled;
1049
1050 int (*tmu_initialize)(struct platform_device *pdev);
1051 void (*tmu_control)(struct platform_device *pdev, bool on);
1052 @@ -398,6 +400,7 @@ static void exynos_tmu_control(struct platform_device *pdev, bool on)
1053 mutex_lock(&data->lock);
1054 clk_enable(data->clk);
1055 data->tmu_control(pdev, on);
1056 + data->enabled = on;
1057 clk_disable(data->clk);
1058 mutex_unlock(&data->lock);
1059 }
1060 @@ -889,19 +892,24 @@ static void exynos7_tmu_control(struct platform_device *pdev, bool on)
1061 static int exynos_get_temp(void *p, int *temp)
1062 {
1063 struct exynos_tmu_data *data = p;
1064 + int value, ret = 0;
1065
1066 - if (!data || !data->tmu_read)
1067 + if (!data || !data->tmu_read || !data->enabled)
1068 return -EINVAL;
1069
1070 mutex_lock(&data->lock);
1071 clk_enable(data->clk);
1072
1073 - *temp = code_to_temp(data, data->tmu_read(data)) * MCELSIUS;
1074 + value = data->tmu_read(data);
1075 + if (value < 0)
1076 + ret = value;
1077 + else
1078 + *temp = code_to_temp(data, value) * MCELSIUS;
1079
1080 clk_disable(data->clk);
1081 mutex_unlock(&data->lock);
1082
1083 - return 0;
1084 + return ret;
1085 }
1086
1087 #ifdef CONFIG_THERMAL_EMULATION
1088 diff --git a/fs/ceph/file.c b/fs/ceph/file.c
1089 index 0024d3e61bcd..6d653235e323 100644
1090 --- a/fs/ceph/file.c
1091 +++ b/fs/ceph/file.c
1092 @@ -873,6 +873,11 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
1093 size_t start = 0;
1094 ssize_t len;
1095
1096 + if (write)
1097 + size = min_t(u64, size, fsc->mount_options->wsize);
1098 + else
1099 + size = min_t(u64, size, fsc->mount_options->rsize);
1100 +
1101 vino = ceph_vino(inode);
1102 req = ceph_osdc_new_request(&fsc->client->osdc, &ci->i_layout,
1103 vino, pos, &size, 0,
1104 @@ -888,11 +893,6 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
1105 break;
1106 }
1107
1108 - if (write)
1109 - size = min_t(u64, size, fsc->mount_options->wsize);
1110 - else
1111 - size = min_t(u64, size, fsc->mount_options->rsize);
1112 -
1113 len = size;
1114 pages = dio_get_pages_alloc(iter, len, &start, &num_pages);
1115 if (IS_ERR(pages)) {
1116 diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
1117 index dbcd2e066066..490c5fc9e69c 100644
1118 --- a/fs/cifs/cifsfs.c
1119 +++ b/fs/cifs/cifsfs.c
1120 @@ -1045,6 +1045,18 @@ ssize_t cifs_file_copychunk_range(unsigned int xid,
1121 return rc;
1122 }
1123
1124 +/*
1125 + * Directory operations under CIFS/SMB2/SMB3 are synchronous, so fsync()
1126 + * is a dummy operation.
1127 + */
1128 +static int cifs_dir_fsync(struct file *file, loff_t start, loff_t end, int datasync)
1129 +{
1130 + cifs_dbg(FYI, "Sync directory - name: %pD datasync: 0x%x\n",
1131 + file, datasync);
1132 +
1133 + return 0;
1134 +}
1135 +
1136 static ssize_t cifs_copy_file_range(struct file *src_file, loff_t off,
1137 struct file *dst_file, loff_t destoff,
1138 size_t len, unsigned int flags)
1139 @@ -1173,6 +1185,7 @@ const struct file_operations cifs_dir_ops = {
1140 .copy_file_range = cifs_copy_file_range,
1141 .clone_file_range = cifs_clone_file_range,
1142 .llseek = generic_file_llseek,
1143 + .fsync = cifs_dir_fsync,
1144 };
1145
1146 static void
1147 diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
1148 index 8a7ef9378bf6..3244932f4d5c 100644
1149 --- a/fs/fs-writeback.c
1150 +++ b/fs/fs-writeback.c
1151 @@ -1940,7 +1940,7 @@ void wb_workfn(struct work_struct *work)
1152 }
1153
1154 if (!list_empty(&wb->work_list))
1155 - mod_delayed_work(bdi_wq, &wb->dwork, 0);
1156 + wb_wakeup(wb);
1157 else if (wb_has_dirty_io(wb) && dirty_writeback_interval)
1158 wb_wakeup_delayed(wb);
1159
1160 diff --git a/include/linux/oom.h b/include/linux/oom.h
1161 index 5bad038ac012..6adac113e96d 100644
1162 --- a/include/linux/oom.h
1163 +++ b/include/linux/oom.h
1164 @@ -95,6 +95,8 @@ static inline int check_stable_address_space(struct mm_struct *mm)
1165 return 0;
1166 }
1167
1168 +void __oom_reap_task_mm(struct mm_struct *mm);
1169 +
1170 extern unsigned long oom_badness(struct task_struct *p,
1171 struct mem_cgroup *memcg, const nodemask_t *nodemask,
1172 unsigned long totalpages);
1173 diff --git a/include/linux/wait_bit.h b/include/linux/wait_bit.h
1174 index af0d495430d7..bc96d90bcafd 100644
1175 --- a/include/linux/wait_bit.h
1176 +++ b/include/linux/wait_bit.h
1177 @@ -259,4 +259,21 @@ int wait_on_atomic_t(atomic_t *val, int (*action)(atomic_t *), unsigned mode)
1178 return out_of_line_wait_on_atomic_t(val, action, mode);
1179 }
1180
1181 +/**
1182 + * clear_and_wake_up_bit - clear a bit and wake up anyone waiting on that bit
1183 + *
1184 + * @bit: the bit of the word being waited on
1185 + * @word: the word being waited on, a kernel virtual address
1186 + *
1187 + * You can use this helper if bitflags are manipulated atomically rather than
1188 + * non-atomically under a lock.
1189 + */
1190 +static inline void clear_and_wake_up_bit(int bit, void *word)
1191 +{
1192 + clear_bit_unlock(bit, word);
1193 + /* See wake_up_bit() for which memory barrier you need to use. */
1194 + smp_mb__after_atomic();
1195 + wake_up_bit(word, bit);
1196 +}
1197 +
1198 #endif /* _LINUX_WAIT_BIT_H */
1199 diff --git a/include/net/inet_timewait_sock.h b/include/net/inet_timewait_sock.h
1200 index 1356fa6a7566..fb439db7fa45 100644
1201 --- a/include/net/inet_timewait_sock.h
1202 +++ b/include/net/inet_timewait_sock.h
1203 @@ -43,6 +43,7 @@ struct inet_timewait_sock {
1204 #define tw_family __tw_common.skc_family
1205 #define tw_state __tw_common.skc_state
1206 #define tw_reuse __tw_common.skc_reuse
1207 +#define tw_reuseport __tw_common.skc_reuseport
1208 #define tw_ipv6only __tw_common.skc_ipv6only
1209 #define tw_bound_dev_if __tw_common.skc_bound_dev_if
1210 #define tw_node __tw_common.skc_nulls_node
1211 diff --git a/include/net/nexthop.h b/include/net/nexthop.h
1212 index 36bb794f5cd6..902ff382a6dc 100644
1213 --- a/include/net/nexthop.h
1214 +++ b/include/net/nexthop.h
1215 @@ -7,7 +7,7 @@
1216
1217 static inline int rtnh_ok(const struct rtnexthop *rtnh, int remaining)
1218 {
1219 - return remaining >= sizeof(*rtnh) &&
1220 + return remaining >= (int)sizeof(*rtnh) &&
1221 rtnh->rtnh_len >= sizeof(*rtnh) &&
1222 rtnh->rtnh_len <= remaining;
1223 }
1224 diff --git a/kernel/compat.c b/kernel/compat.c
1225 index 772e038d04d9..7e83733d4c95 100644
1226 --- a/kernel/compat.c
1227 +++ b/kernel/compat.c
1228 @@ -34,6 +34,7 @@ int compat_get_timex(struct timex *txc, const struct compat_timex __user *utp)
1229 {
1230 struct compat_timex tx32;
1231
1232 + memset(txc, 0, sizeof(struct timex));
1233 if (copy_from_user(&tx32, utp, sizeof(struct compat_timex)))
1234 return -EFAULT;
1235
1236 diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
1237 index fa4f47a0a631..b23294e21e76 100644
1238 --- a/kernel/events/callchain.c
1239 +++ b/kernel/events/callchain.c
1240 @@ -131,14 +131,8 @@ int get_callchain_buffers(int event_max_stack)
1241 goto exit;
1242 }
1243
1244 - if (count > 1) {
1245 - /* If the allocation failed, give up */
1246 - if (!callchain_cpus_entries)
1247 - err = -ENOMEM;
1248 - goto exit;
1249 - }
1250 -
1251 - err = alloc_callchain_buffers();
1252 + if (count == 1)
1253 + err = alloc_callchain_buffers();
1254 exit:
1255 if (err)
1256 atomic_dec(&nr_callchain_events);
1257 diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
1258 index f684d8e5fa2b..c573c7339223 100644
1259 --- a/kernel/events/ring_buffer.c
1260 +++ b/kernel/events/ring_buffer.c
1261 @@ -14,6 +14,7 @@
1262 #include <linux/slab.h>
1263 #include <linux/circ_buf.h>
1264 #include <linux/poll.h>
1265 +#include <linux/nospec.h>
1266
1267 #include "internal.h"
1268
1269 @@ -863,8 +864,10 @@ perf_mmap_to_page(struct ring_buffer *rb, unsigned long pgoff)
1270 return NULL;
1271
1272 /* AUX space */
1273 - if (pgoff >= rb->aux_pgoff)
1274 - return virt_to_page(rb->aux_pages[pgoff - rb->aux_pgoff]);
1275 + if (pgoff >= rb->aux_pgoff) {
1276 + int aux_pgoff = array_index_nospec(pgoff - rb->aux_pgoff, rb->aux_nr_pages);
1277 + return virt_to_page(rb->aux_pages[aux_pgoff]);
1278 + }
1279 }
1280
1281 return __perf_mmap_to_page(rb, pgoff);
1282 diff --git a/kernel/sched/autogroup.c b/kernel/sched/autogroup.c
1283 index a43df5193538..1d179ab9ef8d 100644
1284 --- a/kernel/sched/autogroup.c
1285 +++ b/kernel/sched/autogroup.c
1286 @@ -7,6 +7,7 @@
1287 #include <linux/utsname.h>
1288 #include <linux/security.h>
1289 #include <linux/export.h>
1290 +#include <linux/nospec.h>
1291
1292 unsigned int __read_mostly sysctl_sched_autogroup_enabled = 1;
1293 static struct autogroup autogroup_default;
1294 @@ -213,7 +214,7 @@ int proc_sched_autogroup_set_nice(struct task_struct *p, int nice)
1295 static unsigned long next = INITIAL_JIFFIES;
1296 struct autogroup *ag;
1297 unsigned long shares;
1298 - int err;
1299 + int err, idx;
1300
1301 if (nice < MIN_NICE || nice > MAX_NICE)
1302 return -EINVAL;
1303 @@ -231,7 +232,9 @@ int proc_sched_autogroup_set_nice(struct task_struct *p, int nice)
1304
1305 next = HZ / 10 + jiffies;
1306 ag = autogroup_task_get(p);
1307 - shares = scale_load(sched_prio_to_weight[nice + 20]);
1308 +
1309 + idx = array_index_nospec(nice + 20, 40);
1310 + shares = scale_load(sched_prio_to_weight[idx]);
1311
1312 down_write(&ag->lock);
1313 err = sched_group_set_shares(ag->tg, shares);
1314 diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
1315 index d6717a3331a1..81eb7899c7c8 100644
1316 --- a/kernel/sched/cpufreq_schedutil.c
1317 +++ b/kernel/sched/cpufreq_schedutil.c
1318 @@ -282,7 +282,8 @@ static void sugov_update_single(struct update_util_data *hook, u64 time,
1319 * Do not reduce the frequency if the CPU has not been idle
1320 * recently, as the reduction is likely to be premature then.
1321 */
1322 - if (busy && next_f < sg_policy->next_freq) {
1323 + if (busy && next_f < sg_policy->next_freq &&
1324 + sg_policy->next_freq != UINT_MAX) {
1325 next_f = sg_policy->next_freq;
1326
1327 /* Reset cached freq as next_freq has changed */
1328 diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
1329 index a764aec3c9a1..55008fa93097 100644
1330 --- a/kernel/trace/trace_events_filter.c
1331 +++ b/kernel/trace/trace_events_filter.c
1332 @@ -338,6 +338,9 @@ static int regex_match_full(char *str, struct regex *r, int len)
1333
1334 static int regex_match_front(char *str, struct regex *r, int len)
1335 {
1336 + if (len < r->len)
1337 + return 0;
1338 +
1339 if (strncmp(str, r->pattern, r->len) == 0)
1340 return 1;
1341 return 0;
1342 diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
1343 index 14d3af6a2953..7197ff9f0bbd 100644
1344 --- a/kernel/trace/trace_uprobe.c
1345 +++ b/kernel/trace/trace_uprobe.c
1346 @@ -152,6 +152,8 @@ static void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
1347 return;
1348
1349 ret = strncpy_from_user(dst, src, maxlen);
1350 + if (ret == maxlen)
1351 + dst[--ret] = '\0';
1352
1353 if (ret < 0) { /* Failed to fetch string */
1354 ((u8 *)get_rloc_data(dest))[0] = '\0';
1355 diff --git a/mm/backing-dev.c b/mm/backing-dev.c
1356 index e19606bb41a0..dee049a0ec5b 100644
1357 --- a/mm/backing-dev.c
1358 +++ b/mm/backing-dev.c
1359 @@ -381,7 +381,7 @@ static void wb_shutdown(struct bdi_writeback *wb)
1360 * the barrier provided by test_and_clear_bit() above.
1361 */
1362 smp_wmb();
1363 - clear_bit(WB_shutting_down, &wb->state);
1364 + clear_and_wake_up_bit(WB_shutting_down, &wb->state);
1365 }
1366
1367 static void wb_exit(struct bdi_writeback *wb)
1368 diff --git a/mm/memcontrol.c b/mm/memcontrol.c
1369 index 66e7efabf0a1..546cd481a2ca 100644
1370 --- a/mm/memcontrol.c
1371 +++ b/mm/memcontrol.c
1372 @@ -4187,6 +4187,9 @@ static void free_mem_cgroup_per_node_info(struct mem_cgroup *memcg, int node)
1373 {
1374 struct mem_cgroup_per_node *pn = memcg->nodeinfo[node];
1375
1376 + if (!pn)
1377 + return;
1378 +
1379 free_percpu(pn->lruvec_stat);
1380 kfree(pn);
1381 }
1382 diff --git a/mm/mmap.c b/mm/mmap.c
1383 index 0de87a376aaa..11f96fad5271 100644
1384 --- a/mm/mmap.c
1385 +++ b/mm/mmap.c
1386 @@ -2982,6 +2982,32 @@ void exit_mmap(struct mm_struct *mm)
1387 /* mm's last user has gone, and its about to be pulled down */
1388 mmu_notifier_release(mm);
1389
1390 + if (unlikely(mm_is_oom_victim(mm))) {
1391 + /*
1392 + * Manually reap the mm to free as much memory as possible.
1393 + * Then, as the oom reaper does, set MMF_OOM_SKIP to disregard
1394 + * this mm from further consideration. Taking mm->mmap_sem for
1395 + * write after setting MMF_OOM_SKIP will guarantee that the oom
1396 + * reaper will not run on this mm again after mmap_sem is
1397 + * dropped.
1398 + *
1399 + * Nothing can be holding mm->mmap_sem here and the above call
1400 + * to mmu_notifier_release(mm) ensures mmu notifier callbacks in
1401 + * __oom_reap_task_mm() will not block.
1402 + *
1403 + * This needs to be done before calling munlock_vma_pages_all(),
1404 + * which clears VM_LOCKED, otherwise the oom reaper cannot
1405 + * reliably test it.
1406 + */
1407 + mutex_lock(&oom_lock);
1408 + __oom_reap_task_mm(mm);
1409 + mutex_unlock(&oom_lock);
1410 +
1411 + set_bit(MMF_OOM_SKIP, &mm->flags);
1412 + down_write(&mm->mmap_sem);
1413 + up_write(&mm->mmap_sem);
1414 + }
1415 +
1416 if (mm->locked_vm) {
1417 vma = mm->mmap;
1418 while (vma) {
1419 @@ -3003,24 +3029,6 @@ void exit_mmap(struct mm_struct *mm)
1420 /* update_hiwater_rss(mm) here? but nobody should be looking */
1421 /* Use -1 here to ensure all VMAs in the mm are unmapped */
1422 unmap_vmas(&tlb, vma, 0, -1);
1423 -
1424 - if (unlikely(mm_is_oom_victim(mm))) {
1425 - /*
1426 - * Wait for oom_reap_task() to stop working on this
1427 - * mm. Because MMF_OOM_SKIP is already set before
1428 - * calling down_read(), oom_reap_task() will not run
1429 - * on this "mm" post up_write().
1430 - *
1431 - * mm_is_oom_victim() cannot be set from under us
1432 - * either because victim->mm is already set to NULL
1433 - * under task_lock before calling mmput and oom_mm is
1434 - * set not NULL by the OOM killer only if victim->mm
1435 - * is found not NULL while holding the task_lock.
1436 - */
1437 - set_bit(MMF_OOM_SKIP, &mm->flags);
1438 - down_write(&mm->mmap_sem);
1439 - up_write(&mm->mmap_sem);
1440 - }
1441 free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, USER_PGTABLES_CEILING);
1442 tlb_finish_mmu(&tlb, 0, -1);
1443
1444 diff --git a/mm/oom_kill.c b/mm/oom_kill.c
1445 index 10aed8d8c080..58977f634ced 100644
1446 --- a/mm/oom_kill.c
1447 +++ b/mm/oom_kill.c
1448 @@ -456,7 +456,6 @@ bool process_shares_mm(struct task_struct *p, struct mm_struct *mm)
1449 return false;
1450 }
1451
1452 -
1453 #ifdef CONFIG_MMU
1454 /*
1455 * OOM Reaper kernel thread which tries to reap the memory used by the OOM
1456 @@ -467,16 +466,51 @@ static DECLARE_WAIT_QUEUE_HEAD(oom_reaper_wait);
1457 static struct task_struct *oom_reaper_list;
1458 static DEFINE_SPINLOCK(oom_reaper_lock);
1459
1460 -static bool __oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
1461 +void __oom_reap_task_mm(struct mm_struct *mm)
1462 {
1463 - struct mmu_gather tlb;
1464 struct vm_area_struct *vma;
1465 +
1466 + /*
1467 + * Tell all users of get_user/copy_from_user etc... that the content
1468 + * is no longer stable. No barriers really needed because unmapping
1469 + * should imply barriers already and the reader would hit a page fault
1470 + * if it stumbled over a reaped memory.
1471 + */
1472 + set_bit(MMF_UNSTABLE, &mm->flags);
1473 +
1474 + for (vma = mm->mmap ; vma; vma = vma->vm_next) {
1475 + if (!can_madv_dontneed_vma(vma))
1476 + continue;
1477 +
1478 + /*
1479 + * Only anonymous pages have a good chance to be dropped
1480 + * without additional steps which we cannot afford as we
1481 + * are OOM already.
1482 + *
1483 + * We do not even care about fs backed pages because all
1484 + * which are reclaimable have already been reclaimed and
1485 + * we do not want to block exit_mmap by keeping mm ref
1486 + * count elevated without a good reason.
1487 + */
1488 + if (vma_is_anonymous(vma) || !(vma->vm_flags & VM_SHARED)) {
1489 + struct mmu_gather tlb;
1490 +
1491 + tlb_gather_mmu(&tlb, mm, vma->vm_start, vma->vm_end);
1492 + unmap_page_range(&tlb, vma, vma->vm_start, vma->vm_end,
1493 + NULL);
1494 + tlb_finish_mmu(&tlb, vma->vm_start, vma->vm_end);
1495 + }
1496 + }
1497 +}
1498 +
1499 +static bool oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
1500 +{
1501 bool ret = true;
1502
1503 /*
1504 * We have to make sure to not race with the victim exit path
1505 * and cause premature new oom victim selection:
1506 - * __oom_reap_task_mm exit_mm
1507 + * oom_reap_task_mm exit_mm
1508 * mmget_not_zero
1509 * mmput
1510 * atomic_dec_and_test
1511 @@ -524,35 +558,8 @@ static bool __oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
1512
1513 trace_start_task_reaping(tsk->pid);
1514
1515 - /*
1516 - * Tell all users of get_user/copy_from_user etc... that the content
1517 - * is no longer stable. No barriers really needed because unmapping
1518 - * should imply barriers already and the reader would hit a page fault
1519 - * if it stumbled over a reaped memory.
1520 - */
1521 - set_bit(MMF_UNSTABLE, &mm->flags);
1522 -
1523 - for (vma = mm->mmap ; vma; vma = vma->vm_next) {
1524 - if (!can_madv_dontneed_vma(vma))
1525 - continue;
1526 + __oom_reap_task_mm(mm);
1527
1528 - /*
1529 - * Only anonymous pages have a good chance to be dropped
1530 - * without additional steps which we cannot afford as we
1531 - * are OOM already.
1532 - *
1533 - * We do not even care about fs backed pages because all
1534 - * which are reclaimable have already been reclaimed and
1535 - * we do not want to block exit_mmap by keeping mm ref
1536 - * count elevated without a good reason.
1537 - */
1538 - if (vma_is_anonymous(vma) || !(vma->vm_flags & VM_SHARED)) {
1539 - tlb_gather_mmu(&tlb, mm, vma->vm_start, vma->vm_end);
1540 - unmap_page_range(&tlb, vma, vma->vm_start, vma->vm_end,
1541 - NULL);
1542 - tlb_finish_mmu(&tlb, vma->vm_start, vma->vm_end);
1543 - }
1544 - }
1545 pr_info("oom_reaper: reaped process %d (%s), now anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB\n",
1546 task_pid_nr(tsk), tsk->comm,
1547 K(get_mm_counter(mm, MM_ANONPAGES)),
1548 @@ -573,13 +580,12 @@ static void oom_reap_task(struct task_struct *tsk)
1549 struct mm_struct *mm = tsk->signal->oom_mm;
1550
1551 /* Retry the down_read_trylock(mmap_sem) a few times */
1552 - while (attempts++ < MAX_OOM_REAP_RETRIES && !__oom_reap_task_mm(tsk, mm))
1553 + while (attempts++ < MAX_OOM_REAP_RETRIES && !oom_reap_task_mm(tsk, mm))
1554 schedule_timeout_idle(HZ/10);
1555
1556 if (attempts <= MAX_OOM_REAP_RETRIES)
1557 goto done;
1558
1559 -
1560 pr_info("oom_reaper: unable to reap pid:%d (%s)\n",
1561 task_pid_nr(tsk), tsk->comm);
1562 debug_show_all_locks();
1563 diff --git a/mm/sparse.c b/mm/sparse.c
1564 index 30e56a100ee8..76ed2f4a8a3e 100644
1565 --- a/mm/sparse.c
1566 +++ b/mm/sparse.c
1567 @@ -661,7 +661,7 @@ void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn)
1568 unsigned long pfn;
1569
1570 for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
1571 - unsigned long section_nr = pfn_to_section_nr(start_pfn);
1572 + unsigned long section_nr = pfn_to_section_nr(pfn);
1573 struct mem_section *ms;
1574
1575 /*
1576 diff --git a/mm/z3fold.c b/mm/z3fold.c
1577 index 39e19125d6a0..ddfb20cfd9af 100644
1578 --- a/mm/z3fold.c
1579 +++ b/mm/z3fold.c
1580 @@ -144,7 +144,8 @@ enum z3fold_page_flags {
1581 PAGE_HEADLESS = 0,
1582 MIDDLE_CHUNK_MAPPED,
1583 NEEDS_COMPACTING,
1584 - PAGE_STALE
1585 + PAGE_STALE,
1586 + UNDER_RECLAIM
1587 };
1588
1589 /*****************
1590 @@ -173,6 +174,7 @@ static struct z3fold_header *init_z3fold_page(struct page *page,
1591 clear_bit(MIDDLE_CHUNK_MAPPED, &page->private);
1592 clear_bit(NEEDS_COMPACTING, &page->private);
1593 clear_bit(PAGE_STALE, &page->private);
1594 + clear_bit(UNDER_RECLAIM, &page->private);
1595
1596 spin_lock_init(&zhdr->page_lock);
1597 kref_init(&zhdr->refcount);
1598 @@ -748,6 +750,10 @@ static void z3fold_free(struct z3fold_pool *pool, unsigned long handle)
1599 atomic64_dec(&pool->pages_nr);
1600 return;
1601 }
1602 + if (test_bit(UNDER_RECLAIM, &page->private)) {
1603 + z3fold_page_unlock(zhdr);
1604 + return;
1605 + }
1606 if (test_and_set_bit(NEEDS_COMPACTING, &page->private)) {
1607 z3fold_page_unlock(zhdr);
1608 return;
1609 @@ -832,6 +838,8 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries)
1610 kref_get(&zhdr->refcount);
1611 list_del_init(&zhdr->buddy);
1612 zhdr->cpu = -1;
1613 + set_bit(UNDER_RECLAIM, &page->private);
1614 + break;
1615 }
1616
1617 list_del_init(&page->lru);
1618 @@ -879,25 +887,35 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries)
1619 goto next;
1620 }
1621 next:
1622 - spin_lock(&pool->lock);
1623 if (test_bit(PAGE_HEADLESS, &page->private)) {
1624 if (ret == 0) {
1625 - spin_unlock(&pool->lock);
1626 free_z3fold_page(page);
1627 return 0;
1628 }
1629 - } else if (kref_put(&zhdr->refcount, release_z3fold_page)) {
1630 - atomic64_dec(&pool->pages_nr);
1631 + spin_lock(&pool->lock);
1632 + list_add(&page->lru, &pool->lru);
1633 + spin_unlock(&pool->lock);
1634 + } else {
1635 + z3fold_page_lock(zhdr);
1636 + clear_bit(UNDER_RECLAIM, &page->private);
1637 + if (kref_put(&zhdr->refcount,
1638 + release_z3fold_page_locked)) {
1639 + atomic64_dec(&pool->pages_nr);
1640 + return 0;
1641 + }
1642 + /*
1643 + * if we are here, the page is still not completely
1644 + * free. Take the global pool lock then to be able
1645 + * to add it back to the lru list
1646 + */
1647 + spin_lock(&pool->lock);
1648 + list_add(&page->lru, &pool->lru);
1649 spin_unlock(&pool->lock);
1650 - return 0;
1651 + z3fold_page_unlock(zhdr);
1652 }
1653
1654 - /*
1655 - * Add to the beginning of LRU.
1656 - * Pool lock has to be kept here to ensure the page has
1657 - * not already been released
1658 - */
1659 - list_add(&page->lru, &pool->lru);
1660 + /* We started off locked to we need to lock the pool back */
1661 + spin_lock(&pool->lock);
1662 }
1663 spin_unlock(&pool->lock);
1664 return -EAGAIN;
1665 diff --git a/net/atm/lec.c b/net/atm/lec.c
1666 index a3d93a1bb133..5741b6474dd9 100644
1667 --- a/net/atm/lec.c
1668 +++ b/net/atm/lec.c
1669 @@ -41,6 +41,9 @@ static unsigned char bridge_ula_lec[] = { 0x01, 0x80, 0xc2, 0x00, 0x00 };
1670 #include <linux/module.h>
1671 #include <linux/init.h>
1672
1673 +/* Hardening for Spectre-v1 */
1674 +#include <linux/nospec.h>
1675 +
1676 #include "lec.h"
1677 #include "lec_arpc.h"
1678 #include "resources.h"
1679 @@ -687,8 +690,10 @@ static int lec_vcc_attach(struct atm_vcc *vcc, void __user *arg)
1680 bytes_left = copy_from_user(&ioc_data, arg, sizeof(struct atmlec_ioc));
1681 if (bytes_left != 0)
1682 pr_info("copy from user failed for %d bytes\n", bytes_left);
1683 - if (ioc_data.dev_num < 0 || ioc_data.dev_num >= MAX_LEC_ITF ||
1684 - !dev_lec[ioc_data.dev_num])
1685 + if (ioc_data.dev_num < 0 || ioc_data.dev_num >= MAX_LEC_ITF)
1686 + return -EINVAL;
1687 + ioc_data.dev_num = array_index_nospec(ioc_data.dev_num, MAX_LEC_ITF);
1688 + if (!dev_lec[ioc_data.dev_num])
1689 return -EINVAL;
1690 vpriv = kmalloc(sizeof(struct lec_vcc_priv), GFP_KERNEL);
1691 if (!vpriv)
1692 diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
1693 index 014a73b46064..2800c4c4978c 100644
1694 --- a/net/bridge/netfilter/ebtables.c
1695 +++ b/net/bridge/netfilter/ebtables.c
1696 @@ -1819,13 +1819,14 @@ static int compat_table_info(const struct ebt_table_info *info,
1697 {
1698 unsigned int size = info->entries_size;
1699 const void *entries = info->entries;
1700 - int ret;
1701
1702 newinfo->entries_size = size;
1703 -
1704 - ret = xt_compat_init_offsets(NFPROTO_BRIDGE, info->nentries);
1705 - if (ret)
1706 - return ret;
1707 + if (info->nentries) {
1708 + int ret = xt_compat_init_offsets(NFPROTO_BRIDGE,
1709 + info->nentries);
1710 + if (ret)
1711 + return ret;
1712 + }
1713
1714 return EBT_ENTRY_ITERATE(entries, size, compat_calc_entry, info,
1715 entries, newinfo);
1716 diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
1717 index c0548d268e1a..e3e6a3e2ca22 100644
1718 --- a/net/core/dev_addr_lists.c
1719 +++ b/net/core/dev_addr_lists.c
1720 @@ -57,8 +57,8 @@ static int __hw_addr_add_ex(struct netdev_hw_addr_list *list,
1721 return -EINVAL;
1722
1723 list_for_each_entry(ha, &list->list, list) {
1724 - if (!memcmp(ha->addr, addr, addr_len) &&
1725 - ha->type == addr_type) {
1726 + if (ha->type == addr_type &&
1727 + !memcmp(ha->addr, addr, addr_len)) {
1728 if (global) {
1729 /* check if addr is already used as global */
1730 if (ha->global_use)
1731 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
1732 index 564beb7e6d1c..ef734ad1d852 100644
1733 --- a/net/core/skbuff.c
1734 +++ b/net/core/skbuff.c
1735 @@ -857,6 +857,7 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)
1736 n->hdr_len = skb->nohdr ? skb_headroom(skb) : skb->hdr_len;
1737 n->cloned = 1;
1738 n->nohdr = 0;
1739 + n->peeked = 0;
1740 n->destructor = NULL;
1741 C(tail);
1742 C(end);
1743 diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
1744 index e65fcb45c3f6..b08feb219b44 100644
1745 --- a/net/dccp/ipv4.c
1746 +++ b/net/dccp/ipv4.c
1747 @@ -614,6 +614,7 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
1748 ireq = inet_rsk(req);
1749 sk_rcv_saddr_set(req_to_sk(req), ip_hdr(skb)->daddr);
1750 sk_daddr_set(req_to_sk(req), ip_hdr(skb)->saddr);
1751 + ireq->ir_mark = inet_request_mark(sk, skb);
1752 ireq->ireq_family = AF_INET;
1753 ireq->ir_iif = sk->sk_bound_dev_if;
1754
1755 diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
1756 index 5df7857fc0f3..6344f1b18a6a 100644
1757 --- a/net/dccp/ipv6.c
1758 +++ b/net/dccp/ipv6.c
1759 @@ -351,6 +351,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
1760 ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr;
1761 ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr;
1762 ireq->ireq_family = AF_INET6;
1763 + ireq->ir_mark = inet_request_mark(sk, skb);
1764
1765 if (ipv6_opt_accepted(sk, skb, IP6CB(skb)) ||
1766 np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
1767 diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c
1768 index d451b9f19b59..2341c1401681 100644
1769 --- a/net/ipv4/inet_timewait_sock.c
1770 +++ b/net/ipv4/inet_timewait_sock.c
1771 @@ -179,6 +179,7 @@ struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk,
1772 tw->tw_dport = inet->inet_dport;
1773 tw->tw_family = sk->sk_family;
1774 tw->tw_reuse = sk->sk_reuse;
1775 + tw->tw_reuseport = sk->sk_reuseport;
1776 tw->tw_hash = sk->sk_hash;
1777 tw->tw_ipv6only = 0;
1778 tw->tw_transparent = inet->transparent;
1779 diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
1780 index b20c8ac64081..64007ce87273 100644
1781 --- a/net/ipv4/inetpeer.c
1782 +++ b/net/ipv4/inetpeer.c
1783 @@ -210,6 +210,7 @@ struct inet_peer *inet_getpeer(struct inet_peer_base *base,
1784 p = kmem_cache_alloc(peer_cachep, GFP_ATOMIC);
1785 if (p) {
1786 p->daddr = *daddr;
1787 + p->dtime = (__u32)jiffies;
1788 refcount_set(&p->refcnt, 2);
1789 atomic_set(&p->rid, 0);
1790 p->metrics[RTAX_LOCK-1] = INETPEER_METRICS_NEW;
1791 diff --git a/net/ipv4/route.c b/net/ipv4/route.c
1792 index 9ff06c5051ae..5ea559f8c456 100644
1793 --- a/net/ipv4/route.c
1794 +++ b/net/ipv4/route.c
1795 @@ -2288,13 +2288,14 @@ struct rtable *ip_route_output_key_hash(struct net *net, struct flowi4 *fl4,
1796 const struct sk_buff *skb)
1797 {
1798 __u8 tos = RT_FL_TOS(fl4);
1799 - struct fib_result res;
1800 + struct fib_result res = {
1801 + .type = RTN_UNSPEC,
1802 + .fi = NULL,
1803 + .table = NULL,
1804 + .tclassid = 0,
1805 + };
1806 struct rtable *rth;
1807
1808 - res.tclassid = 0;
1809 - res.fi = NULL;
1810 - res.table = NULL;
1811 -
1812 fl4->flowi4_iif = LOOPBACK_IFINDEX;
1813 fl4->flowi4_tos = tos & IPTOS_RT_MASK;
1814 fl4->flowi4_scope = ((tos & RTO_ONLINK) ?
1815 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
1816 index d023f879e7bb..b694fbf44a35 100644
1817 --- a/net/ipv4/tcp.c
1818 +++ b/net/ipv4/tcp.c
1819 @@ -2601,7 +2601,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
1820 case TCP_REPAIR_QUEUE:
1821 if (!tp->repair)
1822 err = -EPERM;
1823 - else if (val < TCP_QUEUES_NR)
1824 + else if ((unsigned int)val < TCP_QUEUES_NR)
1825 tp->repair_queue = val;
1826 else
1827 err = -EINVAL;
1828 diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c
1829 index 9db49805b7be..01a4ff3df60b 100644
1830 --- a/net/kcm/kcmsock.c
1831 +++ b/net/kcm/kcmsock.c
1832 @@ -1425,6 +1425,7 @@ static int kcm_attach(struct socket *sock, struct socket *csock,
1833 */
1834 if (csk->sk_user_data) {
1835 write_unlock_bh(&csk->sk_callback_lock);
1836 + strp_stop(&psock->strp);
1837 strp_done(&psock->strp);
1838 kmem_cache_free(kcm_psockp, psock);
1839 err = -EALREADY;
1840 diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
1841 index b3245f9a37d1..e8f1556fa446 100644
1842 --- a/net/netfilter/ipvs/ip_vs_ctl.c
1843 +++ b/net/netfilter/ipvs/ip_vs_ctl.c
1844 @@ -2387,11 +2387,7 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)
1845 strlcpy(cfg.mcast_ifn, dm->mcast_ifn,
1846 sizeof(cfg.mcast_ifn));
1847 cfg.syncid = dm->syncid;
1848 - rtnl_lock();
1849 - mutex_lock(&ipvs->sync_mutex);
1850 ret = start_sync_thread(ipvs, &cfg, dm->state);
1851 - mutex_unlock(&ipvs->sync_mutex);
1852 - rtnl_unlock();
1853 } else {
1854 mutex_lock(&ipvs->sync_mutex);
1855 ret = stop_sync_thread(ipvs, dm->state);
1856 @@ -3484,12 +3480,8 @@ static int ip_vs_genl_new_daemon(struct netns_ipvs *ipvs, struct nlattr **attrs)
1857 if (ipvs->mixed_address_family_dests > 0)
1858 return -EINVAL;
1859
1860 - rtnl_lock();
1861 - mutex_lock(&ipvs->sync_mutex);
1862 ret = start_sync_thread(ipvs, &c,
1863 nla_get_u32(attrs[IPVS_DAEMON_ATTR_STATE]));
1864 - mutex_unlock(&ipvs->sync_mutex);
1865 - rtnl_unlock();
1866 return ret;
1867 }
1868
1869 diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
1870 index 13f740875507..5e07f7a6794e 100644
1871 --- a/net/netfilter/ipvs/ip_vs_sync.c
1872 +++ b/net/netfilter/ipvs/ip_vs_sync.c
1873 @@ -49,6 +49,7 @@
1874 #include <linux/kthread.h>
1875 #include <linux/wait.h>
1876 #include <linux/kernel.h>
1877 +#include <linux/sched/signal.h>
1878
1879 #include <asm/unaligned.h> /* Used for ntoh_seq and hton_seq */
1880
1881 @@ -1360,15 +1361,9 @@ static void set_mcast_pmtudisc(struct sock *sk, int val)
1882 /*
1883 * Specifiy default interface for outgoing multicasts
1884 */
1885 -static int set_mcast_if(struct sock *sk, char *ifname)
1886 +static int set_mcast_if(struct sock *sk, struct net_device *dev)
1887 {
1888 - struct net_device *dev;
1889 struct inet_sock *inet = inet_sk(sk);
1890 - struct net *net = sock_net(sk);
1891 -
1892 - dev = __dev_get_by_name(net, ifname);
1893 - if (!dev)
1894 - return -ENODEV;
1895
1896 if (sk->sk_bound_dev_if && dev->ifindex != sk->sk_bound_dev_if)
1897 return -EINVAL;
1898 @@ -1396,19 +1391,14 @@ static int set_mcast_if(struct sock *sk, char *ifname)
1899 * in the in_addr structure passed in as a parameter.
1900 */
1901 static int
1902 -join_mcast_group(struct sock *sk, struct in_addr *addr, char *ifname)
1903 +join_mcast_group(struct sock *sk, struct in_addr *addr, struct net_device *dev)
1904 {
1905 - struct net *net = sock_net(sk);
1906 struct ip_mreqn mreq;
1907 - struct net_device *dev;
1908 int ret;
1909
1910 memset(&mreq, 0, sizeof(mreq));
1911 memcpy(&mreq.imr_multiaddr, addr, sizeof(struct in_addr));
1912
1913 - dev = __dev_get_by_name(net, ifname);
1914 - if (!dev)
1915 - return -ENODEV;
1916 if (sk->sk_bound_dev_if && dev->ifindex != sk->sk_bound_dev_if)
1917 return -EINVAL;
1918
1919 @@ -1423,15 +1413,10 @@ join_mcast_group(struct sock *sk, struct in_addr *addr, char *ifname)
1920
1921 #ifdef CONFIG_IP_VS_IPV6
1922 static int join_mcast_group6(struct sock *sk, struct in6_addr *addr,
1923 - char *ifname)
1924 + struct net_device *dev)
1925 {
1926 - struct net *net = sock_net(sk);
1927 - struct net_device *dev;
1928 int ret;
1929
1930 - dev = __dev_get_by_name(net, ifname);
1931 - if (!dev)
1932 - return -ENODEV;
1933 if (sk->sk_bound_dev_if && dev->ifindex != sk->sk_bound_dev_if)
1934 return -EINVAL;
1935
1936 @@ -1443,24 +1428,18 @@ static int join_mcast_group6(struct sock *sk, struct in6_addr *addr,
1937 }
1938 #endif
1939
1940 -static int bind_mcastif_addr(struct socket *sock, char *ifname)
1941 +static int bind_mcastif_addr(struct socket *sock, struct net_device *dev)
1942 {
1943 - struct net *net = sock_net(sock->sk);
1944 - struct net_device *dev;
1945 __be32 addr;
1946 struct sockaddr_in sin;
1947
1948 - dev = __dev_get_by_name(net, ifname);
1949 - if (!dev)
1950 - return -ENODEV;
1951 -
1952 addr = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
1953 if (!addr)
1954 pr_err("You probably need to specify IP address on "
1955 "multicast interface.\n");
1956
1957 IP_VS_DBG(7, "binding socket with (%s) %pI4\n",
1958 - ifname, &addr);
1959 + dev->name, &addr);
1960
1961 /* Now bind the socket with the address of multicast interface */
1962 sin.sin_family = AF_INET;
1963 @@ -1493,7 +1472,8 @@ static void get_mcast_sockaddr(union ipvs_sockaddr *sa, int *salen,
1964 /*
1965 * Set up sending multicast socket over UDP
1966 */
1967 -static struct socket *make_send_sock(struct netns_ipvs *ipvs, int id)
1968 +static int make_send_sock(struct netns_ipvs *ipvs, int id,
1969 + struct net_device *dev, struct socket **sock_ret)
1970 {
1971 /* multicast addr */
1972 union ipvs_sockaddr mcast_addr;
1973 @@ -1505,9 +1485,10 @@ static struct socket *make_send_sock(struct netns_ipvs *ipvs, int id)
1974 IPPROTO_UDP, &sock);
1975 if (result < 0) {
1976 pr_err("Error during creation of socket; terminating\n");
1977 - return ERR_PTR(result);
1978 + goto error;
1979 }
1980 - result = set_mcast_if(sock->sk, ipvs->mcfg.mcast_ifn);
1981 + *sock_ret = sock;
1982 + result = set_mcast_if(sock->sk, dev);
1983 if (result < 0) {
1984 pr_err("Error setting outbound mcast interface\n");
1985 goto error;
1986 @@ -1522,7 +1503,7 @@ static struct socket *make_send_sock(struct netns_ipvs *ipvs, int id)
1987 set_sock_size(sock->sk, 1, result);
1988
1989 if (AF_INET == ipvs->mcfg.mcast_af)
1990 - result = bind_mcastif_addr(sock, ipvs->mcfg.mcast_ifn);
1991 + result = bind_mcastif_addr(sock, dev);
1992 else
1993 result = 0;
1994 if (result < 0) {
1995 @@ -1538,19 +1519,18 @@ static struct socket *make_send_sock(struct netns_ipvs *ipvs, int id)
1996 goto error;
1997 }
1998
1999 - return sock;
2000 + return 0;
2001
2002 error:
2003 - sock_release(sock);
2004 - return ERR_PTR(result);
2005 + return result;
2006 }
2007
2008
2009 /*
2010 * Set up receiving multicast socket over UDP
2011 */
2012 -static struct socket *make_receive_sock(struct netns_ipvs *ipvs, int id,
2013 - int ifindex)
2014 +static int make_receive_sock(struct netns_ipvs *ipvs, int id,
2015 + struct net_device *dev, struct socket **sock_ret)
2016 {
2017 /* multicast addr */
2018 union ipvs_sockaddr mcast_addr;
2019 @@ -1562,8 +1542,9 @@ static struct socket *make_receive_sock(struct netns_ipvs *ipvs, int id,
2020 IPPROTO_UDP, &sock);
2021 if (result < 0) {
2022 pr_err("Error during creation of socket; terminating\n");
2023 - return ERR_PTR(result);
2024 + goto error;
2025 }
2026 + *sock_ret = sock;
2027 /* it is equivalent to the REUSEADDR option in user-space */
2028 sock->sk->sk_reuse = SK_CAN_REUSE;
2029 result = sysctl_sync_sock_size(ipvs);
2030 @@ -1571,7 +1552,7 @@ static struct socket *make_receive_sock(struct netns_ipvs *ipvs, int id,
2031 set_sock_size(sock->sk, 0, result);
2032
2033 get_mcast_sockaddr(&mcast_addr, &salen, &ipvs->bcfg, id);
2034 - sock->sk->sk_bound_dev_if = ifindex;
2035 + sock->sk->sk_bound_dev_if = dev->ifindex;
2036 result = sock->ops->bind(sock, (struct sockaddr *)&mcast_addr, salen);
2037 if (result < 0) {
2038 pr_err("Error binding to the multicast addr\n");
2039 @@ -1582,21 +1563,20 @@ static struct socket *make_receive_sock(struct netns_ipvs *ipvs, int id,
2040 #ifdef CONFIG_IP_VS_IPV6
2041 if (ipvs->bcfg.mcast_af == AF_INET6)
2042 result = join_mcast_group6(sock->sk, &mcast_addr.in6.sin6_addr,
2043 - ipvs->bcfg.mcast_ifn);
2044 + dev);
2045 else
2046 #endif
2047 result = join_mcast_group(sock->sk, &mcast_addr.in.sin_addr,
2048 - ipvs->bcfg.mcast_ifn);
2049 + dev);
2050 if (result < 0) {
2051 pr_err("Error joining to the multicast group\n");
2052 goto error;
2053 }
2054
2055 - return sock;
2056 + return 0;
2057
2058 error:
2059 - sock_release(sock);
2060 - return ERR_PTR(result);
2061 + return result;
2062 }
2063
2064
2065 @@ -1781,13 +1761,12 @@ static int sync_thread_backup(void *data)
2066 int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
2067 int state)
2068 {
2069 - struct ip_vs_sync_thread_data *tinfo;
2070 + struct ip_vs_sync_thread_data *tinfo = NULL;
2071 struct task_struct **array = NULL, *task;
2072 - struct socket *sock;
2073 struct net_device *dev;
2074 char *name;
2075 int (*threadfn)(void *data);
2076 - int id, count, hlen;
2077 + int id = 0, count, hlen;
2078 int result = -ENOMEM;
2079 u16 mtu, min_mtu;
2080
2081 @@ -1795,6 +1774,18 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
2082 IP_VS_DBG(7, "Each ip_vs_sync_conn entry needs %zd bytes\n",
2083 sizeof(struct ip_vs_sync_conn_v0));
2084
2085 + /* Do not hold one mutex and then to block on another */
2086 + for (;;) {
2087 + rtnl_lock();
2088 + if (mutex_trylock(&ipvs->sync_mutex))
2089 + break;
2090 + rtnl_unlock();
2091 + mutex_lock(&ipvs->sync_mutex);
2092 + if (rtnl_trylock())
2093 + break;
2094 + mutex_unlock(&ipvs->sync_mutex);
2095 + }
2096 +
2097 if (!ipvs->sync_state) {
2098 count = clamp(sysctl_sync_ports(ipvs), 1, IPVS_SYNC_PORTS_MAX);
2099 ipvs->threads_mask = count - 1;
2100 @@ -1813,7 +1804,8 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
2101 dev = __dev_get_by_name(ipvs->net, c->mcast_ifn);
2102 if (!dev) {
2103 pr_err("Unknown mcast interface: %s\n", c->mcast_ifn);
2104 - return -ENODEV;
2105 + result = -ENODEV;
2106 + goto out_early;
2107 }
2108 hlen = (AF_INET6 == c->mcast_af) ?
2109 sizeof(struct ipv6hdr) + sizeof(struct udphdr) :
2110 @@ -1830,26 +1822,30 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
2111 c->sync_maxlen = mtu - hlen;
2112
2113 if (state == IP_VS_STATE_MASTER) {
2114 + result = -EEXIST;
2115 if (ipvs->ms)
2116 - return -EEXIST;
2117 + goto out_early;
2118
2119 ipvs->mcfg = *c;
2120 name = "ipvs-m:%d:%d";
2121 threadfn = sync_thread_master;
2122 } else if (state == IP_VS_STATE_BACKUP) {
2123 + result = -EEXIST;
2124 if (ipvs->backup_threads)
2125 - return -EEXIST;
2126 + goto out_early;
2127
2128 ipvs->bcfg = *c;
2129 name = "ipvs-b:%d:%d";
2130 threadfn = sync_thread_backup;
2131 } else {
2132 - return -EINVAL;
2133 + result = -EINVAL;
2134 + goto out_early;
2135 }
2136
2137 if (state == IP_VS_STATE_MASTER) {
2138 struct ipvs_master_sync_state *ms;
2139
2140 + result = -ENOMEM;
2141 ipvs->ms = kcalloc(count, sizeof(ipvs->ms[0]), GFP_KERNEL);
2142 if (!ipvs->ms)
2143 goto out;
2144 @@ -1865,39 +1861,38 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
2145 } else {
2146 array = kcalloc(count, sizeof(struct task_struct *),
2147 GFP_KERNEL);
2148 + result = -ENOMEM;
2149 if (!array)
2150 goto out;
2151 }
2152
2153 - tinfo = NULL;
2154 for (id = 0; id < count; id++) {
2155 - if (state == IP_VS_STATE_MASTER)
2156 - sock = make_send_sock(ipvs, id);
2157 - else
2158 - sock = make_receive_sock(ipvs, id, dev->ifindex);
2159 - if (IS_ERR(sock)) {
2160 - result = PTR_ERR(sock);
2161 - goto outtinfo;
2162 - }
2163 + result = -ENOMEM;
2164 tinfo = kmalloc(sizeof(*tinfo), GFP_KERNEL);
2165 if (!tinfo)
2166 - goto outsocket;
2167 + goto out;
2168 tinfo->ipvs = ipvs;
2169 - tinfo->sock = sock;
2170 + tinfo->sock = NULL;
2171 if (state == IP_VS_STATE_BACKUP) {
2172 tinfo->buf = kmalloc(ipvs->bcfg.sync_maxlen,
2173 GFP_KERNEL);
2174 if (!tinfo->buf)
2175 - goto outtinfo;
2176 + goto out;
2177 } else {
2178 tinfo->buf = NULL;
2179 }
2180 tinfo->id = id;
2181 + if (state == IP_VS_STATE_MASTER)
2182 + result = make_send_sock(ipvs, id, dev, &tinfo->sock);
2183 + else
2184 + result = make_receive_sock(ipvs, id, dev, &tinfo->sock);
2185 + if (result < 0)
2186 + goto out;
2187
2188 task = kthread_run(threadfn, tinfo, name, ipvs->gen, id);
2189 if (IS_ERR(task)) {
2190 result = PTR_ERR(task);
2191 - goto outtinfo;
2192 + goto out;
2193 }
2194 tinfo = NULL;
2195 if (state == IP_VS_STATE_MASTER)
2196 @@ -1914,20 +1909,20 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
2197 ipvs->sync_state |= state;
2198 spin_unlock_bh(&ipvs->sync_buff_lock);
2199
2200 + mutex_unlock(&ipvs->sync_mutex);
2201 + rtnl_unlock();
2202 +
2203 /* increase the module use count */
2204 ip_vs_use_count_inc();
2205
2206 return 0;
2207
2208 -outsocket:
2209 - sock_release(sock);
2210 -
2211 -outtinfo:
2212 - if (tinfo) {
2213 - sock_release(tinfo->sock);
2214 - kfree(tinfo->buf);
2215 - kfree(tinfo);
2216 - }
2217 +out:
2218 + /* We do not need RTNL lock anymore, release it here so that
2219 + * sock_release below and in the kthreads can use rtnl_lock
2220 + * to leave the mcast group.
2221 + */
2222 + rtnl_unlock();
2223 count = id;
2224 while (count-- > 0) {
2225 if (state == IP_VS_STATE_MASTER)
2226 @@ -1935,13 +1930,23 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
2227 else
2228 kthread_stop(array[count]);
2229 }
2230 - kfree(array);
2231 -
2232 -out:
2233 if (!(ipvs->sync_state & IP_VS_STATE_MASTER)) {
2234 kfree(ipvs->ms);
2235 ipvs->ms = NULL;
2236 }
2237 + mutex_unlock(&ipvs->sync_mutex);
2238 + if (tinfo) {
2239 + if (tinfo->sock)
2240 + sock_release(tinfo->sock);
2241 + kfree(tinfo->buf);
2242 + kfree(tinfo);
2243 + }
2244 + kfree(array);
2245 + return result;
2246 +
2247 +out_early:
2248 + mutex_unlock(&ipvs->sync_mutex);
2249 + rtnl_unlock();
2250 return result;
2251 }
2252
2253 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
2254 index 1b86eccf94b6..b3932846f6c4 100644
2255 --- a/net/netlink/af_netlink.c
2256 +++ b/net/netlink/af_netlink.c
2257 @@ -1813,6 +1813,8 @@ static int netlink_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
2258
2259 if (msg->msg_namelen) {
2260 err = -EINVAL;
2261 + if (msg->msg_namelen < sizeof(struct sockaddr_nl))
2262 + goto out;
2263 if (addr->nl_family != AF_NETLINK)
2264 goto out;
2265 dst_portid = addr->nl_pid;
2266 diff --git a/net/rfkill/rfkill-gpio.c b/net/rfkill/rfkill-gpio.c
2267 index 41bd496531d4..00192a996be0 100644
2268 --- a/net/rfkill/rfkill-gpio.c
2269 +++ b/net/rfkill/rfkill-gpio.c
2270 @@ -137,13 +137,18 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
2271
2272 ret = rfkill_register(rfkill->rfkill_dev);
2273 if (ret < 0)
2274 - return ret;
2275 + goto err_destroy;
2276
2277 platform_set_drvdata(pdev, rfkill);
2278
2279 dev_info(&pdev->dev, "%s device registered.\n", rfkill->name);
2280
2281 return 0;
2282 +
2283 +err_destroy:
2284 + rfkill_destroy(rfkill->rfkill_dev);
2285 +
2286 + return ret;
2287 }
2288
2289 static int rfkill_gpio_remove(struct platform_device *pdev)