5.7.19-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 5.7.19-rc1 review
-------------------
Note, ok, this is really going to be the final 5.7.y kernel release. I mean it this time....
-------------------
This is the start of the stable review cycle for the 5.7.19 release. There are 15 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 28 Aug 2020 11:48:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.7.19-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.7.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.7.19-rc1
Max Filippov <[email protected]>
binfmt_flat: revert "binfmt_flat: don't offset the data start"
Michael Ellerman <[email protected]>
powerpc/64s: Don't init FSCR_DSCR in __init_FSCR()
Maxim Mikityanskiy <[email protected]>
ethtool: Don't omit the netlink reply if no features were changed
Maxim Mikityanskiy <[email protected]>
ethtool: Account for hw_features in netlink interface
Maxim Mikityanskiy <[email protected]>
ethtool: Fix preserving of wanted feature bits in netlink interface
Shay Agroskin <[email protected]>
net: ena: Make missed_tx stat incremental
Cong Wang <[email protected]>
tipc: fix uninit skb->data in tipc_nl_compat_dumpit()
Xin Long <[email protected]>
tipc: call rcu_read_lock() in tipc_aead_encrypt_done()
Peilin Ye <[email protected]>
net/smc: Prevent kernel-infoleak in __smc_diag_dump()
David Laight <[email protected]>
net: sctp: Fix negotiation of the number of data streams.
Alaa Hleihel <[email protected]>
net/sched: act_ct: Fix skb double-free in tcf_ct_handle_fragments() error flow
Necip Fazil Yildiran <[email protected]>
net: qrtr: fix usage of idr in port assignment to socket
Nikolay Aleksandrov <[email protected]>
net: nexthop: don't allow empty NHA_GROUP
Miaohe Lin <[email protected]>
net: Fix potential wrong skb->protocol in skb_vlan_untag()
Mark Tomlinson <[email protected]>
gre6: Fix reception with IP6_TNL_F_RCV_DSCP_COPY
-------------
Diffstat:
Makefile | 4 ++-- arch/powerpc/kernel/cpu_setup_power.S | 2 +- drivers/net/ethernet/amazon/ena/ena_netdev.c | 5 ++++- fs/binfmt_flat.c | 20 ++++++++++++-------- net/core/skbuff.c | 4 ++-- net/ethtool/features.c | 19 ++++++++++--------- net/ipv4/nexthop.c | 5 ++++- net/ipv6/ip6_tunnel.c | 10 +++++++++- net/qrtr/qrtr.c | 20 +++++++++++--------- net/sched/act_ct.c | 2 +- net/sctp/stream.c | 6 ++++-- net/smc/smc_diag.c | 16 +++++++++------- net/tipc/crypto.c | 2 ++ net/tipc/netlink_compat.c | 12 +++++++++++- 14 files changed, 82 insertions(+), 45 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/15 gre6: Fix reception with IP6_TNL_F_RCV_DSCP_COPY
From: Mark Tomlinson <[email protected]>
[ Upstream commit 272502fcb7cda01ab07fc2fcff82d1d2f73d43cc ]
When receiving an IPv4 packet inside an IPv6 GRE packet, and the IP6_TNL_F_RCV_DSCP_COPY flag is set on the tunnel, the IPv4 header would get corrupted. This is due to the common ip6_tnl_rcv() function assuming that the inner header is always IPv6. This patch checks the tunnel protocol for IPv4 inner packets, but still defaults to IPv6.
--- net/ipv6/ip6_tunnel.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
net/ipv6/ip6_tunnel.c +9 -1
@@ -886,7 +886,15 @@ int ip6_tnl_rcv(struct ip6_tnl *t, struc struct metadata_dst *tun_dst, bool log_ecn_err) { - return __ip6_tnl_rcv(t, skb, tpi, tun_dst, ip6ip6_dscp_ecn_decapsulate, +int (*dscp_ecn_decapsulate)(const struct ip6_tnl *t, +const struct ipv6hdr *ipv6h, +struct sk_buff *skb); + + dscp_ecn_decapsulate = ip6ip6_dscp_ecn_decapsulate; +if (tpi->proto ==htons (ETH_P_IP )) + dscp_ecn_decapsulate = ip4ip6_dscp_ecn_decapsulate; + +return __ip6_tnl_rcv (t, skb, tpi, tun_dst, dscp_ecn_decapsulate, log_ecn_err); }EXPORT_SYMBOL (ip6_tnl_rcv);
Greg Kroah-Hartman
maintainerPATCH 2/15 net: Fix potential wrong skb->protocol in skb_vlan_untag()
In reply to Greg Kroah-HartmanFrom: Miaohe Lin <[email protected]>
[ Upstream commit 55eff0eb7460c3d50716ed9eccf22257b046ca92 ]
We may access the two bytes after vlan_hdr in vlan_set_encap_proto(). So we should pull VLAN_HLEN + sizeof(unsigned short) in skb_vlan_untag() or we may access the wrong data.
--- net/core/skbuff.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/core/skbuff.c +2 -2
@@ -5421,8 +5421,8 @@ struct sk_buff *skb_vlan_untag(struct sk skb =skb_share_check (skb,GFP_ATOMIC );if (unlikely (!skb)) goto err_free; - -if (unlikely (!pskb_may_pull (skb,VLAN_HLEN ))) +/* We may access the two bytes after vlan_hdr in vlan_set_encap_proto(). */ +if (unlikely (!pskb_may_pull (skb,VLAN_HLEN +sizeof (unsigned short )))) goto err_free; vhdr = (struct vlan_hdr *)skb->data;
Greg Kroah-Hartman
maintainerPATCH 3/15 net: nexthop: dont allow empty NHA_GROUP
In reply to Greg Kroah-HartmanFrom: Nikolay Aleksandrov <[email protected]>
[ Upstream commit eeaac3634ee0e3f35548be35275efeca888e9b23 ]
Currently the nexthop code will use an empty NHA_GROUP attribute, but it requires at least 1 entry in order to function properly. Otherwise we end up derefencing null or random pointers all over the place due to not having any nh_grp_entry members allocated, nexthop code relies on having at least the first member present. Empty NHA_GROUP doesn't make any sense so just disallow it.
Also add a WARN_ON for any future users of nexthop_create_group().
BUG: kernel NULL pointer dereference, address: 0000000000000080 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 0 P4D 0 Oops: 0000 [#1] SMP CPU: 0 PID: 558 Comm: ip Not tainted 5.9.0-rc1+ #93 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-2.fc32 04/01/2014 RIP: 0010:fib_check_nexthop+0x4a/0xaa Code: 0f 84 83 00 00 00 48 c7 02 80 03 f7 81 c3 40 80 fe fe 75 12 b8 ea ff ff ff 48 85 d2 74 6b 48 c7 02 40 03 f7 81 c3 48 8b 40 10 <48> 8b 80 80 00 00 00 eb 36 80 78 1a 00 74 12 b8 ea ff ff ff 48 85 RSP: 0018:ffff88807983ba00 EFLAGS: 00010213 RAX: 0000000000000000 RBX: ffff88807983bc00 RCX: 0000000000000000 RDX: ffff88807983bc00 RSI: 0000000000000000 RDI: ffff88807bdd0a80 RBP: ffff88807983baf8 R08: 0000000000000dc0 R09: 000000000000040a R10: 0000000000000000 R11: ffff88807bdd0ae8 R12: 0000000000000000 R13: 0000000000000000 R14: ffff88807bea3100 R15: 0000000000000001 FS: 00007f10db393700(0000) GS:ffff88807dc00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000080 CR3: 000000007bd0f004 CR4: 00000000003706f0 Call Trace: fib_create_info+0x64d/0xaf7 fib_table_insert+0xf6/0x581 ? __vma_adjust+0x3b6/0x4d4 inet_rtm_newroute+0x56/0x70 rtnetlink_rcv_msg+0x1e3/0x20d ? rtnl_calcit.isra.0+0xb8/0xb8 netlink_rcv_skb+0x5b/0xac netlink_unicast+0xfa/0x17b netlink_sendmsg+0x334/0x353 sock_sendmsg_nosec+0xf/0x3f ____sys_sendmsg+0x1a0/0x1fc ? copy_msghdr_from_user+0x4c/0x61 ___sys_sendmsg+0x63/0x84 ? handle_mm_fault+0xa39/0x11b5 ? sockfd_lookup_light+0x72/0x9a __sys_sendmsg+0x50/0x6e do_syscall_64+0x54/0xbe entry_SYSCALL_64_after_hwframe+0x44/0xa9 RIP: 0033:0x7f10dacc0bb7 Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb cd 66 0f 1f 44 00 00 8b 05 9a 4b 2b 00 85 c0 75 2e 48 63 ff 48 63 d2 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 01 c3 48 8b 15 b1 f2 2a 00 f7 d8 64 89 02 48 RSP: 002b:00007ffcbe628bf8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 00007ffcbe628f80 RCX: 00007f10dacc0bb7 RDX: 0000000000000000 RSI: 00007ffcbe628c60 RDI: 0000000000000003 RBP: 000000005f41099c R08: 0000000000000001 R09: 0000000000000008 R10: 00000000000005e9 R11: 0000000000000246 R12: 0000000000000000 R13: 0000000000000000 R14: 00007ffcbe628d70 R15: 0000563a86c6e440 Modules linked in: CR2: 0000000000000080
--- net/ipv4/nexthop.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
net/ipv4/nexthop.c +4 -1
@@ -402,7 +402,7 @@ static int nh_check_attr_group(struct nestruct nexthop_grp *nhg;unsigned int i, j; -if (len & (sizeof (struct nexthop_grp ) -1 )) { +if (!len || len & (sizeof (struct nexthop_grp ) -1 )) {NL_SET_ERR_MSG (extack,"Invalid length for nexthop group attribute" );return -EINVAL ;
@@ -1104,6 +1104,9 @@ static struct nexthop *nexthop_create_grstruct nexthop *nh;int i; +if (WARN_ON (!num_nh)) +return ERR_PTR (-EINVAL ); + nh =nexthop_alloc ();if (!nh)return ERR_PTR (-ENOMEM );
Greg Kroah-Hartman
maintainerPATCH 4/15 net: qrtr: fix usage of idr in port assignment to socket
In reply to Greg Kroah-HartmanFrom: Necip Fazil Yildiran <[email protected]>
[ Upstream commit 8dfddfb79653df7c38a9c8c4c034f242a36acee9 ]
Passing large uint32 sockaddr_qrtr.port numbers for port allocation triggers a warning within idr_alloc() since the port number is cast to int, and thus interpreted as a negative number. This leads to the rejection of such valid port numbers in qrtr_port_assign() as idr_alloc() fails.
To avoid the problem, switch to idr_alloc_u32() instead.
--- net/qrtr/qrtr.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
net/qrtr/qrtr.c +11 -9
@@ -692,23 +692,25 @@ static void qrtr_port_remove(struct qrtr*/ static int qrtr_port_assign (struct qrtr_sock *ipc,int *port) { +u32 min_port;int rc;mutex_lock (&qrtr_port_lock);if (!*port) { - rc =idr_alloc (&qrtr_ports, ipc, -QRTR_MIN_EPH_SOCKET ,QRTR_MAX_EPH_SOCKET +1 , -GFP_ATOMIC ); -if (rc >=0 ) - *port = rc; + min_port =QRTR_MIN_EPH_SOCKET ; + rc =idr_alloc_u32 (&qrtr_ports, ipc, &min_port,QRTR_MAX_EPH_SOCKET ,GFP_ATOMIC ); +if (!rc) + *port = min_port; }else if (*port <QRTR_MIN_EPH_SOCKET && !capable (CAP_NET_ADMIN )) { rc = -EACCES ; }else if (*port ==QRTR_PORT_CTRL ) { - rc =idr_alloc (&qrtr_ports, ipc,0 ,1 ,GFP_ATOMIC ); + min_port =0 ; + rc =idr_alloc_u32 (&qrtr_ports, ipc, &min_port,0 ,GFP_ATOMIC ); }else { - rc =idr_alloc (&qrtr_ports, ipc, *port, *port +1 ,GFP_ATOMIC ); -if (rc >=0 ) - *port = rc; + min_port = *port; + rc =idr_alloc_u32 (&qrtr_ports, ipc, &min_port, *port,GFP_ATOMIC ); +if (!rc) + *port = min_port; }mutex_unlock (&qrtr_port_lock);
Greg Kroah-Hartman
maintainerPATCH 5/15 net/sched: act_ct: Fix skb double-free in tcf_ct_handle_fragments() error flow
In reply to Greg Kroah-HartmanFrom: Alaa Hleihel <[email protected]>
[ Upstream commit eda814b97dfb8d9f4808eb2f65af9bd3705c4cae ]
tcf_ct_handle_fragments() shouldn't free the skb when ip_defrag() call fails. Otherwise, we will cause a double-free bug.
In such cases, just return the error to the caller.
--- net/sched/act_ct.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/sched/act_ct.c +1 -1
@@ -702,7 +702,7 @@ static int tcf_ct_handle_fragments(struc err =ip_defrag (net, skb, user);local_bh_enable ();if (err && err != -EINPROGRESS ) - goto out_free; +return err;if (!err) { *defrag = true;
Greg Kroah-Hartman
maintainerPATCH 6/15 net: sctp: Fix negotiation of the number of data streams.
In reply to Greg Kroah-HartmanFrom: David Laight <[email protected]>
[ Upstream commit ab921f3cdbec01c68705a7ade8bec628d541fc2b ]
The number of output and input streams was never being reduced, eg when processing received INIT or INIT_ACK chunks.
The effect is that DATA chunks can be sent with invalid stream ids and then discarded by the remote system.
--- net/sctp/stream.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
net/sctp/stream.c +4 -2
@@ -88,12 +88,13 @@ static int sctp_stream_alloc_out(structint ret;if (outcnt <= stream->outcnt) -return 0 ; + goto out; ret =genradix_prealloc (&stream->out, outcnt, gfp);if (ret)return ret; +out: stream->outcnt = outcnt;return 0 ; }
@@ -104,12 +105,13 @@ static int sctp_stream_alloc_in(struct sint ret;if (incnt <= stream->incnt) -return 0 ; + goto out; ret =genradix_prealloc (&stream->in, incnt, gfp);if (ret)return ret; +out: stream->incnt = incnt;return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 7/15 net/smc: Prevent kernel-infoleak in __smc_diag_dump()
In reply to Greg Kroah-HartmanFrom: Peilin Ye <[email protected]>
[ Upstream commit ce51f63e63c52a4e1eee4dd040fb0ba0af3b43ab ]
__smc_diag_dump() is potentially copying uninitialized kernel stack memory into socket buffers, since the compiler may leave a 4-byte hole near the beginning of struct smcd_diag_dmbinfo. Fix it by initializing dinfo with memset().
--- net/smc/smc_diag.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
net/smc/smc_diag.c +9 -7
@@ -170,13 +170,15 @@ static int __smc_diag_dump(struct sock * (req->diag_ext & (1 << (SMC_DIAG_DMBINFO - 1))) && !list_empty(&smc->conn.lgr->list)) {struct smc_connection *conn = &smc->conn; -struct smcd_diag_dmbinfo dinfo = { - .linkid = *((u32 *)conn->lgr->id), - .peer_gid = conn->lgr->peer_gid, - .my_gid = conn->lgr->smcd->local_gid, - .token = conn->rmb_desc->token, - .peer_token = conn->peer_token - }; +struct smcd_diag_dmbinfo dinfo; + +memset (&dinfo,0 ,sizeof (dinfo)); + + dinfo.linkid = *((u32 *)conn->lgr->id); + dinfo.peer_gid = conn->lgr->peer_gid; + dinfo.my_gid = conn->lgr->smcd->local_gid; + dinfo.token = conn->rmb_desc->token; + dinfo.peer_token = conn->peer_token;if (nla_put (skb,SMC_DIAG_DMBINFO ,sizeof (dinfo), &dinfo) <0 ) goto errout;
Greg Kroah-Hartman
maintainerPATCH 8/15 tipc: call rcu_read_lock() in tipc_aead_encrypt_done()
In reply to Greg Kroah-HartmanFrom: Xin Long <[email protected]>
[ Upstream commit f6db9096416209474090d64d8284e7c16c3d8873 ]
b->media->send_msg() requires rcu_read_lock(), as we can see elsewhere in tipc, tipc_bearer_xmit, tipc_bearer_xmit_skb and tipc_bearer_bc_xmit().
Syzbot has reported this issue as:
net/tipc/bearer.c:466 suspicious rcu_dereference_check() usage!
Workqueue: cryptd cryptd_queue_worker Call Trace: tipc_l2_send_msg+0x354/0x420 net/tipc/bearer.c:466 tipc_aead_encrypt_done+0x204/0x3a0 net/tipc/crypto.c:761 cryptd_aead_crypt+0xe8/0x1d0 crypto/cryptd.c:739 cryptd_queue_worker+0x118/0x1b0 crypto/cryptd.c:181 process_one_work+0x94c/0x1670 kernel/workqueue.c:2269 worker_thread+0x64c/0x1120 kernel/workqueue.c:2415 kthread+0x3b5/0x4a0 kernel/kthread.c:291 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:293
So fix it by calling rcu_read_lock() in tipc_aead_encrypt_done() for b->media->send_msg().
--- net/tipc/crypto.c | 2 ++ 1 file changed, 2 insertions(+)
net/tipc/crypto.c +2 -0
@@ -757,10 +757,12 @@ static void tipc_aead_encrypt_done(strucswitch (err) {case 0 :this_cpu_inc (tx->stats->stat[STAT_ASYNC_OK ]); +rcu_read_lock ();if (likely (test_bit (0 , &b->up))) b->media->send_msg (net, skb, b, &tx_ctx->dst);else kfree_skb (skb); +rcu_read_unlock ();break ;case -EINPROGRESS :return ;
Greg Kroah-Hartman
maintainerPATCH 9/15 tipc: fix uninit skb->data in tipc_nl_compat_dumpit()
In reply to Greg Kroah-HartmanFrom: Cong Wang <[email protected]>
[ Upstream commit 47733f9daf4fe4f7e0eb9e273f21ad3a19130487 ]
__tipc_nl_compat_dumpit() has two callers, and it expects them to pass a valid nlmsghdr via arg->data. This header is artificial and crafted just for __tipc_nl_compat_dumpit().
tipc_nl_compat_publ_dump() does so by putting a genlmsghdr as well as some nested attribute, TIPC_NLA_SOCK. But the other caller tipc_nl_compat_dumpit() does not, this leaves arg->data uninitialized on this call path.
Fix this by just adding a similar nlmsghdr without any payload in tipc_nl_compat_dumpit().
This bug exists since day 1, but the recent commit 6ea67769ff33 ("net: tipc: prepare attrs in __tipc_nl_compat_dumpit()") makes it easier to appear.
--- net/tipc/netlink_compat.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
net/tipc/netlink_compat.c +11 -1
@@ -275,8 +275,9 @@ err_out:static int tipc_nl_compat_dumpit (struct tipc_nl_compat_cmd_dump *cmd,struct tipc_nl_compat_msg *msg) { -int err; +struct nlmsghdr *nlh;struct sk_buff *arg; +int err;if (msg->req_type && (!msg->req_size || !TLV_CHECK_TYPE (msg->req, msg->req_type)))
@@ -305,6 +306,15 @@ static int tipc_nl_compat_dumpit(structreturn -ENOMEM ; } + nlh =nlmsg_put (arg,0 ,0 , tipc_genl_family.id,0 ,NLM_F_MULTI ); +if (!nlh) { +kfree_skb (arg); +kfree_skb (msg->rep); + msg->rep =NULL ; +return -EMSGSIZE ; + } +nlmsg_end (arg, nlh); + err =__tipc_nl_compat_dumpit (cmd, msg, arg);if (err) {kfree_skb (msg->rep);
Greg Kroah-Hartman
maintainerPATCH 10/15 net: ena: Make missed_tx stat incremental
In reply to Greg Kroah-HartmanFrom: Shay Agroskin <[email protected]>
[ Upstream commit ccd143e5150f24b9ba15145c7221b61dd9e41021 ]
Most statistics in ena driver are incremented, meaning that a stat's value is a sum of all increases done to it since driver/queue initialization.
This patch makes all statistics this way, effectively making missed_tx statistic incremental.
Also added a comment regarding rx_drops and tx_drops to make it clearer how these counters are calculated.
--- drivers/net/ethernet/amazon/ena/ena_netdev.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/ethernet/amazon/ena/ena_netdev.c +4 -1
@@ -3594,7 +3594,7 @@ static int check_missing_comp_in_tx_queu }u64_stats_update_begin (&tx_ring->syncp); - tx_ring->tx_stats.missed_tx = missed_tx; + tx_ring->tx_stats.missed_tx += missed_tx;u64_stats_update_end (&tx_ring->syncp);return rc;
@@ -4519,6 +4519,9 @@ static void ena_keep_alive_wd(void *adap rx_drops = ((u64 )desc->rx_drops_high <<32 ) | desc->rx_drops_low;u64_stats_update_begin (&adapter->syncp); +/* These stats are accumulated by the device, so the counters indicate +* all drops since last reset. +*/ adapter->dev_stats.rx_drops = rx_drops;u64_stats_update_end (&adapter->syncp); }
Greg Kroah-Hartman
maintainerPATCH 11/15 ethtool: Fix preserving of wanted feature bits in netlink interface
In reply to Greg Kroah-HartmanFrom: Maxim Mikityanskiy <[email protected]>
[ Upstream commit 840110a4eae190dcbb9907d68216d5d1d9f25839 ]
Currently, ethtool-netlink calculates new wanted bits as:
(req_wanted & req_mask) | (old_active & ~req_mask)
It completely discards the old wanted bits, so they are forgotten with the next ethtool command. Sample steps to reproduce:
1. ethtool -k eth0
tx-tcp-segmentation: on # TSO is on from the beginning
2. ethtool -K eth0 tx off
tx-tcp-segmentation: off [not requested]
3. ethtool -k eth0
tx-tcp-segmentation: off [requested on]
4. ethtool -K eth0 rx off # Some change unrelated to TSO
5. ethtool -k eth0
tx-tcp-segmentation: off # "Wanted on" is forgotten
This commit fixes it by changing the formula to:
(req_wanted & req_mask) | (old_wanted & ~req_mask),
where old_active was replaced by old_wanted to account for the wanted bits.
The shortcut condition for the case where nothing was changed now compares wanted bitmasks, instead of wanted to active.
--- net/ethtool/features.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
net/ethtool/features.c +7 -4
@@ -224,7 +224,9 @@ int ethnl_set_features(struct sk_buff *sDECLARE_BITMAP (wanted_diff_mask,NETDEV_FEATURE_COUNT );DECLARE_BITMAP (active_diff_mask,NETDEV_FEATURE_COUNT );DECLARE_BITMAP (old_active,NETDEV_FEATURE_COUNT ); +DECLARE_BITMAP (old_wanted,NETDEV_FEATURE_COUNT );DECLARE_BITMAP (new_active,NETDEV_FEATURE_COUNT ); +DECLARE_BITMAP (new_wanted,NETDEV_FEATURE_COUNT );DECLARE_BITMAP (req_wanted,NETDEV_FEATURE_COUNT );DECLARE_BITMAP (req_mask,NETDEV_FEATURE_COUNT );struct nlattr *tb[ETHTOOL_A_FEATURES_MAX +1 ];
@@ -250,6 +252,7 @@ int ethnl_set_features(struct sk_buff *srtnl_lock ();ethnl_features_to_bitmap (old_active, dev->features); +ethnl_features_to_bitmap (old_wanted, dev->wanted_features); ret =ethnl_parse_bitset (req_wanted, req_mask,NETDEV_FEATURE_COUNT , tb[ETHTOOL_A_FEATURES_WANTED ], netdev_features_strings, info->extack);
@@ -261,11 +264,11 @@ int ethnl_set_features(struct sk_buff *s goto out_rtnl; } -/* set req_wanted bits not in req_mask from old_active */ +/* set req_wanted bits not in req_mask from old_wanted */ bitmap_and (req_wanted, req_wanted, req_mask,NETDEV_FEATURE_COUNT ); -bitmap_andnot (new_active, old_active, req_mask,NETDEV_FEATURE_COUNT ); -bitmap_or (req_wanted, new_active, req_wanted,NETDEV_FEATURE_COUNT ); -if (bitmap_equal (req_wanted, old_active,NETDEV_FEATURE_COUNT )) { +bitmap_andnot (new_wanted, old_wanted, req_mask,NETDEV_FEATURE_COUNT ); +bitmap_or (req_wanted, new_wanted, req_wanted,NETDEV_FEATURE_COUNT ); +if (bitmap_equal (req_wanted, old_wanted,NETDEV_FEATURE_COUNT )) { ret =0 ; goto out_rtnl; }
Greg Kroah-Hartman
maintainerPATCH 12/15 ethtool: Account for hw_features in netlink interface
In reply to Greg Kroah-HartmanFrom: Maxim Mikityanskiy <[email protected]>
[ Upstream commit 2847bfed888fbb8bf4c8e8067fd6127538c2c700 ]
ethtool-netlink ignores dev->hw_features and may confuse the drivers by asking them to enable features not in the hw_features bitmask. For example:
1. ethtool -k eth0
tls-hw-tx-offload: off [fixed]
2. ethtool -K eth0 tls-hw-tx-offload on
tls-hw-tx-offload: on
3. ethtool -k eth0
tls-hw-tx-offload: on [fixed]
Fitler out dev->hw_features from req_wanted to fix it and to resemble the legacy ethtool behavior.
--- net/ethtool/features.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/ethtool/features.c +2 -1
@@ -273,7 +273,8 @@ int ethnl_set_features(struct sk_buff *s goto out_rtnl; } - dev->wanted_features =ethnl_bitmap_to_features (req_wanted); + dev->wanted_features &= ~dev->hw_features; + dev->wanted_features |=ethnl_bitmap_to_features (req_wanted) & dev->hw_features;__netdev_update_features (dev);ethnl_features_to_bitmap (new_active, dev->features); mod = !bitmap_equal (old_active, new_active,NETDEV_FEATURE_COUNT );
Greg Kroah-Hartman
maintainerPATCH 13/15 ethtool: Dont omit the netlink reply if no features were changed
In reply to Greg Kroah-HartmanFrom: Maxim Mikityanskiy <[email protected]>
[ Upstream commit f01204ec8be7ea5e8f0230a7d4200e338d563bde ]
The legacy ethtool userspace tool shows an error when no features could be changed. It's useful to have a netlink reply to be able to show this error when __netdev_update_features wasn't called, for example:
1. ethtool -k eth0
large-receive-offload: off
2. ethtool -K eth0 rx-fcs on
3. ethtool -K eth0 lro on
Could not change any device features
rx-lro: off [requested on]
4. ethtool -K eth0 lro on
# The output should be the same, but without this patch the kernel # doesn't send the reply, and ethtool is unable to detect the error.
This commit makes ethtool-netlink always return a reply when requested, and it still avoids unnecessary calls to __netdev_update_features if the wanted features haven't changed.
--- net/ethtool/features.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-)
net/ethtool/features.c +4 -7
@@ -268,14 +268,11 @@ int ethnl_set_features(struct sk_buff *sbitmap_and (req_wanted, req_wanted, req_mask,NETDEV_FEATURE_COUNT );bitmap_andnot (new_wanted, old_wanted, req_mask,NETDEV_FEATURE_COUNT );bitmap_or (req_wanted, new_wanted, req_wanted,NETDEV_FEATURE_COUNT ); -if (bitmap_equal (req_wanted, old_wanted,NETDEV_FEATURE_COUNT )) { - ret =0 ; - goto out_rtnl; +if (!bitmap_equal (req_wanted, old_wanted,NETDEV_FEATURE_COUNT )) { + dev->wanted_features &= ~dev->hw_features; + dev->wanted_features |=ethnl_bitmap_to_features (req_wanted) & dev->hw_features; +__netdev_update_features (dev); } - - dev->wanted_features &= ~dev->hw_features; - dev->wanted_features |=ethnl_bitmap_to_features (req_wanted) & dev->hw_features; -__netdev_update_features (dev);ethnl_features_to_bitmap (new_active, dev->features); mod = !bitmap_equal (old_active, new_active,NETDEV_FEATURE_COUNT );
Greg Kroah-Hartman
maintainerPATCH 14/15 powerpc/64s: Dont init FSCR_DSCR in __init_FSCR()
In reply to Greg Kroah-HartmanFrom: Michael Ellerman <[email protected]>
commit 0828137e8f16721842468e33df0460044a0c588b upstream.
__init_FSCR() was added originally in commit 2468dcf641e4 ("powerpc:
Add support for context switching the TAR register") (Feb 2013), and only set FSCR_TAR.
At that point FSCR (Facility Status and Control Register) was not context switched, so the setting was permanent after boot.
Later we added initialisation of FSCR_DSCR to __init_FSCR(), in commit 54c9b2253d34 ("powerpc: Set DSCR bit in FSCR setup") (Mar 2013), again that was permanent after boot.
Then commit 2517617e0de6 ("powerpc: Fix context switch DSCR on POWER8") (Aug 2013) added a limited context switch of FSCR, just the FSCR_DSCR bit was context switched based on thread.dscr_inherit. That commit said "This clears the H/FSCR DSCR bit initially", but it didn't, it left the initialisation of FSCR_DSCR in __init_FSCR(). However the initial context switch from init_task to pid 1 would clear FSCR_DSCR because thread.dscr_inherit was 0.
That commit also introduced the requirement that FSCR_DSCR be clear for user processes, so that we can take the facility unavailable interrupt in order to manage dscr_inherit.
Then in commit 152d523e6307 ("powerpc: Create context switch helpers save_sprs() and restore_sprs()") (Dec 2015) FSCR was added to thread_struct. However it still wasn't fully context switched, we just took the existing value and set FSCR_DSCR if the new thread had dscr_inherit set. FSCR was still initialised at boot to FSCR_DSCR | FSCR_TAR, but that value was not propagated into the thread_struct, so the initial context switch set FSCR_DSCR back to 0.
Finally commit b57bd2de8c6c ("powerpc: Improve FSCR init and context switching") (Jun 2016) added a full context switch of the FSCR, and added an initialisation of init_task.thread.fscr to FSCR_TAR | FSCR_EBB, but omitted FSCR_DSCR.
The end result is that swapper runs with FSCR_DSCR set because of the initialisation in __init_FSCR(), but no other processes do, they use the value from init_task.thread.fscr.
Having FSCR_DSCR set for swapper allows it to access SPR 3 from userspace, but swapper never runs userspace, so it has no useful effect. It's also confusing to have the value initialised in two places to two different values.
So remove FSCR_DSCR from __init_FSCR(), this at least gets us to the point where there's a single value of FSCR, even if it's still set in two places.
--- arch/powerpc/kernel/cpu_setup_power.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/kernel/cpu_setup_power.S +1 -1
@@ -184,7 +184,7 @@ __init_LPCR_ISA300: __init_FSCR: mfspr r3,SPRN_FSCR - ori r3,r3,FSCR_TAR|FSCR_DSCR|FSCR_EBB + ori r3,r3,FSCR_TAR|FSCR_EBB mtspr SPRN_FSCR,r3 blr
Greg Kroah-Hartman
maintainerPATCH 15/15 binfmt_flat: revert "binfmt_flat: dont offset the data start"
In reply to Greg Kroah-HartmanFrom: Max Filippov <[email protected]>
commit 2217b982624680d19a80ebb4600d05c8586c4f96 upstream.
binfmt_flat loader uses the gap between text and data to store data segment pointers for the libraries. Even in the absence of shared libraries it stores at least one pointer to the executable's own data segment. Text and data can go back to back in the flat binary image and without offsetting data segment last few instructions in the text segment may get corrupted by the data segment pointer.
Fix it by reverting commit a2357223c50a ("binfmt_flat: don't offset the data start").
--- fs/binfmt_flat.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
fs/binfmt_flat.c +12 -8
@@ -571,7 +571,7 @@ static int load_flat_file(struct linux_b goto err; } - len = data_len + extra; + len = data_len + extra +MAX_SHARED_LIBS *sizeof (unsigned long ); len =PAGE_ALIGN (len); realdatastart =vm_mmap (NULL ,0 , len,PROT_READ |PROT_WRITE |PROT_EXEC ,MAP_PRIVATE ,0 );
@@ -585,7 +585,9 @@ static int load_flat_file(struct linux_bvm_munmap (textpos, text_len); goto err; } - datapos =ALIGN (realdatastart,FLAT_DATA_ALIGN ); + datapos =ALIGN (realdatastart + +MAX_SHARED_LIBS *sizeof (unsigned long ), +FLAT_DATA_ALIGN );pr_debug ("Allocated data+bss+stack (%u bytes): %lx\n" , data_len + bss_len + stack_len, datapos);
@@ -615,7 +617,7 @@ static int load_flat_file(struct linux_b memp_size = len; }else { - len = text_len + data_len + extra; + len = text_len + data_len + extra +MAX_SHARED_LIBS *sizeof (u32); len =PAGE_ALIGN (len); textpos =vm_mmap (NULL ,0 , len,PROT_READ |PROT_EXEC |PROT_WRITE ,MAP_PRIVATE ,0 );
@@ -630,7 +632,9 @@ static int load_flat_file(struct linux_b } realdatastart = textpos +ntohl (hdr->data_start); - datapos =ALIGN (realdatastart,FLAT_DATA_ALIGN ); + datapos =ALIGN (realdatastart + +MAX_SHARED_LIBS *sizeof (u32), +FLAT_DATA_ALIGN ); reloc = (__be32 __user *) (datapos + (ntohl (hdr->reloc_start) - text_len));
@@ -647,9 +651,8 @@ static int load_flat_file(struct linux_b (text_len + full_data -sizeof (struct flat_hdr )), 0); -if (datapos != realdatastart) -memmove ((void *)datapos, (void *)realdatastart, - full_data); +memmove ((void *) datapos, (void *) realdatastart, + full_data);#else /* * This is used on MMU systems mainly for testing.
@@ -705,7 +708,8 @@ static int load_flat_file(struct linux_bif (IS_ERR_VALUE (result)) { ret = result;pr_err ("Unable to read code+data+bss, errno %d\n" , ret); -vm_munmap (textpos, text_len + data_len + extra); +vm_munmap (textpos, text_len + data_len + extra + +MAX_SHARED_LIBS *sizeof (u32)); goto err; } }
Quoted 4 lines · Greg Kroah-Hartman
-------------------
Note, ok, this is really going to be the final 5.7.y kernel release. I mean it this time....
-------------------
Hello,
This is probably not very relevant but let me just bring this up here since your manner of posting mail on the list seems to differ quite a bit from what most people on the list are doing.
From my understanding, an email regarding to a certain patch or kernel issue should be sent to a list and not to a maintainer. This is however not the habit that people are in, though but instead, most people will send the email to the maintainers, then cc a few probably random mailing lists. This leads to emails flooding on the mailing list and consequently, beats the purpose of one ever having sent the mail to a list because lists will get increasingly difficult to follow.
Is it just me who has made this observation? From your mail, it clearly looks and seems like you are following the above. Not following the above could make it very hard for a new kernel developer to pick up working on the kernel.
Sincerely,
David Kiarie
Quoted 92 lines
This is the start of the stable review cycle for the 5.7.19 release. There are 15 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 28 Aug 2020 11:48:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.7.19-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.7.y
and the diffstat can be found below.thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 5.7.19-rc1Max Filippov <[email protected]>
binfmt_flat: revert "binfmt_flat: don't offset the data start"Michael Ellerman <[email protected]>
powerpc/64s: Don't initFSCR_DSCRin__init_FSCR()Maxim Mikityanskiy <[email protected]>
ethtool: Don't omit the netlink reply if no features were changedMaxim Mikityanskiy <[email protected]>
ethtool: Account forhw_featuresin netlink interfaceMaxim Mikityanskiy <[email protected]>
ethtool: Fix preserving of wanted feature bits in netlink interfaceShay Agroskin <[email protected]>
net: ena: Makemissed_txstat incrementalCong Wang <[email protected]>
tipc: fix uninit skb->data in tipc_nl_compat_dumpit()Xin Long <[email protected]>
tipc: callrcu_read_lock()intipc_aead_encrypt_done()Peilin Ye <[email protected]>
net/smc: Prevent kernel-infoleak in__smc_diag_dump()David Laight <[email protected]>
net: sctp: Fix negotiation of the number of data streams.Alaa Hleihel <[email protected]>
net/sched:act_ct: Fix skb double-free intcf_ct_handle_fragments()error flowNecip Fazil Yildiran <[email protected]>
net: qrtr: fix usage of idr in port assignment to socketNikolay Aleksandrov <[email protected]>
net: nexthop: don't allow emptyNHA_GROUPMiaohe Lin <[email protected]>
net: Fix potential wrong skb->protocol in skb_vlan_untag()Mark Tomlinson <[email protected]>
gre6: Fix reception withIP6_TNL_F_RCV_DSCP_COPY-------------
Diffstat:
Makefile | 4 ++-- arch/powerpc/kernel/cpu_setup_power.S | 2 +- drivers/net/ethernet/amazon/ena/ena_netdev.c | 5 ++++- fs/binfmt_flat.c | 20 ++++++++++++-------- net/core/skbuff.c | 4 ++-- net/ethtool/features.c | 19 ++++++++++--------- net/ipv4/nexthop.c | 5 ++++- net/ipv6/ip6_tunnel.c | 10 +++++++++- net/qrtr/qrtr.c | 20 +++++++++++--------- net/sched/act_ct.c | 2 +- net/sctp/stream.c | 6 ++++-- net/smc/smc_diag.c | 16 +++++++++------- net/tipc/crypto.c | 2 ++ net/tipc/netlink_compat.c | 12 +++++++++++- 14 files changed, 82 insertions(+), 45 deletions(-)
Greg KH
maintainerQuoted 11 lines · David K. Kahurani
Quoted 4 lines · Greg Kroah-Hartman
-------------------
Note, ok, this is really going to be the final 5.7.y kernel release. I mean it this time....
-------------------Hello,
This is probably not very relevant but let me just bring this up here since your manner of posting mail on the list seems to differ quite a bit from what most people on the list are doing.
It's not all that relevant as what I am doing here is not what anyone else on this list is doing :)
Quoted 8 lines
From my understanding, an email regarding to a certain patch or kernel issue should be sent to a list and not to a maintainer. This is however not the habit that people are in, though but instead, most people will send the email to the maintainers, then cc a few probably random mailing lists. This leads to emails flooding on the mailing list and consequently, beats the purpose of one ever having sent the mail to a list because lists will get increasingly difficult to follow.
So is the complaint that these stable -rc emails are drowning out seeing other patches that are relevant?
If so, there are some wonderfully helpfuly headers that I add to all of these emails so you can easily filter them away to /dev/null if you so desire.
If not, then I don't understand the complaint.
Quoted 4 lines
Is it just me who has made this observation? From your mail, it clearly looks and seems like you are following the above. Not following the above could make it very hard for a new kernel developer to pick up working on the kernel.
Have you read the Documentation/process/1.Intro.rst file? If not, please start there, as trying to read the firehose that is lkml all at once is _not_ how anyone does kernel development.
thanks,
greg k-h
Quoted 14 lines · Greg Kroah-Hartman
-------------------
Note, ok, this is really going to be the final 5.7.y kernel release. I mean it this time....
-------------------This is the start of the stable review cycle for the 5.7.19 release. There are 15 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 28 Aug 2020 11:48:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.7.19-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.7.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.7:
11 builds: 11 pass, 0 fail
20 boots: 20 pass, 0 fail
42 tests: 42 pass, 0 failLinux version: 5.7.19-rc1-g6ae4171ed2cd
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra30-cardhu-a04Jon
Quoted 5 lines · Greg Kroah-Hartman
-------------------
Note, ok, this is really going to be the final 5.7.y kernel release. I mean it this time....
-------------------
Quoted 8 lines
This is the start of the stable review cycle for the 5.7.19 release. There are 15 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 28 Aug 2020 11:48:35 +0000. Anything received after that time might be too late.
Build results:
total: 158 pass: 158 fail: 0 Qemu test results: total: 431 pass: 431 fail: 0
Guenter
Quoted 15 lines · Greg Kroah-Hartman
-------------------
Note, ok, this is really going to be the final 5.7.y kernel release. I mean it this time....
-------------------This is the start of the stable review cycle for the 5.7.19 release. There are 15 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 28 Aug 2020 11:48:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.7.19-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.7.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Summary
------------------------------------------------------------------------
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-5.7.y
git commit: 6ae4171ed2cd47d945dbd8ce6a2918c00b498022
git describe: v5.7.18-16-g6ae4171ed2cd
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-5.7-oe/build/v5.7.18-16-g6ae4171ed2cd
No regressions (compared to build v5.7.17-128-gf16d132bb2de)
No fixes (compared to build v5.7.17-128-gf16d132bb2de)
Ran 35766 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c
- hi6220-hikey
- i386
- juno-r2
- juno-r2-compat
- juno-r2-kasan
- nxp-ls2088
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15
- x86
- x86-kasan
Test Suites
-----------
* build
* install-android-platform-tools-r2600
* kselftest
* kselftest/drivers
* kselftest/filesystems
* kselftest/net
* libhugetlbfs
* linux-log-parser
* ltp-controllers-tests
* ltp-cve-tests
* ltp-fs-tests
* ltp-sched-tests
* ltp-tracing-tests
* perf
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-securebits-tests
* network-basic-tests
* ltp-dio-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-mm-tests
* ltp-open-posix-tests
* ltp-syscalls-tests
* v4l2-compliance
* igt-gpu-tools
* ssuite
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-native/drivers
* kselftest-vsyscall-mode-native/filesystems
* kselftest-vsyscall-mode-native/net
* kselftest-vsyscall-mode-none
* kselftest-vsyscall-mode-none/drivers
* kselftest-vsyscall-mode-none/filesystems
* kselftest-vsyscall-mode-none/net
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org