From 442761cf95c030b7b1319fd502ba276fdf2aba7e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 23 Jul 2022 17:41:37 +0200 Subject: [PATCH] 5.15-stable patches added patches: ip-fix-data-races-around-sysctl_ip_default_ttl.patch r8152-fix-a-wol-issue.patch --- ...a-races-around-sysctl_ip_default_ttl.patch | 100 ++++++++++++++++++ queue-5.15/r8152-fix-a-wol-issue.patch | 79 ++++++++++++++ queue-5.15/series | 2 + 3 files changed, 181 insertions(+) create mode 100644 queue-5.15/ip-fix-data-races-around-sysctl_ip_default_ttl.patch create mode 100644 queue-5.15/r8152-fix-a-wol-issue.patch diff --git a/queue-5.15/ip-fix-data-races-around-sysctl_ip_default_ttl.patch b/queue-5.15/ip-fix-data-races-around-sysctl_ip_default_ttl.patch new file mode 100644 index 00000000000..2aa40015c4e --- /dev/null +++ b/queue-5.15/ip-fix-data-races-around-sysctl_ip_default_ttl.patch @@ -0,0 +1,100 @@ +From 8281b7ec5c56b71cb2cc5a1728b41607be66959c Mon Sep 17 00:00:00 2001 +From: Kuniyuki Iwashima +Date: Wed, 13 Jul 2022 13:51:51 -0700 +Subject: ip: Fix data-races around sysctl_ip_default_ttl. + +From: Kuniyuki Iwashima + +commit 8281b7ec5c56b71cb2cc5a1728b41607be66959c upstream. + +While reading sysctl_ip_default_ttl, it can be changed concurrently. +Thus, we need to add READ_ONCE() to its readers. + +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Signed-off-by: Kuniyuki Iwashima +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/netronome/nfp/flower/action.c | 2 +- + include/net/route.h | 2 +- + net/ipv4/ip_sockglue.c | 2 +- + net/ipv4/netfilter/nf_reject_ipv4.c | 4 ++-- + net/ipv4/proc.c | 2 +- + net/netfilter/nf_synproxy_core.c | 2 +- + 6 files changed, 7 insertions(+), 7 deletions(-) + +--- a/drivers/net/ethernet/netronome/nfp/flower/action.c ++++ b/drivers/net/ethernet/netronome/nfp/flower/action.c +@@ -472,7 +472,7 @@ nfp_fl_set_tun(struct nfp_app *app, stru + set_tun->ttl = ip4_dst_hoplimit(&rt->dst); + ip_rt_put(rt); + } else { +- set_tun->ttl = net->ipv4.sysctl_ip_default_ttl; ++ set_tun->ttl = READ_ONCE(net->ipv4.sysctl_ip_default_ttl); + } + } + +--- a/include/net/route.h ++++ b/include/net/route.h +@@ -360,7 +360,7 @@ static inline int ip4_dst_hoplimit(const + struct net *net = dev_net(dst->dev); + + if (hoplimit == 0) +- hoplimit = net->ipv4.sysctl_ip_default_ttl; ++ hoplimit = READ_ONCE(net->ipv4.sysctl_ip_default_ttl); + return hoplimit; + } + +--- a/net/ipv4/ip_sockglue.c ++++ b/net/ipv4/ip_sockglue.c +@@ -1597,7 +1597,7 @@ static int do_ip_getsockopt(struct sock + { + struct net *net = sock_net(sk); + val = (inet->uc_ttl == -1 ? +- net->ipv4.sysctl_ip_default_ttl : ++ READ_ONCE(net->ipv4.sysctl_ip_default_ttl) : + inet->uc_ttl); + break; + } +--- a/net/ipv4/netfilter/nf_reject_ipv4.c ++++ b/net/ipv4/netfilter/nf_reject_ipv4.c +@@ -62,7 +62,7 @@ struct sk_buff *nf_reject_skb_v4_tcp_res + + skb_reserve(nskb, LL_MAX_HEADER); + niph = nf_reject_iphdr_put(nskb, oldskb, IPPROTO_TCP, +- net->ipv4.sysctl_ip_default_ttl); ++ READ_ONCE(net->ipv4.sysctl_ip_default_ttl)); + nf_reject_ip_tcphdr_put(nskb, oldskb, oth); + niph->tot_len = htons(nskb->len); + ip_send_check(niph); +@@ -115,7 +115,7 @@ struct sk_buff *nf_reject_skb_v4_unreach + + skb_reserve(nskb, LL_MAX_HEADER); + niph = nf_reject_iphdr_put(nskb, oldskb, IPPROTO_ICMP, +- net->ipv4.sysctl_ip_default_ttl); ++ READ_ONCE(net->ipv4.sysctl_ip_default_ttl)); + + skb_reset_transport_header(nskb); + icmph = skb_put_zero(nskb, sizeof(struct icmphdr)); +--- a/net/ipv4/proc.c ++++ b/net/ipv4/proc.c +@@ -387,7 +387,7 @@ static int snmp_seq_show_ipstats(struct + + seq_printf(seq, "\nIp: %d %d", + IPV4_DEVCONF_ALL(net, FORWARDING) ? 1 : 2, +- net->ipv4.sysctl_ip_default_ttl); ++ READ_ONCE(net->ipv4.sysctl_ip_default_ttl)); + + BUILD_BUG_ON(offsetof(struct ipstats_mib, mibs) != 0); + snmp_get_cpu_field64_batch(buff64, snmp4_ipstats_list, +--- a/net/netfilter/nf_synproxy_core.c ++++ b/net/netfilter/nf_synproxy_core.c +@@ -427,7 +427,7 @@ synproxy_build_ip(struct net *net, struc + iph->tos = 0; + iph->id = 0; + iph->frag_off = htons(IP_DF); +- iph->ttl = net->ipv4.sysctl_ip_default_ttl; ++ iph->ttl = READ_ONCE(net->ipv4.sysctl_ip_default_ttl); + iph->protocol = IPPROTO_TCP; + iph->check = 0; + iph->saddr = saddr; diff --git a/queue-5.15/r8152-fix-a-wol-issue.patch b/queue-5.15/r8152-fix-a-wol-issue.patch new file mode 100644 index 00000000000..8c5637ec383 --- /dev/null +++ b/queue-5.15/r8152-fix-a-wol-issue.patch @@ -0,0 +1,79 @@ +From cdf0b86b250fd3c1c3e120c86583ea510c52e4ce Mon Sep 17 00:00:00 2001 +From: Hayes Wang +Date: Mon, 18 Jul 2022 16:21:20 +0800 +Subject: r8152: fix a WOL issue + +From: Hayes Wang + +commit cdf0b86b250fd3c1c3e120c86583ea510c52e4ce upstream. + +This fixes that the platform is waked by an unexpected packet. The +size and range of FIFO is different when the device enters S3 state, +so it is necessary to correct some settings when suspending. + +Regardless of jumbo frame, set RMS to 1522 and MTPS to MTPS_DEFAULT. +Besides, enable MCU_BORW_EN to update the method of calculating the +pointer of data. Then, the hardware could get the correct data. + +Fixes: 195aae321c82 ("r8152: support new chips") +Signed-off-by: Hayes Wang +Link: https://lore.kernel.org/r/20220718082120.10957-391-nic_swsd@realtek.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/usb/r8152.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +--- a/drivers/net/usb/r8152.c ++++ b/drivers/net/usb/r8152.c +@@ -32,7 +32,7 @@ + #define NETNEXT_VERSION "12" + + /* Information for net */ +-#define NET_VERSION "12" ++#define NET_VERSION "13" + + #define DRIVER_VERSION "v1." NETNEXT_VERSION "." NET_VERSION + #define DRIVER_AUTHOR "Realtek linux nic maintainers " +@@ -5915,7 +5915,8 @@ static void r8153_enter_oob(struct r8152 + + wait_oob_link_list_ready(tp); + +- ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, 1522); ++ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_DEFAULT); + + switch (tp->version) { + case RTL_VER_03: +@@ -5951,6 +5952,10 @@ static void r8153_enter_oob(struct r8152 + ocp_data |= NOW_IS_OOB | DIS_MCU_CLROOB; + ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); + ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); ++ ocp_data |= MCU_BORW_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); ++ + rxdy_gated_en(tp, false); + + ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); +@@ -6553,6 +6558,9 @@ static void rtl8156_down(struct r8152 *t + rtl_disable(tp); + rtl_reset_bmu(tp); + ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, 1522); ++ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_DEFAULT); ++ + /* Clear teredo wake event. bit[15:8] is the teredo wakeup + * type. Set it to zero. bits[7:0] are the W1C bits about + * the events. Set them to all 1 to clear them. +@@ -6563,6 +6571,10 @@ static void rtl8156_down(struct r8152 *t + ocp_data |= NOW_IS_OOB; + ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); + ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); ++ ocp_data |= MCU_BORW_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); ++ + rtl_rx_vlan_en(tp, true); + rxdy_gated_en(tp, false); + diff --git a/queue-5.15/series b/queue-5.15/series index 3cbe2485bf4..281aac16829 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -24,3 +24,5 @@ xfs-rename-the-next_agno-perag-iteration-variable.patch xfs-terminate-perag-iteration-reliably-on-agcount.patch xfs-fix-perag-reference-leak-on-iteration-race-with-growfs.patch xfs-prevent-a-warn_once-in-xfs_ioc_attr_list.patch +r8152-fix-a-wol-issue.patch +ip-fix-data-races-around-sysctl_ip_default_ttl.patch -- 2.47.3