From 0329371dba952f7530ed364afb2a8f0221177a5c Mon Sep 17 00:00:00 2001 From: Denis Kirjanov Date: Sep 01 2020 01:16:53 +0000 Subject: Merge remote-tracking branch 'origin/SLE15-SP1' into SLE12-SP5 --- diff --git a/config/arm64/default b/config/arm64/default index c7e2bf1..2388b19 100644 --- a/config/arm64/default +++ b/config/arm64/default @@ -3641,7 +3641,7 @@ CONFIG_PRINTER=m CONFIG_PPDEV=m CONFIG_HVC_DRIVER=y # CONFIG_HVC_DCC is not set -CONFIG_VIRTIO_CONSOLE=m +CONFIG_VIRTIO_CONSOLE=y CONFIG_IPMI_HANDLER=m CONFIG_IPMI_DMI_DECODE=y CONFIG_IPMI_PANIC_EVENT=y @@ -6634,7 +6634,7 @@ CONFIG_VFIO_MDEV=m CONFIG_VFIO_MDEV_DEVICE=m CONFIG_IRQ_BYPASS_MANAGER=y CONFIG_VIRT_DRIVERS=y -CONFIG_VIRTIO=m +CONFIG_VIRTIO=y # # Virtio drivers diff --git a/config/arm64/vanilla b/config/arm64/vanilla index e9b3af6..c17b54b 100644 --- a/config/arm64/vanilla +++ b/config/arm64/vanilla @@ -47,5 +47,7 @@ CONFIG_STREAM_PARSER=m CONFIG_TREE_RCU_TRACE=y CONFIG_TYPEC_TCPCI=m CONFIG_UCSI=m +CONFIG_VIRTIO=m +CONFIG_VIRTIO_CONSOLE=m CONFIG_MODULES=y CONFIG_EFI_STUB=y diff --git a/config/ppc64le/default b/config/ppc64le/default index 88a6e77..0d2ff6a 100644 --- a/config/ppc64le/default +++ b/config/ppc64le/default @@ -2237,10 +2237,10 @@ CONFIG_NET_VENDOR_EXAR=y CONFIG_S2IO=m CONFIG_VXGE=m # CONFIG_VXGE_DEBUG_TRACE_ALL is not set -CONFIG_NET_VENDOR_HP=y -# CONFIG_HP100 is not set CONFIG_NET_VENDOR_GOOGLE=y CONFIG_GVE=m +CONFIG_NET_VENDOR_HP=y +# CONFIG_HP100 is not set CONFIG_NET_VENDOR_IBM=y CONFIG_IBMVETH=m # CONFIG_IBM_EMAC_ZMII is not set @@ -2977,7 +2977,7 @@ CONFIG_HVC_OPAL=y CONFIG_HVC_RTAS=y # CONFIG_HVC_UDBG is not set CONFIG_HVCS=m -CONFIG_VIRTIO_CONSOLE=m +CONFIG_VIRTIO_CONSOLE=y CONFIG_IBM_BSR=m CONFIG_POWERNV_OP_PANEL=m CONFIG_IPMI_HANDLER=m @@ -4368,7 +4368,7 @@ CONFIG_VFIO_MDEV=m CONFIG_VFIO_MDEV_DEVICE=m CONFIG_IRQ_BYPASS_MANAGER=y CONFIG_VIRT_DRIVERS=y -CONFIG_VIRTIO=m +CONFIG_VIRTIO=y # # Virtio drivers diff --git a/config/ppc64le/vanilla b/config/ppc64le/vanilla index a4ae7e3..688c4e5 100644 --- a/config/ppc64le/vanilla +++ b/config/ppc64le/vanilla @@ -32,4 +32,6 @@ CONFIG_RTC_DRV_DS1307_HWMON=y CONFIG_STREAM_PARSER=m # CONFIG_SYSTEM_DATA_VERIFICATION is not set CONFIG_TREE_RCU_TRACE=y +CONFIG_VIRTIO=m +CONFIG_VIRTIO_CONSOLE=m CONFIG_MODULES=y diff --git a/config/x86_64/default b/config/x86_64/default index 0c4e417..ab39dfe 100644 --- a/config/x86_64/default +++ b/config/x86_64/default @@ -3735,7 +3735,7 @@ CONFIG_HVC_DRIVER=y CONFIG_HVC_IRQ=y CONFIG_HVC_XEN=y CONFIG_HVC_XEN_FRONTEND=y -CONFIG_VIRTIO_CONSOLE=m +CONFIG_VIRTIO_CONSOLE=y CONFIG_IPMI_HANDLER=m CONFIG_IPMI_DMI_DECODE=y CONFIG_IPMI_PANIC_EVENT=y @@ -6345,7 +6345,7 @@ CONFIG_VFIO_MDEV=m CONFIG_VFIO_MDEV_DEVICE=m CONFIG_IRQ_BYPASS_MANAGER=m CONFIG_VIRT_DRIVERS=y -CONFIG_VIRTIO=m +CONFIG_VIRTIO=y # # Virtio drivers diff --git a/config/x86_64/vanilla b/config/x86_64/vanilla index 7f57463..b1132b9 100644 --- a/config/x86_64/vanilla +++ b/config/x86_64/vanilla @@ -37,5 +37,7 @@ CONFIG_STREAM_PARSER=m CONFIG_TREE_RCU_TRACE=y CONFIG_TYPEC_TCPCI=m CONFIG_UCSI=m +CONFIG_VIRTIO=m +CONFIG_VIRTIO_CONSOLE=m CONFIG_MODULES=y CONFIG_EFI_STUB=y diff --git a/patches.kabi/kabi-hide-new-parameter-of-ip6_dst_lookup_flow.patch b/patches.kabi/kabi-hide-new-parameter-of-ip6_dst_lookup_flow.patch new file mode 100644 index 0000000..06e6efb --- /dev/null +++ b/patches.kabi/kabi-hide-new-parameter-of-ip6_dst_lookup_flow.patch @@ -0,0 +1,248 @@ +From: Michal Kubecek +Date: Mon, 31 Aug 2020 22:55:23 +0200 +Subject: kabi: hide new parameter of ip6_dst_lookup_flow() +Patch-mainline: Never, kabi workaround +References: bsc#1165629 + +Backport of mainline commit c4e85f73afb6 ("net: ipv6: add net argument to +ip6_dst_lookup_flow") added a new parameter net to exported function +ip6_dst_lookup_flow(). + +Rename modified function to ip6_dst_lookup_flow__net() and create +ip6_dst_lookup_flow() with original signature and behaviour (which is just +a wrapper around ip6_dst_lookup_flow__net()) in case some out of tree +module calls it. All in tree callers call ip6_dst_lookup_flow__net(). + +Signed-off-by: Michal Kubecek +--- + include/net/ipv6.h | 4 +++- + net/dccp/ipv6.c | 6 +++--- + net/ipv6/af_inet6.c | 5 +++-- + net/ipv6/datagram.c | 2 +- + net/ipv6/inet6_connection_sock.c | 4 ++-- + net/ipv6/ip6_output.c | 18 ++++++++++++++---- + net/ipv6/raw.c | 2 +- + net/ipv6/syncookies.c | 3 ++- + net/ipv6/tcp_ipv6.c | 4 ++-- + net/l2tp/l2tp_ip6.c | 2 +- + net/sctp/ipv6.c | 5 +++-- + 11 files changed, 35 insertions(+), 20 deletions(-) + +--- a/include/net/ipv6.h ++++ b/include/net/ipv6.h +@@ -868,8 +868,10 @@ static inline struct sk_buff *ip6_finish_skb(struct sock *sk) + + int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst, + struct flowi6 *fl6); +-struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, struct flowi6 *fl6, ++struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6, + const struct in6_addr *final_dst); ++struct dst_entry *ip6_dst_lookup_flow__net(struct net *net, const struct sock *sk, struct flowi6 *fl6, ++ const struct in6_addr *final_dst); + struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, + const struct in6_addr *final_dst); + struct dst_entry *ip6_blackhole_route(struct net *net, +--- a/net/dccp/ipv6.c ++++ b/net/dccp/ipv6.c +@@ -209,7 +209,7 @@ static int dccp_v6_send_response(const struct sock *sk, struct request_sock *req + final_p = fl6_update_dst(&fl6, rcu_dereference(np->opt), &final); + rcu_read_unlock(); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + dst = NULL; +@@ -280,7 +280,7 @@ static void dccp_v6_ctl_send_reset(const struct sock *sk, struct sk_buff *rxskb) + security_skb_classify_flow(rxskb, flowi6_to_flowi(&fl6)); + + /* sk = NULL, but it is safe for now. RST socket required. */ +- dst = ip6_dst_lookup_flow(sock_net(ctl_sk), ctl_sk, &fl6, NULL); ++ dst = ip6_dst_lookup_flow__net(sock_net(ctl_sk), ctl_sk, &fl6, NULL); + if (!IS_ERR(dst)) { + skb_dst_set(skb, dst); + ip6_xmit(ctl_sk, skb, &fl6, 0, NULL, 0); +@@ -888,7 +888,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr, + opt = rcu_dereference_protected(np->opt, lockdep_sock_is_held(sk)); + final_p = fl6_update_dst(&fl6, opt, &final); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto failure; +--- a/net/ipv6/af_inet6.c ++++ b/net/ipv6/af_inet6.c +@@ -740,7 +740,8 @@ int inet6_sk_rebuild_header(struct sock *sk) + &final); + rcu_read_unlock(); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, &fl6, ++ final_p); + if (IS_ERR(dst)) { + sk->sk_route_caps = 0; + sk->sk_err_soft = -PTR_ERR(dst); +@@ -898,7 +899,7 @@ static struct pernet_operations inet6_net_ops = { + static const struct ipv6_stub ipv6_stub_impl = { + .ipv6_sock_mc_join = ipv6_sock_mc_join, + .ipv6_sock_mc_drop = ipv6_sock_mc_drop, +- .ipv6_dst_lookup_flow = ip6_dst_lookup_flow, ++ .ipv6_dst_lookup_flow = ip6_dst_lookup_flow__net, + .udpv6_encap_enable = udpv6_encap_enable, + .ndisc_send_na = ndisc_send_na, + .nd_tbl = &nd_tbl, +--- a/net/ipv6/datagram.c ++++ b/net/ipv6/datagram.c +@@ -88,7 +88,7 @@ int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr) + final_p = fl6_update_dst(&fl6, opt, &final); + rcu_read_unlock(); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto out; +--- a/net/ipv6/inet6_connection_sock.c ++++ b/net/ipv6/inet6_connection_sock.c +@@ -52,7 +52,7 @@ struct dst_entry *inet6_csk_route_req(const struct sock *sk, + fl6->flowi6_uid = sk->sk_uid; + security_req_classify_flow(req, flowi6_to_flowi(fl6)); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, fl6, final_p); + if (IS_ERR(dst)) + return NULL; + +@@ -107,7 +107,7 @@ static struct dst_entry *inet6_csk_route_socket(struct sock *sk, + + dst = __inet6_csk_dst_check(sk, np->dst_cookie); + if (!dst) { +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, fl6, final_p); + + if (!IS_ERR(dst)) + ip6_dst_store(sk, dst, NULL, NULL); +--- a/net/ipv6/ip6_output.c ++++ b/net/ipv6/ip6_output.c +@@ -1068,7 +1068,7 @@ int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst, + EXPORT_SYMBOL_GPL(ip6_dst_lookup); + + /** +- * ip6_dst_lookup_flow - perform route lookup on flow with ipsec ++ * ip6_dst_lookup_flow__net - perform route lookup on flow with ipsec + * @sk: socket which provides route info + * @fl6: flow to lookup + * @final_dst: final destination address for ipsec lookup +@@ -1078,8 +1078,8 @@ EXPORT_SYMBOL_GPL(ip6_dst_lookup); + * It returns a valid dst pointer on success, or a pointer encoded + * error code. + */ +-struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, struct flowi6 *fl6, +- const struct in6_addr *final_dst) ++struct dst_entry *ip6_dst_lookup_flow__net(struct net *net, const struct sock *sk, struct flowi6 *fl6, ++ const struct in6_addr *final_dst) + { + struct dst_entry *dst = NULL; + int err; +@@ -1092,6 +1092,15 @@ struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, st + + return xfrm_lookup_route(net, dst, flowi6_to_flowi(fl6), sk, 0); + } ++EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow__net); ++ ++ ++/* We need to preserve this one for kABI. */ ++struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6, ++ const struct in6_addr *final_dst) ++{ ++ return ip6_dst_lookup_flow__net(sock_net(sk), sk, fl6, final_dst); ++} + EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow); + + /** +@@ -1115,7 +1124,8 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, + + dst = ip6_sk_dst_check(sk, dst, fl6); + if (!dst) +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_dst); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, fl6, ++ final_dst); + + return dst; + } +--- a/net/ipv6/raw.c ++++ b/net/ipv6/raw.c +@@ -926,7 +926,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) + + fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto out; +--- a/net/ipv6/syncookies.c ++++ b/net/ipv6/syncookies.c +@@ -239,7 +239,8 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb) + fl6.flowi6_uid = sk->sk_uid; + security_req_classify_flow(req, flowi6_to_flowi(&fl6)); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, &fl6, ++ final_p); + if (IS_ERR(dst)) + goto out_free; + } +--- a/net/ipv6/tcp_ipv6.c ++++ b/net/ipv6/tcp_ipv6.c +@@ -267,7 +267,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, + + security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto failure; +@@ -866,7 +866,7 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 + * Underlying function will use this to retrieve the network + * namespace + */ +- dst = ip6_dst_lookup_flow(sock_net(ctl_sk), ctl_sk, &fl6, NULL); ++ dst = ip6_dst_lookup_flow__net(sock_net(ctl_sk), ctl_sk, &fl6, NULL); + if (!IS_ERR(dst)) { + skb_dst_set(buff, dst); + ip6_xmit(ctl_sk, buff, &fl6, fl6.flowi6_mark, NULL, tclass); +--- a/net/l2tp/l2tp_ip6.c ++++ b/net/l2tp/l2tp_ip6.c +@@ -639,7 +639,7 @@ static int l2tp_ip6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) + + fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto out; +--- a/net/sctp/ipv6.c ++++ b/net/sctp/ipv6.c +@@ -271,7 +271,7 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, + final_p = fl6_update_dst(fl6, rcu_dereference(np->opt), &final); + rcu_read_unlock(); + +- dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); ++ dst = ip6_dst_lookup_flow__net(sock_net(sk), sk, fl6, final_p); + if (!asoc || saddr) { + t->dst = dst; + memcpy(fl, &_fl, sizeof(_fl)); +@@ -329,7 +329,8 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, + fl6->saddr = laddr->a.v6.sin6_addr; + fl6->fl6_sport = laddr->a.v6.sin6_port; + final_p = fl6_update_dst(fl6, rcu_dereference(np->opt), &final); +- bdst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); ++ bdst = ip6_dst_lookup_flow__net(sock_net(sk), sk, fl6, ++ final_p); + + if (IS_ERR(bdst)) + continue; diff --git a/patches.kabi/kabi-mask-changes-to-struct-ipv6_stub.patch b/patches.kabi/kabi-mask-changes-to-struct-ipv6_stub.patch new file mode 100644 index 0000000..09c127f --- /dev/null +++ b/patches.kabi/kabi-mask-changes-to-struct-ipv6_stub.patch @@ -0,0 +1,91 @@ +From: Michal Kubecek +Date: Mon, 31 Aug 2020 22:05:44 +0200 +Subject: kabi: mask changes to struct ipv6_stub +Patch-mainline: Never, kabi workaround +References: bsc#1165629 + +Backport of mainline commit 6c8991f41546 ("net: ipv6_stub: use +ip6_dst_lookup_flow instead of ip6_dst_lookup") replaces callback +->ipv6_dst_lookup() in struct ipv6_stub with a ->ipv6_dst_lookup_flow(). + +As there are only two instances of the structure and both are static +function in kernel code (and only one is actually used as we don't build +IPv6 support as a module any more), we can safely add new members at the +end of the structure. + +Move ->ipv6_dst_lookup_flow() callbac to the end of the function, hide it +from kabi checker and restore ->ipv6_dst_lookup() for potential callers in +out of tree modules built against previous kernels. + +Signed-off-by: Michal Kubecek +--- + include/net/addrconf.h | 12 ++++++++---- + net/ipv6/addrconf_core.c | 8 ++++++++ + net/ipv6/af_inet6.c | 3 ++- + 3 files changed, 18 insertions(+), 5 deletions(-) + +--- a/include/net/addrconf.h ++++ b/include/net/addrconf.h +@@ -223,15 +223,19 @@ struct ipv6_stub { + const struct in6_addr *addr); + int (*ipv6_sock_mc_drop)(struct sock *sk, int ifindex, + const struct in6_addr *addr); +- struct dst_entry *(*ipv6_dst_lookup_flow)(struct net *net, +- const struct sock *sk, +- struct flowi6 *fl6, +- const struct in6_addr *final_dst); ++ int (*ipv6_dst_lookup)(struct net *net, struct sock *sk, ++ struct dst_entry **dst, struct flowi6 *fl6); + void (*udpv6_encap_enable)(void); + void (*ndisc_send_na)(struct net_device *dev, const struct in6_addr *daddr, + const struct in6_addr *solicited_addr, + bool router, bool solicited, bool override, bool inc_opt); + struct neigh_table *nd_tbl; ++#ifndef __GENKSYMS__ ++ struct dst_entry *(*ipv6_dst_lookup_flow)(struct net *net, ++ const struct sock *sk, ++ struct flowi6 *fl6, ++ const struct in6_addr *final_dst); ++#endif /* __GENKSYMS__ */ + }; + extern const struct ipv6_stub *ipv6_stub __read_mostly; + +--- a/net/ipv6/addrconf_core.c ++++ b/net/ipv6/addrconf_core.c +@@ -127,6 +127,13 @@ int inet6addr_validator_notifier_call_chain(unsigned long val, void *v) + } + EXPORT_SYMBOL(inet6addr_validator_notifier_call_chain); + ++static int eafnosupport_ipv6_dst_lookup(struct net *net, struct sock *u1, ++ struct dst_entry **u2, ++ struct flowi6 *u3) ++{ ++ return -EAFNOSUPPORT; ++} ++ + static struct dst_entry *eafnosupport_ipv6_dst_lookup_flow(struct net *net, + const struct sock *sk, + struct flowi6 *fl6, +@@ -136,6 +143,7 @@ static struct dst_entry *eafnosupport_ipv6_dst_lookup_flow(struct net *net, + } + + const struct ipv6_stub *ipv6_stub __read_mostly = &(struct ipv6_stub) { ++ .ipv6_dst_lookup = eafnosupport_ipv6_dst_lookup, + .ipv6_dst_lookup_flow = eafnosupport_ipv6_dst_lookup_flow, + }; + EXPORT_SYMBOL_GPL(ipv6_stub); +--- a/net/ipv6/af_inet6.c ++++ b/net/ipv6/af_inet6.c +@@ -899,10 +899,11 @@ static struct pernet_operations inet6_net_ops = { + static const struct ipv6_stub ipv6_stub_impl = { + .ipv6_sock_mc_join = ipv6_sock_mc_join, + .ipv6_sock_mc_drop = ipv6_sock_mc_drop, +- .ipv6_dst_lookup_flow = ip6_dst_lookup_flow__net, ++ .ipv6_dst_lookup = ip6_dst_lookup, + .udpv6_encap_enable = udpv6_encap_enable, + .ndisc_send_na = ndisc_send_na, + .nd_tbl = &nd_tbl, ++ .ipv6_dst_lookup_flow = ip6_dst_lookup_flow__net, + }; + + static const struct ipv6_bpf_stub ipv6_bpf_stub_impl = { diff --git a/patches.suse/0003-net-stmmac-Fix-RX-packet-size-8191.patch b/patches.suse/0003-net-stmmac-Fix-RX-packet-size-8191.patch new file mode 100644 index 0000000..3f4655d --- /dev/null +++ b/patches.suse/0003-net-stmmac-Fix-RX-packet-size-8191.patch @@ -0,0 +1,102 @@ +From dcc67c8db543fcd4eb7ddaa6c70be15fa4d0bbbd Mon Sep 17 00:00:00 2001 +From: Thor Thayer +Date: Thu, 8 Nov 2018 11:42:14 -0600 +Subject: [PATCH 03/14] net: stmmac: Fix RX packet size > 8191 +Git-commit: 8137b6ef0ce469154e5cf19f8e7fe04d9a72ac5e +Patch-mainline: v4.20-rc2 +References: git-fixes + +Ping problems with packets > 8191 as shown: + +PING 192.168.1.99 (192.168.1.99) 8150(8178) bytes of data. +8158 bytes from 192.168.1.99: icmp_seq=1 ttl=64 time=0.669 ms +wrong data byte 8144 should be 0xd0 but was 0x0 +16 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f +%< ---------------snip-------------------------------------- +8112 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf + c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf +8144 0 0 0 0 d0 d1 + ^^^^^^^ +Notice the 4 bytes of 0 before the expected byte of d0. + +Databook notes that the RX buffer must be a multiple of 4/8/16 +bytes [1]. + +Update the DMA Buffer size define to 8188 instead of 8192. Remove +the -1 from the RX buffer size allocations and use the new +DMA Buffer size directly. + +[1] Synopsys DesignWare Cores Ethernet MAC Universal v3.70a + [section 8.4.2 - Table 8-24] + +Tested on SoCFPGA Stratix10 with ping sweep from 100 to 8300 byte packets. + +Fixes: 286a83721720 ("stmmac: add CHAINED descriptor mode support (V4)") +Suggested-by: Jose Abreu +Signed-off-by: Thor Thayer +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/stmicro/stmmac/common.h | 3 ++- + drivers/net/ethernet/stmicro/stmmac/descs_com.h | 2 +- + drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 2 +- + drivers/net/ethernet/stmicro/stmmac/ring_mode.c | 2 +- + 4 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h +index b7ce3fbb5375..2e5db58f09d0 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/common.h ++++ b/drivers/net/ethernet/stmicro/stmmac/common.h +@@ -340,7 +340,8 @@ struct dma_features { + + /* GMAC TX FIFO is 8K, Rx FIFO is 16K */ + #define BUF_SIZE_16KiB 16384 +-#define BUF_SIZE_8KiB 8192 ++/* RX Buffer size must be < 8191 and multiple of 4/8/16 bytes */ ++#define BUF_SIZE_8KiB 8188 + #define BUF_SIZE_4KiB 4096 + #define BUF_SIZE_2KiB 2048 + +diff --git a/drivers/net/ethernet/stmicro/stmmac/descs_com.h b/drivers/net/ethernet/stmicro/stmmac/descs_com.h +index ca9d7e48034c..40d6356a7e73 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/descs_com.h ++++ b/drivers/net/ethernet/stmicro/stmmac/descs_com.h +@@ -31,7 +31,7 @@ + /* Enhanced descriptors */ + static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end) + { +- p->des1 |= cpu_to_le32(((BUF_SIZE_8KiB - 1) ++ p->des1 |= cpu_to_le32((BUF_SIZE_8KiB + << ERDES1_BUFFER2_SIZE_SHIFT) + & ERDES1_BUFFER2_SIZE_MASK); + +diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c +index 7546b3664113..e9b03fffa377 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c ++++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c +@@ -262,7 +262,7 @@ static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, + int mode, int end) + { + p->des0 |= cpu_to_le32(RDES0_OWN); +- p->des1 |= cpu_to_le32((BUF_SIZE_8KiB - 1) & ERDES1_BUFFER1_SIZE_MASK); ++ p->des1 |= cpu_to_le32(BUF_SIZE_8KiB & ERDES1_BUFFER1_SIZE_MASK); + + if (mode == STMMAC_CHAIN_MODE) + ehn_desc_rx_set_on_chain(p); +diff --git a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c +index 34253c2de156..d4c3bf78d928 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c ++++ b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c +@@ -144,7 +144,7 @@ static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p) + static int stmmac_set_16kib_bfsize(int mtu) + { + int ret = 0; +- if (unlikely(mtu >= BUF_SIZE_8KiB)) ++ if (unlikely(mtu > BUF_SIZE_8KiB)) + ret = BUF_SIZE_16KiB; + return ret; + } +-- +2.16.4 + diff --git a/patches.suse/0004-net-qcom-emac-add-missed-clk_disable_unprepare-in-er.patch b/patches.suse/0004-net-qcom-emac-add-missed-clk_disable_unprepare-in-er.patch new file mode 100644 index 0000000..9fdbd47 --- /dev/null +++ b/patches.suse/0004-net-qcom-emac-add-missed-clk_disable_unprepare-in-er.patch @@ -0,0 +1,57 @@ +From cbb50d338a0fd0a146ffe3c05d6610c728f671b4 Mon Sep 17 00:00:00 2001 +From: Wang Hai +Date: Mon, 10 Aug 2020 10:57:05 +0800 +Subject: [PATCH 04/14] net: qcom/emac: add missed clk_disable_unprepare in + error path of emac_clks_phase1_init +Git-commit: 50caa777a3a24d7027748e96265728ce748b41ef +Patch-mainline: v5.9-rc1 +References: git-fixes + +Fix the missing clk_disable_unprepare() before return +from emac_clks_phase1_init() in the error handling case. + +Fixes: b9b17debc69d ("net: emac: emac gigabit ethernet controller driver") +Reported-by: Hulk Robot +Signed-off-by: Wang Hai +Acked-by: Timur Tabi +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/qualcomm/emac/emac.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/qualcomm/emac/emac.c b/drivers/net/ethernet/qualcomm/emac/emac.c +index 98a326faea29..3df1f8e960c0 100644 +--- a/drivers/net/ethernet/qualcomm/emac/emac.c ++++ b/drivers/net/ethernet/qualcomm/emac/emac.c +@@ -490,13 +490,24 @@ static int emac_clks_phase1_init(struct platform_device *pdev, + + ret = clk_prepare_enable(adpt->clk[EMAC_CLK_CFG_AHB]); + if (ret) +- return ret; ++ goto disable_clk_axi; + + ret = clk_set_rate(adpt->clk[EMAC_CLK_HIGH_SPEED], 19200000); + if (ret) +- return ret; ++ goto disable_clk_cfg_ahb; ++ ++ ret = clk_prepare_enable(adpt->clk[EMAC_CLK_HIGH_SPEED]); ++ if (ret) ++ goto disable_clk_cfg_ahb; + +- return clk_prepare_enable(adpt->clk[EMAC_CLK_HIGH_SPEED]); ++ return 0; ++ ++disable_clk_cfg_ahb: ++ clk_disable_unprepare(adpt->clk[EMAC_CLK_CFG_AHB]); ++disable_clk_axi: ++ clk_disable_unprepare(adpt->clk[EMAC_CLK_AXI]); ++ ++ return ret; + } + + /* Enable clocks; needs emac_clks_phase1_init to be called before */ +-- +2.16.4 + diff --git a/patches.suse/0005-net-mlx5-Delete-extra-dump-stack-that-gives-nothing.patch b/patches.suse/0005-net-mlx5-Delete-extra-dump-stack-that-gives-nothing.patch new file mode 100644 index 0000000..c0e74f0 --- /dev/null +++ b/patches.suse/0005-net-mlx5-Delete-extra-dump-stack-that-gives-nothing.patch @@ -0,0 +1,109 @@ +From 2c28f04dde06f42be3e948b35e79cad0ec4e5e7f Mon Sep 17 00:00:00 2001 +From: Leon Romanovsky +Date: Sun, 19 Jul 2020 11:04:30 +0300 +Subject: [PATCH 05/14] net/mlx5: Delete extra dump stack that gives nothing +Git-commit: 6c4e9bcfb48933d533ff975e152757991556294a +Patch-mainline: v5.9-rc1 +References: git-fixes + +The WARN_*() macros are intended to catch impossible situations +from the SW point of view. They gave a little in case HW<->SW interface +is out-of-sync. + +Such out-of-sync scenario can be due to SW errors that are not part +of this flow or because some HW errors, where dump stack won't help +either. + +This specific WARN_ON() is useless because mlx5_core code is prepared +to handle such situations and will unfold everything correctly while +providing enough information to the users to understand why FS is not +working. + +WARNING: CPU: 0 PID: 3222 at drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:825 connect_fts_in_prio.isra.20+0x1dd/0x260 linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:825 +Kernel panic - not syncing: panic_on_warn set ... +CPU: 0 PID: 3222 Comm: syz-executor861 Not tainted 5.5.0-rc6+ #2 +Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS +rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014 +Call Trace: + __dump_stack linux/lib/dump_stack.c:77 [inline] + dump_stack+0x94/0xce linux/lib/dump_stack.c:118 + panic+0x234/0x56f linux/kernel/panic.c:221 + __warn+0x1cc/0x1e1 linux/kernel/panic.c:582 + report_bug+0x200/0x310 linux/lib/bug.c:195 + fixup_bug.part.11+0x32/0x80 linux/arch/x86/kernel/traps.c:174 + fixup_bug linux/arch/x86/kernel/traps.c:273 [inline] + do_error_trap+0xd3/0x100 linux/arch/x86/kernel/traps.c:267 + do_invalid_op+0x31/0x40 linux/arch/x86/kernel/traps.c:286 + invalid_op+0x1e/0x30 linux/arch/x86/entry/entry_64.S:1027 +RIP: 0010:connect_fts_in_prio.isra.20+0x1dd/0x260 +linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:825 +Code: 00 00 48 c7 c2 60 8c 31 84 48 c7 c6 00 81 31 84 48 8b 38 e8 3c a8 +cb ff 41 83 fd 01 8b 04 24 0f 8e 29 ff ff ff e8 83 7b bc fe <0f> 0b 8b +04 24 e9 1a ff ff ff 89 04 24 e8 c1 20 e0 fe 8b 04 24 eb +RSP: 0018:ffffc90004bb7858 EFLAGS: 00010293 +RAX: ffff88805de98e80 RBX: 0000000000000c96 RCX: ffffffff827a853d +RDX: 0000000000000000 RSI: 0000000000000000 RDI: fffff52000976efa +RBP: 0000000000000007 R08: ffffed100da060e3 R09: ffffed100da060e3 +R10: 0000000000000001 R11: ffffed100da060e2 R12: dffffc0000000000 +R13: 0000000000000002 R14: ffff8880683a1a10 R15: ffffed100d07bc1c + connect_prev_fts linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:844 [inline] + connect_flow_table linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:975 [inline] + __mlx5_create_flow_table+0x8f8/0x1710 linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:1064 + mlx5_create_flow_table linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:1094 [inline] + mlx5_create_auto_grouped_flow_table+0xe1/0x210 linux/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c:1136 + _get_prio linux/drivers/infiniband/hw/mlx5/main.c:3286 [inline] + get_flow_table+0x2ea/0x760 linux/drivers/infiniband/hw/mlx5/main.c:3376 + mlx5_ib_create_flow+0x331/0x11c0 linux/drivers/infiniband/hw/mlx5/main.c:3896 + ib_uverbs_ex_create_flow+0x13e8/0x1b40 linux/drivers/infiniband/core/uverbs_cmd.c:3311 + ib_uverbs_write+0xaa5/0xdf0 linux/drivers/infiniband/core/uverbs_main.c:769 + __vfs_write+0x7c/0x100 linux/fs/read_write.c:494 + vfs_write+0x168/0x4a0 linux/fs/read_write.c:558 + ksys_write+0xc8/0x200 linux/fs/read_write.c:611 + do_syscall_64+0x9c/0x390 linux/arch/x86/entry/common.c:294 + entry_SYSCALL_64_after_hwframe+0x44/0xa9 +RIP: 0033:0x45a059 +Code: 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 +f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 +f0 ff ff 73 01 c3 48 c7 c1 bc ff ff ff f7 d8 64 89 01 48 +RSP: 002b:00007fcc17564c98 EFLAGS: 00000246 ORIG_RAX: 0000000000000001 +RAX: ffffffffffffffda RBX: 00007fcc17564ca0 RCX: 000000000045a059 +RDX: 0000000000000030 RSI: 00000000200003c0 RDI: 0000000000000005 +RBP: 0000000000000007 R08: 0000000000000002 R09: 0000000000003131 +R10: 0000000000000000 R11: 0000000000000246 R12: 00000000006e636c +R13: 0000000000000000 R14: 00000000006e6360 R15: 00007ffdcbdaf6a0 +Dumping ftrace buffer: + (ftrace buffer empty) +Kernel Offset: disabled +Rebooting in 1 seconds.. + +Fixes: f90edfd279f3 ("net/mlx5_core: Connect flow tables") +Reviewed-by: Maor Gottlieb +Reviewed-by: Mark Bloch +Signed-off-by: Leon Romanovsky +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +index 13080def90cf..69ecbce8773d 100644 +--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +@@ -776,11 +776,10 @@ static int connect_fts_in_prio(struct mlx5_core_dev *dev, + i++; + err = root->cmds->modify_flow_table(dev, iter, ft); + if (err) { +- mlx5_core_warn(dev, "Failed to modify flow table %d\n", +- iter->id); ++ mlx5_core_err(dev, ++ "Failed to modify flow table id %d, type %d, err %d\n", ++ iter->id, iter->type, err); + /* The driver is out of sync with the FW */ +- if (i > 1) +- WARN_ON(true); + return err; + } + } +-- +2.16.4 + diff --git a/patches.suse/0006-fsl-fman-fix-eth-hash-table-allocation.patch b/patches.suse/0006-fsl-fman-fix-eth-hash-table-allocation.patch new file mode 100644 index 0000000..2570449 --- /dev/null +++ b/patches.suse/0006-fsl-fman-fix-eth-hash-table-allocation.patch @@ -0,0 +1,37 @@ +From aa18b985a9cde58f23151e96af7a0b65dcf5b727 Mon Sep 17 00:00:00 2001 +From: Florinel Iordache +Date: Mon, 3 Aug 2020 10:07:34 +0300 +Subject: [PATCH 06/14] fsl/fman: fix eth hash table allocation +Git-commit: 3207f715c34317d08e798e11a10ce816feb53c0f +Patch-mainline: v5.9-rc1 +References: git-fixes + +Fix memory allocation for ethernet address hash table. +The code was wrongly allocating an array for eth hash table which +is incorrect because this is the main structure for eth hash table +(struct eth_hash_t) that contains inside a number of elements. + +Fixes: 57ba4c9b56d8 ("fsl/fman: Add FMan MAC support") +Signed-off-by: Florinel Iordache +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/freescale/fman/fman_mac.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/freescale/fman/fman_mac.h b/drivers/net/ethernet/freescale/fman/fman_mac.h +index dd6d0526f6c1..19f327efdaff 100644 +--- a/drivers/net/ethernet/freescale/fman/fman_mac.h ++++ b/drivers/net/ethernet/freescale/fman/fman_mac.h +@@ -252,7 +252,7 @@ static inline struct eth_hash_t *alloc_hash_table(u16 size) + struct eth_hash_t *hash; + + /* Allocate address hash table */ +- hash = kmalloc_array(size, sizeof(struct eth_hash_t *), GFP_KERNEL); ++ hash = kmalloc(sizeof(*hash), GFP_KERNEL); + if (!hash) + return NULL; + +-- +2.16.4 + diff --git a/patches.suse/0007-fsl-fman-check-dereferencing-null-pointer.patch b/patches.suse/0007-fsl-fman-check-dereferencing-null-pointer.patch new file mode 100644 index 0000000..f451481 --- /dev/null +++ b/patches.suse/0007-fsl-fman-check-dereferencing-null-pointer.patch @@ -0,0 +1,71 @@ +From c9c5d465c27ba8fc6f736e096abd1d689d30090c Mon Sep 17 00:00:00 2001 +From: Florinel Iordache +Date: Mon, 3 Aug 2020 10:07:33 +0300 +Subject: [PATCH 07/14] fsl/fman: check dereferencing null pointer +Git-commit: cc5d229a122106733a85c279d89d7703f21e4d4f +Patch-mainline: v5.9-rc1 +References: git-fixes + +Add a safe check to avoid dereferencing null pointer + +Fixes: 57ba4c9b56d8 ("fsl/fman: Add FMan MAC support") +Signed-off-by: Florinel Iordache +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/freescale/fman/fman_dtsec.c | 4 ++-- + drivers/net/ethernet/freescale/fman/fman_memac.c | 2 +- + drivers/net/ethernet/freescale/fman/fman_tgec.c | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c +index 1ca543ac8f2c..d2de9ea80c43 100644 +--- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c ++++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c +@@ -1205,7 +1205,7 @@ int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr) + list_for_each(pos, + &dtsec->multicast_addr_hash->lsts[bucket]) { + hash_entry = ETH_HASH_ENTRY_OBJ(pos); +- if (hash_entry->addr == addr) { ++ if (hash_entry && hash_entry->addr == addr) { + list_del_init(&hash_entry->node); + kfree(hash_entry); + break; +@@ -1218,7 +1218,7 @@ int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr) + list_for_each(pos, + &dtsec->unicast_addr_hash->lsts[bucket]) { + hash_entry = ETH_HASH_ENTRY_OBJ(pos); +- if (hash_entry->addr == addr) { ++ if (hash_entry && hash_entry->addr == addr) { + list_del_init(&hash_entry->node); + kfree(hash_entry); + break; +diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c +index 41c6fa200e74..998647a241d9 100644 +--- a/drivers/net/ethernet/freescale/fman/fman_memac.c ++++ b/drivers/net/ethernet/freescale/fman/fman_memac.c +@@ -986,7 +986,7 @@ int memac_del_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr) + + list_for_each(pos, &memac->multicast_addr_hash->lsts[hash]) { + hash_entry = ETH_HASH_ENTRY_OBJ(pos); +- if (hash_entry->addr == addr) { ++ if (hash_entry && hash_entry->addr == addr) { + list_del_init(&hash_entry->node); + kfree(hash_entry); + break; +diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c b/drivers/net/ethernet/freescale/fman/fman_tgec.c +index f75b9c11b2d2..ac5a281e0ec3 100644 +--- a/drivers/net/ethernet/freescale/fman/fman_tgec.c ++++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c +@@ -630,7 +630,7 @@ int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr) + + list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) { + hash_entry = ETH_HASH_ENTRY_OBJ(pos); +- if (hash_entry->addr == addr) { ++ if (hash_entry && hash_entry->addr == addr) { + list_del_init(&hash_entry->node); + kfree(hash_entry); + break; +-- +2.16.4 + diff --git a/patches.suse/0008-fsl-fman-fix-unreachable-code.patch b/patches.suse/0008-fsl-fman-fix-unreachable-code.patch new file mode 100644 index 0000000..7f92135 --- /dev/null +++ b/patches.suse/0008-fsl-fman-fix-unreachable-code.patch @@ -0,0 +1,34 @@ +From 8bae108fb8d47c477313b3e61144de87908e7d30 Mon Sep 17 00:00:00 2001 +From: Florinel Iordache +Date: Mon, 3 Aug 2020 10:07:32 +0300 +Subject: [PATCH 08/14] fsl/fman: fix unreachable code +Git-commit: cc79fd8f557767de90ff199d3b6fb911df43160a +Patch-mainline: v5.9-rc1 +References: git-fixes + +The parameter 'priority' is incorrectly forced to zero which ultimately +induces logically dead code in the subsequent lines. + +Fixes: 57ba4c9b56d8 ("fsl/fman: Add FMan MAC support") +Signed-off-by: Florinel Iordache +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/freescale/fman/fman_memac.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c +index 998647a241d9..0aa2004c1392 100644 +--- a/drivers/net/ethernet/freescale/fman/fman_memac.c ++++ b/drivers/net/ethernet/freescale/fman/fman_memac.c +@@ -856,7 +856,6 @@ int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority, + + tmp = ioread32be(®s->command_config); + tmp &= ~CMD_CFG_PFC_MODE; +- priority = 0; + + iowrite32be(tmp, ®s->command_config); + +-- +2.16.4 + diff --git a/patches.suse/0009-fsl-fman-fix-dereference-null-return-value.patch b/patches.suse/0009-fsl-fman-fix-dereference-null-return-value.patch new file mode 100644 index 0000000..b095f8a --- /dev/null +++ b/patches.suse/0009-fsl-fman-fix-dereference-null-return-value.patch @@ -0,0 +1,49 @@ +From 5f5bd17ce1a189fc58d0d3ece5f89a36557bbc1d Mon Sep 17 00:00:00 2001 +From: Florinel Iordache +Date: Mon, 3 Aug 2020 10:07:31 +0300 +Subject: [PATCH 09/14] fsl/fman: fix dereference null return value +Git-commit: 0572054617f32670abab4b4e89a876954d54b704 +Patch-mainline: v5.9-rc1 +References: git-fixes + +Check before using returned value to avoid dereferencing null pointer. + +Fixes: 18a6c85fcc78 ("fsl/fman: Add FMan Port Support") +Signed-off-by: Florinel Iordache +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/freescale/fman/fman_port.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/freescale/fman/fman_port.c b/drivers/net/ethernet/freescale/fman/fman_port.c +index d8d9c1462e57..a2b649fb5407 100644 +--- a/drivers/net/ethernet/freescale/fman/fman_port.c ++++ b/drivers/net/ethernet/freescale/fman/fman_port.c +@@ -1756,6 +1756,7 @@ static int fman_port_probe(struct platform_device *of_dev) + struct fman_port *port; + struct fman *fman; + struct device_node *fm_node, *port_node; ++ struct platform_device *fm_pdev; + struct resource res; + struct resource *dev_res; + u32 val; +@@ -1780,8 +1781,14 @@ static int fman_port_probe(struct platform_device *of_dev) + goto return_err; + } + +- fman = dev_get_drvdata(&of_find_device_by_node(fm_node)->dev); ++ fm_pdev = of_find_device_by_node(fm_node); + of_node_put(fm_node); ++ if (!fm_pdev) { ++ err = -EINVAL; ++ goto return_err; ++ } ++ ++ fman = dev_get_drvdata(&fm_pdev->dev); + if (!fman) { + err = -EINVAL; + goto return_err; +-- +2.16.4 + diff --git a/patches.suse/0010-fsl-fman-use-32-bit-unsigned-integer.patch b/patches.suse/0010-fsl-fman-use-32-bit-unsigned-integer.patch new file mode 100644 index 0000000..053fa00 --- /dev/null +++ b/patches.suse/0010-fsl-fman-use-32-bit-unsigned-integer.patch @@ -0,0 +1,40 @@ +From 4212fc62224cd93125c8a6e0d6f9bbc18ec0b3b7 Mon Sep 17 00:00:00 2001 +From: Florinel Iordache +Date: Mon, 3 Aug 2020 10:07:30 +0300 +Subject: [PATCH 10/14] fsl/fman: use 32-bit unsigned integer +Git-commit: 99f47abd9f7bf6e365820d355dc98f6955a562df +Patch-mainline: v5.9-rc1 +References: git-fixes + +Potentially overflowing expression (ts_freq << 16 and intgr << 16) +declared as type u32 (32-bit unsigned) is evaluated using 32-bit +arithmetic and then used in a context that expects an expression of +type u64 (64-bit unsigned) which ultimately is used as 16-bit +unsigned by typecasting to u16. Fixed by using an unsigned 32-bit +integer since the value is truncated anyway in the end. + +Fixes: 414fd46e7762 ("fsl/fman: Add FMan support") +Signed-off-by: Florinel Iordache +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/freescale/fman/fman.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/freescale/fman/fman.c b/drivers/net/ethernet/freescale/fman/fman.c +index d83076f8dfe2..b1342365b63a 100644 +--- a/drivers/net/ethernet/freescale/fman/fman.c ++++ b/drivers/net/ethernet/freescale/fman/fman.c +@@ -1391,8 +1391,7 @@ static void enable_time_stamp(struct fman *fman) + { + struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs; + u16 fm_clk_freq = fman->state->fm_clk_freq; +- u32 tmp, intgr, ts_freq; +- u64 frac; ++ u32 tmp, intgr, ts_freq, frac; + + ts_freq = (u32)(1 << fman->state->count1_micro_bit); + /* configure timestamp so that bit 8 will count 1 microsecond +-- +2.16.4 + diff --git a/patches.suse/0011-net-spider_net-Fix-the-size-used-in-a-dma_free_coher.patch b/patches.suse/0011-net-spider_net-Fix-the-size-used-in-a-dma_free_coher.patch new file mode 100644 index 0000000..65fdb59 --- /dev/null +++ b/patches.suse/0011-net-spider_net-Fix-the-size-used-in-a-dma_free_coher.patch @@ -0,0 +1,39 @@ +From 6dba01c73ab97532467197bb660e729d194258de Mon Sep 17 00:00:00 2001 +From: Christophe JAILLET +Date: Sun, 2 Aug 2020 15:53:33 +0200 +Subject: [PATCH 11/14] net: spider_net: Fix the size used in a + 'dma_free_coherent()' call +Git-commit: 36f28f7687a9ce665479cce5d64ce7afaa9e77ae +Patch-mainline: v5.9-rc1 +References: git-fixes + +Update the size used in 'dma_free_coherent()' in order to match the one +used in the corresponding 'dma_alloc_coherent()', in +'spider_net_init_chain()'. + +Fixes: d4ed8f8d1fb7 ("Spidernet DMA coalescing") +Signed-off-by: Christophe JAILLET +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/toshiba/spider_net.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/toshiba/spider_net.c b/drivers/net/ethernet/toshiba/spider_net.c +index cec9e70ab995..ec8aff31623c 100644 +--- a/drivers/net/ethernet/toshiba/spider_net.c ++++ b/drivers/net/ethernet/toshiba/spider_net.c +@@ -296,8 +296,8 @@ spider_net_free_chain(struct spider_net_card *card, + descr = descr->next; + } while (descr != chain->ring); + +- dma_free_coherent(&card->pdev->dev, chain->num_desc, +- chain->hwring, chain->dma_addr); ++ dma_free_coherent(&card->pdev->dev, chain->num_desc * sizeof(struct spider_net_hw_descr), ++ chain->hwring, chain->dma_addr); + } + + /** +-- +2.16.4 + diff --git a/patches.suse/0012-net-ethernet-aquantia-Fix-wrong-return-value.patch b/patches.suse/0012-net-ethernet-aquantia-Fix-wrong-return-value.patch new file mode 100644 index 0000000..40c6db6 --- /dev/null +++ b/patches.suse/0012-net-ethernet-aquantia-Fix-wrong-return-value.patch @@ -0,0 +1,36 @@ +From e01fa685df7e7827a416d12ef3bb75a12c434b8f Mon Sep 17 00:00:00 2001 +From: Tianjia Zhang +Date: Sun, 2 Aug 2020 19:15:37 +0800 +Subject: [PATCH 12/14] net: ethernet: aquantia: Fix wrong return value +Git-commit: 0470a48880f8bc42ce26962b79c7b802c5a695ec +Patch-mainline: v5.9-rc1 +References: git-fixes + +In function hw_atl_a0_hw_multicast_list_set(), when an invalid +request is encountered, a negative error code should be returned. + +Fixes: bab6de8fd180b ("net: ethernet: aquantia: Atlantic A0 and B0 specific functions") +Cc: David VomLehn +Signed-off-by: Tianjia Zhang +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c +index 47167aa3c588..372b81bcb0c6 100644 +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c +@@ -729,7 +729,7 @@ static int hw_atl_a0_hw_multicast_list_set(struct aq_hw_s *self, + int err = 0; + + if (count > (HW_ATL_A0_MAC_MAX - HW_ATL_A0_MAC_MIN)) { +- err = EBADRQC; ++ err = -EBADRQC; + goto err_exit; + } + for (self->aq_nic_cfg->mc_list_count = 0U; +-- +2.16.4 + diff --git a/patches.suse/0013-net-mvpp2-fix-memory-leak-in-mvpp2_rx.patch b/patches.suse/0013-net-mvpp2-fix-memory-leak-in-mvpp2_rx.patch new file mode 100644 index 0000000..812d199 --- /dev/null +++ b/patches.suse/0013-net-mvpp2-fix-memory-leak-in-mvpp2_rx.patch @@ -0,0 +1,34 @@ +From 8f20f10f31757d9e7fbbbbc1c8c688fb2f5ec7d0 Mon Sep 17 00:00:00 2001 +From: Lorenzo Bianconi +Date: Fri, 31 Jul 2020 10:38:32 +0200 +Subject: [PATCH 13/14] net: mvpp2: fix memory leak in mvpp2_rx +Git-commit: d6526926de7397a97308780911565e31a6b67b59 +Patch-mainline: v5.9-rc1 +References: git-fixes + +Release skb memory in mvpp2_rx() if mvpp2_rx_refill routine fails + +Fixes: b5015854674b ("net: mvpp2: fix refilling BM pools in RX path") +Signed-off-by: Lorenzo Bianconi +Acked-by: Matteo Croce +Signed-off-by: David S. Miller +Acked-by: Denis Kirjanov +--- + drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +index 8c3236a5d974..2f9ed98ad869 100644 +--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c ++++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +@@ -2735,6 +2735,7 @@ static int mvpp2_rx(struct mvpp2_port *port, struct napi_struct *napi, + err = mvpp2_rx_refill(port, bm_pool, pool); + if (err) { + netdev_err(port->dev, "failed to refill BM pools\n"); ++ dev_kfree_skb_any(skb); + goto err_drop_frame; + } + +-- +2.16.4 + diff --git a/patches.suse/0014-net-mlx5e-vxlan-Use-RCU-for-vxlan-table-lookup.patch b/patches.suse/0014-net-mlx5e-vxlan-Use-RCU-for-vxlan-table-lookup.patch new file mode 100644 index 0000000..74ed105 --- /dev/null +++ b/patches.suse/0014-net-mlx5e-vxlan-Use-RCU-for-vxlan-table-lookup.patch @@ -0,0 +1,161 @@ +From a7ac12760d59a9065826b31d6f5a2c5742ef85d5 Mon Sep 17 00:00:00 2001 +From: Saeed Mahameed +Date: Fri, 15 May 2020 17:09:05 -0700 +Subject: [PATCH 14/14] net/mlx5e: vxlan: Use RCU for vxlan table lookup +Git-commit: 7a64ca862ac96d5e78a59bd57549034134ee0949 +Patch-mainline: v5.9-rc1 +References: git-fixes + +Remove the spinlock protecting the vxlan table and use RCU instead. +This will improve performance as it will eliminate contention on data +path cores. + +Fixes: b3f63c3d5e2c ("net/mlx5e: Add netdev support for VXLAN tunneling") +Signed-off-by: Saeed Mahameed +Reviewed-by: Maxim Mikityanskiy +Acked-by: Denis Kirjanov +--- + .../net/ethernet/mellanox/mlx5/core/lib/vxlan.c | 65 +++++++++------------- + 1 file changed, 27 insertions(+), 38 deletions(-) + +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/vxlan.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/vxlan.c +index 9a8fd762167b..9d30adbe1657 100644 +--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/vxlan.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/vxlan.c +@@ -38,7 +38,6 @@ + + struct mlx5_vxlan { + struct mlx5_core_dev *mdev; +- spinlock_t lock; /* protect vxlan table */ + /* max_num_ports is usuallly 4, 16 buckets is more than enough */ + DECLARE_HASHTABLE(htable, 4); + int num_ports; +@@ -78,45 +77,46 @@ static int mlx5_vxlan_core_del_port_cmd(struct mlx5_core_dev *mdev, u16 port) + return mlx5_cmd_exec(mdev, in, sizeof(in), out, sizeof(out)); + } + +-static struct mlx5_vxlan_port* +-mlx5_vxlan_lookup_port_locked(struct mlx5_vxlan *vxlan, u16 port) ++struct mlx5_vxlan_port *mlx5_vxlan_lookup_port(struct mlx5_vxlan *vxlan, u16 port) + { +- struct mlx5_vxlan_port *vxlanp; ++ struct mlx5_vxlan_port *retptr = NULL, *vxlanp; + +- hash_for_each_possible(vxlan->htable, vxlanp, hlist, port) { +- if (vxlanp->udp_port == port) +- return vxlanp; +- } ++ if (!mlx5_vxlan_allowed(vxlan)) ++ return NULL; + +- return NULL; ++ rcu_read_lock(); ++ hash_for_each_possible_rcu(vxlan->htable, vxlanp, hlist, port) ++ if (vxlanp->udp_port == port) { ++ retptr = vxlanp; ++ break; ++ } ++ rcu_read_unlock(); ++ ++ return retptr; + } + +-struct mlx5_vxlan_port *mlx5_vxlan_lookup_port(struct mlx5_vxlan *vxlan, u16 port) ++static struct mlx5_vxlan_port *vxlan_lookup_port(struct mlx5_vxlan *vxlan, u16 port) + { + struct mlx5_vxlan_port *vxlanp; + +- if (!mlx5_vxlan_allowed(vxlan)) +- return NULL; +- +- spin_lock_bh(&vxlan->lock); +- vxlanp = mlx5_vxlan_lookup_port_locked(vxlan, port); +- spin_unlock_bh(&vxlan->lock); +- +- return vxlanp; ++ hash_for_each_possible(vxlan->htable, vxlanp, hlist, port) ++ if (vxlanp->udp_port == port) ++ return vxlanp; ++ return NULL; + } + + int mlx5_vxlan_add_port(struct mlx5_vxlan *vxlan, u16 port) + { + struct mlx5_vxlan_port *vxlanp; +- int ret = -ENOSPC; ++ int ret = 0; + +- vxlanp = mlx5_vxlan_lookup_port(vxlan, port); ++ mutex_lock(&vxlan->sync_lock); ++ vxlanp = vxlan_lookup_port(vxlan, port); + if (vxlanp) { + atomic_inc(&vxlanp->refcount); +- return 0; ++ goto unlock; + } + +- mutex_lock(&vxlan->sync_lock); + if (vxlan->num_ports >= mlx5_vxlan_max_udp_ports(vxlan->mdev)) { + mlx5_core_info(vxlan->mdev, + "UDP port (%d) not offloaded, max number of UDP ports (%d) are already offloaded\n", +@@ -138,9 +138,7 @@ int mlx5_vxlan_add_port(struct mlx5_vxlan *vxlan, u16 port) + vxlanp->udp_port = port; + atomic_set(&vxlanp->refcount, 1); + +- spin_lock_bh(&vxlan->lock); +- hash_add(vxlan->htable, &vxlanp->hlist, port); +- spin_unlock_bh(&vxlan->lock); ++ hash_add_rcu(vxlan->htable, &vxlanp->hlist, port); + + vxlan->num_ports++; + mutex_unlock(&vxlan->sync_lock); +@@ -157,34 +155,26 @@ int mlx5_vxlan_add_port(struct mlx5_vxlan *vxlan, u16 port) + int mlx5_vxlan_del_port(struct mlx5_vxlan *vxlan, u16 port) + { + struct mlx5_vxlan_port *vxlanp; +- bool remove = false; + int ret = 0; + + mutex_lock(&vxlan->sync_lock); + +- spin_lock_bh(&vxlan->lock); +- vxlanp = mlx5_vxlan_lookup_port_locked(vxlan, port); ++ vxlanp = vxlan_lookup_port(vxlan, port); + if (!vxlanp) { + ret = -ENOENT; + goto out_unlock; + } + + if (atomic_dec_and_test(&vxlanp->refcount)) { +- hash_del(&vxlanp->hlist); +- remove = true; +- } +- +-out_unlock: +- spin_unlock_bh(&vxlan->lock); +- +- if (remove) { ++ hash_del_rcu(&vxlanp->hlist); ++ synchronize_rcu(); + mlx5_vxlan_core_del_port_cmd(vxlan->mdev, port); + kfree(vxlanp); + vxlan->num_ports--; + } + ++out_unlock: + mutex_unlock(&vxlan->sync_lock); +- + return ret; + } + +@@ -201,7 +191,6 @@ struct mlx5_vxlan *mlx5_vxlan_create(struct mlx5_core_dev *mdev) + + vxlan->mdev = mdev; + mutex_init(&vxlan->sync_lock); +- spin_lock_init(&vxlan->lock); + hash_init(vxlan->htable); + + /* Hardware adds 4789 by default */ +-- +2.16.4 + diff --git a/patches.suse/char-virtio-Select-VIRTIO-from-VIRTIO_CONSOLE.patch b/patches.suse/char-virtio-Select-VIRTIO-from-VIRTIO_CONSOLE.patch new file mode 100644 index 0000000..96148f4 --- /dev/null +++ b/patches.suse/char-virtio-Select-VIRTIO-from-VIRTIO_CONSOLE.patch @@ -0,0 +1,33 @@ +From 3a22b4650ead54a28315e3c0e5116ca5e130e977 Mon Sep 17 00:00:00 2001 +From: Michal Suchanek +Date: Mon, 31 Aug 2020 16:35:28 +0200 +Subject: [PATCH] char: virtio: Select VIRTIO from VIRTIO_CONSOLE. + +References: bsc#1175667 +Patch-mainline: submitted https://lore.kernel.org/lkml/20200831165850.26163-1-msuchanek@suse.de/ + +Make it possible to make virtio console built-in when +other virtio drivers are modular. + +Signed-off-by: Michal Suchanek +--- + drivers/char/Kconfig | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -158,8 +158,9 @@ source "drivers/tty/hvc/Kconfig" + + config VIRTIO_CONSOLE + tristate "Virtio console" +- depends on VIRTIO && TTY ++ depends on TTY + select HVC_DRIVER ++ select VIRTIO + help + Virtio console for use with lguest and other hypervisors. + +-- +2.28.0 + diff --git a/patches.suse/net-ipv6-add-net-argument-to-ip6_dst_lookup_flow.patch b/patches.suse/net-ipv6-add-net-argument-to-ip6_dst_lookup_flow.patch new file mode 100644 index 0000000..fbad3cf --- /dev/null +++ b/patches.suse/net-ipv6-add-net-argument-to-ip6_dst_lookup_flow.patch @@ -0,0 +1,219 @@ +From: Sabrina Dubroca +Date: Wed, 4 Dec 2019 15:35:52 +0100 +Subject: net: ipv6: add net argument to ip6_dst_lookup_flow +Patch-mainline: v5.5-rc1 +Git-commit: c4e85f73afb6384123e5ef1bba3315b2e3ad031e +References: CVE-2020-1749 bsc#1165629 + +This will be used in the conversion of ipv6_stub to ip6_dst_lookup_flow, +as some modules currently pass a net argument without a socket to +ip6_dst_lookup. This is equivalent to commit 343d60aada5a ("ipv6: change +ipv6_stub_impl.ipv6_dst_lookup to take net argument"). + +Signed-off-by: Sabrina Dubroca +Signed-off-by: David S. Miller +Acked-by: Michal Kubecek + +--- + include/net/ipv6.h | 2 +- + net/dccp/ipv6.c | 6 +++--- + net/ipv6/af_inet6.c | 2 +- + net/ipv6/datagram.c | 2 +- + net/ipv6/inet6_connection_sock.c | 4 ++-- + net/ipv6/ip6_output.c | 8 ++++---- + net/ipv6/raw.c | 2 +- + net/ipv6/syncookies.c | 2 +- + net/ipv6/tcp_ipv6.c | 4 ++-- + net/l2tp/l2tp_ip6.c | 2 +- + net/sctp/ipv6.c | 4 ++-- + 11 files changed, 19 insertions(+), 19 deletions(-) + +--- a/include/net/ipv6.h ++++ b/include/net/ipv6.h +@@ -919,7 +919,7 @@ static inline struct sk_buff *ip6_finish_skb(struct sock *sk) + + int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst, + struct flowi6 *fl6); +-struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6, ++struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, struct flowi6 *fl6, + const struct in6_addr *final_dst); + struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, + const struct in6_addr *final_dst); +--- a/net/dccp/ipv6.c ++++ b/net/dccp/ipv6.c +@@ -209,7 +209,7 @@ static int dccp_v6_send_response(const struct sock *sk, struct request_sock *req + final_p = fl6_update_dst(&fl6, rcu_dereference(np->opt), &final); + rcu_read_unlock(); + +- dst = ip6_dst_lookup_flow(sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + dst = NULL; +@@ -280,7 +280,7 @@ static void dccp_v6_ctl_send_reset(const struct sock *sk, struct sk_buff *rxskb) + security_skb_classify_flow(rxskb, flowi6_to_flowi(&fl6)); + + /* sk = NULL, but it is safe for now. RST socket required. */ +- dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL); ++ dst = ip6_dst_lookup_flow(sock_net(ctl_sk), ctl_sk, &fl6, NULL); + if (!IS_ERR(dst)) { + skb_dst_set(skb, dst); + ip6_xmit(ctl_sk, skb, &fl6, 0, NULL, 0); +@@ -888,7 +888,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr, + opt = rcu_dereference_protected(np->opt, lockdep_sock_is_held(sk)); + final_p = fl6_update_dst(&fl6, opt, &final); + +- dst = ip6_dst_lookup_flow(sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto failure; +--- a/net/ipv6/af_inet6.c ++++ b/net/ipv6/af_inet6.c +@@ -713,7 +713,7 @@ int inet6_sk_rebuild_header(struct sock *sk) + &final); + rcu_read_unlock(); + +- dst = ip6_dst_lookup_flow(sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + sk->sk_route_caps = 0; + sk->sk_err_soft = -PTR_ERR(dst); +--- a/net/ipv6/datagram.c ++++ b/net/ipv6/datagram.c +@@ -88,7 +88,7 @@ int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr) + final_p = fl6_update_dst(&fl6, opt, &final); + rcu_read_unlock(); + +- dst = ip6_dst_lookup_flow(sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto out; +--- a/net/ipv6/inet6_connection_sock.c ++++ b/net/ipv6/inet6_connection_sock.c +@@ -52,7 +52,7 @@ struct dst_entry *inet6_csk_route_req(const struct sock *sk, + fl6->flowi6_uid = sk->sk_uid; + security_req_classify_flow(req, flowi6_to_flowi(fl6)); + +- dst = ip6_dst_lookup_flow(sk, fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); + if (IS_ERR(dst)) + return NULL; + +@@ -107,7 +107,7 @@ static struct dst_entry *inet6_csk_route_socket(struct sock *sk, + + dst = __inet6_csk_dst_check(sk, np->dst_cookie); + if (!dst) { +- dst = ip6_dst_lookup_flow(sk, fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); + + if (!IS_ERR(dst)) + ip6_dst_store(sk, dst, NULL, NULL); +--- a/net/ipv6/ip6_output.c ++++ b/net/ipv6/ip6_output.c +@@ -1082,19 +1082,19 @@ EXPORT_SYMBOL_GPL(ip6_dst_lookup); + * It returns a valid dst pointer on success, or a pointer encoded + * error code. + */ +-struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6, ++struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, struct flowi6 *fl6, + const struct in6_addr *final_dst) + { + struct dst_entry *dst = NULL; + int err; + +- err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6); ++ err = ip6_dst_lookup_tail(net, sk, &dst, fl6); + if (err) + return ERR_PTR(err); + if (final_dst) + fl6->daddr = *final_dst; + +- return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); ++ return xfrm_lookup_route(net, dst, flowi6_to_flowi(fl6), sk, 0); + } + EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow); + +@@ -1119,7 +1119,7 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, + + dst = ip6_sk_dst_check(sk, dst, fl6); + if (!dst) +- dst = ip6_dst_lookup_flow(sk, fl6, final_dst); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_dst); + + return dst; + } +--- a/net/ipv6/raw.c ++++ b/net/ipv6/raw.c +@@ -926,7 +926,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) + + fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel); + +- dst = ip6_dst_lookup_flow(sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto out; +--- a/net/ipv6/syncookies.c ++++ b/net/ipv6/syncookies.c +@@ -237,7 +237,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb) + fl6.flowi6_uid = sk->sk_uid; + security_req_classify_flow(req, flowi6_to_flowi(&fl6)); + +- dst = ip6_dst_lookup_flow(sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) + goto out_free; + } +--- a/net/ipv6/tcp_ipv6.c ++++ b/net/ipv6/tcp_ipv6.c +@@ -252,7 +252,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, + + security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); + +- dst = ip6_dst_lookup_flow(sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto failure; +@@ -851,7 +851,7 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 + * Underlying function will use this to retrieve the network + * namespace + */ +- dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL); ++ dst = ip6_dst_lookup_flow(sock_net(ctl_sk), ctl_sk, &fl6, NULL); + if (!IS_ERR(dst)) { + skb_dst_set(buff, dst); + ip6_xmit(ctl_sk, buff, &fl6, fl6.flowi6_mark, NULL, tclass); +--- a/net/l2tp/l2tp_ip6.c ++++ b/net/l2tp/l2tp_ip6.c +@@ -625,7 +625,7 @@ static int l2tp_ip6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) + + fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel); + +- dst = ip6_dst_lookup_flow(sk, &fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p); + if (IS_ERR(dst)) { + err = PTR_ERR(dst); + goto out; +--- a/net/sctp/ipv6.c ++++ b/net/sctp/ipv6.c +@@ -270,7 +270,7 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, + final_p = fl6_update_dst(fl6, rcu_dereference(np->opt), &final); + rcu_read_unlock(); + +- dst = ip6_dst_lookup_flow(sk, fl6, final_p); ++ dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); + if (!asoc || saddr) + goto out; + +@@ -323,7 +323,7 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, + fl6->saddr = laddr->a.v6.sin6_addr; + fl6->fl6_sport = laddr->a.v6.sin6_port; + final_p = fl6_update_dst(fl6, rcu_dereference(np->opt), &final); +- bdst = ip6_dst_lookup_flow(sk, fl6, final_p); ++ bdst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); + + if (IS_ERR(bdst)) + continue; diff --git a/patches.suse/net-ipv6_stub-use-ip6_dst_lookup_flow-instead-of-ip6.patch b/patches.suse/net-ipv6_stub-use-ip6_dst_lookup_flow-instead-of-ip6.patch new file mode 100644 index 0000000..6db6682 --- /dev/null +++ b/patches.suse/net-ipv6_stub-use-ip6_dst_lookup_flow-instead-of-ip6.patch @@ -0,0 +1,225 @@ +From: Sabrina Dubroca +Date: Wed, 4 Dec 2019 15:35:53 +0100 +Subject: net: ipv6_stub: use ip6_dst_lookup_flow instead of ip6_dst_lookup +Patch-mainline: v5.5-rc1 +Git-commit: 6c8991f41546c3c472503dff1ea9daaddf9331c2 +References: CVE-2020-1749 bsc#1165629 + +ipv6_stub uses the ip6_dst_lookup function to allow other modules to +perform IPv6 lookups. However, this function skips the XFRM layer +entirely. + +All users of ipv6_stub->ip6_dst_lookup use ip_route_output_flow (via the +ip_route_output_key and ip_route_output helpers) for their IPv4 lookups, +which calls xfrm_lookup_route(). This patch fixes this inconsistent +behavior by switching the stub to ip6_dst_lookup_flow, which also calls +xfrm_lookup_route(). + +This requires some changes in all the callers, as these two functions +take different arguments and have different return types. + +Fixes: 5f81bd2e5d80 ("ipv6: export a stub for IPv6 symbols used by vxlan") +Reported-by: Xiumei Mu +Signed-off-by: Sabrina Dubroca +Signed-off-by: David S. Miller +Acked-by: Michal Kubecek + +--- + drivers/infiniband/core/addr.c | 7 +++---- + drivers/infiniband/sw/rxe/rxe_net.c | 8 +++++--- + drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 9 ++++----- + drivers/net/geneve.c | 4 +++- + drivers/net/vxlan.c | 8 +++----- + include/net/addrconf.h | 6 ++++-- + net/ipv6/addrconf_core.c | 11 ++++++----- + net/ipv6/af_inet6.c | 2 +- + net/mpls/af_mpls.c | 7 +++---- + net/tipc/udp_media.c | 8 +++++--- + 10 files changed, 37 insertions(+), 33 deletions(-) + +--- a/drivers/infiniband/core/addr.c ++++ b/drivers/infiniband/core/addr.c +@@ -420,16 +420,15 @@ static int addr6_resolve(struct sockaddr *src_sock, + (const struct sockaddr_in6 *)dst_sock; + struct flowi6 fl6; + struct dst_entry *dst; +- int ret; + + memset(&fl6, 0, sizeof fl6); + fl6.daddr = dst_in->sin6_addr; + fl6.saddr = src_in->sin6_addr; + fl6.flowi6_oif = addr->bound_dev_if; + +- ret = ipv6_stub->ipv6_dst_lookup(addr->net, NULL, &dst, &fl6); +- if (ret < 0) +- return ret; ++ dst = ipv6_stub->ipv6_dst_lookup_flow(addr->net, NULL, &fl6, NULL); ++ if (IS_ERR(dst)) ++ return PTR_ERR(dst); + + if (ipv6_addr_any(&src_in->sin6_addr)) + src_in->sin6_addr = fl6.saddr; +--- a/drivers/infiniband/sw/rxe/rxe_net.c ++++ b/drivers/infiniband/sw/rxe/rxe_net.c +@@ -154,10 +154,12 @@ static struct dst_entry *rxe_find_route6(struct net_device *ndev, + memcpy(&fl6.daddr, daddr, sizeof(*daddr)); + fl6.flowi6_proto = IPPROTO_UDP; + +- if (unlikely(ipv6_stub->ipv6_dst_lookup(sock_net(recv_sockets.sk6->sk), +- recv_sockets.sk6->sk, &ndst, &fl6))) { ++ ndst = ipv6_stub->ipv6_dst_lookup_flow(sock_net(recv_sockets.sk6->sk), ++ recv_sockets.sk6->sk, &fl6, ++ NULL); ++ if (unlikely(IS_ERR(ndst))) { + pr_err_ratelimited("no route to %pI6\n", daddr); +- goto put; ++ return NULL; + } + + if (unlikely(ndst->error)) { +--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +@@ -2384,12 +2384,11 @@ static int mlx5e_route_lookup_ipv6(struct mlx5e_priv *priv, + #if IS_ENABLED(CONFIG_INET) && IS_ENABLED(CONFIG_IPV6) + struct mlx5e_rep_priv *uplink_rpriv; + struct mlx5_eswitch *esw = priv->mdev->priv.eswitch; +- int ret; + +- ret = ipv6_stub->ipv6_dst_lookup(dev_net(mirred_dev), NULL, &dst, +- fl6); +- if (ret < 0) +- return ret; ++ dst = ipv6_stub->ipv6_dst_lookup_flow(dev_net(mirred_dev), NULL, fl6, ++ NULL); ++ if (IS_ERR(dst)) ++ return PTR_ERR(dst); + + if (!(*out_ttl)) + *out_ttl = ip6_dst_hoplimit(dst); +--- a/drivers/net/geneve.c ++++ b/drivers/net/geneve.c +@@ -787,7 +787,9 @@ static struct dst_entry *geneve_get_v6_dst(struct sk_buff *skb, + if (dst) + return dst; + } +- if (ipv6_stub->ipv6_dst_lookup(geneve->net, gs6->sock->sk, &dst, fl6)) { ++ dst = ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, fl6, ++ NULL); ++ if (IS_ERR(dst)) { + netdev_dbg(dev, "no route to %pI6\n", &fl6->daddr); + return ERR_PTR(-ENETUNREACH); + } +--- a/drivers/net/vxlan.c ++++ b/drivers/net/vxlan.c +@@ -2023,7 +2023,6 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan, + bool use_cache = ip_tunnel_dst_cache_usable(skb, info); + struct dst_entry *ndst; + struct flowi6 fl6; +- int err; + + if (!sock6) + return ERR_PTR(-EIO); +@@ -2046,10 +2045,9 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan, + fl6.fl6_dport = dport; + fl6.fl6_sport = sport; + +- err = ipv6_stub->ipv6_dst_lookup(vxlan->net, +- sock6->sock->sk, +- &ndst, &fl6); +- if (unlikely(err < 0)) { ++ ndst = ipv6_stub->ipv6_dst_lookup_flow(vxlan->net, sock6->sock->sk, ++ &fl6, NULL); ++ if (unlikely(IS_ERR(ndst))) { + netdev_dbg(dev, "no route to %pI6\n", daddr); + return ERR_PTR(-ENETUNREACH); + } +--- a/include/net/addrconf.h ++++ b/include/net/addrconf.h +@@ -223,8 +223,10 @@ struct ipv6_stub { + const struct in6_addr *addr); + int (*ipv6_sock_mc_drop)(struct sock *sk, int ifindex, + const struct in6_addr *addr); +- int (*ipv6_dst_lookup)(struct net *net, struct sock *sk, +- struct dst_entry **dst, struct flowi6 *fl6); ++ struct dst_entry *(*ipv6_dst_lookup_flow)(struct net *net, ++ const struct sock *sk, ++ struct flowi6 *fl6, ++ const struct in6_addr *final_dst); + void (*udpv6_encap_enable)(void); + void (*ndisc_send_na)(struct net_device *dev, const struct in6_addr *daddr, + const struct in6_addr *solicited_addr, +--- a/net/ipv6/addrconf_core.c ++++ b/net/ipv6/addrconf_core.c +@@ -127,15 +127,16 @@ int inet6addr_validator_notifier_call_chain(unsigned long val, void *v) + } + EXPORT_SYMBOL(inet6addr_validator_notifier_call_chain); + +-static int eafnosupport_ipv6_dst_lookup(struct net *net, struct sock *u1, +- struct dst_entry **u2, +- struct flowi6 *u3) ++static struct dst_entry *eafnosupport_ipv6_dst_lookup_flow(struct net *net, ++ const struct sock *sk, ++ struct flowi6 *fl6, ++ const struct in6_addr *final_dst) + { +- return -EAFNOSUPPORT; ++ return ERR_PTR(-EAFNOSUPPORT); + } + + const struct ipv6_stub *ipv6_stub __read_mostly = &(struct ipv6_stub) { +- .ipv6_dst_lookup = eafnosupport_ipv6_dst_lookup, ++ .ipv6_dst_lookup_flow = eafnosupport_ipv6_dst_lookup_flow, + }; + EXPORT_SYMBOL_GPL(ipv6_stub); + +--- a/net/ipv6/af_inet6.c ++++ b/net/ipv6/af_inet6.c +@@ -898,7 +898,7 @@ static struct pernet_operations inet6_net_ops = { + static const struct ipv6_stub ipv6_stub_impl = { + .ipv6_sock_mc_join = ipv6_sock_mc_join, + .ipv6_sock_mc_drop = ipv6_sock_mc_drop, +- .ipv6_dst_lookup = ip6_dst_lookup, ++ .ipv6_dst_lookup_flow = ip6_dst_lookup_flow, + .udpv6_encap_enable = udpv6_encap_enable, + .ndisc_send_na = ndisc_send_na, + .nd_tbl = &nd_tbl, +--- a/net/mpls/af_mpls.c ++++ b/net/mpls/af_mpls.c +@@ -586,16 +586,15 @@ static struct net_device *inet6_fib_lookup_dev(struct net *net, + struct net_device *dev; + struct dst_entry *dst; + struct flowi6 fl6; +- int err; + + if (!ipv6_stub) + return ERR_PTR(-EAFNOSUPPORT); + + memset(&fl6, 0, sizeof(fl6)); + memcpy(&fl6.daddr, addr, sizeof(struct in6_addr)); +- err = ipv6_stub->ipv6_dst_lookup(net, NULL, &dst, &fl6); +- if (err) +- return ERR_PTR(err); ++ dst = ipv6_stub->ipv6_dst_lookup_flow(net, NULL, &fl6, NULL); ++ if (IS_ERR(dst)) ++ return ERR_CAST(dst); + + dev = dst->dev; + dev_hold(dev); +--- a/net/tipc/udp_media.c ++++ b/net/tipc/udp_media.c +@@ -187,10 +187,12 @@ static int tipc_udp_xmit(struct net *net, struct sk_buff *skb, + .saddr = src->ipv6, + .flowi6_proto = IPPROTO_UDP + }; +- err = ipv6_stub->ipv6_dst_lookup(net, ub->ubsock->sk, &ndst, +- &fl6); +- if (err) ++ ndst = ipv6_stub->ipv6_dst_lookup_flow(net, ub->ubsock->sk, ++ &fl6, NULL); ++ if (IS_ERR(ndst)) { ++ err = PTR_ERR(ndst); + goto tx_error; ++ } + ttl = ip6_dst_hoplimit(ndst); + err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, NULL, + &src->ipv6, &dst->ipv6, 0, ttl, 0, diff --git a/patches.suse/sctp-fix-possibly-using-a-bad-saddr-with-a-given-dst.patch b/patches.suse/sctp-fix-possibly-using-a-bad-saddr-with-a-given-dst.patch index f341d6a..c0985a9 100644 --- a/patches.suse/sctp-fix-possibly-using-a-bad-saddr-with-a-given-dst.patch +++ b/patches.suse/sctp-fix-possibly-using-a-bad-saddr-with-a-given-dst.patch @@ -29,13 +29,13 @@ Tested-by: Xin Long Signed-off-by: David S. Miller Signed-off-by: Jiri Slaby --- - net/sctp/ipv6.c | 20 ++++++++++++++------ - net/sctp/protocol.c | 28 +++++++++++++++++++--------- + net/sctp/ipv6.c | 20 ++++++++++++++------ + net/sctp/protocol.c | 28 +++++++++++++++++++--------- 2 files changed, 33 insertions(+), 15 deletions(-) --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c -@@ -237,7 +237,8 @@ static void sctp_v6_get_dst(struct sctp_ +@@ -237,7 +237,8 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, { struct sctp_association *asoc = t->asoc; struct dst_entry *dst = NULL; @@ -45,7 +45,7 @@ Signed-off-by: Jiri Slaby struct sctp_bind_addr *bp; struct ipv6_pinfo *np = inet6_sk(sk); struct sctp_sockaddr_entry *laddr; -@@ -247,7 +248,7 @@ static void sctp_v6_get_dst(struct sctp_ +@@ -247,7 +248,7 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, __u8 matchlen = 0; sctp_scope_t scope; @@ -54,10 +54,10 @@ Signed-off-by: Jiri Slaby fl6->daddr = daddr->v6.sin6_addr; fl6->fl6_dport = daddr->v6.sin6_port; fl6->flowi6_proto = IPPROTO_SCTP; -@@ -271,8 +272,11 @@ static void sctp_v6_get_dst(struct sctp_ +@@ -271,8 +272,11 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, rcu_read_unlock(); - dst = ip6_dst_lookup_flow(sk, fl6, final_p); + dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p); - if (!asoc || saddr) + if (!asoc || saddr) { + t->dst = dst; @@ -67,7 +67,7 @@ Signed-off-by: Jiri Slaby bp = &asoc->base.bind_addr; scope = sctp_scope(daddr); -@@ -295,6 +299,8 @@ static void sctp_v6_get_dst(struct sctp_ +@@ -295,6 +299,8 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, if ((laddr->a.sa.sa_family == AF_INET6) && (sctp_v6_cmp_addr(&dst_saddr, &laddr->a))) { rcu_read_unlock(); @@ -76,7 +76,7 @@ Signed-off-by: Jiri Slaby goto out; } } -@@ -333,6 +339,8 @@ static void sctp_v6_get_dst(struct sctp_ +@@ -333,6 +339,8 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, if (!IS_ERR_OR_NULL(dst)) dst_release(dst); dst = bdst; @@ -85,7 +85,7 @@ Signed-off-by: Jiri Slaby break; } -@@ -346,6 +354,8 @@ static void sctp_v6_get_dst(struct sctp_ +@@ -346,6 +354,8 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, dst_release(dst); dst = bdst; matchlen = bmatchlen; @@ -94,7 +94,7 @@ Signed-off-by: Jiri Slaby } rcu_read_unlock(); -@@ -354,14 +364,12 @@ out: +@@ -354,14 +364,12 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr, struct rt6_info *rt; rt = (struct rt6_info *)dst; @@ -112,7 +112,7 @@ Signed-off-by: Jiri Slaby } --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c -@@ -436,14 +436,15 @@ static void sctp_v4_get_dst(struct sctp_ +@@ -436,14 +436,15 @@ static void sctp_v4_get_dst(struct sctp_transport *t, union sctp_addr *saddr, { struct sctp_association *asoc = t->asoc; struct rtable *rt; @@ -130,7 +130,7 @@ Signed-off-by: Jiri Slaby fl4->daddr = daddr->v4.sin_addr.s_addr; fl4->fl4_dport = daddr->v4.sin_port; fl4->flowi4_proto = IPPROTO_SCTP; -@@ -461,8 +462,11 @@ static void sctp_v4_get_dst(struct sctp_ +@@ -461,8 +462,11 @@ static void sctp_v4_get_dst(struct sctp_transport *t, union sctp_addr *saddr, &fl4->saddr); rt = ip_route_output_key(sock_net(sk), fl4); @@ -143,7 +143,7 @@ Signed-off-by: Jiri Slaby /* If there is no association or if a source address is passed, no * more validation is required. -@@ -525,27 +529,33 @@ static void sctp_v4_get_dst(struct sctp_ +@@ -525,27 +529,33 @@ static void sctp_v4_get_dst(struct sctp_transport *t, union sctp_addr *saddr, odev = __ip_dev_find(sock_net(sk), laddr->a.v4.sin_addr.s_addr, false); if (!odev || odev->ifindex != fl4->flowi4_oif) { diff --git a/series.conf b/series.conf index 96ba573..7a381c8 100644 --- a/series.conf +++ b/series.conf @@ -43721,6 +43721,7 @@ patches.suse/qed-Fix-blocking-unlimited-SPQ-entries-leak.patch patches.suse/qed-Fix-SPQ-entries-not-returned-to-pool-in-error-fl.patch patches.suse/qed-Fix-potential-memory-corruption.patch + patches.suse/0003-net-stmmac-Fix-RX-packet-size-8191.patch patches.suse/net-smsc95xx-Fix-MTU-range.patch patches.suse/flow_dissector-do-not-dissect-l4-ports-for-fragments.patch patches.suse/net-sched-cls_flower-validate-nested-enc_opts_policy.patch @@ -53021,6 +53022,8 @@ patches.suse/can-slcan-Fix-use-after-free-Read-in-slcan_open.patch patches.suse/net-bridge-deny-dev_set_mac_address-when-unregisteri.patch patches.suse/net-sched-fix-dump-qlen-for-sch_mq-sch_mqprio-with-N.patch + patches.suse/net-ipv6-add-net-argument-to-ip6_dst_lookup_flow.patch + patches.suse/net-ipv6_stub-use-ip6_dst_lookup_flow-instead-of-ip6.patch patches.suse/openvswitch-support-asymmetric-conntrack.patch patches.suse/s390-qeth-guard-against-runt-packets patches.suse/s390-qeth-ensure-linear-access-to-packet-headers @@ -55333,6 +55336,7 @@ patches.suse/drm-nouveau-fix-multiple-instances-of-reference-coun.patch patches.suse/drm-ttm-nouveau-don-t-call-tt-destroy-callback-on-al.patch patches.suse/drm-msm-ratelimit-crtc-event-overflow-error.patch + patches.suse/0014-net-mlx5e-vxlan-Use-RCU-for-vxlan-table-lookup.patch patches.suse/0005-ipvs-allow-connection-reuse-for-unconfirmed-conntrac.patch patches.suse/0004-net-make-symbol-flush_works-static.patch patches.suse/net-ena-Fix-using-plain-integer-as-NULL-pointer-in-e.patch @@ -55356,8 +55360,17 @@ patches.suse/0003-Bluetooth-Prevent-out-of-bounds-read-in-hci_inquiry_.patch patches.suse/Bluetooth-Fix-update-of-connection-state-in-hci_encr.patch patches.suse/0003-openvswitch-Prevent-kernel-infoleak-in-ovs_ct_put_ke.patch + patches.suse/0013-net-mvpp2-fix-memory-leak-in-mvpp2_rx.patch patches.suse/0002-net-gre-recompute-gre-csum-for-sctp-over-gre-tunnels.patch + patches.suse/0012-net-ethernet-aquantia-Fix-wrong-return-value.patch patches.suse/liquidio-Fix-wrong-return-value-in-cn23xx_get_pf_num.patch + patches.suse/0011-net-spider_net-Fix-the-size-used-in-a-dma_free_coher.patch + patches.suse/0010-fsl-fman-use-32-bit-unsigned-integer.patch + patches.suse/0009-fsl-fman-fix-dereference-null-return-value.patch + patches.suse/0008-fsl-fman-fix-unreachable-code.patch + patches.suse/0007-fsl-fman-check-dereferencing-null-pointer.patch + patches.suse/0006-fsl-fman-fix-eth-hash-table-allocation.patch + patches.suse/0005-net-mlx5-Delete-extra-dump-stack-that-gives-nothing.patch patches.suse/wl1251-fix-always-return-0-error.patch patches.suse/dpaa2-eth-Fix-passing-zero-to-PTR_ERR-warning.patch patches.suse/msft-hv-2126-hv_netvsc-do-not-use-VF-device-if-link-is-down.patch @@ -55478,6 +55491,7 @@ patches.suse/i2c-rcar-slave-only-send-STOP-event-when-we-have-bee.patch patches.suse/0001-net-Set-fput_needed-iff-FDPUT_FPUT-is-set.patch patches.suse/vmxnet3-use-correct-tcp-hdr-length-when-packet-is-en.patch + patches.suse/0004-net-qcom-emac-add-missed-clk_disable_unprepare-in-er.patch patches.suse/net-stmmac-dwmac1000-provide-multicast-filter-fallba.patch patches.suse/net-ethernet-stmmac-Disable-hardware-multicast-filte.patch patches.suse/msft-hv-2127-Drivers-hv-vmbus-Only-notify-Hyper-V-for-die-events-.patch @@ -55595,6 +55609,7 @@ patches.suse/bsc1170284-ixgbe_dont_check_firmware_errors.patch patches.suse/nvdimm-Avoid-race-between-probe-and-reading-device-a.patch patches.suse/ibmveth-Fix-use-of-ibmveth-in-a-bridge.patch + patches.suse/char-virtio-Select-VIRTIO-from-VIRTIO_CONSOLE.patch ######################################################## # end of sorted patches @@ -56396,6 +56411,8 @@ patches.kabi/SUNRPC-defer-slow-parts-of-rpc_free_client-to-a-work-kabi.patch patches.kabi/sock_cgroup_data-kabi-fix.patch patches.kabi/genetlink-remove-genl_bind.patch + patches.kabi/kabi-hide-new-parameter-of-ip6_dst_lookup_flow.patch + patches.kabi/kabi-mask-changes-to-struct-ipv6_stub.patch ######################################################## # You'd better have a good reason for adding a patch