Gentoo Archives: gentoo-commits

From: Alice Ferrazzi <alicef@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.19 commit in: /
Date: Sun, 04 Nov 2018 16:22:54
Message-Id: 1541348509.4196ed330cd049bfd7781bc2f3e71b646e13a0bd.alicef@gentoo
1 commit: 4196ed330cd049bfd7781bc2f3e71b646e13a0bd
2 Author: Alice Ferrazzi <alicef <AT> gentoo <DOT> org>
3 AuthorDate: Sun Nov 4 16:21:49 2018 +0000
4 Commit: Alice Ferrazzi <alicef <AT> gentoo <DOT> org>
5 CommitDate: Sun Nov 4 16:21:49 2018 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=4196ed33
7
8 linux kernel 4.19.1
9
10 0000_README | 4 +
11 1000_linux_4.19.1.patch | 966 ++++++++++++++++++++++++++++++++++++++++++++++++
12 2 files changed, 970 insertions(+)
13
14 diff --git a/0000_README b/0000_README
15 index 917d838..828fbcd 100644
16 --- a/0000_README
17 +++ b/0000_README
18 @@ -43,6 +43,10 @@ EXPERIMENTAL
19 Individual Patch Descriptions:
20 --------------------------------------------------------------------------
21
22 +Patch: 1000_linux-4.19.1.patch
23 +From: http://www.kernel.org
24 +Desc: Linux 4.19.1
25 +
26 Patch: 1500_XATTR_USER_PREFIX.patch
27 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
28 Desc: Support for namespace user.pax.* on tmpfs.
29
30 diff --git a/1000_linux_4.19.1.patch b/1000_linux_4.19.1.patch
31 new file mode 100644
32 index 0000000..2274982
33 --- /dev/null
34 +++ b/1000_linux_4.19.1.patch
35 @@ -0,0 +1,966 @@
36 +diff --git a/Makefile b/Makefile
37 +index 69fa5c0310d8..abcd8ca4966f 100644
38 +--- a/Makefile
39 ++++ b/Makefile
40 +@@ -1,7 +1,7 @@
41 + # SPDX-License-Identifier: GPL-2.0
42 + VERSION = 4
43 + PATCHLEVEL = 19
44 +-SUBLEVEL = 0
45 ++SUBLEVEL = 1
46 + EXTRAVERSION =
47 + NAME = "People's Front"
48 +
49 +diff --git a/arch/sparc/include/asm/switch_to_64.h b/arch/sparc/include/asm/switch_to_64.h
50 +index 4ff29b1406a9..b1d4e2e3210f 100644
51 +--- a/arch/sparc/include/asm/switch_to_64.h
52 ++++ b/arch/sparc/include/asm/switch_to_64.h
53 +@@ -67,6 +67,7 @@ do { save_and_clear_fpu(); \
54 + } while(0)
55 +
56 + void synchronize_user_stack(void);
57 +-void fault_in_user_windows(void);
58 ++struct pt_regs;
59 ++void fault_in_user_windows(struct pt_regs *);
60 +
61 + #endif /* __SPARC64_SWITCH_TO_64_H */
62 +diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
63 +index 6c086086ca8f..59eaf6227af1 100644
64 +--- a/arch/sparc/kernel/process_64.c
65 ++++ b/arch/sparc/kernel/process_64.c
66 +@@ -36,6 +36,7 @@
67 + #include <linux/sysrq.h>
68 + #include <linux/nmi.h>
69 + #include <linux/context_tracking.h>
70 ++#include <linux/signal.h>
71 +
72 + #include <linux/uaccess.h>
73 + #include <asm/page.h>
74 +@@ -521,7 +522,12 @@ static void stack_unaligned(unsigned long sp)
75 + force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) sp, 0, current);
76 + }
77 +
78 +-void fault_in_user_windows(void)
79 ++static const char uwfault32[] = KERN_INFO \
80 ++ "%s[%d]: bad register window fault: SP %08lx (orig_sp %08lx) TPC %08lx O7 %08lx\n";
81 ++static const char uwfault64[] = KERN_INFO \
82 ++ "%s[%d]: bad register window fault: SP %016lx (orig_sp %016lx) TPC %08lx O7 %016lx\n";
83 ++
84 ++void fault_in_user_windows(struct pt_regs *regs)
85 + {
86 + struct thread_info *t = current_thread_info();
87 + unsigned long window;
88 +@@ -534,9 +540,9 @@ void fault_in_user_windows(void)
89 + do {
90 + struct reg_window *rwin = &t->reg_window[window];
91 + int winsize = sizeof(struct reg_window);
92 +- unsigned long sp;
93 ++ unsigned long sp, orig_sp;
94 +
95 +- sp = t->rwbuf_stkptrs[window];
96 ++ orig_sp = sp = t->rwbuf_stkptrs[window];
97 +
98 + if (test_thread_64bit_stack(sp))
99 + sp += STACK_BIAS;
100 +@@ -547,8 +553,16 @@ void fault_in_user_windows(void)
101 + stack_unaligned(sp);
102 +
103 + if (unlikely(copy_to_user((char __user *)sp,
104 +- rwin, winsize)))
105 ++ rwin, winsize))) {
106 ++ if (show_unhandled_signals)
107 ++ printk_ratelimited(is_compat_task() ?
108 ++ uwfault32 : uwfault64,
109 ++ current->comm, current->pid,
110 ++ sp, orig_sp,
111 ++ regs->tpc,
112 ++ regs->u_regs[UREG_I7]);
113 + goto barf;
114 ++ }
115 + } while (window--);
116 + }
117 + set_thread_wsaved(0);
118 +@@ -556,8 +570,7 @@ void fault_in_user_windows(void)
119 +
120 + barf:
121 + set_thread_wsaved(window + 1);
122 +- user_exit();
123 +- do_exit(SIGILL);
124 ++ force_sig(SIGSEGV, current);
125 + }
126 +
127 + asmlinkage long sparc_do_fork(unsigned long clone_flags,
128 +diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S
129 +index 4073e2b87dd0..29aa34f11720 100644
130 +--- a/arch/sparc/kernel/rtrap_64.S
131 ++++ b/arch/sparc/kernel/rtrap_64.S
132 +@@ -39,6 +39,7 @@ __handle_preemption:
133 + wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
134 +
135 + __handle_user_windows:
136 ++ add %sp, PTREGS_OFF, %o0
137 + call fault_in_user_windows
138 + 661: wrpr %g0, RTRAP_PSTATE, %pstate
139 + /* If userspace is using ADI, it could potentially pass
140 +diff --git a/arch/sparc/kernel/signal32.c b/arch/sparc/kernel/signal32.c
141 +index 44d379db3f64..4c5b3fcbed94 100644
142 +--- a/arch/sparc/kernel/signal32.c
143 ++++ b/arch/sparc/kernel/signal32.c
144 +@@ -371,7 +371,11 @@ static int setup_frame32(struct ksignal *ksig, struct pt_regs *regs,
145 + get_sigframe(ksig, regs, sigframe_size);
146 +
147 + if (invalid_frame_pointer(sf, sigframe_size)) {
148 +- do_exit(SIGILL);
149 ++ if (show_unhandled_signals)
150 ++ pr_info("%s[%d] bad frame in setup_frame32: %08lx TPC %08lx O7 %08lx\n",
151 ++ current->comm, current->pid, (unsigned long)sf,
152 ++ regs->tpc, regs->u_regs[UREG_I7]);
153 ++ force_sigsegv(ksig->sig, current);
154 + return -EINVAL;
155 + }
156 +
157 +@@ -501,7 +505,11 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs,
158 + get_sigframe(ksig, regs, sigframe_size);
159 +
160 + if (invalid_frame_pointer(sf, sigframe_size)) {
161 +- do_exit(SIGILL);
162 ++ if (show_unhandled_signals)
163 ++ pr_info("%s[%d] bad frame in setup_rt_frame32: %08lx TPC %08lx O7 %08lx\n",
164 ++ current->comm, current->pid, (unsigned long)sf,
165 ++ regs->tpc, regs->u_regs[UREG_I7]);
166 ++ force_sigsegv(ksig->sig, current);
167 + return -EINVAL;
168 + }
169 +
170 +diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c
171 +index 48366e5eb5b2..e9de1803a22e 100644
172 +--- a/arch/sparc/kernel/signal_64.c
173 ++++ b/arch/sparc/kernel/signal_64.c
174 +@@ -370,7 +370,11 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
175 + get_sigframe(ksig, regs, sf_size);
176 +
177 + if (invalid_frame_pointer (sf)) {
178 +- do_exit(SIGILL); /* won't return, actually */
179 ++ if (show_unhandled_signals)
180 ++ pr_info("%s[%d] bad frame in setup_rt_frame: %016lx TPC %016lx O7 %016lx\n",
181 ++ current->comm, current->pid, (unsigned long)sf,
182 ++ regs->tpc, regs->u_regs[UREG_I7]);
183 ++ force_sigsegv(ksig->sig, current);
184 + return -EINVAL;
185 + }
186 +
187 +diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S
188 +index bb68c805b891..ff9389a1c9f3 100644
189 +--- a/arch/sparc/kernel/systbls_64.S
190 ++++ b/arch/sparc/kernel/systbls_64.S
191 +@@ -47,9 +47,9 @@ sys_call_table32:
192 + .word sys_recvfrom, sys_setreuid16, sys_setregid16, sys_rename, compat_sys_truncate
193 + /*130*/ .word compat_sys_ftruncate, sys_flock, compat_sys_lstat64, sys_sendto, sys_shutdown
194 + .word sys_socketpair, sys_mkdir, sys_rmdir, compat_sys_utimes, compat_sys_stat64
195 +-/*140*/ .word sys_sendfile64, sys_nis_syscall, compat_sys_futex, sys_gettid, compat_sys_getrlimit
196 ++/*140*/ .word sys_sendfile64, sys_getpeername, compat_sys_futex, sys_gettid, compat_sys_getrlimit
197 + .word compat_sys_setrlimit, sys_pivot_root, sys_prctl, sys_pciconfig_read, sys_pciconfig_write
198 +-/*150*/ .word sys_nis_syscall, sys_inotify_init, sys_inotify_add_watch, sys_poll, sys_getdents64
199 ++/*150*/ .word sys_getsockname, sys_inotify_init, sys_inotify_add_watch, sys_poll, sys_getdents64
200 + .word compat_sys_fcntl64, sys_inotify_rm_watch, compat_sys_statfs, compat_sys_fstatfs, sys_oldumount
201 + /*160*/ .word compat_sys_sched_setaffinity, compat_sys_sched_getaffinity, sys_getdomainname, sys_setdomainname, sys_nis_syscall
202 + .word sys_quotactl, sys_set_tid_address, compat_sys_mount, compat_sys_ustat, sys_setxattr
203 +diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
204 +index f396048a0d68..39822f611c01 100644
205 +--- a/arch/sparc/mm/init_64.c
206 ++++ b/arch/sparc/mm/init_64.c
207 +@@ -1383,6 +1383,7 @@ int __node_distance(int from, int to)
208 + }
209 + return numa_latency[from][to];
210 + }
211 ++EXPORT_SYMBOL(__node_distance);
212 +
213 + static int __init find_best_numa_node_for_mlgroup(struct mdesc_mlgroup *grp)
214 + {
215 +diff --git a/crypto/af_alg.c b/crypto/af_alg.c
216 +index b053179e0bc5..17eb09d222ff 100644
217 +--- a/crypto/af_alg.c
218 ++++ b/crypto/af_alg.c
219 +@@ -1071,7 +1071,7 @@ __poll_t af_alg_poll(struct file *file, struct socket *sock,
220 + struct af_alg_ctx *ctx = ask->private;
221 + __poll_t mask;
222 +
223 +- sock_poll_wait(file, wait);
224 ++ sock_poll_wait(file, sock, wait);
225 + mask = 0;
226 +
227 + if (!ctx->more || ctx->used)
228 +diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
229 +index 9697977b80f0..6b9ad8673218 100644
230 +--- a/drivers/net/bonding/bond_netlink.c
231 ++++ b/drivers/net/bonding/bond_netlink.c
232 +@@ -638,8 +638,7 @@ static int bond_fill_info(struct sk_buff *skb,
233 + goto nla_put_failure;
234 +
235 + if (nla_put(skb, IFLA_BOND_AD_ACTOR_SYSTEM,
236 +- sizeof(bond->params.ad_actor_system),
237 +- &bond->params.ad_actor_system))
238 ++ ETH_ALEN, &bond->params.ad_actor_system))
239 + goto nla_put_failure;
240 + }
241 + if (!bond_3ad_get_active_agg_info(bond, &info)) {
242 +diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
243 +index 58bcee8f0a58..ce041c90adb0 100644
244 +--- a/drivers/net/ethernet/emulex/benet/be.h
245 ++++ b/drivers/net/ethernet/emulex/benet/be.h
246 +@@ -185,6 +185,7 @@ static inline void queue_tail_inc(struct be_queue_info *q)
247 +
248 + struct be_eq_obj {
249 + struct be_queue_info q;
250 ++ char desc[32];
251 +
252 + struct be_adapter *adapter;
253 + struct napi_struct napi;
254 +diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
255 +index 534787291b44..bff74752cef1 100644
256 +--- a/drivers/net/ethernet/emulex/benet/be_main.c
257 ++++ b/drivers/net/ethernet/emulex/benet/be_main.c
258 +@@ -3488,11 +3488,9 @@ static int be_msix_register(struct be_adapter *adapter)
259 + int status, i, vec;
260 +
261 + for_all_evt_queues(adapter, eqo, i) {
262 +- char irq_name[IFNAMSIZ+4];
263 +-
264 +- snprintf(irq_name, sizeof(irq_name), "%s-q%d", netdev->name, i);
265 ++ sprintf(eqo->desc, "%s-q%d", netdev->name, i);
266 + vec = be_msix_vec_get(adapter, eqo);
267 +- status = request_irq(vec, be_msix, 0, irq_name, eqo);
268 ++ status = request_irq(vec, be_msix, 0, eqo->desc, eqo);
269 + if (status)
270 + goto err_msix;
271 +
272 +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
273 +index 00172dee5339..a144146b769c 100644
274 +--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
275 ++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
276 +@@ -696,43 +696,15 @@ static inline bool is_last_ethertype_ip(struct sk_buff *skb, int *network_depth)
277 + return (ethertype == htons(ETH_P_IP) || ethertype == htons(ETH_P_IPV6));
278 + }
279 +
280 +-static __be32 mlx5e_get_fcs(struct sk_buff *skb)
281 ++static u32 mlx5e_get_fcs(const struct sk_buff *skb)
282 + {
283 +- int last_frag_sz, bytes_in_prev, nr_frags;
284 +- u8 *fcs_p1, *fcs_p2;
285 +- skb_frag_t *last_frag;
286 +- __be32 fcs_bytes;
287 ++ const void *fcs_bytes;
288 ++ u32 _fcs_bytes;
289 +
290 +- if (!skb_is_nonlinear(skb))
291 +- return *(__be32 *)(skb->data + skb->len - ETH_FCS_LEN);
292 ++ fcs_bytes = skb_header_pointer(skb, skb->len - ETH_FCS_LEN,
293 ++ ETH_FCS_LEN, &_fcs_bytes);
294 +
295 +- nr_frags = skb_shinfo(skb)->nr_frags;
296 +- last_frag = &skb_shinfo(skb)->frags[nr_frags - 1];
297 +- last_frag_sz = skb_frag_size(last_frag);
298 +-
299 +- /* If all FCS data is in last frag */
300 +- if (last_frag_sz >= ETH_FCS_LEN)
301 +- return *(__be32 *)(skb_frag_address(last_frag) +
302 +- last_frag_sz - ETH_FCS_LEN);
303 +-
304 +- fcs_p2 = (u8 *)skb_frag_address(last_frag);
305 +- bytes_in_prev = ETH_FCS_LEN - last_frag_sz;
306 +-
307 +- /* Find where the other part of the FCS is - Linear or another frag */
308 +- if (nr_frags == 1) {
309 +- fcs_p1 = skb_tail_pointer(skb);
310 +- } else {
311 +- skb_frag_t *prev_frag = &skb_shinfo(skb)->frags[nr_frags - 2];
312 +-
313 +- fcs_p1 = skb_frag_address(prev_frag) +
314 +- skb_frag_size(prev_frag);
315 +- }
316 +- fcs_p1 -= bytes_in_prev;
317 +-
318 +- memcpy(&fcs_bytes, fcs_p1, bytes_in_prev);
319 +- memcpy(((u8 *)&fcs_bytes) + bytes_in_prev, fcs_p2, last_frag_sz);
320 +-
321 +- return fcs_bytes;
322 ++ return __get_unaligned_cpu32(fcs_bytes);
323 + }
324 +
325 + static inline void mlx5e_handle_csum(struct net_device *netdev,
326 +@@ -765,8 +737,9 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
327 + network_depth - ETH_HLEN,
328 + skb->csum);
329 + if (unlikely(netdev->features & NETIF_F_RXFCS))
330 +- skb->csum = csum_add(skb->csum,
331 +- (__force __wsum)mlx5e_get_fcs(skb));
332 ++ skb->csum = csum_block_add(skb->csum,
333 ++ (__force __wsum)mlx5e_get_fcs(skb),
334 ++ skb->len - ETH_FCS_LEN);
335 + stats->csum_complete++;
336 + return;
337 + }
338 +diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c
339 +index 937d0ace699a..30f751e69698 100644
340 +--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
341 ++++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
342 +@@ -943,8 +943,8 @@ static int mlxsw_devlink_core_bus_device_reload(struct devlink *devlink,
343 + mlxsw_core->bus,
344 + mlxsw_core->bus_priv, true,
345 + devlink);
346 +- if (err)
347 +- mlxsw_core->reload_fail = true;
348 ++ mlxsw_core->reload_fail = !!err;
349 ++
350 + return err;
351 + }
352 +
353 +@@ -1083,8 +1083,15 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core,
354 + {
355 + struct devlink *devlink = priv_to_devlink(mlxsw_core);
356 +
357 +- if (mlxsw_core->reload_fail)
358 +- goto reload_fail;
359 ++ if (mlxsw_core->reload_fail) {
360 ++ if (!reload)
361 ++ /* Only the parts that were not de-initialized in the
362 ++ * failed reload attempt need to be de-initialized.
363 ++ */
364 ++ goto reload_fail_deinit;
365 ++ else
366 ++ return;
367 ++ }
368 +
369 + if (mlxsw_core->driver->fini)
370 + mlxsw_core->driver->fini(mlxsw_core);
371 +@@ -1098,9 +1105,12 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core,
372 + if (!reload)
373 + devlink_resources_unregister(devlink, NULL);
374 + mlxsw_core->bus->fini(mlxsw_core->bus_priv);
375 +- if (reload)
376 +- return;
377 +-reload_fail:
378 ++
379 ++ return;
380 ++
381 ++reload_fail_deinit:
382 ++ devlink_unregister(devlink);
383 ++ devlink_resources_unregister(devlink, NULL);
384 + devlink_free(devlink);
385 + }
386 + EXPORT_SYMBOL(mlxsw_core_bus_device_unregister);
387 +diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
388 +index db715da7bab7..7715f1ed2bcb 100644
389 +--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
390 ++++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
391 +@@ -2317,8 +2317,6 @@ static void mlxsw_sp_switchdev_event_work(struct work_struct *work)
392 + break;
393 + case SWITCHDEV_FDB_DEL_TO_DEVICE:
394 + fdb_info = &switchdev_work->fdb_info;
395 +- if (!fdb_info->added_by_user)
396 +- break;
397 + mlxsw_sp_port_fdb_set(mlxsw_sp_port, fdb_info, false);
398 + break;
399 + case SWITCHDEV_FDB_ADD_TO_BRIDGE: /* fall through */
400 +diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
401 +index 2c350099b83c..4930e0375c1d 100644
402 +--- a/drivers/net/ethernet/realtek/r8169.c
403 ++++ b/drivers/net/ethernet/realtek/r8169.c
404 +@@ -4175,10 +4175,15 @@ static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)
405 +
406 + static bool rtl_wol_pll_power_down(struct rtl8169_private *tp)
407 + {
408 +- if (!netif_running(tp->dev) || !__rtl8169_get_wol(tp))
409 ++ struct phy_device *phydev;
410 ++
411 ++ if (!__rtl8169_get_wol(tp))
412 + return false;
413 +
414 +- phy_speed_down(tp->dev->phydev, false);
415 ++ /* phydev may not be attached to netdevice */
416 ++ phydev = mdiobus_get_phy(tp->mii_bus, 0);
417 ++
418 ++ phy_speed_down(phydev, false);
419 + rtl_wol_suspend_quirk(tp);
420 +
421 + return true;
422 +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
423 +index b72ef171477e..bdd351597b55 100644
424 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
425 ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
426 +@@ -243,7 +243,7 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
427 + */
428 + int stmmac_mdio_reset(struct mii_bus *bus)
429 + {
430 +-#if defined(CONFIG_STMMAC_PLATFORM)
431 ++#if IS_ENABLED(CONFIG_STMMAC_PLATFORM)
432 + struct net_device *ndev = bus->priv;
433 + struct stmmac_priv *priv = netdev_priv(ndev);
434 + unsigned int mii_address = priv->hw->mii.addr;
435 +diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
436 +index b13c6b4b2c66..eb95daa3e5a5 100644
437 +--- a/drivers/vhost/vhost.c
438 ++++ b/drivers/vhost/vhost.c
439 +@@ -30,6 +30,7 @@
440 + #include <linux/sched/mm.h>
441 + #include <linux/sched/signal.h>
442 + #include <linux/interval_tree_generic.h>
443 ++#include <linux/nospec.h>
444 +
445 + #include "vhost.h"
446 +
447 +@@ -1397,6 +1398,7 @@ long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *arg
448 + if (idx >= d->nvqs)
449 + return -ENOBUFS;
450 +
451 ++ idx = array_index_nospec(idx, d->nvqs);
452 + vq = d->vqs[idx];
453 +
454 + mutex_lock(&vq->mutex);
455 +diff --git a/include/net/sock.h b/include/net/sock.h
456 +index 433f45fc2d68..c64a1cff9eb3 100644
457 +--- a/include/net/sock.h
458 ++++ b/include/net/sock.h
459 +@@ -2057,14 +2057,20 @@ static inline bool skwq_has_sleeper(struct socket_wq *wq)
460 + /**
461 + * sock_poll_wait - place memory barrier behind the poll_wait call.
462 + * @filp: file
463 ++ * @sock: socket to wait on
464 + * @p: poll_table
465 + *
466 + * See the comments in the wq_has_sleeper function.
467 ++ *
468 ++ * Do not derive sock from filp->private_data here. An SMC socket establishes
469 ++ * an internal TCP socket that is used in the fallback case. All socket
470 ++ * operations on the SMC socket are then forwarded to the TCP socket. In case of
471 ++ * poll, the filp->private_data pointer references the SMC socket because the
472 ++ * TCP socket has no file assigned.
473 + */
474 +-static inline void sock_poll_wait(struct file *filp, poll_table *p)
475 ++static inline void sock_poll_wait(struct file *filp, struct socket *sock,
476 ++ poll_table *p)
477 + {
478 +- struct socket *sock = filp->private_data;
479 +-
480 + if (!poll_does_not_wait(p)) {
481 + poll_wait(filp, &sock->wq->wait, p);
482 + /* We need to be sure we are in sync with the
483 +diff --git a/net/atm/common.c b/net/atm/common.c
484 +index 9f8cb0d2e71e..a38c174fc766 100644
485 +--- a/net/atm/common.c
486 ++++ b/net/atm/common.c
487 +@@ -653,7 +653,7 @@ __poll_t vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
488 + struct atm_vcc *vcc;
489 + __poll_t mask;
490 +
491 +- sock_poll_wait(file, wait);
492 ++ sock_poll_wait(file, sock, wait);
493 + mask = 0;
494 +
495 + vcc = ATM_SD(sock);
496 +diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
497 +index 20ed7adcf1cc..6dec8e9b3451 100644
498 +--- a/net/bridge/br_multicast.c
499 ++++ b/net/bridge/br_multicast.c
500 +@@ -1420,7 +1420,14 @@ static void br_multicast_query_received(struct net_bridge *br,
501 + return;
502 +
503 + br_multicast_update_query_timer(br, query, max_delay);
504 +- br_multicast_mark_router(br, port);
505 ++
506 ++ /* Based on RFC4541, section 2.1.1 IGMP Forwarding Rules,
507 ++ * the arrival port for IGMP Queries where the source address
508 ++ * is 0.0.0.0 should not be added to router port list.
509 ++ */
510 ++ if ((saddr->proto == htons(ETH_P_IP) && saddr->u.ip4) ||
511 ++ saddr->proto == htons(ETH_P_IPV6))
512 ++ br_multicast_mark_router(br, port);
513 + }
514 +
515 + static void br_ip4_multicast_query(struct net_bridge *br,
516 +diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
517 +index d18965f3291f..416717c57cd1 100644
518 +--- a/net/caif/caif_socket.c
519 ++++ b/net/caif/caif_socket.c
520 +@@ -941,7 +941,7 @@ static __poll_t caif_poll(struct file *file,
521 + __poll_t mask;
522 + struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
523 +
524 +- sock_poll_wait(file, wait);
525 ++ sock_poll_wait(file, sock, wait);
526 + mask = 0;
527 +
528 + /* exceptional events? */
529 +diff --git a/net/core/datagram.c b/net/core/datagram.c
530 +index 9aac0d63d53e..57f3a6fcfc1e 100644
531 +--- a/net/core/datagram.c
532 ++++ b/net/core/datagram.c
533 +@@ -808,8 +808,9 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb,
534 + return -EINVAL;
535 + }
536 +
537 +- if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
538 +- netdev_rx_csum_fault(skb->dev);
539 ++ if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE) &&
540 ++ !skb->csum_complete_sw)
541 ++ netdev_rx_csum_fault(NULL);
542 + }
543 + return 0;
544 + fault:
545 +@@ -837,7 +838,7 @@ __poll_t datagram_poll(struct file *file, struct socket *sock,
546 + struct sock *sk = sock->sk;
547 + __poll_t mask;
548 +
549 +- sock_poll_wait(file, wait);
550 ++ sock_poll_wait(file, sock, wait);
551 + mask = 0;
552 +
553 + /* exceptional events? */
554 +diff --git a/net/core/dev.c b/net/core/dev.c
555 +index 93243479085f..e16ba3625400 100644
556 +--- a/net/core/dev.c
557 ++++ b/net/core/dev.c
558 +@@ -5431,6 +5431,7 @@ static void gro_flush_oldest(struct list_head *head)
559 + * SKB to the chain.
560 + */
561 + list_del(&oldest->list);
562 ++ oldest->next = NULL;
563 + napi_gro_complete(oldest);
564 + }
565 +
566 +diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
567 +index 37c7936124e6..6e5d61a20a70 100644
568 +--- a/net/core/rtnetlink.c
569 ++++ b/net/core/rtnetlink.c
570 +@@ -3530,6 +3530,11 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
571 + return -EINVAL;
572 + }
573 +
574 ++ if (dev->type != ARPHRD_ETHER) {
575 ++ NL_SET_ERR_MSG(extack, "FDB delete only supported for Ethernet devices");
576 ++ return -EINVAL;
577 ++ }
578 ++
579 + addr = nla_data(tb[NDA_LLADDR]);
580 +
581 + err = fdb_vid_parse(tb[NDA_VLAN], &vid, extack);
582 +@@ -3634,6 +3639,11 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
583 + return -EINVAL;
584 + }
585 +
586 ++ if (dev->type != ARPHRD_ETHER) {
587 ++ NL_SET_ERR_MSG(extack, "FDB add only supported for Ethernet devices");
588 ++ return -EINVAL;
589 ++ }
590 ++
591 + addr = nla_data(tb[NDA_LLADDR]);
592 +
593 + err = fdb_vid_parse(tb[NDA_VLAN], &vid, extack);
594 +diff --git a/net/dccp/proto.c b/net/dccp/proto.c
595 +index 875858c8b059..43733accf58e 100644
596 +--- a/net/dccp/proto.c
597 ++++ b/net/dccp/proto.c
598 +@@ -325,7 +325,7 @@ __poll_t dccp_poll(struct file *file, struct socket *sock,
599 + __poll_t mask;
600 + struct sock *sk = sock->sk;
601 +
602 +- sock_poll_wait(file, wait);
603 ++ sock_poll_wait(file, sock, wait);
604 + if (sk->sk_state == DCCP_LISTEN)
605 + return inet_csk_listen_poll(sk);
606 +
607 +diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
608 +index e7227128df2c..cb8fa5d7afe1 100644
609 +--- a/net/ipv4/ip_fragment.c
610 ++++ b/net/ipv4/ip_fragment.c
611 +@@ -720,10 +720,14 @@ struct sk_buff *ip_check_defrag(struct net *net, struct sk_buff *skb, u32 user)
612 + if (ip_is_fragment(&iph)) {
613 + skb = skb_share_check(skb, GFP_ATOMIC);
614 + if (skb) {
615 +- if (!pskb_may_pull(skb, netoff + iph.ihl * 4))
616 +- return skb;
617 +- if (pskb_trim_rcsum(skb, netoff + len))
618 +- return skb;
619 ++ if (!pskb_may_pull(skb, netoff + iph.ihl * 4)) {
620 ++ kfree_skb(skb);
621 ++ return NULL;
622 ++ }
623 ++ if (pskb_trim_rcsum(skb, netoff + len)) {
624 ++ kfree_skb(skb);
625 ++ return NULL;
626 ++ }
627 + memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
628 + if (ip_defrag(net, skb, user))
629 + return NULL;
630 +diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
631 +index 10c6246396cc..bbd07736fb0f 100644
632 +--- a/net/ipv4/tcp.c
633 ++++ b/net/ipv4/tcp.c
634 +@@ -507,7 +507,7 @@ __poll_t tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
635 + const struct tcp_sock *tp = tcp_sk(sk);
636 + int state;
637 +
638 +- sock_poll_wait(file, wait);
639 ++ sock_poll_wait(file, sock, wait);
640 +
641 + state = inet_sk_state_load(sk);
642 + if (state == TCP_LISTEN)
643 +diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
644 +index c32a4c16b7ff..f8183fdce5b2 100644
645 +--- a/net/ipv4/udp.c
646 ++++ b/net/ipv4/udp.c
647 +@@ -2120,8 +2120,24 @@ static inline int udp4_csum_init(struct sk_buff *skb, struct udphdr *uh,
648 + /* Note, we are only interested in != 0 or == 0, thus the
649 + * force to int.
650 + */
651 +- return (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
652 +- inet_compute_pseudo);
653 ++ err = (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
654 ++ inet_compute_pseudo);
655 ++ if (err)
656 ++ return err;
657 ++
658 ++ if (skb->ip_summed == CHECKSUM_COMPLETE && !skb->csum_valid) {
659 ++ /* If SW calculated the value, we know it's bad */
660 ++ if (skb->csum_complete_sw)
661 ++ return 1;
662 ++
663 ++ /* HW says the value is bad. Let's validate that.
664 ++ * skb->csum is no longer the full packet checksum,
665 ++ * so don't treat it as such.
666 ++ */
667 ++ skb_checksum_complete_unset(skb);
668 ++ }
669 ++
670 ++ return 0;
671 + }
672 +
673 + /* wrapper for udp_queue_rcv_skb tacking care of csum conversion and
674 +diff --git a/net/ipv6/ip6_checksum.c b/net/ipv6/ip6_checksum.c
675 +index 547515e8450a..377717045f8f 100644
676 +--- a/net/ipv6/ip6_checksum.c
677 ++++ b/net/ipv6/ip6_checksum.c
678 +@@ -88,8 +88,24 @@ int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh, int proto)
679 + * Note, we are only interested in != 0 or == 0, thus the
680 + * force to int.
681 + */
682 +- return (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
683 +- ip6_compute_pseudo);
684 ++ err = (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
685 ++ ip6_compute_pseudo);
686 ++ if (err)
687 ++ return err;
688 ++
689 ++ if (skb->ip_summed == CHECKSUM_COMPLETE && !skb->csum_valid) {
690 ++ /* If SW calculated the value, we know it's bad */
691 ++ if (skb->csum_complete_sw)
692 ++ return 1;
693 ++
694 ++ /* HW says the value is bad. Let's validate that.
695 ++ * skb->csum is no longer the full packet checksum,
696 ++ * so don't treat is as such.
697 ++ */
698 ++ skb_checksum_complete_unset(skb);
699 ++ }
700 ++
701 ++ return 0;
702 + }
703 + EXPORT_SYMBOL(udp6_csum_init);
704 +
705 +diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
706 +index 0ec273997d1d..673a4a932f2a 100644
707 +--- a/net/ipv6/ndisc.c
708 ++++ b/net/ipv6/ndisc.c
709 +@@ -1732,10 +1732,9 @@ int ndisc_rcv(struct sk_buff *skb)
710 + return 0;
711 + }
712 +
713 +- memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
714 +-
715 + switch (msg->icmph.icmp6_type) {
716 + case NDISC_NEIGHBOUR_SOLICITATION:
717 ++ memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
718 + ndisc_recv_ns(skb);
719 + break;
720 +
721 +diff --git a/net/ipv6/route.c b/net/ipv6/route.c
722 +index abcb5ae77319..1cf00d857fc1 100644
723 +--- a/net/ipv6/route.c
724 ++++ b/net/ipv6/route.c
725 +@@ -2799,6 +2799,8 @@ static int ip6_route_check_nh_onlink(struct net *net,
726 + grt = ip6_nh_lookup_table(net, cfg, gw_addr, tbid, 0);
727 + if (grt) {
728 + if (!grt->dst.error &&
729 ++ /* ignore match if it is the default route */
730 ++ grt->from && !ipv6_addr_any(&grt->from->fib6_dst.addr) &&
731 + (grt->rt6i_flags & flags || dev != grt->dst.dev)) {
732 + NL_SET_ERR_MSG(extack,
733 + "Nexthop has invalid gateway or device mismatch");
734 +diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
735 +index e2f16a0173a9..f024914da1b2 100644
736 +--- a/net/iucv/af_iucv.c
737 ++++ b/net/iucv/af_iucv.c
738 +@@ -1505,7 +1505,7 @@ __poll_t iucv_sock_poll(struct file *file, struct socket *sock,
739 + struct sock *sk = sock->sk;
740 + __poll_t mask = 0;
741 +
742 +- sock_poll_wait(file, wait);
743 ++ sock_poll_wait(file, sock, wait);
744 +
745 + if (sk->sk_state == IUCV_LISTEN)
746 + return iucv_accept_poll(sk);
747 +diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
748 +index dd4adf8b1167..ae296273ce3d 100644
749 +--- a/net/nfc/llcp_sock.c
750 ++++ b/net/nfc/llcp_sock.c
751 +@@ -556,7 +556,7 @@ static __poll_t llcp_sock_poll(struct file *file, struct socket *sock,
752 +
753 + pr_debug("%p\n", sk);
754 +
755 +- sock_poll_wait(file, wait);
756 ++ sock_poll_wait(file, sock, wait);
757 +
758 + if (sk->sk_state == LLCP_LISTEN)
759 + return llcp_accept_poll(sk);
760 +diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c
761 +index a70097ecf33c..865ecef68196 100644
762 +--- a/net/openvswitch/flow_netlink.c
763 ++++ b/net/openvswitch/flow_netlink.c
764 +@@ -3030,7 +3030,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
765 + * is already present */
766 + if (mac_proto != MAC_PROTO_NONE)
767 + return -EINVAL;
768 +- mac_proto = MAC_PROTO_NONE;
769 ++ mac_proto = MAC_PROTO_ETHERNET;
770 + break;
771 +
772 + case OVS_ACTION_ATTR_POP_ETH:
773 +@@ -3038,7 +3038,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
774 + return -EINVAL;
775 + if (vlan_tci & htons(VLAN_TAG_PRESENT))
776 + return -EINVAL;
777 +- mac_proto = MAC_PROTO_ETHERNET;
778 ++ mac_proto = MAC_PROTO_NONE;
779 + break;
780 +
781 + case OVS_ACTION_ATTR_PUSH_NSH:
782 +diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c
783 +index ac44d8afffb1..3c39b8805d01 100644
784 +--- a/net/rxrpc/af_rxrpc.c
785 ++++ b/net/rxrpc/af_rxrpc.c
786 +@@ -741,7 +741,7 @@ static __poll_t rxrpc_poll(struct file *file, struct socket *sock,
787 + struct rxrpc_sock *rx = rxrpc_sk(sk);
788 + __poll_t mask;
789 +
790 +- sock_poll_wait(file, wait);
791 ++ sock_poll_wait(file, sock, wait);
792 + mask = 0;
793 +
794 + /* the socket is readable if there are any messages waiting on the Rx
795 +diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
796 +index cbe4831f46f4..4a042abf844c 100644
797 +--- a/net/sched/sch_gred.c
798 ++++ b/net/sched/sch_gred.c
799 +@@ -413,7 +413,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt,
800 + if (tb[TCA_GRED_PARMS] == NULL && tb[TCA_GRED_STAB] == NULL) {
801 + if (tb[TCA_GRED_LIMIT] != NULL)
802 + sch->limit = nla_get_u32(tb[TCA_GRED_LIMIT]);
803 +- return gred_change_table_def(sch, opt);
804 ++ return gred_change_table_def(sch, tb[TCA_GRED_DPS]);
805 + }
806 +
807 + if (tb[TCA_GRED_PARMS] == NULL ||
808 +diff --git a/net/sctp/socket.c b/net/sctp/socket.c
809 +index c1c1bda334a4..c1693e28aed4 100644
810 +--- a/net/sctp/socket.c
811 ++++ b/net/sctp/socket.c
812 +@@ -7101,14 +7101,15 @@ static int sctp_getsockopt_pr_assocstatus(struct sock *sk, int len,
813 + }
814 +
815 + policy = params.sprstat_policy;
816 +- if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)))
817 ++ if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)) ||
818 ++ ((policy & SCTP_PR_SCTP_ALL) && (policy & SCTP_PR_SCTP_MASK)))
819 + goto out;
820 +
821 + asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
822 + if (!asoc)
823 + goto out;
824 +
825 +- if (policy & SCTP_PR_SCTP_ALL) {
826 ++ if (policy == SCTP_PR_SCTP_ALL) {
827 + params.sprstat_abandoned_unsent = 0;
828 + params.sprstat_abandoned_sent = 0;
829 + for (policy = 0; policy <= SCTP_PR_INDEX(MAX); policy++) {
830 +@@ -7160,7 +7161,8 @@ static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,
831 + }
832 +
833 + policy = params.sprstat_policy;
834 +- if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)))
835 ++ if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)) ||
836 ++ ((policy & SCTP_PR_SCTP_ALL) && (policy & SCTP_PR_SCTP_MASK)))
837 + goto out;
838 +
839 + asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
840 +diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
841 +index 015231789ed2..80e2119f1c70 100644
842 +--- a/net/smc/af_smc.c
843 ++++ b/net/smc/af_smc.c
844 +@@ -1543,7 +1543,7 @@ static __poll_t smc_poll(struct file *file, struct socket *sock,
845 + mask |= EPOLLERR;
846 + } else {
847 + if (sk->sk_state != SMC_CLOSED)
848 +- sock_poll_wait(file, wait);
849 ++ sock_poll_wait(file, sock, wait);
850 + if (sk->sk_err)
851 + mask |= EPOLLERR;
852 + if ((sk->sk_shutdown == SHUTDOWN_MASK) ||
853 +diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c
854 +index e871368500e3..18daebcef181 100644
855 +--- a/net/smc/smc_core.c
856 ++++ b/net/smc/smc_core.c
857 +@@ -122,22 +122,17 @@ static void __smc_lgr_unregister_conn(struct smc_connection *conn)
858 + sock_put(&smc->sk); /* sock_hold in smc_lgr_register_conn() */
859 + }
860 +
861 +-/* Unregister connection and trigger lgr freeing if applicable
862 ++/* Unregister connection from lgr
863 + */
864 + static void smc_lgr_unregister_conn(struct smc_connection *conn)
865 + {
866 + struct smc_link_group *lgr = conn->lgr;
867 +- int reduced = 0;
868 +
869 + write_lock_bh(&lgr->conns_lock);
870 + if (conn->alert_token_local) {
871 +- reduced = 1;
872 + __smc_lgr_unregister_conn(conn);
873 + }
874 + write_unlock_bh(&lgr->conns_lock);
875 +- if (!reduced || lgr->conns_num)
876 +- return;
877 +- smc_lgr_schedule_free_work(lgr);
878 + }
879 +
880 + /* Send delete link, either as client to request the initiation
881 +@@ -291,7 +286,8 @@ out:
882 + return rc;
883 + }
884 +
885 +-static void smc_buf_unuse(struct smc_connection *conn)
886 ++static void smc_buf_unuse(struct smc_connection *conn,
887 ++ struct smc_link_group *lgr)
888 + {
889 + if (conn->sndbuf_desc)
890 + conn->sndbuf_desc->used = 0;
891 +@@ -301,8 +297,6 @@ static void smc_buf_unuse(struct smc_connection *conn)
892 + conn->rmb_desc->used = 0;
893 + } else {
894 + /* buf registration failed, reuse not possible */
895 +- struct smc_link_group *lgr = conn->lgr;
896 +-
897 + write_lock_bh(&lgr->rmbs_lock);
898 + list_del(&conn->rmb_desc->list);
899 + write_unlock_bh(&lgr->rmbs_lock);
900 +@@ -315,16 +309,21 @@ static void smc_buf_unuse(struct smc_connection *conn)
901 + /* remove a finished connection from its link group */
902 + void smc_conn_free(struct smc_connection *conn)
903 + {
904 +- if (!conn->lgr)
905 ++ struct smc_link_group *lgr = conn->lgr;
906 ++
907 ++ if (!lgr)
908 + return;
909 +- if (conn->lgr->is_smcd) {
910 ++ if (lgr->is_smcd) {
911 + smc_ism_unset_conn(conn);
912 + tasklet_kill(&conn->rx_tsklet);
913 + } else {
914 + smc_cdc_tx_dismiss_slots(conn);
915 + }
916 +- smc_lgr_unregister_conn(conn);
917 +- smc_buf_unuse(conn);
918 ++ smc_lgr_unregister_conn(conn); /* unsets conn->lgr */
919 ++ smc_buf_unuse(conn, lgr); /* allow buffer reuse */
920 ++
921 ++ if (!lgr->conns_num)
922 ++ smc_lgr_schedule_free_work(lgr);
923 + }
924 +
925 + static void smc_link_clear(struct smc_link *lnk)
926 +diff --git a/net/tipc/socket.c b/net/tipc/socket.c
927 +index 49810fdff4c5..0bf8ad486c5e 100644
928 +--- a/net/tipc/socket.c
929 ++++ b/net/tipc/socket.c
930 +@@ -715,7 +715,7 @@ static __poll_t tipc_poll(struct file *file, struct socket *sock,
931 + struct tipc_sock *tsk = tipc_sk(sk);
932 + __poll_t revents = 0;
933 +
934 +- sock_poll_wait(file, wait);
935 ++ sock_poll_wait(file, sock, wait);
936 +
937 + if (sk->sk_shutdown & RCV_SHUTDOWN)
938 + revents |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
939 +diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
940 +index d1edfa3cad61..c754f3a90a2e 100644
941 +--- a/net/unix/af_unix.c
942 ++++ b/net/unix/af_unix.c
943 +@@ -2640,7 +2640,7 @@ static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wa
944 + struct sock *sk = sock->sk;
945 + __poll_t mask;
946 +
947 +- sock_poll_wait(file, wait);
948 ++ sock_poll_wait(file, sock, wait);
949 + mask = 0;
950 +
951 + /* exceptional events? */
952 +@@ -2677,7 +2677,7 @@ static __poll_t unix_dgram_poll(struct file *file, struct socket *sock,
953 + unsigned int writable;
954 + __poll_t mask;
955 +
956 +- sock_poll_wait(file, wait);
957 ++ sock_poll_wait(file, sock, wait);
958 + mask = 0;
959 +
960 + /* exceptional events? */
961 +diff --git a/tools/testing/selftests/net/fib-onlink-tests.sh b/tools/testing/selftests/net/fib-onlink-tests.sh
962 +index 3991ad1a368d..864f865eee55 100755
963 +--- a/tools/testing/selftests/net/fib-onlink-tests.sh
964 ++++ b/tools/testing/selftests/net/fib-onlink-tests.sh
965 +@@ -167,8 +167,8 @@ setup()
966 + # add vrf table
967 + ip li add ${VRF} type vrf table ${VRF_TABLE}
968 + ip li set ${VRF} up
969 +- ip ro add table ${VRF_TABLE} unreachable default
970 +- ip -6 ro add table ${VRF_TABLE} unreachable default
971 ++ ip ro add table ${VRF_TABLE} unreachable default metric 8192
972 ++ ip -6 ro add table ${VRF_TABLE} unreachable default metric 8192
973 +
974 + # create test interfaces
975 + ip li add ${NETIFS[p1]} type veth peer name ${NETIFS[p2]}
976 +@@ -185,20 +185,20 @@ setup()
977 + for n in 1 3 5 7; do
978 + ip li set ${NETIFS[p${n}]} up
979 + ip addr add ${V4ADDRS[p${n}]}/24 dev ${NETIFS[p${n}]}
980 +- ip addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]}
981 ++ ip addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]} nodad
982 + done
983 +
984 + # move peer interfaces to namespace and add addresses
985 + for n in 2 4 6 8; do
986 + ip li set ${NETIFS[p${n}]} netns ${PEER_NS} up
987 + ip -netns ${PEER_NS} addr add ${V4ADDRS[p${n}]}/24 dev ${NETIFS[p${n}]}
988 +- ip -netns ${PEER_NS} addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]}
989 ++ ip -netns ${PEER_NS} addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]} nodad
990 + done
991 +
992 +- set +e
993 ++ ip -6 ro add default via ${V6ADDRS[p3]/::[0-9]/::64}
994 ++ ip -6 ro add table ${VRF_TABLE} default via ${V6ADDRS[p7]/::[0-9]/::64}
995 +
996 +- # let DAD complete - assume default of 1 probe
997 +- sleep 1
998 ++ set +e
999 + }
1000 +
1001 + cleanup()