5.8.5-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 5.8.5-rc1 review
This is the start of the stable review cycle for the 5.8.5 release. There are 16 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:49:02 +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.8.5-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.8.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.8.5-rc1
Max Filippov <[email protected]>
binfmt_flat: revert "binfmt_flat: don't offset the data start"
Pavel Begunkov <[email protected]>
io_uring: fix missing ->mm on exit
Johannes Berg <[email protected]>
netlink: fix state reallocation in policy export
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 ++-- drivers/net/ethernet/amazon/ena/ena_netdev.c | 5 ++++- fs/binfmt_flat.c | 20 ++++++++++++-------- fs/io_uring.c | 3 ++- net/core/skbuff.c | 4 ++-- net/ethtool/features.c | 19 ++++++++++--------- net/ipv4/nexthop.c | 5 ++++- net/ipv6/ip6_tunnel.c | 10 +++++++++- net/netlink/policy.c | 3 +++ 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 +++++++++++- 15 files changed, 86 insertions(+), 45 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/16 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
@@ -913,7 +913,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/16 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
@@ -5419,8 +5419,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/16 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
@@ -446,7 +446,7 @@ static int nh_check_attr_group(struct neunsigned int i, j;u8 nhg_fdb =0 ; -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 ;
@@ -1187,6 +1187,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/16 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/16 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
@@ -704,7 +704,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/16 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/16 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/16 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/16 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/16 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
@@ -3609,7 +3609,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;
@@ -4537,6 +4537,9 @@ static void ena_keep_alive_wd(void *adap tx_drops = ((u64 )desc->tx_drops_high <<32 ) | desc->tx_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; adapter->dev_stats.tx_drops = tx_drops;u64_stats_update_end (&adapter->syncp);
Greg Kroah-Hartman
maintainerPATCH 11/16 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/16 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/16 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/16 netlink: fix state reallocation in policy export
In reply to Greg Kroah-HartmanFrom: Johannes Berg <[email protected]>
[ Upstream commit d1fb55592909ea249af70170c7a52e637009564d ]
Evidently, when I did this previously, we didn't have more than 10 policies and didn't run into the reallocation path, because it's missing a memset() for the unused policies. Fix that.
--- net/netlink/policy.c | 3 +++ 1 file changed, 3 insertions(+)
net/netlink/policy.c +3 -0
@@ -51,6 +51,9 @@ static int add_policy(struct nl_policy_dif (!state)return -ENOMEM ; +memset (&state->policies[state->n_alloc],0 , +flex_array_size (state, policies, n_alloc - state->n_alloc)); + state->policies[state->n_alloc].policy = policy; state->policies[state->n_alloc].maxtype = maxtype; state->n_alloc = n_alloc;
Greg Kroah-Hartman
maintainerPATCH 15/16 io_uring: fix missing ->mm on exit
In reply to Greg Kroah-HartmanFrom: Pavel Begunkov <[email protected]>
Upstream commits:
8eb06d7e8dd85 ("io_uring: fix missing ->mm on exit") cbcf72148da4a ("io_uring: return locked and pinned page accounting")
do_exit() first drops current->mm and then runs task_work, from where io_sq_thread_acquire_mm() would try to set mm for a user dying process.
[ 208.004249] WARNING: CPU: 2 PID: 1854 at kernel/kthread.c:1238 kthread_use_mm+0x244/0x270 [ 208.004287] kthread_use_mm+0x244/0x270 [ 208.004288] io_sq_thread_acquire_mm.part.0+0x54/0x80 [ 208.004290] io_async_task_func+0x258/0x2ac [ 208.004291] task_work_run+0xc8/0x210 [ 208.004294] do_exit+0x1b8/0x430 [ 208.004295] do_group_exit+0x44/0xac [ 208.004296] get_signal+0x164/0x69c [ 208.004298] do_signal+0x94/0x1d0 [ 208.004299] do_notify_resume+0x18c/0x340 [ 208.004300] work_pending+0x8/0x3d4
--- fs/io_uring.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/io_uring.c +2 -1
@@ -4363,7 +4363,8 @@ static int io_sq_thread_acquire_mm(struc struct io_kiocb *req) {if (io_op_defs[req->opcode].needs_mm && !current->mm) { -if (unlikely (!mmget_not_zero (ctx->sqo_mm))) +if (unlikely (!(ctx->flags &IORING_SETUP_SQPOLL ) || + !mmget_not_zero (ctx->sqo_mm)))return -EFAULT ;kthread_use_mm (ctx->sqo_mm); }
Greg Kroah-Hartman
maintainerPATCH 16/16 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
@@ -576,7 +576,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 );
@@ -590,7 +590,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);
@@ -620,7 +622,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 );
@@ -635,7 +637,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));
@@ -652,9 +656,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.
@@ -710,7 +713,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 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.5 release. There are 16 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:49:02 +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.8.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.8:
11 builds: 11 pass, 0 fail
20 boots: 20 pass, 0 fail
45 tests: 45 pass, 0 failLinux version: 5.8.5-rc1-ga8485efcbc70
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra30-cardhu-a04Jon
Greg Kroah-Hartman
maintainerQuoted 26 lines · Jon Hunter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.5 release. There are 16 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:49:02 +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.8.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.8:
11 builds: 11 pass, 0 fail 20 boots: 20 pass, 0 fail 45 tests: 45 pass, 0 fail
Quoted 7 lines
Linux version: 5.8.5-rc1-ga8485efcbc70
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,tegra194-p2972-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04Tested-by Jon Hunter <[email protected]>
Thanks for testing both of these so quickly and letting me know.
greg k-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.5 release. There are 16 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:49:02 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 154 fail: 0 Qemu test results: total: 430 pass: 430 fail: 0
Guenter
Greg Kroah-Hartman
maintainerQuoted 10 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.5 release. There are 16 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:49:02 +0000. Anything received after that time might be too late.
Quoted 6 lines
Build results:
total: 154 pass: 154 fail: 0 Qemu test results: total: 430 pass: 430 fail: 0Tested-by Guenter Roeck <[email protected]>
Great, thanks for the quick testing and letting me know.
greg k-h
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.5 release. There are 16 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:49:02 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.8.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.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.8.y
git commit: a8485efcbc7066059480098954524ceee6afdfe3
git describe: v5.8.4-17-ga8485efcbc70
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-5.8-oe/build/v5.8.4-17-ga8485efcbc70
No regressions (compared to build v5.8.5)
No fixes (compared to build v5.8.5)
Ran 34357 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