1 |
commit: e90e0f2f33dedd4096b15873c7c1a92828cfbbe1 |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Jun 22 19:08:46 2019 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Oct 29 13:59:02 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=e90e0f2f |
7 |
|
8 |
Linux patch 4.14.129 |
9 |
|
10 |
Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1128_linux-4.14.129.patch | 1201 +++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 1205 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index 2a27470..dc6e2d8 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -555,6 +555,10 @@ Patch: 1127_linux-4.14.128.patch |
21 |
From: https://www.kernel.org |
22 |
Desc: Linux 4.14.128 |
23 |
|
24 |
+Patch: 1128_linux-4.14.129.patch |
25 |
+From: https://www.kernel.org |
26 |
+Desc: Linux 4.14.129 |
27 |
+ |
28 |
Patch: 1500_XATTR_USER_PREFIX.patch |
29 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
30 |
Desc: Support for namespace user.pax.* on tmpfs. |
31 |
|
32 |
diff --git a/1128_linux-4.14.129.patch b/1128_linux-4.14.129.patch |
33 |
new file mode 100644 |
34 |
index 0000000..6ca5c29 |
35 |
--- /dev/null |
36 |
+++ b/1128_linux-4.14.129.patch |
37 |
@@ -0,0 +1,1201 @@ |
38 |
+diff --git a/Makefile b/Makefile |
39 |
+index ccdac2828cf7..2a55dd5bee0a 100644 |
40 |
+--- a/Makefile |
41 |
++++ b/Makefile |
42 |
+@@ -1,7 +1,7 @@ |
43 |
+ # SPDX-License-Identifier: GPL-2.0 |
44 |
+ VERSION = 4 |
45 |
+ PATCHLEVEL = 14 |
46 |
+-SUBLEVEL = 128 |
47 |
++SUBLEVEL = 129 |
48 |
+ EXTRAVERSION = |
49 |
+ NAME = Petit Gorille |
50 |
+ |
51 |
+diff --git a/arch/ia64/mm/numa.c b/arch/ia64/mm/numa.c |
52 |
+index aa19b7ac8222..476c7b4be378 100644 |
53 |
+--- a/arch/ia64/mm/numa.c |
54 |
++++ b/arch/ia64/mm/numa.c |
55 |
+@@ -49,6 +49,7 @@ paddr_to_nid(unsigned long paddr) |
56 |
+ |
57 |
+ return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0); |
58 |
+ } |
59 |
++EXPORT_SYMBOL(paddr_to_nid); |
60 |
+ |
61 |
+ #if defined(CONFIG_SPARSEMEM) && defined(CONFIG_NUMA) |
62 |
+ /* |
63 |
+diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h |
64 |
+index e3ba58f64c3d..5070b34b12fd 100644 |
65 |
+--- a/arch/powerpc/include/asm/kvm_host.h |
66 |
++++ b/arch/powerpc/include/asm/kvm_host.h |
67 |
+@@ -296,6 +296,7 @@ struct kvm_arch { |
68 |
+ #ifdef CONFIG_PPC_BOOK3S_64 |
69 |
+ struct list_head spapr_tce_tables; |
70 |
+ struct list_head rtas_tokens; |
71 |
++ struct mutex rtas_token_lock; |
72 |
+ DECLARE_BITMAP(enabled_hcalls, MAX_HCALL_OPCODE/4 + 1); |
73 |
+ #endif |
74 |
+ #ifdef CONFIG_KVM_MPIC |
75 |
+diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c |
76 |
+index 72d977e30952..d38280b01ef0 100644 |
77 |
+--- a/arch/powerpc/kvm/book3s.c |
78 |
++++ b/arch/powerpc/kvm/book3s.c |
79 |
+@@ -836,6 +836,7 @@ int kvmppc_core_init_vm(struct kvm *kvm) |
80 |
+ #ifdef CONFIG_PPC64 |
81 |
+ INIT_LIST_HEAD_RCU(&kvm->arch.spapr_tce_tables); |
82 |
+ INIT_LIST_HEAD(&kvm->arch.rtas_tokens); |
83 |
++ mutex_init(&kvm->arch.rtas_token_lock); |
84 |
+ #endif |
85 |
+ |
86 |
+ return kvm->arch.kvm_ops->init_vm(kvm); |
87 |
+diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c |
88 |
+index 58746328b9bd..3b7488fce3db 100644 |
89 |
+--- a/arch/powerpc/kvm/book3s_hv.c |
90 |
++++ b/arch/powerpc/kvm/book3s_hv.c |
91 |
+@@ -392,12 +392,7 @@ static void kvmppc_dump_regs(struct kvm_vcpu *vcpu) |
92 |
+ |
93 |
+ static struct kvm_vcpu *kvmppc_find_vcpu(struct kvm *kvm, int id) |
94 |
+ { |
95 |
+- struct kvm_vcpu *ret; |
96 |
+- |
97 |
+- mutex_lock(&kvm->lock); |
98 |
+- ret = kvm_get_vcpu_by_id(kvm, id); |
99 |
+- mutex_unlock(&kvm->lock); |
100 |
+- return ret; |
101 |
++ return kvm_get_vcpu_by_id(kvm, id); |
102 |
+ } |
103 |
+ |
104 |
+ static void init_vpa(struct kvm_vcpu *vcpu, struct lppaca *vpa) |
105 |
+@@ -1258,7 +1253,6 @@ static void kvmppc_set_lpcr(struct kvm_vcpu *vcpu, u64 new_lpcr, |
106 |
+ struct kvmppc_vcore *vc = vcpu->arch.vcore; |
107 |
+ u64 mask; |
108 |
+ |
109 |
+- mutex_lock(&kvm->lock); |
110 |
+ spin_lock(&vc->lock); |
111 |
+ /* |
112 |
+ * If ILE (interrupt little-endian) has changed, update the |
113 |
+@@ -1298,7 +1292,6 @@ static void kvmppc_set_lpcr(struct kvm_vcpu *vcpu, u64 new_lpcr, |
114 |
+ mask &= 0xFFFFFFFF; |
115 |
+ vc->lpcr = (vc->lpcr & ~mask) | (new_lpcr & mask); |
116 |
+ spin_unlock(&vc->lock); |
117 |
+- mutex_unlock(&kvm->lock); |
118 |
+ } |
119 |
+ |
120 |
+ static int kvmppc_get_one_reg_hv(struct kvm_vcpu *vcpu, u64 id, |
121 |
+diff --git a/arch/powerpc/kvm/book3s_rtas.c b/arch/powerpc/kvm/book3s_rtas.c |
122 |
+index 2d3b2b1cc272..8f2355138f80 100644 |
123 |
+--- a/arch/powerpc/kvm/book3s_rtas.c |
124 |
++++ b/arch/powerpc/kvm/book3s_rtas.c |
125 |
+@@ -146,7 +146,7 @@ static int rtas_token_undefine(struct kvm *kvm, char *name) |
126 |
+ { |
127 |
+ struct rtas_token_definition *d, *tmp; |
128 |
+ |
129 |
+- lockdep_assert_held(&kvm->lock); |
130 |
++ lockdep_assert_held(&kvm->arch.rtas_token_lock); |
131 |
+ |
132 |
+ list_for_each_entry_safe(d, tmp, &kvm->arch.rtas_tokens, list) { |
133 |
+ if (rtas_name_matches(d->handler->name, name)) { |
134 |
+@@ -167,7 +167,7 @@ static int rtas_token_define(struct kvm *kvm, char *name, u64 token) |
135 |
+ bool found; |
136 |
+ int i; |
137 |
+ |
138 |
+- lockdep_assert_held(&kvm->lock); |
139 |
++ lockdep_assert_held(&kvm->arch.rtas_token_lock); |
140 |
+ |
141 |
+ list_for_each_entry(d, &kvm->arch.rtas_tokens, list) { |
142 |
+ if (d->token == token) |
143 |
+@@ -206,14 +206,14 @@ int kvm_vm_ioctl_rtas_define_token(struct kvm *kvm, void __user *argp) |
144 |
+ if (copy_from_user(&args, argp, sizeof(args))) |
145 |
+ return -EFAULT; |
146 |
+ |
147 |
+- mutex_lock(&kvm->lock); |
148 |
++ mutex_lock(&kvm->arch.rtas_token_lock); |
149 |
+ |
150 |
+ if (args.token) |
151 |
+ rc = rtas_token_define(kvm, args.name, args.token); |
152 |
+ else |
153 |
+ rc = rtas_token_undefine(kvm, args.name); |
154 |
+ |
155 |
+- mutex_unlock(&kvm->lock); |
156 |
++ mutex_unlock(&kvm->arch.rtas_token_lock); |
157 |
+ |
158 |
+ return rc; |
159 |
+ } |
160 |
+@@ -245,7 +245,7 @@ int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu) |
161 |
+ orig_rets = args.rets; |
162 |
+ args.rets = &args.args[be32_to_cpu(args.nargs)]; |
163 |
+ |
164 |
+- mutex_lock(&vcpu->kvm->lock); |
165 |
++ mutex_lock(&vcpu->kvm->arch.rtas_token_lock); |
166 |
+ |
167 |
+ rc = -ENOENT; |
168 |
+ list_for_each_entry(d, &vcpu->kvm->arch.rtas_tokens, list) { |
169 |
+@@ -256,7 +256,7 @@ int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu) |
170 |
+ } |
171 |
+ } |
172 |
+ |
173 |
+- mutex_unlock(&vcpu->kvm->lock); |
174 |
++ mutex_unlock(&vcpu->kvm->arch.rtas_token_lock); |
175 |
+ |
176 |
+ if (rc == 0) { |
177 |
+ args.rets = orig_rets; |
178 |
+@@ -282,8 +282,6 @@ void kvmppc_rtas_tokens_free(struct kvm *kvm) |
179 |
+ { |
180 |
+ struct rtas_token_definition *d, *tmp; |
181 |
+ |
182 |
+- lockdep_assert_held(&kvm->lock); |
183 |
+- |
184 |
+ list_for_each_entry_safe(d, tmp, &kvm->arch.rtas_tokens, list) { |
185 |
+ list_del(&d->list); |
186 |
+ kfree(d); |
187 |
+diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c |
188 |
+index 6914b289c86b..7b93191dc2e3 100644 |
189 |
+--- a/arch/powerpc/platforms/powernv/opal-imc.c |
190 |
++++ b/arch/powerpc/platforms/powernv/opal-imc.c |
191 |
+@@ -87,6 +87,10 @@ static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain) |
192 |
+ struct imc_pmu *pmu_ptr; |
193 |
+ u32 offset; |
194 |
+ |
195 |
++ /* Return for unknown domain */ |
196 |
++ if (domain < 0) |
197 |
++ return -EINVAL; |
198 |
++ |
199 |
+ /* memory for pmu */ |
200 |
+ pmu_ptr = kzalloc(sizeof(struct imc_pmu), GFP_KERNEL); |
201 |
+ if (!pmu_ptr) |
202 |
+diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c |
203 |
+index 25386be0d757..3310f9f6c3e1 100644 |
204 |
+--- a/arch/x86/events/intel/ds.c |
205 |
++++ b/arch/x86/events/intel/ds.c |
206 |
+@@ -681,7 +681,7 @@ struct event_constraint intel_core2_pebs_event_constraints[] = { |
207 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT(0x1fc7, 0x1), /* SIMD_INST_RETURED.ANY */ |
208 |
+ INTEL_FLAGS_EVENT_CONSTRAINT(0xcb, 0x1), /* MEM_LOAD_RETIRED.* */ |
209 |
+ /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */ |
210 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x01), |
211 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108000c0, 0x01), |
212 |
+ EVENT_CONSTRAINT_END |
213 |
+ }; |
214 |
+ |
215 |
+@@ -690,7 +690,7 @@ struct event_constraint intel_atom_pebs_event_constraints[] = { |
216 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT(0x00c5, 0x1), /* MISPREDICTED_BRANCH_RETIRED */ |
217 |
+ INTEL_FLAGS_EVENT_CONSTRAINT(0xcb, 0x1), /* MEM_LOAD_RETIRED.* */ |
218 |
+ /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */ |
219 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x01), |
220 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108000c0, 0x01), |
221 |
+ /* Allow all events as PEBS with no flags */ |
222 |
+ INTEL_ALL_EVENT_CONSTRAINT(0, 0x1), |
223 |
+ EVENT_CONSTRAINT_END |
224 |
+@@ -698,7 +698,7 @@ struct event_constraint intel_atom_pebs_event_constraints[] = { |
225 |
+ |
226 |
+ struct event_constraint intel_slm_pebs_event_constraints[] = { |
227 |
+ /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */ |
228 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x1), |
229 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108000c0, 0x1), |
230 |
+ /* Allow all events as PEBS with no flags */ |
231 |
+ INTEL_ALL_EVENT_CONSTRAINT(0, 0x1), |
232 |
+ EVENT_CONSTRAINT_END |
233 |
+@@ -729,7 +729,7 @@ struct event_constraint intel_nehalem_pebs_event_constraints[] = { |
234 |
+ INTEL_FLAGS_EVENT_CONSTRAINT(0xcb, 0xf), /* MEM_LOAD_RETIRED.* */ |
235 |
+ INTEL_FLAGS_EVENT_CONSTRAINT(0xf7, 0xf), /* FP_ASSIST.* */ |
236 |
+ /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */ |
237 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x0f), |
238 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108000c0, 0x0f), |
239 |
+ EVENT_CONSTRAINT_END |
240 |
+ }; |
241 |
+ |
242 |
+@@ -746,7 +746,7 @@ struct event_constraint intel_westmere_pebs_event_constraints[] = { |
243 |
+ INTEL_FLAGS_EVENT_CONSTRAINT(0xcb, 0xf), /* MEM_LOAD_RETIRED.* */ |
244 |
+ INTEL_FLAGS_EVENT_CONSTRAINT(0xf7, 0xf), /* FP_ASSIST.* */ |
245 |
+ /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */ |
246 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x0f), |
247 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108000c0, 0x0f), |
248 |
+ EVENT_CONSTRAINT_END |
249 |
+ }; |
250 |
+ |
251 |
+@@ -755,7 +755,7 @@ struct event_constraint intel_snb_pebs_event_constraints[] = { |
252 |
+ INTEL_PLD_CONSTRAINT(0x01cd, 0x8), /* MEM_TRANS_RETIRED.LAT_ABOVE_THR */ |
253 |
+ INTEL_PST_CONSTRAINT(0x02cd, 0x8), /* MEM_TRANS_RETIRED.PRECISE_STORES */ |
254 |
+ /* UOPS_RETIRED.ALL, inv=1, cmask=16 (cycles:p). */ |
255 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108001c2, 0xf), |
256 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108001c2, 0xf), |
257 |
+ INTEL_EXCLEVT_CONSTRAINT(0xd0, 0xf), /* MEM_UOP_RETIRED.* */ |
258 |
+ INTEL_EXCLEVT_CONSTRAINT(0xd1, 0xf), /* MEM_LOAD_UOPS_RETIRED.* */ |
259 |
+ INTEL_EXCLEVT_CONSTRAINT(0xd2, 0xf), /* MEM_LOAD_UOPS_LLC_HIT_RETIRED.* */ |
260 |
+@@ -770,9 +770,9 @@ struct event_constraint intel_ivb_pebs_event_constraints[] = { |
261 |
+ INTEL_PLD_CONSTRAINT(0x01cd, 0x8), /* MEM_TRANS_RETIRED.LAT_ABOVE_THR */ |
262 |
+ INTEL_PST_CONSTRAINT(0x02cd, 0x8), /* MEM_TRANS_RETIRED.PRECISE_STORES */ |
263 |
+ /* UOPS_RETIRED.ALL, inv=1, cmask=16 (cycles:p). */ |
264 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108001c2, 0xf), |
265 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108001c2, 0xf), |
266 |
+ /* INST_RETIRED.PREC_DIST, inv=1, cmask=16 (cycles:ppp). */ |
267 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108001c0, 0x2), |
268 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108001c0, 0x2), |
269 |
+ INTEL_EXCLEVT_CONSTRAINT(0xd0, 0xf), /* MEM_UOP_RETIRED.* */ |
270 |
+ INTEL_EXCLEVT_CONSTRAINT(0xd1, 0xf), /* MEM_LOAD_UOPS_RETIRED.* */ |
271 |
+ INTEL_EXCLEVT_CONSTRAINT(0xd2, 0xf), /* MEM_LOAD_UOPS_LLC_HIT_RETIRED.* */ |
272 |
+@@ -786,9 +786,9 @@ struct event_constraint intel_hsw_pebs_event_constraints[] = { |
273 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT(0x01c0, 0x2), /* INST_RETIRED.PRECDIST */ |
274 |
+ INTEL_PLD_CONSTRAINT(0x01cd, 0xf), /* MEM_TRANS_RETIRED.* */ |
275 |
+ /* UOPS_RETIRED.ALL, inv=1, cmask=16 (cycles:p). */ |
276 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108001c2, 0xf), |
277 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108001c2, 0xf), |
278 |
+ /* INST_RETIRED.PREC_DIST, inv=1, cmask=16 (cycles:ppp). */ |
279 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108001c0, 0x2), |
280 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108001c0, 0x2), |
281 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_NA(0x01c2, 0xf), /* UOPS_RETIRED.ALL */ |
282 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_XLD(0x11d0, 0xf), /* MEM_UOPS_RETIRED.STLB_MISS_LOADS */ |
283 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_XLD(0x21d0, 0xf), /* MEM_UOPS_RETIRED.LOCK_LOADS */ |
284 |
+@@ -809,9 +809,9 @@ struct event_constraint intel_bdw_pebs_event_constraints[] = { |
285 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT(0x01c0, 0x2), /* INST_RETIRED.PRECDIST */ |
286 |
+ INTEL_PLD_CONSTRAINT(0x01cd, 0xf), /* MEM_TRANS_RETIRED.* */ |
287 |
+ /* UOPS_RETIRED.ALL, inv=1, cmask=16 (cycles:p). */ |
288 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108001c2, 0xf), |
289 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108001c2, 0xf), |
290 |
+ /* INST_RETIRED.PREC_DIST, inv=1, cmask=16 (cycles:ppp). */ |
291 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108001c0, 0x2), |
292 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108001c0, 0x2), |
293 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_NA(0x01c2, 0xf), /* UOPS_RETIRED.ALL */ |
294 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x11d0, 0xf), /* MEM_UOPS_RETIRED.STLB_MISS_LOADS */ |
295 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x21d0, 0xf), /* MEM_UOPS_RETIRED.LOCK_LOADS */ |
296 |
+@@ -832,9 +832,9 @@ struct event_constraint intel_bdw_pebs_event_constraints[] = { |
297 |
+ struct event_constraint intel_skl_pebs_event_constraints[] = { |
298 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT(0x1c0, 0x2), /* INST_RETIRED.PREC_DIST */ |
299 |
+ /* INST_RETIRED.PREC_DIST, inv=1, cmask=16 (cycles:ppp). */ |
300 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108001c0, 0x2), |
301 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108001c0, 0x2), |
302 |
+ /* INST_RETIRED.TOTAL_CYCLES_PS (inv=1, cmask=16) (cycles:p). */ |
303 |
+- INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x0f), |
304 |
++ INTEL_FLAGS_UEVENT_CONSTRAINT(0x108000c0, 0x0f), |
305 |
+ INTEL_PLD_CONSTRAINT(0x1cd, 0xf), /* MEM_TRANS_RETIRED.* */ |
306 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x11d0, 0xf), /* MEM_INST_RETIRED.STLB_MISS_LOADS */ |
307 |
+ INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x12d0, 0xf), /* MEM_INST_RETIRED.STLB_MISS_STORES */ |
308 |
+diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c |
309 |
+index ecf82859f1c0..bbebcd7a781e 100644 |
310 |
+--- a/arch/x86/kernel/cpu/amd.c |
311 |
++++ b/arch/x86/kernel/cpu/amd.c |
312 |
+@@ -792,8 +792,11 @@ static void init_amd_zn(struct cpuinfo_x86 *c) |
313 |
+ { |
314 |
+ set_cpu_cap(c, X86_FEATURE_ZEN); |
315 |
+ |
316 |
+- /* Fix erratum 1076: CPB feature bit not being set in CPUID. */ |
317 |
+- if (!cpu_has(c, X86_FEATURE_CPB)) |
318 |
++ /* |
319 |
++ * Fix erratum 1076: CPB feature bit not being set in CPUID. |
320 |
++ * Always set it, except when running under a hypervisor. |
321 |
++ */ |
322 |
++ if (!cpu_has(c, X86_FEATURE_HYPERVISOR) && !cpu_has(c, X86_FEATURE_CPB)) |
323 |
+ set_cpu_cap(c, X86_FEATURE_CPB); |
324 |
+ } |
325 |
+ |
326 |
+diff --git a/drivers/clk/ti/clkctrl.c b/drivers/clk/ti/clkctrl.c |
327 |
+index 53e71d0503ec..82e4d5cccf84 100644 |
328 |
+--- a/drivers/clk/ti/clkctrl.c |
329 |
++++ b/drivers/clk/ti/clkctrl.c |
330 |
+@@ -124,9 +124,6 @@ static int _omap4_clkctrl_clk_enable(struct clk_hw *hw) |
331 |
+ int ret; |
332 |
+ union omap4_timeout timeout = { 0 }; |
333 |
+ |
334 |
+- if (!clk->enable_bit) |
335 |
+- return 0; |
336 |
+- |
337 |
+ if (clk->clkdm) { |
338 |
+ ret = ti_clk_ll_ops->clkdm_clk_enable(clk->clkdm, hw->clk); |
339 |
+ if (ret) { |
340 |
+@@ -138,6 +135,9 @@ static int _omap4_clkctrl_clk_enable(struct clk_hw *hw) |
341 |
+ } |
342 |
+ } |
343 |
+ |
344 |
++ if (!clk->enable_bit) |
345 |
++ return 0; |
346 |
++ |
347 |
+ val = ti_clk_ll_ops->clk_readl(&clk->enable_reg); |
348 |
+ |
349 |
+ val &= ~OMAP4_MODULEMODE_MASK; |
350 |
+@@ -166,7 +166,7 @@ static void _omap4_clkctrl_clk_disable(struct clk_hw *hw) |
351 |
+ union omap4_timeout timeout = { 0 }; |
352 |
+ |
353 |
+ if (!clk->enable_bit) |
354 |
+- return; |
355 |
++ goto exit; |
356 |
+ |
357 |
+ val = ti_clk_ll_ops->clk_readl(&clk->enable_reg); |
358 |
+ |
359 |
+diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig |
360 |
+index 3f80f167ed56..2357d2f73c1a 100644 |
361 |
+--- a/drivers/gpio/Kconfig |
362 |
++++ b/drivers/gpio/Kconfig |
363 |
+@@ -712,6 +712,7 @@ config GPIO_ADP5588 |
364 |
+ config GPIO_ADP5588_IRQ |
365 |
+ bool "Interrupt controller support for ADP5588" |
366 |
+ depends on GPIO_ADP5588=y |
367 |
++ select GPIOLIB_IRQCHIP |
368 |
+ help |
369 |
+ Say yes here to enable the adp5588 to be used as an interrupt |
370 |
+ controller. It requires the driver to be built in the kernel. |
371 |
+diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c |
372 |
+index 22e80685cd52..b42bb955f22d 100644 |
373 |
+--- a/drivers/hid/wacom_wac.c |
374 |
++++ b/drivers/hid/wacom_wac.c |
375 |
+@@ -1225,13 +1225,13 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) |
376 |
+ /* Add back in missing bits of ID for non-USI pens */ |
377 |
+ wacom->id[0] |= (wacom->serial[0] >> 32) & 0xFFFFF; |
378 |
+ } |
379 |
+- wacom->tool[0] = wacom_intuos_get_tool_type(wacom_intuos_id_mangle(wacom->id[0])); |
380 |
+ |
381 |
+ for (i = 0; i < pen_frames; i++) { |
382 |
+ unsigned char *frame = &data[i*pen_frame_len + 1]; |
383 |
+ bool valid = frame[0] & 0x80; |
384 |
+ bool prox = frame[0] & 0x40; |
385 |
+ bool range = frame[0] & 0x20; |
386 |
++ bool invert = frame[0] & 0x10; |
387 |
+ |
388 |
+ if (!valid) |
389 |
+ continue; |
390 |
+@@ -1240,8 +1240,13 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) |
391 |
+ wacom->shared->stylus_in_proximity = false; |
392 |
+ wacom_exit_report(wacom); |
393 |
+ input_sync(pen_input); |
394 |
++ |
395 |
++ wacom->tool[0] = 0; |
396 |
++ wacom->id[0] = 0; |
397 |
++ wacom->serial[0] = 0; |
398 |
+ return; |
399 |
+ } |
400 |
++ |
401 |
+ if (range) { |
402 |
+ /* Fix rotation alignment: userspace expects zero at left */ |
403 |
+ int16_t rotation = (int16_t)get_unaligned_le16(&frame[9]); |
404 |
+@@ -1249,6 +1254,16 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) |
405 |
+ if (rotation > 899) |
406 |
+ rotation -= 1800; |
407 |
+ |
408 |
++ if (!wacom->tool[0]) { /* first in range */ |
409 |
++ /* Going into range select tool */ |
410 |
++ if (invert) |
411 |
++ wacom->tool[0] = BTN_TOOL_RUBBER; |
412 |
++ else if (wacom->id[0]) |
413 |
++ wacom->tool[0] = wacom_intuos_get_tool_type(wacom->id[0]); |
414 |
++ else |
415 |
++ wacom->tool[0] = BTN_TOOL_PEN; |
416 |
++ } |
417 |
++ |
418 |
+ input_report_abs(pen_input, ABS_X, get_unaligned_le16(&frame[1])); |
419 |
+ input_report_abs(pen_input, ABS_Y, get_unaligned_le16(&frame[3])); |
420 |
+ input_report_abs(pen_input, ABS_TILT_X, (char)frame[7]); |
421 |
+@@ -1256,17 +1271,19 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) |
422 |
+ input_report_abs(pen_input, ABS_Z, rotation); |
423 |
+ input_report_abs(pen_input, ABS_WHEEL, get_unaligned_le16(&frame[11])); |
424 |
+ } |
425 |
+- input_report_abs(pen_input, ABS_PRESSURE, get_unaligned_le16(&frame[5])); |
426 |
+- input_report_abs(pen_input, ABS_DISTANCE, range ? frame[13] : wacom->features.distance_max); |
427 |
+- |
428 |
+- input_report_key(pen_input, BTN_TOUCH, frame[0] & 0x01); |
429 |
+- input_report_key(pen_input, BTN_STYLUS, frame[0] & 0x02); |
430 |
+- input_report_key(pen_input, BTN_STYLUS2, frame[0] & 0x04); |
431 |
+- |
432 |
+- input_report_key(pen_input, wacom->tool[0], prox); |
433 |
+- input_event(pen_input, EV_MSC, MSC_SERIAL, wacom->serial[0]); |
434 |
+- input_report_abs(pen_input, ABS_MISC, |
435 |
+- wacom_intuos_id_mangle(wacom->id[0])); /* report tool id */ |
436 |
++ if (wacom->tool[0]) { |
437 |
++ input_report_abs(pen_input, ABS_PRESSURE, get_unaligned_le16(&frame[5])); |
438 |
++ input_report_abs(pen_input, ABS_DISTANCE, range ? frame[13] : wacom->features.distance_max); |
439 |
++ |
440 |
++ input_report_key(pen_input, BTN_TOUCH, frame[0] & 0x09); |
441 |
++ input_report_key(pen_input, BTN_STYLUS, frame[0] & 0x02); |
442 |
++ input_report_key(pen_input, BTN_STYLUS2, frame[0] & 0x04); |
443 |
++ |
444 |
++ input_report_key(pen_input, wacom->tool[0], prox); |
445 |
++ input_event(pen_input, EV_MSC, MSC_SERIAL, wacom->serial[0]); |
446 |
++ input_report_abs(pen_input, ABS_MISC, |
447 |
++ wacom_intuos_id_mangle(wacom->id[0])); /* report tool id */ |
448 |
++ } |
449 |
+ |
450 |
+ wacom->shared->stylus_in_proximity = prox; |
451 |
+ |
452 |
+diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c |
453 |
+index 00e8e675cbeb..eaa312bc3a3c 100644 |
454 |
+--- a/drivers/i2c/i2c-dev.c |
455 |
++++ b/drivers/i2c/i2c-dev.c |
456 |
+@@ -297,6 +297,7 @@ static noinline int i2cdev_ioctl_rdwr(struct i2c_client *client, |
457 |
+ rdwr_pa[i].buf[0] < 1 || |
458 |
+ rdwr_pa[i].len < rdwr_pa[i].buf[0] + |
459 |
+ I2C_SMBUS_BLOCK_MAX) { |
460 |
++ i++; |
461 |
+ res = -EINVAL; |
462 |
+ break; |
463 |
+ } |
464 |
+diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c |
465 |
+index e2beb182d54c..0299c0642de8 100644 |
466 |
+--- a/drivers/infiniband/hw/mlx4/main.c |
467 |
++++ b/drivers/infiniband/hw/mlx4/main.c |
468 |
+@@ -1197,6 +1197,8 @@ static void mlx4_ib_disassociate_ucontext(struct ib_ucontext *ibcontext) |
469 |
+ * mlx4_ib_vma_close(). |
470 |
+ */ |
471 |
+ down_write(&owning_mm->mmap_sem); |
472 |
++ if (!mmget_still_valid(owning_mm)) |
473 |
++ goto skip_mm; |
474 |
+ for (i = 0; i < HW_BAR_COUNT; i++) { |
475 |
+ vma = context->hw_bar_info[i].vma; |
476 |
+ if (!vma) |
477 |
+@@ -1215,7 +1217,7 @@ static void mlx4_ib_disassociate_ucontext(struct ib_ucontext *ibcontext) |
478 |
+ /* context going to be destroyed, should not access ops any more */ |
479 |
+ context->hw_bar_info[i].vma->vm_ops = NULL; |
480 |
+ } |
481 |
+- |
482 |
++skip_mm: |
483 |
+ up_write(&owning_mm->mmap_sem); |
484 |
+ mmput(owning_mm); |
485 |
+ put_task_struct(owning_process); |
486 |
+diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c |
487 |
+index 13a92062e9ca..3fbe3962d53b 100644 |
488 |
+--- a/drivers/infiniband/hw/mlx5/main.c |
489 |
++++ b/drivers/infiniband/hw/mlx5/main.c |
490 |
+@@ -1646,6 +1646,8 @@ static void mlx5_ib_disassociate_ucontext(struct ib_ucontext *ibcontext) |
491 |
+ * mlx5_ib_vma_close. |
492 |
+ */ |
493 |
+ down_write(&owning_mm->mmap_sem); |
494 |
++ if (!mmget_still_valid(owning_mm)) |
495 |
++ goto skip_mm; |
496 |
+ mutex_lock(&context->vma_private_list_mutex); |
497 |
+ list_for_each_entry_safe(vma_private, n, &context->vma_private_list, |
498 |
+ list) { |
499 |
+@@ -1662,6 +1664,7 @@ static void mlx5_ib_disassociate_ucontext(struct ib_ucontext *ibcontext) |
500 |
+ kfree(vma_private); |
501 |
+ } |
502 |
+ mutex_unlock(&context->vma_private_list_mutex); |
503 |
++skip_mm: |
504 |
+ up_write(&owning_mm->mmap_sem); |
505 |
+ mmput(owning_mm); |
506 |
+ put_task_struct(owning_process); |
507 |
+diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c |
508 |
+index 65cb4aac8dce..477e07036add 100644 |
509 |
+--- a/drivers/isdn/mISDN/socket.c |
510 |
++++ b/drivers/isdn/mISDN/socket.c |
511 |
+@@ -394,7 +394,7 @@ data_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
512 |
+ memcpy(di.channelmap, dev->channelmap, |
513 |
+ sizeof(di.channelmap)); |
514 |
+ di.nrbchan = dev->nrbchan; |
515 |
+- strcpy(di.name, dev_name(&dev->dev)); |
516 |
++ strscpy(di.name, dev_name(&dev->dev), sizeof(di.name)); |
517 |
+ if (copy_to_user((void __user *)arg, &di, sizeof(di))) |
518 |
+ err = -EFAULT; |
519 |
+ } else |
520 |
+@@ -678,7 +678,7 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
521 |
+ memcpy(di.channelmap, dev->channelmap, |
522 |
+ sizeof(di.channelmap)); |
523 |
+ di.nrbchan = dev->nrbchan; |
524 |
+- strcpy(di.name, dev_name(&dev->dev)); |
525 |
++ strscpy(di.name, dev_name(&dev->dev), sizeof(di.name)); |
526 |
+ if (copy_to_user((void __user *)arg, &di, sizeof(di))) |
527 |
+ err = -EFAULT; |
528 |
+ } else |
529 |
+@@ -692,6 +692,7 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
530 |
+ err = -EFAULT; |
531 |
+ break; |
532 |
+ } |
533 |
++ dn.name[sizeof(dn.name) - 1] = '\0'; |
534 |
+ dev = get_mdevice(dn.id); |
535 |
+ if (dev) |
536 |
+ err = device_rename(&dev->dev, dn.name); |
537 |
+diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c |
538 |
+index f4b3554b0b67..236325f48ec9 100644 |
539 |
+--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c |
540 |
++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c |
541 |
+@@ -683,38 +683,41 @@ static int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self, |
542 |
+ if (is_err || rxd_wb->type & 0x1000U) { |
543 |
+ /* status error or DMA error */ |
544 |
+ buff->is_error = 1U; |
545 |
+- } else { |
546 |
+- if (self->aq_nic_cfg->is_rss) { |
547 |
+- /* last 4 byte */ |
548 |
+- u16 rss_type = rxd_wb->type & 0xFU; |
549 |
+- |
550 |
+- if (rss_type && rss_type < 0x8U) { |
551 |
+- buff->is_hash_l4 = (rss_type == 0x4 || |
552 |
+- rss_type == 0x5); |
553 |
+- buff->rss_hash = rxd_wb->rss_hash; |
554 |
+- } |
555 |
++ } |
556 |
++ if (self->aq_nic_cfg->is_rss) { |
557 |
++ /* last 4 byte */ |
558 |
++ u16 rss_type = rxd_wb->type & 0xFU; |
559 |
++ |
560 |
++ if (rss_type && rss_type < 0x8U) { |
561 |
++ buff->is_hash_l4 = (rss_type == 0x4 || |
562 |
++ rss_type == 0x5); |
563 |
++ buff->rss_hash = rxd_wb->rss_hash; |
564 |
+ } |
565 |
++ } |
566 |
+ |
567 |
+- if (HW_ATL_B0_RXD_WB_STAT2_EOP & rxd_wb->status) { |
568 |
+- buff->len = rxd_wb->pkt_len % |
569 |
+- AQ_CFG_RX_FRAME_MAX; |
570 |
+- buff->len = buff->len ? |
571 |
+- buff->len : AQ_CFG_RX_FRAME_MAX; |
572 |
+- buff->next = 0U; |
573 |
+- buff->is_eop = 1U; |
574 |
++ if (HW_ATL_B0_RXD_WB_STAT2_EOP & rxd_wb->status) { |
575 |
++ buff->len = rxd_wb->pkt_len % |
576 |
++ AQ_CFG_RX_FRAME_MAX; |
577 |
++ buff->len = buff->len ? |
578 |
++ buff->len : AQ_CFG_RX_FRAME_MAX; |
579 |
++ buff->next = 0U; |
580 |
++ buff->is_eop = 1U; |
581 |
++ } else { |
582 |
++ buff->len = |
583 |
++ rxd_wb->pkt_len > AQ_CFG_RX_FRAME_MAX ? |
584 |
++ AQ_CFG_RX_FRAME_MAX : rxd_wb->pkt_len; |
585 |
++ |
586 |
++ if (HW_ATL_B0_RXD_WB_STAT2_RSCCNT & |
587 |
++ rxd_wb->status) { |
588 |
++ /* LRO */ |
589 |
++ buff->next = rxd_wb->next_desc_ptr; |
590 |
++ ++ring->stats.rx.lro_packets; |
591 |
+ } else { |
592 |
+- if (HW_ATL_B0_RXD_WB_STAT2_RSCCNT & |
593 |
+- rxd_wb->status) { |
594 |
+- /* LRO */ |
595 |
+- buff->next = rxd_wb->next_desc_ptr; |
596 |
+- ++ring->stats.rx.lro_packets; |
597 |
+- } else { |
598 |
+- /* jumbo */ |
599 |
+- buff->next = |
600 |
+- aq_ring_next_dx(ring, |
601 |
+- ring->hw_head); |
602 |
+- ++ring->stats.rx.jumbo_packets; |
603 |
+- } |
604 |
++ /* jumbo */ |
605 |
++ buff->next = |
606 |
++ aq_ring_next_dx(ring, |
607 |
++ ring->hw_head); |
608 |
++ ++ring->stats.rx.jumbo_packets; |
609 |
+ } |
610 |
+ } |
611 |
+ } |
612 |
+diff --git a/drivers/net/ethernet/dec/tulip/de4x5.c b/drivers/net/ethernet/dec/tulip/de4x5.c |
613 |
+index 0affee9c8aa2..0b1e7a96ff49 100644 |
614 |
+--- a/drivers/net/ethernet/dec/tulip/de4x5.c |
615 |
++++ b/drivers/net/ethernet/dec/tulip/de4x5.c |
616 |
+@@ -2108,7 +2108,6 @@ static struct eisa_driver de4x5_eisa_driver = { |
617 |
+ .remove = de4x5_eisa_remove, |
618 |
+ } |
619 |
+ }; |
620 |
+-MODULE_DEVICE_TABLE(eisa, de4x5_eisa_ids); |
621 |
+ #endif |
622 |
+ |
623 |
+ #ifdef CONFIG_PCI |
624 |
+diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c |
625 |
+index 7d1819c9e8cc..6ce7b8435ace 100644 |
626 |
+--- a/drivers/net/ethernet/emulex/benet/be_ethtool.c |
627 |
++++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c |
628 |
+@@ -1103,7 +1103,7 @@ static int be_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd, |
629 |
+ cmd->data = be_get_rss_hash_opts(adapter, cmd->flow_type); |
630 |
+ break; |
631 |
+ case ETHTOOL_GRXRINGS: |
632 |
+- cmd->data = adapter->num_rx_qs - 1; |
633 |
++ cmd->data = adapter->num_rx_qs; |
634 |
+ break; |
635 |
+ default: |
636 |
+ return -EINVAL; |
637 |
+diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
638 |
+index ab09f9e43c79..5c74787f903b 100644 |
639 |
+--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
640 |
++++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
641 |
+@@ -2505,6 +2505,10 @@ mlxsw_sp_port_set_link_ksettings(struct net_device *dev, |
642 |
+ mlxsw_reg_ptys_eth_unpack(ptys_pl, ð_proto_cap, NULL, NULL); |
643 |
+ |
644 |
+ autoneg = cmd->base.autoneg == AUTONEG_ENABLE; |
645 |
++ if (!autoneg && cmd->base.speed == SPEED_56000) { |
646 |
++ netdev_err(dev, "56G not supported with autoneg off\n"); |
647 |
++ return -EINVAL; |
648 |
++ } |
649 |
+ eth_proto_new = autoneg ? |
650 |
+ mlxsw_sp_to_ptys_advert_link(cmd) : |
651 |
+ mlxsw_sp_to_ptys_speed(cmd->base.speed); |
652 |
+diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c |
653 |
+index abfb9faadbc4..9b1906a65e11 100644 |
654 |
+--- a/drivers/net/ethernet/renesas/sh_eth.c |
655 |
++++ b/drivers/net/ethernet/renesas/sh_eth.c |
656 |
+@@ -1458,6 +1458,10 @@ static void sh_eth_dev_exit(struct net_device *ndev) |
657 |
+ sh_eth_get_stats(ndev); |
658 |
+ sh_eth_reset(ndev); |
659 |
+ |
660 |
++ /* Set the RMII mode again if required */ |
661 |
++ if (mdp->cd->rmiimode) |
662 |
++ sh_eth_write(ndev, 0x1, RMIIMODE); |
663 |
++ |
664 |
+ /* Set MAC address again */ |
665 |
+ update_mac_address(ndev); |
666 |
+ } |
667 |
+diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c |
668 |
+index c1ab976cc800..12b09e6e03ba 100644 |
669 |
+--- a/drivers/net/phy/dp83867.c |
670 |
++++ b/drivers/net/phy/dp83867.c |
671 |
+@@ -249,10 +249,8 @@ static int dp83867_config_init(struct phy_device *phydev) |
672 |
+ ret = phy_write(phydev, MII_DP83867_PHYCTRL, val); |
673 |
+ if (ret) |
674 |
+ return ret; |
675 |
+- } |
676 |
+ |
677 |
+- if ((phydev->interface >= PHY_INTERFACE_MODE_RGMII_ID) && |
678 |
+- (phydev->interface <= PHY_INTERFACE_MODE_RGMII_RXID)) { |
679 |
++ /* Set up RGMII delays */ |
680 |
+ val = phy_read_mmd(phydev, DP83867_DEVADDR, DP83867_RGMIICTL); |
681 |
+ |
682 |
+ if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) |
683 |
+diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c |
684 |
+index 512c8f1ea5b0..902f5e03ec94 100644 |
685 |
+--- a/drivers/scsi/cxgbi/libcxgbi.c |
686 |
++++ b/drivers/scsi/cxgbi/libcxgbi.c |
687 |
+@@ -640,6 +640,10 @@ cxgbi_check_route(struct sockaddr *dst_addr, int ifindex) |
688 |
+ |
689 |
+ if (ndev->flags & IFF_LOOPBACK) { |
690 |
+ ndev = ip_dev_find(&init_net, daddr->sin_addr.s_addr); |
691 |
++ if (!ndev) { |
692 |
++ err = -ENETUNREACH; |
693 |
++ goto rel_neigh; |
694 |
++ } |
695 |
+ mtu = ndev->mtu; |
696 |
+ pr_info("rt dev %s, loopback -> %s, mtu %u.\n", |
697 |
+ n->dev->name, ndev->name, mtu); |
698 |
+diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c |
699 |
+index 0962fd544401..09c6a16fab93 100644 |
700 |
+--- a/drivers/scsi/device_handler/scsi_dh_alua.c |
701 |
++++ b/drivers/scsi/device_handler/scsi_dh_alua.c |
702 |
+@@ -1151,10 +1151,8 @@ static int __init alua_init(void) |
703 |
+ int r; |
704 |
+ |
705 |
+ kaluad_wq = alloc_workqueue("kaluad", WQ_MEM_RECLAIM, 0); |
706 |
+- if (!kaluad_wq) { |
707 |
+- /* Temporary failure, bypass */ |
708 |
+- return SCSI_DH_DEV_TEMP_BUSY; |
709 |
+- } |
710 |
++ if (!kaluad_wq) |
711 |
++ return -ENOMEM; |
712 |
+ |
713 |
+ r = scsi_register_device_handler(&alua_dh); |
714 |
+ if (r != 0) { |
715 |
+diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c |
716 |
+index ffea620a147d..259ee0d3c3e6 100644 |
717 |
+--- a/drivers/scsi/libsas/sas_expander.c |
718 |
++++ b/drivers/scsi/libsas/sas_expander.c |
719 |
+@@ -989,6 +989,8 @@ static struct domain_device *sas_ex_discover_expander( |
720 |
+ list_del(&child->dev_list_node); |
721 |
+ spin_unlock_irq(&parent->port->dev_list_lock); |
722 |
+ sas_put_device(child); |
723 |
++ sas_port_delete(phy->port); |
724 |
++ phy->port = NULL; |
725 |
+ return NULL; |
726 |
+ } |
727 |
+ list_add_tail(&child->siblings, &parent->ex_dev.children); |
728 |
+diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c |
729 |
+index 5ec2898d21cd..d34351c6b9af 100644 |
730 |
+--- a/drivers/scsi/smartpqi/smartpqi_init.c |
731 |
++++ b/drivers/scsi/smartpqi/smartpqi_init.c |
732 |
+@@ -6392,7 +6392,7 @@ static int pqi_pci_init(struct pqi_ctrl_info *ctrl_info) |
733 |
+ else |
734 |
+ mask = DMA_BIT_MASK(32); |
735 |
+ |
736 |
+- rc = dma_set_mask(&ctrl_info->pci_dev->dev, mask); |
737 |
++ rc = dma_set_mask_and_coherent(&ctrl_info->pci_dev->dev, mask); |
738 |
+ if (rc) { |
739 |
+ dev_err(&ctrl_info->pci_dev->dev, "failed to set DMA mask\n"); |
740 |
+ goto disable_device; |
741 |
+diff --git a/drivers/staging/vc04_services/bcm2835-camera/controls.c b/drivers/staging/vc04_services/bcm2835-camera/controls.c |
742 |
+index 77a5d6f4e1eb..8a242f609d3b 100644 |
743 |
+--- a/drivers/staging/vc04_services/bcm2835-camera/controls.c |
744 |
++++ b/drivers/staging/vc04_services/bcm2835-camera/controls.c |
745 |
+@@ -579,7 +579,7 @@ exit: |
746 |
+ dev->colourfx.enable ? "true" : "false", |
747 |
+ dev->colourfx.u, dev->colourfx.v, |
748 |
+ ret, (ret == 0 ? 0 : -EINVAL)); |
749 |
+- return (ret == 0 ? 0 : EINVAL); |
750 |
++ return (ret == 0 ? 0 : -EINVAL); |
751 |
+ } |
752 |
+ |
753 |
+ static int ctrl_set_colfx(struct bm2835_mmal_dev *dev, |
754 |
+@@ -603,7 +603,7 @@ static int ctrl_set_colfx(struct bm2835_mmal_dev *dev, |
755 |
+ "%s: After: mmal_ctrl:%p ctrl id:0x%x ctrl val:%d ret %d(%d)\n", |
756 |
+ __func__, mmal_ctrl, ctrl->id, ctrl->val, ret, |
757 |
+ (ret == 0 ? 0 : -EINVAL)); |
758 |
+- return (ret == 0 ? 0 : EINVAL); |
759 |
++ return (ret == 0 ? 0 : -EINVAL); |
760 |
+ } |
761 |
+ |
762 |
+ static int ctrl_set_bitrate(struct bm2835_mmal_dev *dev, |
763 |
+diff --git a/drivers/tty/serial/sunhv.c b/drivers/tty/serial/sunhv.c |
764 |
+index 46e46894e918..84c4d83fcfca 100644 |
765 |
+--- a/drivers/tty/serial/sunhv.c |
766 |
++++ b/drivers/tty/serial/sunhv.c |
767 |
+@@ -396,7 +396,7 @@ static const struct uart_ops sunhv_pops = { |
768 |
+ static struct uart_driver sunhv_reg = { |
769 |
+ .owner = THIS_MODULE, |
770 |
+ .driver_name = "sunhv", |
771 |
+- .dev_name = "ttyS", |
772 |
++ .dev_name = "ttyHV", |
773 |
+ .major = TTY_MAJOR, |
774 |
+ }; |
775 |
+ |
776 |
+diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c |
777 |
+index d7955dc56737..a1985a9ad2d6 100644 |
778 |
+--- a/fs/configfs/dir.c |
779 |
++++ b/fs/configfs/dir.c |
780 |
+@@ -58,15 +58,13 @@ static void configfs_d_iput(struct dentry * dentry, |
781 |
+ if (sd) { |
782 |
+ /* Coordinate with configfs_readdir */ |
783 |
+ spin_lock(&configfs_dirent_lock); |
784 |
+- /* Coordinate with configfs_attach_attr where will increase |
785 |
+- * sd->s_count and update sd->s_dentry to new allocated one. |
786 |
+- * Only set sd->dentry to null when this dentry is the only |
787 |
+- * sd owner. |
788 |
+- * If not do so, configfs_d_iput may run just after |
789 |
+- * configfs_attach_attr and set sd->s_dentry to null |
790 |
+- * even it's still in use. |
791 |
++ /* |
792 |
++ * Set sd->s_dentry to null only when this dentry is the one |
793 |
++ * that is going to be killed. Otherwise configfs_d_iput may |
794 |
++ * run just after configfs_attach_attr and set sd->s_dentry to |
795 |
++ * NULL even it's still in use. |
796 |
+ */ |
797 |
+- if (atomic_read(&sd->s_count) <= 2) |
798 |
++ if (sd->s_dentry == dentry) |
799 |
+ sd->s_dentry = NULL; |
800 |
+ |
801 |
+ spin_unlock(&configfs_dirent_lock); |
802 |
+diff --git a/fs/inode.c b/fs/inode.c |
803 |
+index cfc36d11bcb3..76f7535fe754 100644 |
804 |
+--- a/fs/inode.c |
805 |
++++ b/fs/inode.c |
806 |
+@@ -1817,8 +1817,13 @@ int file_remove_privs(struct file *file) |
807 |
+ int kill; |
808 |
+ int error = 0; |
809 |
+ |
810 |
+- /* Fast path for nothing security related */ |
811 |
+- if (IS_NOSEC(inode)) |
812 |
++ /* |
813 |
++ * Fast path for nothing security related. |
814 |
++ * As well for non-regular files, e.g. blkdev inodes. |
815 |
++ * For example, blkdev_write_iter() might get here |
816 |
++ * trying to remove privs which it is not allowed to. |
817 |
++ */ |
818 |
++ if (IS_NOSEC(inode) || !S_ISREG(inode->i_mode)) |
819 |
+ return 0; |
820 |
+ |
821 |
+ kill = dentry_needs_remove_privs(dentry); |
822 |
+diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h |
823 |
+index ef4ae0a545fe..9f7cc1d7ec4a 100644 |
824 |
+--- a/include/linux/sched/mm.h |
825 |
++++ b/include/linux/sched/mm.h |
826 |
+@@ -62,6 +62,10 @@ static inline void mmdrop_async(struct mm_struct *mm) |
827 |
+ * followed by taking the mmap_sem for writing before modifying the |
828 |
+ * vmas or anything the coredump pretends not to change from under it. |
829 |
+ * |
830 |
++ * It also has to be called when mmgrab() is used in the context of |
831 |
++ * the process, but then the mm_count refcount is transferred outside |
832 |
++ * the context of the process to run down_write() on that pinned mm. |
833 |
++ * |
834 |
+ * NOTE: find_extend_vma() called from GUP context is the only place |
835 |
+ * that can modify the "mm" (notably the vm_start/end) under mmap_sem |
836 |
+ * for reading and outside the context of the process, so it is also |
837 |
+diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c |
838 |
+index 489dc6b60053..f3a69a4f0d57 100644 |
839 |
+--- a/kernel/events/ring_buffer.c |
840 |
++++ b/kernel/events/ring_buffer.c |
841 |
+@@ -49,14 +49,30 @@ static void perf_output_put_handle(struct perf_output_handle *handle) |
842 |
+ unsigned long head; |
843 |
+ |
844 |
+ again: |
845 |
++ /* |
846 |
++ * In order to avoid publishing a head value that goes backwards, |
847 |
++ * we must ensure the load of @rb->head happens after we've |
848 |
++ * incremented @rb->nest. |
849 |
++ * |
850 |
++ * Otherwise we can observe a @rb->head value before one published |
851 |
++ * by an IRQ/NMI happening between the load and the increment. |
852 |
++ */ |
853 |
++ barrier(); |
854 |
+ head = local_read(&rb->head); |
855 |
+ |
856 |
+ /* |
857 |
+- * IRQ/NMI can happen here, which means we can miss a head update. |
858 |
++ * IRQ/NMI can happen here and advance @rb->head, causing our |
859 |
++ * load above to be stale. |
860 |
+ */ |
861 |
+ |
862 |
+- if (!local_dec_and_test(&rb->nest)) |
863 |
++ /* |
864 |
++ * If this isn't the outermost nesting, we don't have to update |
865 |
++ * @rb->user_page->data_head. |
866 |
++ */ |
867 |
++ if (local_read(&rb->nest) > 1) { |
868 |
++ local_dec(&rb->nest); |
869 |
+ goto out; |
870 |
++ } |
871 |
+ |
872 |
+ /* |
873 |
+ * Since the mmap() consumer (userspace) can run on a different CPU: |
874 |
+@@ -85,12 +101,21 @@ again: |
875 |
+ * See perf_output_begin(). |
876 |
+ */ |
877 |
+ smp_wmb(); /* B, matches C */ |
878 |
+- rb->user_page->data_head = head; |
879 |
++ WRITE_ONCE(rb->user_page->data_head, head); |
880 |
++ |
881 |
++ /* |
882 |
++ * We must publish the head before decrementing the nest count, |
883 |
++ * otherwise an IRQ/NMI can publish a more recent head value and our |
884 |
++ * write will (temporarily) publish a stale value. |
885 |
++ */ |
886 |
++ barrier(); |
887 |
++ local_set(&rb->nest, 0); |
888 |
+ |
889 |
+ /* |
890 |
+- * Now check if we missed an update -- rely on previous implied |
891 |
+- * compiler barriers to force a re-read. |
892 |
++ * Ensure we decrement @rb->nest before we validate the @rb->head. |
893 |
++ * Otherwise we cannot be sure we caught the 'last' nested update. |
894 |
+ */ |
895 |
++ barrier(); |
896 |
+ if (unlikely(head != local_read(&rb->head))) { |
897 |
+ local_inc(&rb->nest); |
898 |
+ goto again; |
899 |
+@@ -464,7 +489,7 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size) |
900 |
+ handle->aux_flags); |
901 |
+ } |
902 |
+ |
903 |
+- rb->user_page->aux_head = rb->aux_head; |
904 |
++ WRITE_ONCE(rb->user_page->aux_head, rb->aux_head); |
905 |
+ if (rb_need_aux_wakeup(rb)) |
906 |
+ wakeup = true; |
907 |
+ |
908 |
+@@ -495,7 +520,7 @@ int perf_aux_output_skip(struct perf_output_handle *handle, unsigned long size) |
909 |
+ |
910 |
+ rb->aux_head += size; |
911 |
+ |
912 |
+- rb->user_page->aux_head = rb->aux_head; |
913 |
++ WRITE_ONCE(rb->user_page->aux_head, rb->aux_head); |
914 |
+ if (rb_need_aux_wakeup(rb)) { |
915 |
+ perf_output_wakeup(handle); |
916 |
+ handle->wakeup = rb->aux_wakeup + rb->aux_watermark; |
917 |
+diff --git a/mm/khugepaged.c b/mm/khugepaged.c |
918 |
+index d27a73737f1a..acf66c5dc9bd 100644 |
919 |
+--- a/mm/khugepaged.c |
920 |
++++ b/mm/khugepaged.c |
921 |
+@@ -1006,6 +1006,9 @@ static void collapse_huge_page(struct mm_struct *mm, |
922 |
+ * handled by the anon_vma lock + PG_lock. |
923 |
+ */ |
924 |
+ down_write(&mm->mmap_sem); |
925 |
++ result = SCAN_ANY_PROCESS; |
926 |
++ if (!mmget_still_valid(mm)) |
927 |
++ goto out; |
928 |
+ result = hugepage_vma_revalidate(mm, address, &vma); |
929 |
+ if (result) |
930 |
+ goto out; |
931 |
+diff --git a/net/ax25/ax25_route.c b/net/ax25/ax25_route.c |
932 |
+index 7f369f1db7ae..b8e1a5e6a9d3 100644 |
933 |
+--- a/net/ax25/ax25_route.c |
934 |
++++ b/net/ax25/ax25_route.c |
935 |
+@@ -443,9 +443,11 @@ int ax25_rt_autobind(ax25_cb *ax25, ax25_address *addr) |
936 |
+ } |
937 |
+ |
938 |
+ if (ax25->sk != NULL) { |
939 |
++ local_bh_disable(); |
940 |
+ bh_lock_sock(ax25->sk); |
941 |
+ sock_reset_flag(ax25->sk, SOCK_ZAPPED); |
942 |
+ bh_unlock_sock(ax25->sk); |
943 |
++ local_bh_enable(); |
944 |
+ } |
945 |
+ |
946 |
+ put: |
947 |
+diff --git a/net/core/neighbour.c b/net/core/neighbour.c |
948 |
+index dd83a81db55f..04b0e399361a 100644 |
949 |
+--- a/net/core/neighbour.c |
950 |
++++ b/net/core/neighbour.c |
951 |
+@@ -2743,6 +2743,7 @@ static void *neigh_get_idx_any(struct seq_file *seq, loff_t *pos) |
952 |
+ } |
953 |
+ |
954 |
+ void *neigh_seq_start(struct seq_file *seq, loff_t *pos, struct neigh_table *tbl, unsigned int neigh_seq_flags) |
955 |
++ __acquires(tbl->lock) |
956 |
+ __acquires(rcu_bh) |
957 |
+ { |
958 |
+ struct neigh_seq_state *state = seq->private; |
959 |
+@@ -2753,6 +2754,7 @@ void *neigh_seq_start(struct seq_file *seq, loff_t *pos, struct neigh_table *tbl |
960 |
+ |
961 |
+ rcu_read_lock_bh(); |
962 |
+ state->nht = rcu_dereference_bh(tbl->nht); |
963 |
++ read_lock(&tbl->lock); |
964 |
+ |
965 |
+ return *pos ? neigh_get_idx_any(seq, pos) : SEQ_START_TOKEN; |
966 |
+ } |
967 |
+@@ -2786,8 +2788,13 @@ out: |
968 |
+ EXPORT_SYMBOL(neigh_seq_next); |
969 |
+ |
970 |
+ void neigh_seq_stop(struct seq_file *seq, void *v) |
971 |
++ __releases(tbl->lock) |
972 |
+ __releases(rcu_bh) |
973 |
+ { |
974 |
++ struct neigh_seq_state *state = seq->private; |
975 |
++ struct neigh_table *tbl = state->tbl; |
976 |
++ |
977 |
++ read_unlock(&tbl->lock); |
978 |
+ rcu_read_unlock_bh(); |
979 |
+ } |
980 |
+ EXPORT_SYMBOL(neigh_seq_stop); |
981 |
+diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c |
982 |
+index 6fa2bc236d9e..c7458a606e2e 100644 |
983 |
+--- a/net/ipv6/ip6_flowlabel.c |
984 |
++++ b/net/ipv6/ip6_flowlabel.c |
985 |
+@@ -254,9 +254,9 @@ struct ip6_flowlabel *fl6_sock_lookup(struct sock *sk, __be32 label) |
986 |
+ rcu_read_lock_bh(); |
987 |
+ for_each_sk_fl_rcu(np, sfl) { |
988 |
+ struct ip6_flowlabel *fl = sfl->fl; |
989 |
+- if (fl->label == label) { |
990 |
++ |
991 |
++ if (fl->label == label && atomic_inc_not_zero(&fl->users)) { |
992 |
+ fl->lastuse = jiffies; |
993 |
+- atomic_inc(&fl->users); |
994 |
+ rcu_read_unlock_bh(); |
995 |
+ return fl; |
996 |
+ } |
997 |
+@@ -623,7 +623,8 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen) |
998 |
+ goto done; |
999 |
+ } |
1000 |
+ fl1 = sfl->fl; |
1001 |
+- atomic_inc(&fl1->users); |
1002 |
++ if (!atomic_inc_not_zero(&fl1->users)) |
1003 |
++ fl1 = NULL; |
1004 |
+ break; |
1005 |
+ } |
1006 |
+ } |
1007 |
+diff --git a/net/lapb/lapb_iface.c b/net/lapb/lapb_iface.c |
1008 |
+index e15314e3b464..299de0c0508e 100644 |
1009 |
+--- a/net/lapb/lapb_iface.c |
1010 |
++++ b/net/lapb/lapb_iface.c |
1011 |
+@@ -182,6 +182,7 @@ int lapb_unregister(struct net_device *dev) |
1012 |
+ lapb = __lapb_devtostruct(dev); |
1013 |
+ if (!lapb) |
1014 |
+ goto out; |
1015 |
++ lapb_put(lapb); |
1016 |
+ |
1017 |
+ lapb_stop_t1timer(lapb); |
1018 |
+ lapb_stop_t2timer(lapb); |
1019 |
+diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c |
1020 |
+index d1c0378144f3..ee97ce176b9a 100644 |
1021 |
+--- a/net/netfilter/ipvs/ip_vs_core.c |
1022 |
++++ b/net/netfilter/ipvs/ip_vs_core.c |
1023 |
+@@ -2268,7 +2268,6 @@ static void __net_exit __ip_vs_cleanup(struct net *net) |
1024 |
+ { |
1025 |
+ struct netns_ipvs *ipvs = net_ipvs(net); |
1026 |
+ |
1027 |
+- nf_unregister_net_hooks(net, ip_vs_ops, ARRAY_SIZE(ip_vs_ops)); |
1028 |
+ ip_vs_service_net_cleanup(ipvs); /* ip_vs_flush() with locks */ |
1029 |
+ ip_vs_conn_net_cleanup(ipvs); |
1030 |
+ ip_vs_app_net_cleanup(ipvs); |
1031 |
+@@ -2283,6 +2282,7 @@ static void __net_exit __ip_vs_dev_cleanup(struct net *net) |
1032 |
+ { |
1033 |
+ struct netns_ipvs *ipvs = net_ipvs(net); |
1034 |
+ EnterFunction(2); |
1035 |
++ nf_unregister_net_hooks(net, ip_vs_ops, ARRAY_SIZE(ip_vs_ops)); |
1036 |
+ ipvs->enable = 0; /* Disable packet reception */ |
1037 |
+ smp_wmb(); |
1038 |
+ ip_vs_sync_net_cleanup(ipvs); |
1039 |
+diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c |
1040 |
+index f7e21953b1de..8260b1e73bbd 100644 |
1041 |
+--- a/net/netfilter/nf_queue.c |
1042 |
++++ b/net/netfilter/nf_queue.c |
1043 |
+@@ -193,6 +193,7 @@ static unsigned int nf_iterate(struct sk_buff *skb, |
1044 |
+ repeat: |
1045 |
+ verdict = nf_hook_entry_hookfn(hook, skb, state); |
1046 |
+ if (verdict != NF_ACCEPT) { |
1047 |
++ *index = i; |
1048 |
+ if (verdict != NF_REPEAT) |
1049 |
+ return verdict; |
1050 |
+ goto repeat; |
1051 |
+diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c |
1052 |
+index 04a3128adcf0..b9377afeaba4 100644 |
1053 |
+--- a/net/openvswitch/vport-internal_dev.c |
1054 |
++++ b/net/openvswitch/vport-internal_dev.c |
1055 |
+@@ -176,7 +176,9 @@ static struct vport *internal_dev_create(const struct vport_parms *parms) |
1056 |
+ { |
1057 |
+ struct vport *vport; |
1058 |
+ struct internal_dev *internal_dev; |
1059 |
++ struct net_device *dev; |
1060 |
+ int err; |
1061 |
++ bool free_vport = true; |
1062 |
+ |
1063 |
+ vport = ovs_vport_alloc(0, &ovs_internal_vport_ops, parms); |
1064 |
+ if (IS_ERR(vport)) { |
1065 |
+@@ -184,8 +186,9 @@ static struct vport *internal_dev_create(const struct vport_parms *parms) |
1066 |
+ goto error; |
1067 |
+ } |
1068 |
+ |
1069 |
+- vport->dev = alloc_netdev(sizeof(struct internal_dev), |
1070 |
+- parms->name, NET_NAME_USER, do_setup); |
1071 |
++ dev = alloc_netdev(sizeof(struct internal_dev), |
1072 |
++ parms->name, NET_NAME_USER, do_setup); |
1073 |
++ vport->dev = dev; |
1074 |
+ if (!vport->dev) { |
1075 |
+ err = -ENOMEM; |
1076 |
+ goto error_free_vport; |
1077 |
+@@ -207,8 +210,10 @@ static struct vport *internal_dev_create(const struct vport_parms *parms) |
1078 |
+ |
1079 |
+ rtnl_lock(); |
1080 |
+ err = register_netdevice(vport->dev); |
1081 |
+- if (err) |
1082 |
++ if (err) { |
1083 |
++ free_vport = false; |
1084 |
+ goto error_unlock; |
1085 |
++ } |
1086 |
+ |
1087 |
+ dev_set_promiscuity(vport->dev, 1); |
1088 |
+ rtnl_unlock(); |
1089 |
+@@ -218,11 +223,12 @@ static struct vport *internal_dev_create(const struct vport_parms *parms) |
1090 |
+ |
1091 |
+ error_unlock: |
1092 |
+ rtnl_unlock(); |
1093 |
+- free_percpu(vport->dev->tstats); |
1094 |
++ free_percpu(dev->tstats); |
1095 |
+ error_free_netdev: |
1096 |
+- free_netdev(vport->dev); |
1097 |
++ free_netdev(dev); |
1098 |
+ error_free_vport: |
1099 |
+- ovs_vport_free(vport); |
1100 |
++ if (free_vport) |
1101 |
++ ovs_vport_free(vport); |
1102 |
+ error: |
1103 |
+ return ERR_PTR(err); |
1104 |
+ } |
1105 |
+diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c |
1106 |
+index 4edb4f5596b8..f67df16bd340 100644 |
1107 |
+--- a/net/sctp/sm_make_chunk.c |
1108 |
++++ b/net/sctp/sm_make_chunk.c |
1109 |
+@@ -2586,6 +2586,8 @@ do_addr_param: |
1110 |
+ case SCTP_PARAM_STATE_COOKIE: |
1111 |
+ asoc->peer.cookie_len = |
1112 |
+ ntohs(param.p->length) - sizeof(struct sctp_paramhdr); |
1113 |
++ if (asoc->peer.cookie) |
1114 |
++ kfree(asoc->peer.cookie); |
1115 |
+ asoc->peer.cookie = kmemdup(param.cookie->body, asoc->peer.cookie_len, gfp); |
1116 |
+ if (!asoc->peer.cookie) |
1117 |
+ retval = 0; |
1118 |
+@@ -2650,6 +2652,8 @@ do_addr_param: |
1119 |
+ goto fall_through; |
1120 |
+ |
1121 |
+ /* Save peer's random parameter */ |
1122 |
++ if (asoc->peer.peer_random) |
1123 |
++ kfree(asoc->peer.peer_random); |
1124 |
+ asoc->peer.peer_random = kmemdup(param.p, |
1125 |
+ ntohs(param.p->length), gfp); |
1126 |
+ if (!asoc->peer.peer_random) { |
1127 |
+@@ -2663,6 +2667,8 @@ do_addr_param: |
1128 |
+ goto fall_through; |
1129 |
+ |
1130 |
+ /* Save peer's HMAC list */ |
1131 |
++ if (asoc->peer.peer_hmacs) |
1132 |
++ kfree(asoc->peer.peer_hmacs); |
1133 |
+ asoc->peer.peer_hmacs = kmemdup(param.p, |
1134 |
+ ntohs(param.p->length), gfp); |
1135 |
+ if (!asoc->peer.peer_hmacs) { |
1136 |
+@@ -2678,6 +2684,8 @@ do_addr_param: |
1137 |
+ if (!ep->auth_enable) |
1138 |
+ goto fall_through; |
1139 |
+ |
1140 |
++ if (asoc->peer.peer_chunks) |
1141 |
++ kfree(asoc->peer.peer_chunks); |
1142 |
+ asoc->peer.peer_chunks = kmemdup(param.p, |
1143 |
+ ntohs(param.p->length), gfp); |
1144 |
+ if (!asoc->peer.peer_chunks) |
1145 |
+diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c |
1146 |
+index 65fb1e7edb9c..d349f69ef03c 100644 |
1147 |
+--- a/sound/pci/hda/hda_intel.c |
1148 |
++++ b/sound/pci/hda/hda_intel.c |
1149 |
+@@ -376,6 +376,7 @@ enum { |
1150 |
+ |
1151 |
+ #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98) |
1152 |
+ #define IS_CFL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348) |
1153 |
++#define IS_CNL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9dc8) |
1154 |
+ |
1155 |
+ static char *driver_short_names[] = { |
1156 |
+ [AZX_DRIVER_ICH] = "HDA Intel", |
1157 |
+@@ -1751,8 +1752,8 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci, |
1158 |
+ else |
1159 |
+ chip->bdl_pos_adj = bdl_pos_adj[dev]; |
1160 |
+ |
1161 |
+- /* Workaround for a communication error on CFL (bko#199007) */ |
1162 |
+- if (IS_CFL(pci)) |
1163 |
++ /* Workaround for a communication error on CFL (bko#199007) and CNL */ |
1164 |
++ if (IS_CFL(pci) || IS_CNL(pci)) |
1165 |
+ chip->polling_mode = 1; |
1166 |
+ |
1167 |
+ err = azx_bus_init(chip, model[dev], &pci_hda_io_ops); |
1168 |
+diff --git a/tools/perf/arch/s390/util/machine.c b/tools/perf/arch/s390/util/machine.c |
1169 |
+index 0b2054007314..a19690a17291 100644 |
1170 |
+--- a/tools/perf/arch/s390/util/machine.c |
1171 |
++++ b/tools/perf/arch/s390/util/machine.c |
1172 |
+@@ -5,16 +5,19 @@ |
1173 |
+ #include "util.h" |
1174 |
+ #include "machine.h" |
1175 |
+ #include "api/fs/fs.h" |
1176 |
++#include "debug.h" |
1177 |
+ |
1178 |
+ int arch__fix_module_text_start(u64 *start, const char *name) |
1179 |
+ { |
1180 |
++ u64 m_start = *start; |
1181 |
+ char path[PATH_MAX]; |
1182 |
+ |
1183 |
+ snprintf(path, PATH_MAX, "module/%.*s/sections/.text", |
1184 |
+ (int)strlen(name) - 2, name + 1); |
1185 |
+- |
1186 |
+- if (sysfs__read_ull(path, (unsigned long long *)start) < 0) |
1187 |
+- return -1; |
1188 |
++ if (sysfs__read_ull(path, (unsigned long long *)start) < 0) { |
1189 |
++ pr_debug2("Using module %s start:%#lx\n", path, m_start); |
1190 |
++ *start = m_start; |
1191 |
++ } |
1192 |
+ |
1193 |
+ return 0; |
1194 |
+ } |
1195 |
+diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c |
1196 |
+index 2346cecb8ea2..5131304ea3a8 100644 |
1197 |
+--- a/tools/perf/util/data-convert-bt.c |
1198 |
++++ b/tools/perf/util/data-convert-bt.c |
1199 |
+@@ -271,7 +271,7 @@ static int string_set_value(struct bt_ctf_field *field, const char *string) |
1200 |
+ if (i > 0) |
1201 |
+ strncpy(buffer, string, i); |
1202 |
+ } |
1203 |
+- strncat(buffer + p, numstr, 4); |
1204 |
++ memcpy(buffer + p, numstr, 4); |
1205 |
+ p += 3; |
1206 |
+ } |
1207 |
+ } |
1208 |
+diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c |
1209 |
+index 968fd0454e6b..d246080cd85e 100644 |
1210 |
+--- a/tools/perf/util/machine.c |
1211 |
++++ b/tools/perf/util/machine.c |
1212 |
+@@ -156,6 +156,9 @@ void machine__delete_threads(struct machine *machine) |
1213 |
+ |
1214 |
+ void machine__exit(struct machine *machine) |
1215 |
+ { |
1216 |
++ if (machine == NULL) |
1217 |
++ return; |
1218 |
++ |
1219 |
+ machine__destroy_kernel_maps(machine); |
1220 |
+ map_groups__exit(&machine->kmaps); |
1221 |
+ dsos__exit(&machine->dsos); |
1222 |
+diff --git a/tools/testing/selftests/netfilter/nft_nat.sh b/tools/testing/selftests/netfilter/nft_nat.sh |
1223 |
+index 8ec76681605c..f25f72a75cf3 100755 |
1224 |
+--- a/tools/testing/selftests/netfilter/nft_nat.sh |
1225 |
++++ b/tools/testing/selftests/netfilter/nft_nat.sh |
1226 |
+@@ -23,7 +23,11 @@ ip netns add ns0 |
1227 |
+ ip netns add ns1 |
1228 |
+ ip netns add ns2 |
1229 |
+ |
1230 |
+-ip link add veth0 netns ns0 type veth peer name eth0 netns ns1 |
1231 |
++ip link add veth0 netns ns0 type veth peer name eth0 netns ns1 > /dev/null 2>&1 |
1232 |
++if [ $? -ne 0 ];then |
1233 |
++ echo "SKIP: No virtual ethernet pair device support in kernel" |
1234 |
++ exit $ksft_skip |
1235 |
++fi |
1236 |
+ ip link add veth1 netns ns0 type veth peer name eth0 netns ns2 |
1237 |
+ |
1238 |
+ ip -net ns0 link set lo up |