Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.19/0100-4.19.1-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


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