Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0145-5.4.46-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3526 - (hide annotations) (download)
Thu Jun 25 11:14:57 2020 UTC (3 years, 10 months ago) by niro
File size: 55939 byte(s)
-linux-5.4.46
1 niro 3526 diff --git a/Documentation/ABI/testing/sysfs-devices-system-cpu b/Documentation/ABI/testing/sysfs-devices-system-cpu
2     index fc20cde63d1e..c24afa60a30e 100644
3     --- a/Documentation/ABI/testing/sysfs-devices-system-cpu
4     +++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
5     @@ -486,6 +486,7 @@ What: /sys/devices/system/cpu/vulnerabilities
6     /sys/devices/system/cpu/vulnerabilities/spec_store_bypass
7     /sys/devices/system/cpu/vulnerabilities/l1tf
8     /sys/devices/system/cpu/vulnerabilities/mds
9     + /sys/devices/system/cpu/vulnerabilities/srbds
10     /sys/devices/system/cpu/vulnerabilities/tsx_async_abort
11     /sys/devices/system/cpu/vulnerabilities/itlb_multihit
12     Date: January 2018
13     diff --git a/Documentation/admin-guide/hw-vuln/index.rst b/Documentation/admin-guide/hw-vuln/index.rst
14     index 0795e3c2643f..ca4dbdd9016d 100644
15     --- a/Documentation/admin-guide/hw-vuln/index.rst
16     +++ b/Documentation/admin-guide/hw-vuln/index.rst
17     @@ -14,3 +14,4 @@ are configurable at compile, boot or run time.
18     mds
19     tsx_async_abort
20     multihit.rst
21     + special-register-buffer-data-sampling.rst
22     diff --git a/Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst b/Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst
23     new file mode 100644
24     index 000000000000..47b1b3afac99
25     --- /dev/null
26     +++ b/Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst
27     @@ -0,0 +1,149 @@
28     +.. SPDX-License-Identifier: GPL-2.0
29     +
30     +SRBDS - Special Register Buffer Data Sampling
31     +=============================================
32     +
33     +SRBDS is a hardware vulnerability that allows MDS :doc:`mds` techniques to
34     +infer values returned from special register accesses. Special register
35     +accesses are accesses to off core registers. According to Intel's evaluation,
36     +the special register reads that have a security expectation of privacy are
37     +RDRAND, RDSEED and SGX EGETKEY.
38     +
39     +When RDRAND, RDSEED and EGETKEY instructions are used, the data is moved
40     +to the core through the special register mechanism that is susceptible
41     +to MDS attacks.
42     +
43     +Affected processors
44     +--------------------
45     +Core models (desktop, mobile, Xeon-E3) that implement RDRAND and/or RDSEED may
46     +be affected.
47     +
48     +A processor is affected by SRBDS if its Family_Model and stepping is
49     +in the following list, with the exception of the listed processors
50     +exporting MDS_NO while Intel TSX is available yet not enabled. The
51     +latter class of processors are only affected when Intel TSX is enabled
52     +by software using TSX_CTRL_MSR otherwise they are not affected.
53     +
54     + ============= ============ ========
55     + common name Family_Model Stepping
56     + ============= ============ ========
57     + IvyBridge 06_3AH All
58     +
59     + Haswell 06_3CH All
60     + Haswell_L 06_45H All
61     + Haswell_G 06_46H All
62     +
63     + Broadwell_G 06_47H All
64     + Broadwell 06_3DH All
65     +
66     + Skylake_L 06_4EH All
67     + Skylake 06_5EH All
68     +
69     + Kabylake_L 06_8EH <= 0xC
70     + Kabylake 06_9EH <= 0xD
71     + ============= ============ ========
72     +
73     +Related CVEs
74     +------------
75     +
76     +The following CVE entry is related to this SRBDS issue:
77     +
78     + ============== ===== =====================================
79     + CVE-2020-0543 SRBDS Special Register Buffer Data Sampling
80     + ============== ===== =====================================
81     +
82     +Attack scenarios
83     +----------------
84     +An unprivileged user can extract values returned from RDRAND and RDSEED
85     +executed on another core or sibling thread using MDS techniques.
86     +
87     +
88     +Mitigation mechanism
89     +-------------------
90     +Intel will release microcode updates that modify the RDRAND, RDSEED, and
91     +EGETKEY instructions to overwrite secret special register data in the shared
92     +staging buffer before the secret data can be accessed by another logical
93     +processor.
94     +
95     +During execution of the RDRAND, RDSEED, or EGETKEY instructions, off-core
96     +accesses from other logical processors will be delayed until the special
97     +register read is complete and the secret data in the shared staging buffer is
98     +overwritten.
99     +
100     +This has three effects on performance:
101     +
102     +#. RDRAND, RDSEED, or EGETKEY instructions have higher latency.
103     +
104     +#. Executing RDRAND at the same time on multiple logical processors will be
105     + serialized, resulting in an overall reduction in the maximum RDRAND
106     + bandwidth.
107     +
108     +#. Executing RDRAND, RDSEED or EGETKEY will delay memory accesses from other
109     + logical processors that miss their core caches, with an impact similar to
110     + legacy locked cache-line-split accesses.
111     +
112     +The microcode updates provide an opt-out mechanism (RNGDS_MITG_DIS) to disable
113     +the mitigation for RDRAND and RDSEED instructions executed outside of Intel
114     +Software Guard Extensions (Intel SGX) enclaves. On logical processors that
115     +disable the mitigation using this opt-out mechanism, RDRAND and RDSEED do not
116     +take longer to execute and do not impact performance of sibling logical
117     +processors memory accesses. The opt-out mechanism does not affect Intel SGX
118     +enclaves (including execution of RDRAND or RDSEED inside an enclave, as well
119     +as EGETKEY execution).
120     +
121     +IA32_MCU_OPT_CTRL MSR Definition
122     +--------------------------------
123     +Along with the mitigation for this issue, Intel added a new thread-scope
124     +IA32_MCU_OPT_CTRL MSR, (address 0x123). The presence of this MSR and
125     +RNGDS_MITG_DIS (bit 0) is enumerated by CPUID.(EAX=07H,ECX=0).EDX[SRBDS_CTRL =
126     +9]==1. This MSR is introduced through the microcode update.
127     +
128     +Setting IA32_MCU_OPT_CTRL[0] (RNGDS_MITG_DIS) to 1 for a logical processor
129     +disables the mitigation for RDRAND and RDSEED executed outside of an Intel SGX
130     +enclave on that logical processor. Opting out of the mitigation for a
131     +particular logical processor does not affect the RDRAND and RDSEED mitigations
132     +for other logical processors.
133     +
134     +Note that inside of an Intel SGX enclave, the mitigation is applied regardless
135     +of the value of RNGDS_MITG_DS.
136     +
137     +Mitigation control on the kernel command line
138     +---------------------------------------------
139     +The kernel command line allows control over the SRBDS mitigation at boot time
140     +with the option "srbds=". The option for this is:
141     +
142     + ============= =============================================================
143     + off This option disables SRBDS mitigation for RDRAND and RDSEED on
144     + affected platforms.
145     + ============= =============================================================
146     +
147     +SRBDS System Information
148     +-----------------------
149     +The Linux kernel provides vulnerability status information through sysfs. For
150     +SRBDS this can be accessed by the following sysfs file:
151     +/sys/devices/system/cpu/vulnerabilities/srbds
152     +
153     +The possible values contained in this file are:
154     +
155     + ============================== =============================================
156     + Not affected Processor not vulnerable
157     + Vulnerable Processor vulnerable and mitigation disabled
158     + Vulnerable: No microcode Processor vulnerable and microcode is missing
159     + mitigation
160     + Mitigation: Microcode Processor is vulnerable and mitigation is in
161     + effect.
162     + Mitigation: TSX disabled Processor is only vulnerable when TSX is
163     + enabled while this system was booted with TSX
164     + disabled.
165     + Unknown: Dependent on
166     + hypervisor status Running on virtual guest processor that is
167     + affected but with no way to know if host
168     + processor is mitigated or vulnerable.
169     + ============================== =============================================
170     +
171     +SRBDS Default mitigation
172     +------------------------
173     +This new microcode serializes processor access during execution of RDRAND,
174     +RDSEED ensures that the shared buffer is overwritten before it is released for
175     +reuse. Use the "srbds=off" kernel command line to disable the mitigation for
176     +RDRAND and RDSEED.
177     diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
178     index 1f77c99e2cba..13984b6cc322 100644
179     --- a/Documentation/admin-guide/kernel-parameters.txt
180     +++ b/Documentation/admin-guide/kernel-parameters.txt
181     @@ -4579,6 +4579,26 @@
182     spia_pedr=
183     spia_peddr=
184    
185     + srbds= [X86,INTEL]
186     + Control the Special Register Buffer Data Sampling
187     + (SRBDS) mitigation.
188     +
189     + Certain CPUs are vulnerable to an MDS-like
190     + exploit which can leak bits from the random
191     + number generator.
192     +
193     + By default, this issue is mitigated by
194     + microcode. However, the microcode fix can cause
195     + the RDRAND and RDSEED instructions to become
196     + much slower. Among other effects, this will
197     + result in reduced throughput from /dev/urandom.
198     +
199     + The microcode mitigation can be disabled with
200     + the following option:
201     +
202     + off: Disable mitigation and remove
203     + performance impact to RDRAND and RDSEED
204     +
205     srcutree.counter_wrap_check [KNL]
206     Specifies how frequently to check for
207     grace-period sequence counter wrap for the
208     diff --git a/Makefile b/Makefile
209     index d57c443d9073..4835d6734c3f 100644
210     --- a/Makefile
211     +++ b/Makefile
212     @@ -1,7 +1,7 @@
213     # SPDX-License-Identifier: GPL-2.0
214     VERSION = 5
215     PATCHLEVEL = 4
216     -SUBLEVEL = 45
217     +SUBLEVEL = 46
218     EXTRAVERSION =
219     NAME = Kleptomaniac Octopus
220    
221     diff --git a/arch/x86/include/asm/cpu_device_id.h b/arch/x86/include/asm/cpu_device_id.h
222     index 31c379c1da41..0c814cd9ea42 100644
223     --- a/arch/x86/include/asm/cpu_device_id.h
224     +++ b/arch/x86/include/asm/cpu_device_id.h
225     @@ -9,6 +9,36 @@
226    
227     #include <linux/mod_devicetable.h>
228    
229     +#define X86_CENTAUR_FAM6_C7_D 0xd
230     +#define X86_CENTAUR_FAM6_NANO 0xf
231     +
232     +#define X86_STEPPINGS(mins, maxs) GENMASK(maxs, mins)
233     +
234     +/**
235     + * X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE - Base macro for CPU matching
236     + * @_vendor: The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY
237     + * The name is expanded to X86_VENDOR_@_vendor
238     + * @_family: The family number or X86_FAMILY_ANY
239     + * @_model: The model number, model constant or X86_MODEL_ANY
240     + * @_steppings: Bitmask for steppings, stepping constant or X86_STEPPING_ANY
241     + * @_feature: A X86_FEATURE bit or X86_FEATURE_ANY
242     + * @_data: Driver specific data or NULL. The internal storage
243     + * format is unsigned long. The supplied value, pointer
244     + * etc. is casted to unsigned long internally.
245     + *
246     + * Backport version to keep the SRBDS pile consistant. No shorter variants
247     + * required for this.
248     + */
249     +#define X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(_vendor, _family, _model, \
250     + _steppings, _feature, _data) { \
251     + .vendor = X86_VENDOR_##_vendor, \
252     + .family = _family, \
253     + .model = _model, \
254     + .steppings = _steppings, \
255     + .feature = _feature, \
256     + .driver_data = (unsigned long) _data \
257     +}
258     +
259     /*
260     * Match specific microcode revisions.
261     *
262     diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
263     index c4fbe379cc0b..d912457f56a7 100644
264     --- a/arch/x86/include/asm/cpufeatures.h
265     +++ b/arch/x86/include/asm/cpufeatures.h
266     @@ -357,6 +357,7 @@
267     #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2) /* AVX-512 Neural Network Instructions */
268     #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3) /* AVX-512 Multiply Accumulation Single precision */
269     #define X86_FEATURE_AVX512_VP2INTERSECT (18*32+ 8) /* AVX-512 Intersect for D/Q */
270     +#define X86_FEATURE_SRBDS_CTRL (18*32+ 9) /* "" SRBDS mitigation MSR available */
271     #define X86_FEATURE_MD_CLEAR (18*32+10) /* VERW clears CPU buffers */
272     #define X86_FEATURE_TSX_FORCE_ABORT (18*32+13) /* "" TSX_FORCE_ABORT */
273     #define X86_FEATURE_PCONFIG (18*32+18) /* Intel PCONFIG */
274     @@ -401,5 +402,6 @@
275     #define X86_BUG_SWAPGS X86_BUG(21) /* CPU is affected by speculation through SWAPGS */
276     #define X86_BUG_TAA X86_BUG(22) /* CPU is affected by TSX Async Abort(TAA) */
277     #define X86_BUG_ITLB_MULTIHIT X86_BUG(23) /* CPU may incur MCE during certain page attribute changes */
278     +#define X86_BUG_SRBDS X86_BUG(24) /* CPU may leak RNG bits if not mitigated */
279    
280     #endif /* _ASM_X86_CPUFEATURES_H */
281     diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
282     index 1682e4b5ce75..391812e0384e 100644
283     --- a/arch/x86/include/asm/msr-index.h
284     +++ b/arch/x86/include/asm/msr-index.h
285     @@ -119,6 +119,10 @@
286     #define TSX_CTRL_RTM_DISABLE BIT(0) /* Disable RTM feature */
287     #define TSX_CTRL_CPUID_CLEAR BIT(1) /* Disable TSX enumeration */
288    
289     +/* SRBDS support */
290     +#define MSR_IA32_MCU_OPT_CTRL 0x00000123
291     +#define RNGDS_MITG_DIS BIT(0)
292     +
293     #define MSR_IA32_SYSENTER_CS 0x00000174
294     #define MSR_IA32_SYSENTER_ESP 0x00000175
295     #define MSR_IA32_SYSENTER_EIP 0x00000176
296     diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
297     index 8bf64899f56a..3c3f3e02683a 100644
298     --- a/arch/x86/kernel/cpu/bugs.c
299     +++ b/arch/x86/kernel/cpu/bugs.c
300     @@ -41,6 +41,7 @@ static void __init l1tf_select_mitigation(void);
301     static void __init mds_select_mitigation(void);
302     static void __init mds_print_mitigation(void);
303     static void __init taa_select_mitigation(void);
304     +static void __init srbds_select_mitigation(void);
305    
306     /* The base value of the SPEC_CTRL MSR that always has to be preserved. */
307     u64 x86_spec_ctrl_base;
308     @@ -108,6 +109,7 @@ void __init check_bugs(void)
309     l1tf_select_mitigation();
310     mds_select_mitigation();
311     taa_select_mitigation();
312     + srbds_select_mitigation();
313    
314     /*
315     * As MDS and TAA mitigations are inter-related, print MDS
316     @@ -390,6 +392,97 @@ static int __init tsx_async_abort_parse_cmdline(char *str)
317     }
318     early_param("tsx_async_abort", tsx_async_abort_parse_cmdline);
319    
320     +#undef pr_fmt
321     +#define pr_fmt(fmt) "SRBDS: " fmt
322     +
323     +enum srbds_mitigations {
324     + SRBDS_MITIGATION_OFF,
325     + SRBDS_MITIGATION_UCODE_NEEDED,
326     + SRBDS_MITIGATION_FULL,
327     + SRBDS_MITIGATION_TSX_OFF,
328     + SRBDS_MITIGATION_HYPERVISOR,
329     +};
330     +
331     +static enum srbds_mitigations srbds_mitigation __ro_after_init = SRBDS_MITIGATION_FULL;
332     +
333     +static const char * const srbds_strings[] = {
334     + [SRBDS_MITIGATION_OFF] = "Vulnerable",
335     + [SRBDS_MITIGATION_UCODE_NEEDED] = "Vulnerable: No microcode",
336     + [SRBDS_MITIGATION_FULL] = "Mitigation: Microcode",
337     + [SRBDS_MITIGATION_TSX_OFF] = "Mitigation: TSX disabled",
338     + [SRBDS_MITIGATION_HYPERVISOR] = "Unknown: Dependent on hypervisor status",
339     +};
340     +
341     +static bool srbds_off;
342     +
343     +void update_srbds_msr(void)
344     +{
345     + u64 mcu_ctrl;
346     +
347     + if (!boot_cpu_has_bug(X86_BUG_SRBDS))
348     + return;
349     +
350     + if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
351     + return;
352     +
353     + if (srbds_mitigation == SRBDS_MITIGATION_UCODE_NEEDED)
354     + return;
355     +
356     + rdmsrl(MSR_IA32_MCU_OPT_CTRL, mcu_ctrl);
357     +
358     + switch (srbds_mitigation) {
359     + case SRBDS_MITIGATION_OFF:
360     + case SRBDS_MITIGATION_TSX_OFF:
361     + mcu_ctrl |= RNGDS_MITG_DIS;
362     + break;
363     + case SRBDS_MITIGATION_FULL:
364     + mcu_ctrl &= ~RNGDS_MITG_DIS;
365     + break;
366     + default:
367     + break;
368     + }
369     +
370     + wrmsrl(MSR_IA32_MCU_OPT_CTRL, mcu_ctrl);
371     +}
372     +
373     +static void __init srbds_select_mitigation(void)
374     +{
375     + u64 ia32_cap;
376     +
377     + if (!boot_cpu_has_bug(X86_BUG_SRBDS))
378     + return;
379     +
380     + /*
381     + * Check to see if this is one of the MDS_NO systems supporting
382     + * TSX that are only exposed to SRBDS when TSX is enabled.
383     + */
384     + ia32_cap = x86_read_arch_cap_msr();
385     + if ((ia32_cap & ARCH_CAP_MDS_NO) && !boot_cpu_has(X86_FEATURE_RTM))
386     + srbds_mitigation = SRBDS_MITIGATION_TSX_OFF;
387     + else if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
388     + srbds_mitigation = SRBDS_MITIGATION_HYPERVISOR;
389     + else if (!boot_cpu_has(X86_FEATURE_SRBDS_CTRL))
390     + srbds_mitigation = SRBDS_MITIGATION_UCODE_NEEDED;
391     + else if (cpu_mitigations_off() || srbds_off)
392     + srbds_mitigation = SRBDS_MITIGATION_OFF;
393     +
394     + update_srbds_msr();
395     + pr_info("%s\n", srbds_strings[srbds_mitigation]);
396     +}
397     +
398     +static int __init srbds_parse_cmdline(char *str)
399     +{
400     + if (!str)
401     + return -EINVAL;
402     +
403     + if (!boot_cpu_has_bug(X86_BUG_SRBDS))
404     + return 0;
405     +
406     + srbds_off = !strcmp(str, "off");
407     + return 0;
408     +}
409     +early_param("srbds", srbds_parse_cmdline);
410     +
411     #undef pr_fmt
412     #define pr_fmt(fmt) "Spectre V1 : " fmt
413    
414     @@ -1521,6 +1614,11 @@ static char *ibpb_state(void)
415     return "";
416     }
417    
418     +static ssize_t srbds_show_state(char *buf)
419     +{
420     + return sprintf(buf, "%s\n", srbds_strings[srbds_mitigation]);
421     +}
422     +
423     static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr,
424     char *buf, unsigned int bug)
425     {
426     @@ -1565,6 +1663,9 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr
427     case X86_BUG_ITLB_MULTIHIT:
428     return itlb_multihit_show_state(buf);
429    
430     + case X86_BUG_SRBDS:
431     + return srbds_show_state(buf);
432     +
433     default:
434     break;
435     }
436     @@ -1611,4 +1712,9 @@ ssize_t cpu_show_itlb_multihit(struct device *dev, struct device_attribute *attr
437     {
438     return cpu_show_common(dev, attr, buf, X86_BUG_ITLB_MULTIHIT);
439     }
440     +
441     +ssize_t cpu_show_srbds(struct device *dev, struct device_attribute *attr, char *buf)
442     +{
443     + return cpu_show_common(dev, attr, buf, X86_BUG_SRBDS);
444     +}
445     #endif
446     diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
447     index 704caec136cf..650df6d21049 100644
448     --- a/arch/x86/kernel/cpu/common.c
449     +++ b/arch/x86/kernel/cpu/common.c
450     @@ -1024,6 +1024,7 @@ static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c)
451     #define MSBDS_ONLY BIT(5)
452     #define NO_SWAPGS BIT(6)
453     #define NO_ITLB_MULTIHIT BIT(7)
454     +#define NO_SPECTRE_V2 BIT(8)
455    
456     #define VULNWL(_vendor, _family, _model, _whitelist) \
457     { X86_VENDOR_##_vendor, _family, _model, X86_FEATURE_ANY, _whitelist }
458     @@ -1085,12 +1086,37 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
459     /* FAMILY_ANY must be last, otherwise 0x0f - 0x12 matches won't work */
460     VULNWL_AMD(X86_FAMILY_ANY, NO_MELTDOWN | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT),
461     VULNWL_HYGON(X86_FAMILY_ANY, NO_MELTDOWN | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT),
462     +
463     + /* Zhaoxin Family 7 */
464     + VULNWL(CENTAUR, 7, X86_MODEL_ANY, NO_SPECTRE_V2),
465     + VULNWL(ZHAOXIN, 7, X86_MODEL_ANY, NO_SPECTRE_V2),
466     + {}
467     +};
468     +
469     +#define VULNBL_INTEL_STEPPINGS(model, steppings, issues) \
470     + X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(INTEL, 6, \
471     + INTEL_FAM6_##model, steppings, \
472     + X86_FEATURE_ANY, issues)
473     +
474     +#define SRBDS BIT(0)
475     +
476     +static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
477     + VULNBL_INTEL_STEPPINGS(IVYBRIDGE, X86_STEPPING_ANY, SRBDS),
478     + VULNBL_INTEL_STEPPINGS(HASWELL, X86_STEPPING_ANY, SRBDS),
479     + VULNBL_INTEL_STEPPINGS(HASWELL_L, X86_STEPPING_ANY, SRBDS),
480     + VULNBL_INTEL_STEPPINGS(HASWELL_G, X86_STEPPING_ANY, SRBDS),
481     + VULNBL_INTEL_STEPPINGS(BROADWELL_G, X86_STEPPING_ANY, SRBDS),
482     + VULNBL_INTEL_STEPPINGS(BROADWELL, X86_STEPPING_ANY, SRBDS),
483     + VULNBL_INTEL_STEPPINGS(SKYLAKE_L, X86_STEPPING_ANY, SRBDS),
484     + VULNBL_INTEL_STEPPINGS(SKYLAKE, X86_STEPPING_ANY, SRBDS),
485     + VULNBL_INTEL_STEPPINGS(KABYLAKE_L, X86_STEPPINGS(0x0, 0xC), SRBDS),
486     + VULNBL_INTEL_STEPPINGS(KABYLAKE, X86_STEPPINGS(0x0, 0xD), SRBDS),
487     {}
488     };
489    
490     -static bool __init cpu_matches(unsigned long which)
491     +static bool __init cpu_matches(const struct x86_cpu_id *table, unsigned long which)
492     {
493     - const struct x86_cpu_id *m = x86_match_cpu(cpu_vuln_whitelist);
494     + const struct x86_cpu_id *m = x86_match_cpu(table);
495    
496     return m && !!(m->driver_data & which);
497     }
498     @@ -1110,29 +1136,34 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
499     u64 ia32_cap = x86_read_arch_cap_msr();
500    
501     /* Set ITLB_MULTIHIT bug if cpu is not in the whitelist and not mitigated */
502     - if (!cpu_matches(NO_ITLB_MULTIHIT) && !(ia32_cap & ARCH_CAP_PSCHANGE_MC_NO))
503     + if (!cpu_matches(cpu_vuln_whitelist, NO_ITLB_MULTIHIT) &&
504     + !(ia32_cap & ARCH_CAP_PSCHANGE_MC_NO))
505     setup_force_cpu_bug(X86_BUG_ITLB_MULTIHIT);
506    
507     - if (cpu_matches(NO_SPECULATION))
508     + if (cpu_matches(cpu_vuln_whitelist, NO_SPECULATION))
509     return;
510    
511     setup_force_cpu_bug(X86_BUG_SPECTRE_V1);
512     - setup_force_cpu_bug(X86_BUG_SPECTRE_V2);
513    
514     - if (!cpu_matches(NO_SSB) && !(ia32_cap & ARCH_CAP_SSB_NO) &&
515     + if (!cpu_matches(cpu_vuln_whitelist, NO_SPECTRE_V2))
516     + setup_force_cpu_bug(X86_BUG_SPECTRE_V2);
517     +
518     + if (!cpu_matches(cpu_vuln_whitelist, NO_SSB) &&
519     + !(ia32_cap & ARCH_CAP_SSB_NO) &&
520     !cpu_has(c, X86_FEATURE_AMD_SSB_NO))
521     setup_force_cpu_bug(X86_BUG_SPEC_STORE_BYPASS);
522    
523     if (ia32_cap & ARCH_CAP_IBRS_ALL)
524     setup_force_cpu_cap(X86_FEATURE_IBRS_ENHANCED);
525    
526     - if (!cpu_matches(NO_MDS) && !(ia32_cap & ARCH_CAP_MDS_NO)) {
527     + if (!cpu_matches(cpu_vuln_whitelist, NO_MDS) &&
528     + !(ia32_cap & ARCH_CAP_MDS_NO)) {
529     setup_force_cpu_bug(X86_BUG_MDS);
530     - if (cpu_matches(MSBDS_ONLY))
531     + if (cpu_matches(cpu_vuln_whitelist, MSBDS_ONLY))
532     setup_force_cpu_bug(X86_BUG_MSBDS_ONLY);
533     }
534    
535     - if (!cpu_matches(NO_SWAPGS))
536     + if (!cpu_matches(cpu_vuln_whitelist, NO_SWAPGS))
537     setup_force_cpu_bug(X86_BUG_SWAPGS);
538    
539     /*
540     @@ -1150,7 +1181,16 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
541     (ia32_cap & ARCH_CAP_TSX_CTRL_MSR)))
542     setup_force_cpu_bug(X86_BUG_TAA);
543    
544     - if (cpu_matches(NO_MELTDOWN))
545     + /*
546     + * SRBDS affects CPUs which support RDRAND or RDSEED and are listed
547     + * in the vulnerability blacklist.
548     + */
549     + if ((cpu_has(c, X86_FEATURE_RDRAND) ||
550     + cpu_has(c, X86_FEATURE_RDSEED)) &&
551     + cpu_matches(cpu_vuln_blacklist, SRBDS))
552     + setup_force_cpu_bug(X86_BUG_SRBDS);
553     +
554     + if (cpu_matches(cpu_vuln_whitelist, NO_MELTDOWN))
555     return;
556    
557     /* Rogue Data Cache Load? No! */
558     @@ -1159,7 +1199,7 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
559    
560     setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN);
561    
562     - if (cpu_matches(NO_L1TF))
563     + if (cpu_matches(cpu_vuln_whitelist, NO_L1TF))
564     return;
565    
566     setup_force_cpu_bug(X86_BUG_L1TF);
567     @@ -1597,6 +1637,7 @@ void identify_secondary_cpu(struct cpuinfo_x86 *c)
568     mtrr_ap_init();
569     validate_apic_and_package_id(c);
570     x86_spec_ctrl_setup_ap();
571     + update_srbds_msr();
572     }
573    
574     static __init int setup_noclflush(char *arg)
575     diff --git a/arch/x86/kernel/cpu/cpu.h b/arch/x86/kernel/cpu/cpu.h
576     index 38ab6e115eac..9d033693519a 100644
577     --- a/arch/x86/kernel/cpu/cpu.h
578     +++ b/arch/x86/kernel/cpu/cpu.h
579     @@ -77,6 +77,7 @@ extern void detect_ht(struct cpuinfo_x86 *c);
580     unsigned int aperfmperf_get_khz(int cpu);
581    
582     extern void x86_spec_ctrl_setup_ap(void);
583     +extern void update_srbds_msr(void);
584    
585     extern u64 x86_read_arch_cap_msr(void);
586    
587     diff --git a/arch/x86/kernel/cpu/match.c b/arch/x86/kernel/cpu/match.c
588     index 6dd78d8235e4..2f163e6646b6 100644
589     --- a/arch/x86/kernel/cpu/match.c
590     +++ b/arch/x86/kernel/cpu/match.c
591     @@ -34,13 +34,18 @@ const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match)
592     const struct x86_cpu_id *m;
593     struct cpuinfo_x86 *c = &boot_cpu_data;
594    
595     - for (m = match; m->vendor | m->family | m->model | m->feature; m++) {
596     + for (m = match;
597     + m->vendor | m->family | m->model | m->steppings | m->feature;
598     + m++) {
599     if (m->vendor != X86_VENDOR_ANY && c->x86_vendor != m->vendor)
600     continue;
601     if (m->family != X86_FAMILY_ANY && c->x86 != m->family)
602     continue;
603     if (m->model != X86_MODEL_ANY && c->x86_model != m->model)
604     continue;
605     + if (m->steppings != X86_STEPPING_ANY &&
606     + !(BIT(c->x86_stepping) & m->steppings))
607     + continue;
608     if (m->feature != X86_FEATURE_ANY && !cpu_has(c, m->feature))
609     continue;
610     return m;
611     diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
612     index 6265871a4af2..f00da44ae6fe 100644
613     --- a/drivers/base/cpu.c
614     +++ b/drivers/base/cpu.c
615     @@ -567,6 +567,12 @@ ssize_t __weak cpu_show_itlb_multihit(struct device *dev,
616     return sprintf(buf, "Not affected\n");
617     }
618    
619     +ssize_t __weak cpu_show_srbds(struct device *dev,
620     + struct device_attribute *attr, char *buf)
621     +{
622     + return sprintf(buf, "Not affected\n");
623     +}
624     +
625     static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL);
626     static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL);
627     static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL);
628     @@ -575,6 +581,7 @@ static DEVICE_ATTR(l1tf, 0444, cpu_show_l1tf, NULL);
629     static DEVICE_ATTR(mds, 0444, cpu_show_mds, NULL);
630     static DEVICE_ATTR(tsx_async_abort, 0444, cpu_show_tsx_async_abort, NULL);
631     static DEVICE_ATTR(itlb_multihit, 0444, cpu_show_itlb_multihit, NULL);
632     +static DEVICE_ATTR(srbds, 0444, cpu_show_srbds, NULL);
633    
634     static struct attribute *cpu_root_vulnerabilities_attrs[] = {
635     &dev_attr_meltdown.attr,
636     @@ -585,6 +592,7 @@ static struct attribute *cpu_root_vulnerabilities_attrs[] = {
637     &dev_attr_mds.attr,
638     &dev_attr_tsx_async_abort.attr,
639     &dev_attr_itlb_multihit.attr,
640     + &dev_attr_srbds.attr,
641     NULL
642     };
643    
644     diff --git a/drivers/iio/adc/stm32-adc-core.c b/drivers/iio/adc/stm32-adc-core.c
645     index 93a096a91f8c..74f3a2be17a6 100644
646     --- a/drivers/iio/adc/stm32-adc-core.c
647     +++ b/drivers/iio/adc/stm32-adc-core.c
648     @@ -65,12 +65,14 @@ struct stm32_adc_priv;
649     * @clk_sel: clock selection routine
650     * @max_clk_rate_hz: maximum analog clock rate (Hz, from datasheet)
651     * @has_syscfg: SYSCFG capability flags
652     + * @num_irqs: number of interrupt lines
653     */
654     struct stm32_adc_priv_cfg {
655     const struct stm32_adc_common_regs *regs;
656     int (*clk_sel)(struct platform_device *, struct stm32_adc_priv *);
657     u32 max_clk_rate_hz;
658     unsigned int has_syscfg;
659     + unsigned int num_irqs;
660     };
661    
662     /**
663     @@ -372,21 +374,15 @@ static int stm32_adc_irq_probe(struct platform_device *pdev,
664     struct device_node *np = pdev->dev.of_node;
665     unsigned int i;
666    
667     - for (i = 0; i < STM32_ADC_MAX_ADCS; i++) {
668     + /*
669     + * Interrupt(s) must be provided, depending on the compatible:
670     + * - stm32f4/h7 shares a common interrupt line.
671     + * - stm32mp1, has one line per ADC
672     + */
673     + for (i = 0; i < priv->cfg->num_irqs; i++) {
674     priv->irq[i] = platform_get_irq(pdev, i);
675     - if (priv->irq[i] < 0) {
676     - /*
677     - * At least one interrupt must be provided, make others
678     - * optional:
679     - * - stm32f4/h7 shares a common interrupt.
680     - * - stm32mp1, has one line per ADC (either for ADC1,
681     - * ADC2 or both).
682     - */
683     - if (i && priv->irq[i] == -ENXIO)
684     - continue;
685     -
686     + if (priv->irq[i] < 0)
687     return priv->irq[i];
688     - }
689     }
690    
691     priv->domain = irq_domain_add_simple(np, STM32_ADC_MAX_ADCS, 0,
692     @@ -397,9 +393,7 @@ static int stm32_adc_irq_probe(struct platform_device *pdev,
693     return -ENOMEM;
694     }
695    
696     - for (i = 0; i < STM32_ADC_MAX_ADCS; i++) {
697     - if (priv->irq[i] < 0)
698     - continue;
699     + for (i = 0; i < priv->cfg->num_irqs; i++) {
700     irq_set_chained_handler(priv->irq[i], stm32_adc_irq_handler);
701     irq_set_handler_data(priv->irq[i], priv);
702     }
703     @@ -417,11 +411,8 @@ static void stm32_adc_irq_remove(struct platform_device *pdev,
704     irq_dispose_mapping(irq_find_mapping(priv->domain, hwirq));
705     irq_domain_remove(priv->domain);
706    
707     - for (i = 0; i < STM32_ADC_MAX_ADCS; i++) {
708     - if (priv->irq[i] < 0)
709     - continue;
710     + for (i = 0; i < priv->cfg->num_irqs; i++)
711     irq_set_chained_handler(priv->irq[i], NULL);
712     - }
713     }
714    
715     static int stm32_adc_core_switches_supply_en(struct stm32_adc_priv *priv,
716     @@ -803,6 +794,7 @@ static const struct stm32_adc_priv_cfg stm32f4_adc_priv_cfg = {
717     .regs = &stm32f4_adc_common_regs,
718     .clk_sel = stm32f4_adc_clk_sel,
719     .max_clk_rate_hz = 36000000,
720     + .num_irqs = 1,
721     };
722    
723     static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = {
724     @@ -810,6 +802,7 @@ static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = {
725     .clk_sel = stm32h7_adc_clk_sel,
726     .max_clk_rate_hz = 36000000,
727     .has_syscfg = HAS_VBOOSTER,
728     + .num_irqs = 1,
729     };
730    
731     static const struct stm32_adc_priv_cfg stm32mp1_adc_priv_cfg = {
732     @@ -817,6 +810,7 @@ static const struct stm32_adc_priv_cfg stm32mp1_adc_priv_cfg = {
733     .clk_sel = stm32h7_adc_clk_sel,
734     .max_clk_rate_hz = 40000000,
735     .has_syscfg = HAS_VBOOSTER | HAS_ANASWVDD,
736     + .num_irqs = 2,
737     };
738    
739     static const struct of_device_id stm32_adc_of_match[] = {
740     diff --git a/drivers/iio/chemical/pms7003.c b/drivers/iio/chemical/pms7003.c
741     index 23c9ab252470..07bb90d72434 100644
742     --- a/drivers/iio/chemical/pms7003.c
743     +++ b/drivers/iio/chemical/pms7003.c
744     @@ -73,6 +73,11 @@ struct pms7003_state {
745     struct pms7003_frame frame;
746     struct completion frame_ready;
747     struct mutex lock; /* must be held whenever state gets touched */
748     + /* Used to construct scan to push to the IIO buffer */
749     + struct {
750     + u16 data[3]; /* PM1, PM2P5, PM10 */
751     + s64 ts;
752     + } scan;
753     };
754    
755     static int pms7003_do_cmd(struct pms7003_state *state, enum pms7003_cmd cmd)
756     @@ -104,7 +109,6 @@ static irqreturn_t pms7003_trigger_handler(int irq, void *p)
757     struct iio_dev *indio_dev = pf->indio_dev;
758     struct pms7003_state *state = iio_priv(indio_dev);
759     struct pms7003_frame *frame = &state->frame;
760     - u16 data[3 + 1 + 4]; /* PM1, PM2P5, PM10, padding, timestamp */
761     int ret;
762    
763     mutex_lock(&state->lock);
764     @@ -114,12 +118,15 @@ static irqreturn_t pms7003_trigger_handler(int irq, void *p)
765     goto err;
766     }
767    
768     - data[PM1] = pms7003_get_pm(frame->data + PMS7003_PM1_OFFSET);
769     - data[PM2P5] = pms7003_get_pm(frame->data + PMS7003_PM2P5_OFFSET);
770     - data[PM10] = pms7003_get_pm(frame->data + PMS7003_PM10_OFFSET);
771     + state->scan.data[PM1] =
772     + pms7003_get_pm(frame->data + PMS7003_PM1_OFFSET);
773     + state->scan.data[PM2P5] =
774     + pms7003_get_pm(frame->data + PMS7003_PM2P5_OFFSET);
775     + state->scan.data[PM10] =
776     + pms7003_get_pm(frame->data + PMS7003_PM10_OFFSET);
777     mutex_unlock(&state->lock);
778    
779     - iio_push_to_buffers_with_timestamp(indio_dev, data,
780     + iio_push_to_buffers_with_timestamp(indio_dev, &state->scan,
781     iio_get_time_ns(indio_dev));
782     err:
783     iio_trigger_notify_done(indio_dev->trig);
784     diff --git a/drivers/iio/chemical/sps30.c b/drivers/iio/chemical/sps30.c
785     index edbb956e81e8..c0845d892faa 100644
786     --- a/drivers/iio/chemical/sps30.c
787     +++ b/drivers/iio/chemical/sps30.c
788     @@ -230,15 +230,18 @@ static irqreturn_t sps30_trigger_handler(int irq, void *p)
789     struct iio_dev *indio_dev = pf->indio_dev;
790     struct sps30_state *state = iio_priv(indio_dev);
791     int ret;
792     - s32 data[4 + 2]; /* PM1, PM2P5, PM4, PM10, timestamp */
793     + struct {
794     + s32 data[4]; /* PM1, PM2P5, PM4, PM10 */
795     + s64 ts;
796     + } scan;
797    
798     mutex_lock(&state->lock);
799     - ret = sps30_do_meas(state, data, 4);
800     + ret = sps30_do_meas(state, scan.data, ARRAY_SIZE(scan.data));
801     mutex_unlock(&state->lock);
802     if (ret)
803     goto err;
804    
805     - iio_push_to_buffers_with_timestamp(indio_dev, data,
806     + iio_push_to_buffers_with_timestamp(indio_dev, &scan,
807     iio_get_time_ns(indio_dev));
808     err:
809     iio_trigger_notify_done(indio_dev->trig);
810     diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c
811     index e5b00a6611ac..7384a3ffcac4 100644
812     --- a/drivers/iio/light/vcnl4000.c
813     +++ b/drivers/iio/light/vcnl4000.c
814     @@ -193,7 +193,6 @@ static int vcnl4000_measure(struct vcnl4000_data *data, u8 req_mask,
815     u8 rdy_mask, u8 data_reg, int *val)
816     {
817     int tries = 20;
818     - __be16 buf;
819     int ret;
820    
821     mutex_lock(&data->vcnl4000_lock);
822     @@ -220,13 +219,12 @@ static int vcnl4000_measure(struct vcnl4000_data *data, u8 req_mask,
823     goto fail;
824     }
825    
826     - ret = i2c_smbus_read_i2c_block_data(data->client,
827     - data_reg, sizeof(buf), (u8 *) &buf);
828     + ret = i2c_smbus_read_word_swapped(data->client, data_reg);
829     if (ret < 0)
830     goto fail;
831    
832     mutex_unlock(&data->vcnl4000_lock);
833     - *val = be16_to_cpu(buf);
834     + *val = ret;
835    
836     return 0;
837    
838     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
839     index 8d9aab45fd8e..86e6bbb57482 100644
840     --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
841     +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
842     @@ -417,12 +417,6 @@ static void del_sw_ns(struct fs_node *node)
843    
844     static void del_sw_prio(struct fs_node *node)
845     {
846     - struct mlx5_flow_root_namespace *root_ns;
847     - struct mlx5_flow_namespace *ns;
848     -
849     - fs_get_obj(ns, node);
850     - root_ns = container_of(ns, struct mlx5_flow_root_namespace, ns);
851     - mutex_destroy(&root_ns->chain_lock);
852     kfree(node);
853     }
854    
855     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
856     index 7dcdda9ca351..e4a690128b3a 100644
857     --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
858     +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
859     @@ -1554,6 +1554,22 @@ static void shutdown(struct pci_dev *pdev)
860     mlx5_pci_disable_device(dev);
861     }
862    
863     +static int mlx5_suspend(struct pci_dev *pdev, pm_message_t state)
864     +{
865     + struct mlx5_core_dev *dev = pci_get_drvdata(pdev);
866     +
867     + mlx5_unload_one(dev, false);
868     +
869     + return 0;
870     +}
871     +
872     +static int mlx5_resume(struct pci_dev *pdev)
873     +{
874     + struct mlx5_core_dev *dev = pci_get_drvdata(pdev);
875     +
876     + return mlx5_load_one(dev, false);
877     +}
878     +
879     static const struct pci_device_id mlx5_core_pci_table[] = {
880     { PCI_VDEVICE(MELLANOX, PCI_DEVICE_ID_MELLANOX_CONNECTIB) },
881     { PCI_VDEVICE(MELLANOX, 0x1012), MLX5_PCI_DEV_IS_VF}, /* Connect-IB VF */
882     @@ -1597,6 +1613,8 @@ static struct pci_driver mlx5_core_driver = {
883     .id_table = mlx5_core_pci_table,
884     .probe = init_one,
885     .remove = remove_one,
886     + .suspend = mlx5_suspend,
887     + .resume = mlx5_resume,
888     .shutdown = shutdown,
889     .err_handler = &mlx5_err_handler,
890     .sriov_configure = mlx5_core_sriov_configure,
891     diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c
892     index 987ae221f6be..4dd3f8a5a9b8 100644
893     --- a/drivers/net/ethernet/netronome/nfp/flower/offload.c
894     +++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c
895     @@ -1368,7 +1368,8 @@ __nfp_flower_update_merge_stats(struct nfp_app *app,
896     ctx_id = be32_to_cpu(sub_flow->meta.host_ctx_id);
897     priv->stats[ctx_id].pkts += pkts;
898     priv->stats[ctx_id].bytes += bytes;
899     - max_t(u64, priv->stats[ctx_id].used, used);
900     + priv->stats[ctx_id].used = max_t(u64, used,
901     + priv->stats[ctx_id].used);
902     }
903     }
904    
905     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
906     index 1623516efb17..982be75fde83 100644
907     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
908     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
909     @@ -630,7 +630,8 @@ static int stmmac_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
910     config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
911     ptp_v2 = PTP_TCR_TSVER2ENA;
912     snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
913     - ts_event_en = PTP_TCR_TSEVNTENA;
914     + if (priv->synopsys_id != DWMAC_CORE_5_10)
915     + ts_event_en = PTP_TCR_TSEVNTENA;
916     ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
917     ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
918     ptp_over_ethernet = PTP_TCR_TSIPENA;
919     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
920     index 4bb8552a00d3..4a2c7355be63 100644
921     --- a/drivers/net/usb/qmi_wwan.c
922     +++ b/drivers/net/usb/qmi_wwan.c
923     @@ -1324,6 +1324,7 @@ static const struct usb_device_id products[] = {
924     {QMI_FIXED_INTF(0x1bbb, 0x0203, 2)}, /* Alcatel L800MA */
925     {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */
926     {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */
927     + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */
928     {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */
929     {QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)}, /* Telit FN980 */
930     {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */
931     diff --git a/drivers/nfc/st21nfca/dep.c b/drivers/nfc/st21nfca/dep.c
932     index 60acdfd1cb8c..856a10c293f8 100644
933     --- a/drivers/nfc/st21nfca/dep.c
934     +++ b/drivers/nfc/st21nfca/dep.c
935     @@ -173,8 +173,10 @@ static int st21nfca_tm_send_atr_res(struct nfc_hci_dev *hdev,
936     memcpy(atr_res->gbi, atr_req->gbi, gb_len);
937     r = nfc_set_remote_general_bytes(hdev->ndev, atr_res->gbi,
938     gb_len);
939     - if (r < 0)
940     + if (r < 0) {
941     + kfree_skb(skb);
942     return r;
943     + }
944     }
945    
946     info->dep_info.curr_nfc_dep_pni = 0;
947     diff --git a/drivers/nvmem/qfprom.c b/drivers/nvmem/qfprom.c
948     index d057f1bfb2e9..8a91717600be 100644
949     --- a/drivers/nvmem/qfprom.c
950     +++ b/drivers/nvmem/qfprom.c
951     @@ -27,25 +27,11 @@ static int qfprom_reg_read(void *context,
952     return 0;
953     }
954    
955     -static int qfprom_reg_write(void *context,
956     - unsigned int reg, void *_val, size_t bytes)
957     -{
958     - struct qfprom_priv *priv = context;
959     - u8 *val = _val;
960     - int i = 0, words = bytes;
961     -
962     - while (words--)
963     - writeb(*val++, priv->base + reg + i++);
964     -
965     - return 0;
966     -}
967     -
968     static struct nvmem_config econfig = {
969     .name = "qfprom",
970     .stride = 1,
971     .word_size = 1,
972     .reg_read = qfprom_reg_read,
973     - .reg_write = qfprom_reg_write,
974     };
975    
976     static int qfprom_probe(struct platform_device *pdev)
977     diff --git a/drivers/staging/rtl8712/wifi.h b/drivers/staging/rtl8712/wifi.h
978     index be731f1a2209..91b65731fcaa 100644
979     --- a/drivers/staging/rtl8712/wifi.h
980     +++ b/drivers/staging/rtl8712/wifi.h
981     @@ -440,7 +440,7 @@ static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
982     /* block-ack parameters */
983     #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002
984     #define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C
985     -#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0
986     +#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0
987     #define IEEE80211_DELBA_PARAM_TID_MASK 0xF000
988     #define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
989    
990     @@ -532,13 +532,6 @@ struct ieee80211_ht_addt_info {
991     #define IEEE80211_HT_IE_NON_GF_STA_PRSNT 0x0004
992     #define IEEE80211_HT_IE_NON_HT_STA_PRSNT 0x0010
993    
994     -/* block-ack parameters */
995     -#define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002
996     -#define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C
997     -#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0
998     -#define IEEE80211_DELBA_PARAM_TID_MASK 0xF000
999     -#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
1000     -
1001     /*
1002     * A-PMDU buffer sizes
1003     * According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2)
1004     diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
1005     index 436cc51c92c3..cdcc64ea2554 100644
1006     --- a/drivers/tty/hvc/hvc_console.c
1007     +++ b/drivers/tty/hvc/hvc_console.c
1008     @@ -371,15 +371,14 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
1009     * tty fields and return the kref reference.
1010     */
1011     if (rc) {
1012     - tty_port_tty_set(&hp->port, NULL);
1013     - tty->driver_data = NULL;
1014     - tty_port_put(&hp->port);
1015     printk(KERN_ERR "hvc_open: request_irq failed with rc %d.\n", rc);
1016     - } else
1017     + } else {
1018     /* We are ready... raise DTR/RTS */
1019     if (C_BAUD(tty))
1020     if (hp->ops->dtr_rts)
1021     hp->ops->dtr_rts(hp, 1);
1022     + tty_port_set_initialized(&hp->port, true);
1023     + }
1024    
1025     /* Force wakeup of the polling thread */
1026     hvc_kick();
1027     @@ -389,22 +388,12 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
1028    
1029     static void hvc_close(struct tty_struct *tty, struct file * filp)
1030     {
1031     - struct hvc_struct *hp;
1032     + struct hvc_struct *hp = tty->driver_data;
1033     unsigned long flags;
1034    
1035     if (tty_hung_up_p(filp))
1036     return;
1037    
1038     - /*
1039     - * No driver_data means that this close was issued after a failed
1040     - * hvc_open by the tty layer's release_dev() function and we can just
1041     - * exit cleanly because the kref reference wasn't made.
1042     - */
1043     - if (!tty->driver_data)
1044     - return;
1045     -
1046     - hp = tty->driver_data;
1047     -
1048     spin_lock_irqsave(&hp->port.lock, flags);
1049    
1050     if (--hp->port.count == 0) {
1051     @@ -412,6 +401,9 @@ static void hvc_close(struct tty_struct *tty, struct file * filp)
1052     /* We are done with the tty pointer now. */
1053     tty_port_tty_set(&hp->port, NULL);
1054    
1055     + if (!tty_port_initialized(&hp->port))
1056     + return;
1057     +
1058     if (C_HUPCL(tty))
1059     if (hp->ops->dtr_rts)
1060     hp->ops->dtr_rts(hp, 0);
1061     @@ -428,6 +420,7 @@ static void hvc_close(struct tty_struct *tty, struct file * filp)
1062     * waking periodically to check chars_in_buffer().
1063     */
1064     tty_wait_until_sent(tty, HVC_CLOSE_WAIT);
1065     + tty_port_set_initialized(&hp->port, false);
1066     } else {
1067     if (hp->port.count < 0)
1068     printk(KERN_ERR "hvc_close %X: oops, count is %d\n",
1069     diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
1070     index 15d33fa0c925..568b2171f335 100644
1071     --- a/drivers/tty/vt/keyboard.c
1072     +++ b/drivers/tty/vt/keyboard.c
1073     @@ -127,7 +127,11 @@ static DEFINE_SPINLOCK(func_buf_lock); /* guard 'func_buf' and friends */
1074     static unsigned long key_down[BITS_TO_LONGS(KEY_CNT)]; /* keyboard key bitmap */
1075     static unsigned char shift_down[NR_SHIFT]; /* shift state counters.. */
1076     static bool dead_key_next;
1077     -static int npadch = -1; /* -1 or number assembled on pad */
1078     +
1079     +/* Handles a number being assembled on the number pad */
1080     +static bool npadch_active;
1081     +static unsigned int npadch_value;
1082     +
1083     static unsigned int diacr;
1084     static char rep; /* flag telling character repeat */
1085    
1086     @@ -845,12 +849,12 @@ static void k_shift(struct vc_data *vc, unsigned char value, char up_flag)
1087     shift_state &= ~(1 << value);
1088    
1089     /* kludge */
1090     - if (up_flag && shift_state != old_state && npadch != -1) {
1091     + if (up_flag && shift_state != old_state && npadch_active) {
1092     if (kbd->kbdmode == VC_UNICODE)
1093     - to_utf8(vc, npadch);
1094     + to_utf8(vc, npadch_value);
1095     else
1096     - put_queue(vc, npadch & 0xff);
1097     - npadch = -1;
1098     + put_queue(vc, npadch_value & 0xff);
1099     + npadch_active = false;
1100     }
1101     }
1102    
1103     @@ -868,7 +872,7 @@ static void k_meta(struct vc_data *vc, unsigned char value, char up_flag)
1104    
1105     static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag)
1106     {
1107     - int base;
1108     + unsigned int base;
1109    
1110     if (up_flag)
1111     return;
1112     @@ -882,10 +886,12 @@ static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag)
1113     base = 16;
1114     }
1115    
1116     - if (npadch == -1)
1117     - npadch = value;
1118     - else
1119     - npadch = npadch * base + value;
1120     + if (!npadch_active) {
1121     + npadch_value = 0;
1122     + npadch_active = true;
1123     + }
1124     +
1125     + npadch_value = npadch_value * base + value;
1126     }
1127    
1128     static void k_lock(struct vc_data *vc, unsigned char value, char up_flag)
1129     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1130     index 8ca72d80501d..f67088bb8218 100644
1131     --- a/drivers/usb/class/cdc-acm.c
1132     +++ b/drivers/usb/class/cdc-acm.c
1133     @@ -584,7 +584,7 @@ static void acm_softint(struct work_struct *work)
1134     }
1135    
1136     if (test_and_clear_bit(ACM_ERROR_DELAY, &acm->flags)) {
1137     - for (i = 0; i < ACM_NR; i++)
1138     + for (i = 0; i < acm->rx_buflimit; i++)
1139     if (test_and_clear_bit(i, &acm->urbs_in_error_delay))
1140     acm_submit_read_urb(acm, i, GFP_NOIO);
1141     }
1142     diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
1143     index bf083c1f997f..0fbf9adef34b 100644
1144     --- a/drivers/usb/musb/musb_core.c
1145     +++ b/drivers/usb/musb/musb_core.c
1146     @@ -2721,6 +2721,13 @@ static int musb_resume(struct device *dev)
1147     musb_enable_interrupts(musb);
1148     musb_platform_enable(musb);
1149    
1150     + /* session might be disabled in suspend */
1151     + if (musb->port_mode == MUSB_HOST &&
1152     + !(musb->ops->quirks & MUSB_PRESERVE_SESSION)) {
1153     + devctl |= MUSB_DEVCTL_SESSION;
1154     + musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
1155     + }
1156     +
1157     spin_lock_irqsave(&musb->lock, flags);
1158     error = musb_run_resume_work(musb);
1159     if (error)
1160     diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c
1161     index f42858e2b54c..0c6204add616 100644
1162     --- a/drivers/usb/musb/musb_debugfs.c
1163     +++ b/drivers/usb/musb/musb_debugfs.c
1164     @@ -168,6 +168,11 @@ static ssize_t musb_test_mode_write(struct file *file,
1165     u8 test;
1166     char buf[24];
1167    
1168     + memset(buf, 0x00, sizeof(buf));
1169     +
1170     + if (copy_from_user(buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
1171     + return -EFAULT;
1172     +
1173     pm_runtime_get_sync(musb->controller);
1174     test = musb_readb(musb->mregs, MUSB_TESTMODE);
1175     if (test) {
1176     @@ -176,11 +181,6 @@ static ssize_t musb_test_mode_write(struct file *file,
1177     goto ret;
1178     }
1179    
1180     - memset(buf, 0x00, sizeof(buf));
1181     -
1182     - if (copy_from_user(buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
1183     - return -EFAULT;
1184     -
1185     if (strstarts(buf, "force host full-speed"))
1186     test = MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_FS;
1187    
1188     diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
1189     index 955ab97b9b22..dcdd541b3291 100644
1190     --- a/drivers/usb/serial/ch341.c
1191     +++ b/drivers/usb/serial/ch341.c
1192     @@ -93,6 +93,7 @@ struct ch341_private {
1193     u8 mcr;
1194     u8 msr;
1195     u8 lcr;
1196     + unsigned long quirks;
1197     };
1198    
1199     static void ch341_set_termios(struct tty_struct *tty,
1200     @@ -245,6 +246,53 @@ out: kfree(buffer);
1201     return r;
1202     }
1203    
1204     +static int ch341_detect_quirks(struct usb_serial_port *port)
1205     +{
1206     + struct ch341_private *priv = usb_get_serial_port_data(port);
1207     + struct usb_device *udev = port->serial->dev;
1208     + const unsigned int size = 2;
1209     + unsigned long quirks = 0;
1210     + char *buffer;
1211     + int r;
1212     +
1213     + buffer = kmalloc(size, GFP_KERNEL);
1214     + if (!buffer)
1215     + return -ENOMEM;
1216     +
1217     + /*
1218     + * A subset of CH34x devices does not support all features. The
1219     + * prescaler is limited and there is no support for sending a RS232
1220     + * break condition. A read failure when trying to set up the latter is
1221     + * used to detect these devices.
1222     + */
1223     + r = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), CH341_REQ_READ_REG,
1224     + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
1225     + CH341_REG_BREAK, 0, buffer, size, DEFAULT_TIMEOUT);
1226     + if (r == -EPIPE) {
1227     + dev_dbg(&port->dev, "break control not supported\n");
1228     + r = 0;
1229     + goto out;
1230     + }
1231     +
1232     + if (r != size) {
1233     + if (r >= 0)
1234     + r = -EIO;
1235     + dev_err(&port->dev, "failed to read break control: %d\n", r);
1236     + goto out;
1237     + }
1238     +
1239     + r = 0;
1240     +out:
1241     + kfree(buffer);
1242     +
1243     + if (quirks) {
1244     + dev_dbg(&port->dev, "enabling quirk flags: 0x%02lx\n", quirks);
1245     + priv->quirks |= quirks;
1246     + }
1247     +
1248     + return r;
1249     +}
1250     +
1251     static int ch341_port_probe(struct usb_serial_port *port)
1252     {
1253     struct ch341_private *priv;
1254     @@ -267,6 +315,11 @@ static int ch341_port_probe(struct usb_serial_port *port)
1255     goto error;
1256    
1257     usb_set_serial_port_data(port, priv);
1258     +
1259     + r = ch341_detect_quirks(port);
1260     + if (r < 0)
1261     + goto error;
1262     +
1263     return 0;
1264    
1265     error: kfree(priv);
1266     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1267     index 8bfffca3e4ae..254a8bbeea67 100644
1268     --- a/drivers/usb/serial/option.c
1269     +++ b/drivers/usb/serial/option.c
1270     @@ -1157,6 +1157,10 @@ static const struct usb_device_id option_ids[] = {
1271     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) },
1272     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) },
1273     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) },
1274     + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1031, 0xff), /* Telit LE910C1-EUX */
1275     + .driver_info = NCTRL(0) | RSVD(3) },
1276     + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1033, 0xff), /* Telit LE910C1-EUX (ECM) */
1277     + .driver_info = NCTRL(0) },
1278     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG0),
1279     .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) },
1280     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG1),
1281     diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
1282     index ce0401d3137f..d147feae83e6 100644
1283     --- a/drivers/usb/serial/qcserial.c
1284     +++ b/drivers/usb/serial/qcserial.c
1285     @@ -173,6 +173,7 @@ static const struct usb_device_id id_table[] = {
1286     {DEVICE_SWI(0x413c, 0x81b3)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */
1287     {DEVICE_SWI(0x413c, 0x81b5)}, /* Dell Wireless 5811e QDL */
1288     {DEVICE_SWI(0x413c, 0x81b6)}, /* Dell Wireless 5811e QDL */
1289     + {DEVICE_SWI(0x413c, 0x81cb)}, /* Dell Wireless 5816e QDL */
1290     {DEVICE_SWI(0x413c, 0x81cc)}, /* Dell Wireless 5816e */
1291     {DEVICE_SWI(0x413c, 0x81cf)}, /* Dell Wireless 5819 */
1292     {DEVICE_SWI(0x413c, 0x81d0)}, /* Dell Wireless 5819 */
1293     diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
1294     index 13be21aad2f4..4b9845807bee 100644
1295     --- a/drivers/usb/serial/usb_wwan.c
1296     +++ b/drivers/usb/serial/usb_wwan.c
1297     @@ -270,6 +270,10 @@ static void usb_wwan_indat_callback(struct urb *urb)
1298     if (status) {
1299     dev_dbg(dev, "%s: nonzero status: %d on endpoint %02x.\n",
1300     __func__, status, endpoint);
1301     +
1302     + /* don't resubmit on fatal errors */
1303     + if (status == -ESHUTDOWN || status == -ENOENT)
1304     + return;
1305     } else {
1306     if (urb->actual_length) {
1307     tty_insert_flip_string(&port->port, data,
1308     diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
1309     index e3596db077dc..953d7ca01eb6 100644
1310     --- a/include/linux/mod_devicetable.h
1311     +++ b/include/linux/mod_devicetable.h
1312     @@ -657,6 +657,10 @@ struct mips_cdmm_device_id {
1313     /*
1314     * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id.
1315     * Although gcc seems to ignore this error, clang fails without this define.
1316     + *
1317     + * Note: The ordering of the struct is different from upstream because the
1318     + * static initializers in kernels < 5.7 still use C89 style while upstream
1319     + * has been converted to proper C99 initializers.
1320     */
1321     #define x86cpu_device_id x86_cpu_id
1322     struct x86_cpu_id {
1323     @@ -665,6 +669,7 @@ struct x86_cpu_id {
1324     __u16 model;
1325     __u16 feature; /* bit index */
1326     kernel_ulong_t driver_data;
1327     + __u16 steppings;
1328     };
1329    
1330     #define X86_FEATURE_MATCH(x) \
1331     @@ -673,6 +678,7 @@ struct x86_cpu_id {
1332     #define X86_VENDOR_ANY 0xffff
1333     #define X86_FAMILY_ANY 0
1334     #define X86_MODEL_ANY 0
1335     +#define X86_STEPPING_ANY 0
1336     #define X86_FEATURE_ANY 0 /* Same as FPU, you can't test for that */
1337    
1338     /*
1339     diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h
1340     index 6f6ade63b04c..e8a924eeea3d 100644
1341     --- a/include/linux/virtio_net.h
1342     +++ b/include/linux/virtio_net.h
1343     @@ -31,6 +31,7 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,
1344     {
1345     unsigned int gso_type = 0;
1346     unsigned int thlen = 0;
1347     + unsigned int p_off = 0;
1348     unsigned int ip_proto;
1349    
1350     if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) {
1351     @@ -68,7 +69,8 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,
1352     if (!skb_partial_csum_set(skb, start, off))
1353     return -EINVAL;
1354    
1355     - if (skb_transport_offset(skb) + thlen > skb_headlen(skb))
1356     + p_off = skb_transport_offset(skb) + thlen;
1357     + if (p_off > skb_headlen(skb))
1358     return -EINVAL;
1359     } else {
1360     /* gso packets without NEEDS_CSUM do not set transport_offset.
1361     @@ -92,23 +94,32 @@ retry:
1362     return -EINVAL;
1363     }
1364    
1365     - if (keys.control.thoff + thlen > skb_headlen(skb) ||
1366     + p_off = keys.control.thoff + thlen;
1367     + if (p_off > skb_headlen(skb) ||
1368     keys.basic.ip_proto != ip_proto)
1369     return -EINVAL;
1370    
1371     skb_set_transport_header(skb, keys.control.thoff);
1372     + } else if (gso_type) {
1373     + p_off = thlen;
1374     + if (p_off > skb_headlen(skb))
1375     + return -EINVAL;
1376     }
1377     }
1378    
1379     if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) {
1380     u16 gso_size = __virtio16_to_cpu(little_endian, hdr->gso_size);
1381     + struct skb_shared_info *shinfo = skb_shinfo(skb);
1382    
1383     - skb_shinfo(skb)->gso_size = gso_size;
1384     - skb_shinfo(skb)->gso_type = gso_type;
1385     + /* Too small packets are not really GSO ones. */
1386     + if (skb->len - p_off > gso_size) {
1387     + shinfo->gso_size = gso_size;
1388     + shinfo->gso_type = gso_type;
1389    
1390     - /* Header must be checked, and gso_segs computed. */
1391     - skb_shinfo(skb)->gso_type |= SKB_GSO_DODGY;
1392     - skb_shinfo(skb)->gso_segs = 0;
1393     + /* Header must be checked, and gso_segs computed. */
1394     + shinfo->gso_type |= SKB_GSO_DODGY;
1395     + shinfo->gso_segs = 0;
1396     + }
1397     }
1398    
1399     return 0;
1400     diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
1401     index c74761004ee5..291680ba8504 100644
1402     --- a/kernel/events/uprobes.c
1403     +++ b/kernel/events/uprobes.c
1404     @@ -867,10 +867,6 @@ static int prepare_uprobe(struct uprobe *uprobe, struct file *file,
1405     if (ret)
1406     goto out;
1407    
1408     - /* uprobe_write_opcode() assumes we don't cross page boundary */
1409     - BUG_ON((uprobe->offset & ~PAGE_MASK) +
1410     - UPROBE_SWBP_INSN_SIZE > PAGE_SIZE);
1411     -
1412     smp_wmb(); /* pairs with the smp_rmb() in handle_swbp() */
1413     set_bit(UPROBE_COPY_INSN, &uprobe->flags);
1414    
1415     @@ -1166,6 +1162,15 @@ static int __uprobe_register(struct inode *inode, loff_t offset,
1416     if (offset > i_size_read(inode))
1417     return -EINVAL;
1418    
1419     + /*
1420     + * This ensures that copy_from_page(), copy_to_page() and
1421     + * __update_ref_ctr() can't cross page boundary.
1422     + */
1423     + if (!IS_ALIGNED(offset, UPROBE_SWBP_INSN_SIZE))
1424     + return -EINVAL;
1425     + if (!IS_ALIGNED(ref_ctr_offset, sizeof(short)))
1426     + return -EINVAL;
1427     +
1428     retry:
1429     uprobe = alloc_uprobe(inode, offset, ref_ctr_offset);
1430     if (!uprobe)
1431     @@ -2014,6 +2019,9 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)
1432     uprobe_opcode_t opcode;
1433     int result;
1434    
1435     + if (WARN_ON_ONCE(!IS_ALIGNED(vaddr, UPROBE_SWBP_INSN_SIZE)))
1436     + return -EINVAL;
1437     +
1438     pagefault_disable();
1439     result = __get_user(opcode, (uprobe_opcode_t __user *)vaddr);
1440     pagefault_enable();
1441     diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
1442     index 458dc6eb5a68..a27d034c85cc 100644
1443     --- a/net/ipv4/devinet.c
1444     +++ b/net/ipv4/devinet.c
1445     @@ -276,6 +276,7 @@ static struct in_device *inetdev_init(struct net_device *dev)
1446     err = devinet_sysctl_register(in_dev);
1447     if (err) {
1448     in_dev->dead = 1;
1449     + neigh_parms_release(&arp_tbl, in_dev->arp_parms);
1450     in_dev_put(in_dev);
1451     in_dev = NULL;
1452     goto out;
1453     diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
1454     index 425b95eb7e87..6dc3bfa12b1e 100644
1455     --- a/net/l2tp/l2tp_core.c
1456     +++ b/net/l2tp/l2tp_core.c
1457     @@ -1460,6 +1460,9 @@ static int l2tp_validate_socket(const struct sock *sk, const struct net *net,
1458     if (sk->sk_type != SOCK_DGRAM)
1459     return -EPROTONOSUPPORT;
1460    
1461     + if (sk->sk_family != PF_INET && sk->sk_family != PF_INET6)
1462     + return -EPROTONOSUPPORT;
1463     +
1464     if ((encap == L2TP_ENCAPTYPE_UDP && sk->sk_protocol != IPPROTO_UDP) ||
1465     (encap == L2TP_ENCAPTYPE_IP && sk->sk_protocol != IPPROTO_L2TP))
1466     return -EPROTONOSUPPORT;
1467     diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
1468     index 0d7c887a2b75..955662a6dee7 100644
1469     --- a/net/l2tp/l2tp_ip.c
1470     +++ b/net/l2tp/l2tp_ip.c
1471     @@ -20,7 +20,6 @@
1472     #include <net/icmp.h>
1473     #include <net/udp.h>
1474     #include <net/inet_common.h>
1475     -#include <net/inet_hashtables.h>
1476     #include <net/tcp_states.h>
1477     #include <net/protocol.h>
1478     #include <net/xfrm.h>
1479     @@ -209,15 +208,31 @@ discard:
1480     return 0;
1481     }
1482    
1483     -static int l2tp_ip_open(struct sock *sk)
1484     +static int l2tp_ip_hash(struct sock *sk)
1485     {
1486     - /* Prevent autobind. We don't have ports. */
1487     - inet_sk(sk)->inet_num = IPPROTO_L2TP;
1488     + if (sk_unhashed(sk)) {
1489     + write_lock_bh(&l2tp_ip_lock);
1490     + sk_add_node(sk, &l2tp_ip_table);
1491     + write_unlock_bh(&l2tp_ip_lock);
1492     + }
1493     + return 0;
1494     +}
1495    
1496     +static void l2tp_ip_unhash(struct sock *sk)
1497     +{
1498     + if (sk_unhashed(sk))
1499     + return;
1500     write_lock_bh(&l2tp_ip_lock);
1501     - sk_add_node(sk, &l2tp_ip_table);
1502     + sk_del_node_init(sk);
1503     write_unlock_bh(&l2tp_ip_lock);
1504     +}
1505     +
1506     +static int l2tp_ip_open(struct sock *sk)
1507     +{
1508     + /* Prevent autobind. We don't have ports. */
1509     + inet_sk(sk)->inet_num = IPPROTO_L2TP;
1510    
1511     + l2tp_ip_hash(sk);
1512     return 0;
1513     }
1514    
1515     @@ -594,8 +609,8 @@ static struct proto l2tp_ip_prot = {
1516     .sendmsg = l2tp_ip_sendmsg,
1517     .recvmsg = l2tp_ip_recvmsg,
1518     .backlog_rcv = l2tp_ip_backlog_recv,
1519     - .hash = inet_hash,
1520     - .unhash = inet_unhash,
1521     + .hash = l2tp_ip_hash,
1522     + .unhash = l2tp_ip_unhash,
1523     .obj_size = sizeof(struct l2tp_ip_sock),
1524     #ifdef CONFIG_COMPAT
1525     .compat_setsockopt = compat_ip_setsockopt,
1526     diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
1527     index d148766f40d1..0fa694bd3f6a 100644
1528     --- a/net/l2tp/l2tp_ip6.c
1529     +++ b/net/l2tp/l2tp_ip6.c
1530     @@ -20,8 +20,6 @@
1531     #include <net/icmp.h>
1532     #include <net/udp.h>
1533     #include <net/inet_common.h>
1534     -#include <net/inet_hashtables.h>
1535     -#include <net/inet6_hashtables.h>
1536     #include <net/tcp_states.h>
1537     #include <net/protocol.h>
1538     #include <net/xfrm.h>
1539     @@ -222,15 +220,31 @@ discard:
1540     return 0;
1541     }
1542    
1543     -static int l2tp_ip6_open(struct sock *sk)
1544     +static int l2tp_ip6_hash(struct sock *sk)
1545     {
1546     - /* Prevent autobind. We don't have ports. */
1547     - inet_sk(sk)->inet_num = IPPROTO_L2TP;
1548     + if (sk_unhashed(sk)) {
1549     + write_lock_bh(&l2tp_ip6_lock);
1550     + sk_add_node(sk, &l2tp_ip6_table);
1551     + write_unlock_bh(&l2tp_ip6_lock);
1552     + }
1553     + return 0;
1554     +}
1555    
1556     +static void l2tp_ip6_unhash(struct sock *sk)
1557     +{
1558     + if (sk_unhashed(sk))
1559     + return;
1560     write_lock_bh(&l2tp_ip6_lock);
1561     - sk_add_node(sk, &l2tp_ip6_table);
1562     + sk_del_node_init(sk);
1563     write_unlock_bh(&l2tp_ip6_lock);
1564     +}
1565     +
1566     +static int l2tp_ip6_open(struct sock *sk)
1567     +{
1568     + /* Prevent autobind. We don't have ports. */
1569     + inet_sk(sk)->inet_num = IPPROTO_L2TP;
1570    
1571     + l2tp_ip6_hash(sk);
1572     return 0;
1573     }
1574    
1575     @@ -728,8 +742,8 @@ static struct proto l2tp_ip6_prot = {
1576     .sendmsg = l2tp_ip6_sendmsg,
1577     .recvmsg = l2tp_ip6_recvmsg,
1578     .backlog_rcv = l2tp_ip6_backlog_recv,
1579     - .hash = inet6_hash,
1580     - .unhash = inet_unhash,
1581     + .hash = l2tp_ip6_hash,
1582     + .unhash = l2tp_ip6_unhash,
1583     .obj_size = sizeof(struct l2tp_ip6_sock),
1584     #ifdef CONFIG_COMPAT
1585     .compat_setsockopt = compat_ipv6_setsockopt,
1586     diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
1587     index 582a3e4dfce2..7bd6c8199ca6 100644
1588     --- a/net/vmw_vsock/af_vsock.c
1589     +++ b/net/vmw_vsock/af_vsock.c
1590     @@ -1275,7 +1275,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags,
1591     /* Wait for children sockets to appear; these are the new sockets
1592     * created upon connection establishment.
1593     */
1594     - timeout = sock_sndtimeo(listener, flags & O_NONBLOCK);
1595     + timeout = sock_rcvtimeo(listener, flags & O_NONBLOCK);
1596     prepare_to_wait(sk_sleep(listener), &wait, TASK_INTERRUPTIBLE);
1597    
1598     while ((connected = vsock_dequeue_accept(listener)) == NULL &&