5.4.46-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 5.4.46-rc1 review
This is the start of the stable review cycle for the 5.4.46 release. There are 34 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 Thu, 11 Jun 2020 17:40:27 +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.4.46-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.4.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.4.46-rc1
Greg Kroah-Hartman <[email protected]>
Revert "net/mlx5: Annotate mutex destroy for root ns"
Oleg Nesterov <[email protected]>
uprobes: ensure that uprobe->offset and ->ref_ctr_offset are properly aligned
Josh Poimboeuf <[email protected]>
x86/speculation: Add Ivy Bridge to affected list
Mark Gross <[email protected]>
x86/speculation: Add SRBDS vulnerability and mitigation documentation
Mark Gross <[email protected]>
x86/speculation: Add Special Register Buffer Data Sampling (SRBDS) mitigation
Mark Gross <[email protected]>
x86/cpu: Add 'table' argument to cpu_matches()
Mark Gross <[email protected]>
x86/cpu: Add a steppings field to struct x86_cpu_id
Tony W Wang-oc <[email protected]>
x86/speculation/spectre_v2: Exclude Zhaoxin CPUs from SPECTRE_V2
Srinivas Kandagatla <[email protected]>
nvmem: qfprom: remove incorrect write support
Oliver Neukum <[email protected]>
CDC-ACM: heed quirk also in error handling
Pascal Terjan <[email protected]>
staging: rtl8712: Fix IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK
Jiri Slaby <[email protected]>
tty: hvc_console, fix crashes on parallel open/close
Dmitry Torokhov <[email protected]>
vt: keyboard: avoid signed integer overflow in k_ascii
Dinghao Liu <[email protected]>
usb: musb: Fix runtime PM imbalance on error
Bin Liu <[email protected]>
usb: musb: start session in resume for host port
Fabrice Gasnier <[email protected]>
iio: adc: stm32-adc: fix a wrong error message when probing interrupts
Jonathan Cameron <[email protected]>
iio:chemical:pms7003: Fix timestamp alignment and prevent data leak.
Mathieu Othacehe <[email protected]>
iio: vcnl4000: Fix i2c swapped word reading.
Jonathan Cameron <[email protected]>
iio:chemical:sps30: Fix timestamp alignment
Michael Hanselmann <[email protected]>
USB: serial: ch341: add basis for quirk detection
Daniele Palmas <[email protected]>
USB: serial: option: add Telit LE910C1-EUX compositions
Bin Liu <[email protected]>
USB: serial: usb_wwan: do not resubmit rx urb on fatal errors
Matt Jolly <[email protected]>
USB: serial: qcserial: add DW5816e QDL support
Eric Dumazet <[email protected]>
net: be more gentle about silly gso requests coming from user
Willem de Bruijn <[email protected]>
net: check untrusted gso_size at kernel entry
Stefano Garzarella <[email protected]>
vsock: fix timeout in vsock_accept()
Heinrich Kuhn <[email protected]>
nfp: flower: fix used time of merge flow statistics
Chuhong Yuan <[email protected]>
NFC: st21nfca: add missed kfree_skb() in an error path
Daniele Palmas <[email protected]>
net: usb: qmi_wwan: add Telit LE910C1-EUX composition
Fugang Duan <[email protected]>
net: stmmac: enable timestamp snapshot for required PTP packets in dwmac v5.10a
Mark Bloch <[email protected]>
net/mlx5: Fix crash upon suspend/resume
Eric Dumazet <[email protected]>
l2tp: do not use inet_hash()/inet_unhash()
Eric Dumazet <[email protected]>
l2tp: add sk_family checks to l2tp_validate_socket
Yang Yingliang <[email protected]>
devinet: fix memleak in inetdev_init()
-------------
Diffstat:
Documentation/ABI/testing/sysfs-devices-system-cpu | 1 + Documentation/admin-guide/hw-vuln/index.rst | 1 + .../special-register-buffer-data-sampling.rst | 149 +++++++++++++++++++++ Documentation/admin-guide/kernel-parameters.txt | 20 +++ Makefile | 4 +- arch/x86/include/asm/cpu_device_id.h | 30 +++++ arch/x86/include/asm/cpufeatures.h | 2 + arch/x86/include/asm/msr-index.h | 4 + arch/x86/kernel/cpu/bugs.c | 106 +++++++++++++++ arch/x86/kernel/cpu/common.c | 63 +++++++-- arch/x86/kernel/cpu/cpu.h | 1 + arch/x86/kernel/cpu/match.c | 7 +- drivers/base/cpu.c | 8 ++ drivers/iio/adc/stm32-adc-core.c | 34 ++--- drivers/iio/chemical/pms7003.c | 17 ++- drivers/iio/chemical/sps30.c | 9 +- drivers/iio/light/vcnl4000.c | 6 +- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 6 - drivers/net/ethernet/mellanox/mlx5/core/main.c | 18 +++ .../net/ethernet/netronome/nfp/flower/offload.c | 3 +- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 +- drivers/net/usb/qmi_wwan.c | 1 + drivers/nfc/st21nfca/dep.c | 4 +- drivers/nvmem/qfprom.c | 14 -- drivers/staging/rtl8712/wifi.h | 9 +- drivers/tty/hvc/hvc_console.c | 23 ++-- drivers/tty/vt/keyboard.c | 26 ++-- drivers/usb/class/cdc-acm.c | 2 +- drivers/usb/musb/musb_core.c | 7 + drivers/usb/musb/musb_debugfs.c | 10 +- drivers/usb/serial/ch341.c | 53 ++++++++ drivers/usb/serial/option.c | 4 + drivers/usb/serial/qcserial.c | 1 + drivers/usb/serial/usb_wwan.c | 4 + include/linux/mod_devicetable.h | 6 + include/linux/virtio_net.h | 25 +++- kernel/events/uprobes.c | 16 ++- net/ipv4/devinet.c | 1 + net/l2tp/l2tp_core.c | 3 + net/l2tp/l2tp_ip.c | 29 +++- net/l2tp/l2tp_ip6.c | 30 +++-- net/vmw_vsock/af_vsock.c | 2 +- 42 files changed, 627 insertions(+), 135 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/34 devinet: fix memleak in inetdev_init()
From: Yang Yingliang <[email protected]>
[ Upstream commit 1b49cd71b52403822731dc9f283185d1da355f97 ]
When devinet_sysctl_register() failed, the memory allocated in neigh_parms_alloc() should be freed.
--- net/ipv4/devinet.c | 1 + 1 file changed, 1 insertion(+)
net/ipv4/devinet.c +1 -0
@@ -276,6 +276,7 @@ static struct in_device *inetdev_init(st err =devinet_sysctl_register (in_dev);if (err) { in_dev->dead =1 ; +neigh_parms_release (&arp_tbl, in_dev->arp_parms);in_dev_put (in_dev); in_dev =NULL ; goto out;
Greg Kroah-Hartman
maintainerPATCH 2/34 l2tp: add sk_family checks to l2tp_validate_socket
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
[ Upstream commit d9a81a225277686eb629938986d97629ea102633 ]
syzbot was able to trigger a crash after using an ISDN socket and fool l2tp.
Fix this by making sure the UDP socket is of the proper family.
BUG: KASAN: slab-out-of-bounds in setup_udp_tunnel_sock+0x465/0x540 net/ipv4/udp_tunnel.c:78
Write of size 1 at addr ffff88808ed0c590 by task syz-executor.5/3018
CPU: 0 PID: 3018 Comm: syz-executor.5 Not tainted 5.7.0-rc6-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x188/0x20d lib/dump_stack.c:118
print_address_description.constprop.0.cold+0xd3/0x413 mm/kasan/report.c:382
__kasan_report.cold+0x20/0x38 mm/kasan/report.c:511
kasan_report+0x33/0x50 mm/kasan/common.c:625
setup_udp_tunnel_sock+0x465/0x540 net/ipv4/udp_tunnel.c:78
l2tp_tunnel_register+0xb15/0xdd0 net/l2tp/l2tp_core.c:1523
l2tp_nl_cmd_tunnel_create+0x4b2/0xa60 net/l2tp/l2tp_netlink.c:249
genl_family_rcv_msg_doit net/netlink/genetlink.c:673 [inline]
genl_family_rcv_msg net/netlink/genetlink.c:718 [inline]
genl_rcv_msg+0x627/0xdf0 net/netlink/genetlink.c:735
netlink_rcv_skb+0x15a/0x410 net/netlink/af_netlink.c:2469
genl_rcv+0x24/0x40 net/netlink/genetlink.c:746
netlink_unicast_kernel net/netlink/af_netlink.c:1303 [inline]
netlink_unicast+0x537/0x740 net/netlink/af_netlink.c:1329
netlink_sendmsg+0x882/0xe10 net/netlink/af_netlink.c:1918
sock_sendmsg_nosec net/socket.c:652 [inline]
sock_sendmsg+0xcf/0x120 net/socket.c:672
____sys_sendmsg+0x6e6/0x810 net/socket.c:2352
___sys_sendmsg+0x100/0x170 net/socket.c:2406
__sys_sendmsg+0xe5/0x1b0 net/socket.c:2439
do_syscall_64+0xf6/0x7d0 arch/x86/entry/common.c:295
entry_SYSCALL_64_after_hwframe+0x49/0xb3
RIP: 0033:0x45ca29
Code: 0d b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 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 0f 83 db b6 fb ff c3 66 2e 0f 1f 84 00 00 00 00
RSP: 002b:00007effe76edc78 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00000000004fe1c0 RCX: 000000000045ca29
RDX: 0000000000000000 RSI: 0000000020000240 RDI: 0000000000000005
RBP: 000000000078bf00 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff
R13: 000000000000094e R14: 00000000004d5d00 R15: 00007effe76ee6d4
Allocated by task 3018:
save_stack+0x1b/0x40 mm/kasan/common.c:49
set_track mm/kasan/common.c:57 [inline]
__kasan_kmalloc mm/kasan/common.c:495 [inline]
__kasan_kmalloc.constprop.0+0xbf/0xd0 mm/kasan/common.c:468
__do_kmalloc mm/slab.c:3656 [inline]
__kmalloc+0x161/0x7a0 mm/slab.c:3665
kmalloc include/linux/slab.h:560 [inline]
sk_prot_alloc+0x223/0x2f0 net/core/sock.c:1612
sk_alloc+0x36/0x1100 net/core/sock.c:1666
data_sock_create drivers/isdn/mISDN/socket.c:600 [inline]
mISDN_sock_create+0x272/0x400 drivers/isdn/mISDN/socket.c:796
__sock_create+0x3cb/0x730 net/socket.c:1428
sock_create net/socket.c:1479 [inline]
__sys_socket+0xef/0x200 net/socket.c:1521
__do_sys_socket net/socket.c:1530 [inline]
__se_sys_socket net/socket.c:1528 [inline]
__x64_sys_socket+0x6f/0xb0 net/socket.c:1528
do_syscall_64+0xf6/0x7d0 arch/x86/entry/common.c:295
entry_SYSCALL_64_after_hwframe+0x49/0xb3
Freed by task 2484:
save_stack+0x1b/0x40 mm/kasan/common.c:49
set_track mm/kasan/common.c:57 [inline]
kasan_set_free_info mm/kasan/common.c:317 [inline]
__kasan_slab_free+0xf7/0x140 mm/kasan/common.c:456
__cache_free mm/slab.c:3426 [inline]
kfree+0x109/0x2b0 mm/slab.c:3757
kvfree+0x42/0x50 mm/util.c:603
__free_fdtable+0x2d/0x70 fs/file.c:31
put_files_struct fs/file.c:420 [inline]
put_files_struct+0x248/0x2e0 fs/file.c:413
exit_files+0x7e/0xa0 fs/file.c:445
do_exit+0xb04/0x2dd0 kernel/exit.c:791
do_group_exit+0x125/0x340 kernel/exit.c:894
get_signal+0x47b/0x24e0 kernel/signal.c:2739
do_signal+0x81/0x2240 arch/x86/kernel/signal.c:784
exit_to_usermode_loop+0x26c/0x360 arch/x86/entry/common.c:161
prepare_exit_to_usermode arch/x86/entry/common.c:196 [inline]
syscall_return_slowpath arch/x86/entry/common.c:279 [inline]
do_syscall_64+0x6b1/0x7d0 arch/x86/entry/common.c:305
entry_SYSCALL_64_after_hwframe+0x49/0xb3
The buggy address belongs to the object at ffff88808ed0c000
which belongs to the cache kmalloc-2k of size 2048
The buggy address is located 1424 bytes inside of
2048-byte region [ffff88808ed0c000, ffff88808ed0c800)
The buggy address belongs to the page:
page:ffffea00023b4300 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0
flags: 0xfffe0000000200(slab)
raw: 00fffe0000000200 ffffea0002838208 ffffea00015ba288 ffff8880aa000e00
raw: 0000000000000000 ffff88808ed0c000 0000000100000001 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff88808ed0c480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff88808ed0c500: 00 00 00 fc fc fc fc fc fc fc fc fc fc fc fc fc
>ffff88808ed0c580: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
^
ffff88808ed0c600: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff88808ed0c680: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc--- net/l2tp/l2tp_core.c | 3 +++ 1 file changed, 3 insertions(+)
net/l2tp/l2tp_core.c +3 -0
@@ -1460,6 +1460,9 @@ static int l2tp_validate_socket(const stif (sk->sk_type !=SOCK_DGRAM )return -EPROTONOSUPPORT ; +if (sk->sk_family !=PF_INET && sk->sk_family !=PF_INET6 ) +return -EPROTONOSUPPORT ; +if ((encap ==L2TP_ENCAPTYPE_UDP && sk->sk_protocol !=IPPROTO_UDP ) || (encap ==L2TP_ENCAPTYPE_IP && sk->sk_protocol !=IPPROTO_L2TP ))return -EPROTONOSUPPORT ;
Greg Kroah-Hartman
maintainerPATCH 3/34 l2tp: do not use inet_hash()/inet_unhash()
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
[ Upstream commit 02c71b144c811bcdd865e0a1226d0407d11357e8 ]
syzbot recently found a way to crash the kernel [1]
Issue here is that inet_hash() & inet_unhash() are currently only meant to be used by TCP & DCCP, since only these protocols provide the needed hashinfo pointer.
L2TP uses a single list (instead of a hash table)
This old bug became an issue after commit 610236587600 ("bpf: Add new cgroup attach type to enable sock modifications") since after this commit, sk_common_release() can be called while the L2TP socket is still considered 'hashed'.
general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f] CPU: 0 PID: 7063 Comm: syz-executor654 Not tainted 5.7.0-rc6-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 RIP: 0010:inet_unhash+0x11f/0x770 net/ipv4/inet_hashtables.c:600 Code: 03 0f b6 04 02 84 c0 74 08 3c 03 0f 8e dd 04 00 00 48 8d 7d 08 44 8b 73 08 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 55 05 00 00 48 8d 7d 14 4c 8b 6d 08 48 b8 00 00 RSP: 0018:ffffc90001777d30 EFLAGS: 00010202 RAX: dffffc0000000000 RBX: ffff88809a6df940 RCX: ffffffff8697c242 RDX: 0000000000000001 RSI: ffffffff8697c251 RDI: 0000000000000008 RBP: 0000000000000000 R08: ffff88809f3ae1c0 R09: fffffbfff1514cc1 R10: ffffffff8a8a6607 R11: fffffbfff1514cc0 R12: ffff88809a6df9b0 R13: 0000000000000007 R14: 0000000000000000 R15: ffffffff873a4d00 FS: 0000000001d2b880(0000) GS:ffff8880ae600000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00000000006cd090 CR3: 000000009403a000 CR4: 00000000001406f0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: sk_common_release+0xba/0x370 net/core/sock.c:3210 inet_create net/ipv4/af_inet.c:390 [inline] inet_create+0x966/0xe00 net/ipv4/af_inet.c:248 __sock_create+0x3cb/0x730 net/socket.c:1428 sock_create net/socket.c:1479 [inline] __sys_socket+0xef/0x200 net/socket.c:1521 __do_sys_socket net/socket.c:1530 [inline] __se_sys_socket net/socket.c:1528 [inline] __x64_sys_socket+0x6f/0xb0 net/socket.c:1528 do_syscall_64+0xf6/0x7d0 arch/x86/entry/common.c:295 entry_SYSCALL_64_after_hwframe+0x49/0xb3 RIP: 0033:0x441e29 Code: e8 fc b3 02 00 48 83 c4 18 c3 0f 1f 80 00 00 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 0f 83 eb 08 fc ff c3 66 2e 0f 1f 84 00 00 00 00 RSP: 002b:00007ffdce184148 EFLAGS: 00000246 ORIG_RAX: 0000000000000029 RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 0000000000441e29 RDX: 0000000000000073 RSI: 0000000000000002 RDI: 0000000000000002 RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 0000000000402c30 R14: 0000000000000000 R15: 0000000000000000 Modules linked in: ---[ end trace 23b6578228ce553e ]--- RIP: 0010:inet_unhash+0x11f/0x770 net/ipv4/inet_hashtables.c:600 Code: 03 0f b6 04 02 84 c0 74 08 3c 03 0f 8e dd 04 00 00 48 8d 7d 08 44 8b 73 08 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 55 05 00 00 48 8d 7d 14 4c 8b 6d 08 48 b8 00 00 RSP: 0018:ffffc90001777d30 EFLAGS: 00010202 RAX: dffffc0000000000 RBX: ffff88809a6df940 RCX: ffffffff8697c242 RDX: 0000000000000001 RSI: ffffffff8697c251 RDI: 0000000000000008 RBP: 0000000000000000 R08: ffff88809f3ae1c0 R09: fffffbfff1514cc1 R10: ffffffff8a8a6607 R11: fffffbfff1514cc0 R12: ffff88809a6df9b0 R13: 0000000000000007 R14: 0000000000000000 R15: ffffffff873a4d00 FS: 0000000001d2b880(0000) GS:ffff8880ae600000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00000000006cd090 CR3: 000000009403a000 CR4: 00000000001406f0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
--- net/l2tp/l2tp_ip.c | 29 ++++++++++++++++++++++------- net/l2tp/l2tp_ip6.c | 30 ++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 15 deletions(-)
net/l2tp/l2tp_ip.c +22 -7
@@ -20,7 +20,6 @@#include <net/icmp.h> #include <net/udp.h> #include <net/inet_common.h> -#include <net/inet_hashtables.h> #include <net/tcp_states.h> #include <net/protocol.h> #include <net/xfrm.h>
@@ -209,15 +208,31 @@ discard:return 0 ; } -static int l2tp_ip_open (struct sock *sk) +static int l2tp_ip_hash (struct sock *sk) { -/* Prevent autobind. We don't have ports. */ -inet_sk (sk)->inet_num =IPPROTO_L2TP ; +if (sk_unhashed (sk)) { +write_lock_bh (&l2tp_ip_lock); +sk_add_node (sk, &l2tp_ip_table); +write_unlock_bh (&l2tp_ip_lock); + } +return 0 ; +} +static void l2tp_ip_unhash (struct sock *sk) +{ +if (sk_unhashed (sk)) +return ;write_lock_bh (&l2tp_ip_lock); -sk_add_node (sk, &l2tp_ip_table); +sk_del_node_init (sk);write_unlock_bh (&l2tp_ip_lock); +} + +static int l2tp_ip_open (struct sock *sk) +{ +/* Prevent autobind. We don't have ports. */ +inet_sk (sk)->inet_num =IPPROTO_L2TP ; +l2tp_ip_hash (sk);return 0 ; }
@@ -594,8 +609,8 @@ static struct proto l2tp_ip_prot = { .sendmsg = l2tp_ip_sendmsg, .recvmsg = l2tp_ip_recvmsg, .backlog_rcv = l2tp_ip_backlog_recv, - .hash = inet_hash, - .unhash = inet_unhash, + .hash = l2tp_ip_hash, + .unhash = l2tp_ip_unhash, .obj_size =sizeof (struct l2tp_ip_sock ), #ifdef CONFIG_COMPAT .compat_setsockopt = compat_ip_setsockopt,
net/l2tp/l2tp_ip6.c +22 -8
@@ -20,8 +20,6 @@#include <net/icmp.h> #include <net/udp.h> #include <net/inet_common.h> -#include <net/inet_hashtables.h> -#include <net/inet6_hashtables.h> #include <net/tcp_states.h> #include <net/protocol.h> #include <net/xfrm.h>
@@ -222,15 +220,31 @@ discard:return 0 ; } -static int l2tp_ip6_open (struct sock *sk) +static int l2tp_ip6_hash (struct sock *sk) { -/* Prevent autobind. We don't have ports. */ -inet_sk (sk)->inet_num =IPPROTO_L2TP ; +if (sk_unhashed (sk)) { +write_lock_bh (&l2tp_ip6_lock); +sk_add_node (sk, &l2tp_ip6_table); +write_unlock_bh (&l2tp_ip6_lock); + } +return 0 ; +} +static void l2tp_ip6_unhash (struct sock *sk) +{ +if (sk_unhashed (sk)) +return ;write_lock_bh (&l2tp_ip6_lock); -sk_add_node (sk, &l2tp_ip6_table); +sk_del_node_init (sk);write_unlock_bh (&l2tp_ip6_lock); +} + +static int l2tp_ip6_open (struct sock *sk) +{ +/* Prevent autobind. We don't have ports. */ +inet_sk (sk)->inet_num =IPPROTO_L2TP ; +l2tp_ip6_hash (sk);return 0 ; }
@@ -728,8 +742,8 @@ static struct proto l2tp_ip6_prot = { .sendmsg = l2tp_ip6_sendmsg, .recvmsg = l2tp_ip6_recvmsg, .backlog_rcv = l2tp_ip6_backlog_recv, - .hash = inet6_hash, - .unhash = inet_unhash, + .hash = l2tp_ip6_hash, + .unhash = l2tp_ip6_unhash, .obj_size =sizeof (struct l2tp_ip6_sock ), #ifdef CONFIG_COMPAT .compat_setsockopt = compat_ipv6_setsockopt,
Greg Kroah-Hartman
maintainerPATCH 4/34 net/mlx5: Fix crash upon suspend/resume
In reply to Greg Kroah-HartmanFrom: Mark Bloch <[email protected]>
[ Upstream commit 8fc3e29be9248048f449793502c15af329f35c6e ]
Currently a Linux system with the mlx5 NIC always crashes upon hibernation - suspend/resume.
Add basic callbacks so the NIC could be suspended and resumed.
--- drivers/net/ethernet/mellanox/mlx5/core/main.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
drivers/net/ethernet/mellanox/mlx5/core/main.c +18 -0
@@ -1554,6 +1554,22 @@ static void shutdown(struct pci_dev *pdemlx5_pci_disable_device (dev); } +static int mlx5_suspend (struct pci_dev *pdev,pm_message_t state) +{ +struct mlx5_core_dev *dev =pci_get_drvdata (pdev); + +mlx5_unload_one (dev, false); + +return 0 ; +} + +static int mlx5_resume (struct pci_dev *pdev) +{ +struct mlx5_core_dev *dev =pci_get_drvdata (pdev); + +return mlx5_load_one (dev, false); +} +static const struct pci_device_id mlx5_core_pci_table[] = { {PCI_VDEVICE (MELLANOX ,PCI_DEVICE_ID_MELLANOX_CONNECTIB ) }, {PCI_VDEVICE (MELLANOX ,0x1012 ),MLX5_PCI_DEV_IS_VF },/* Connect-IB VF */
@@ -1597,6 +1613,8 @@ static struct pci_driver mlx5_core_drive .id_table = mlx5_core_pci_table, .probe = init_one, .remove = remove_one, + .suspend = mlx5_suspend, + .resume = mlx5_resume, .shutdown = shutdown, .err_handler = &mlx5_err_handler, .sriov_configure = mlx5_core_sriov_configure,
Greg Kroah-Hartman
maintainerPATCH 5/34 net: stmmac: enable timestamp snapshot for required PTP packets in dwmac v5.10a
In reply to Greg Kroah-HartmanFrom: Fugang Duan <[email protected]>
[ Upstream commit f2fb6b6275eba9d312957ca44c487bd780da6169 ]
For rx filter 'HWTSTAMP_FILTER_PTP_V2_EVENT', it should be PTP v2/802.AS1, any layer, any kind of event packet, but HW only take timestamp snapshot for below PTP message: sync, Pdelay_req, Pdelay_resp.
Then it causes below issue when test E2E case:
ptp4l[2479.534]: port 1: received DELAY_REQ without timestamp ptp4l[2481.423]: port 1: received DELAY_REQ without timestamp ptp4l[2481.758]: port 1: received DELAY_REQ without timestamp ptp4l[2483.524]: port 1: received DELAY_REQ without timestamp ptp4l[2484.233]: port 1: received DELAY_REQ without timestamp ptp4l[2485.750]: port 1: received DELAY_REQ without timestamp ptp4l[2486.888]: port 1: received DELAY_REQ without timestamp ptp4l[2487.265]: port 1: received DELAY_REQ without timestamp ptp4l[2487.316]: port 1: received DELAY_REQ without timestamp
Timestamp snapshot dependency on register bits in received path:
SNAPTYPSEL TSMSTRENA TSEVNTENA PTP_Messages
01 x 0 SYNC, Follow_Up, Delay_Req,
Delay_Resp, Pdelay_Req, Pdelay_Resp, Pdelay_Resp_Follow_Up
01 0 1 SYNC, Pdelay_Req, Pdelay_Resp
For dwmac v5.10a, enabling all events by setting register DWC_EQOS_TIME_STAMPING[SNAPTYPSEL] to 2’b01, clearing bit [TSEVNTENA] to 0’b0, which can support all required events.
--- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +2 -1
@@ -630,7 +630,8 @@ static int stmmac_hwtstamp_set(struct ne config.rx_filter =HWTSTAMP_FILTER_PTP_V2_EVENT ; ptp_v2 =PTP_TCR_TSVER2ENA ; snap_type_sel =PTP_TCR_SNAPTYPSEL_1 ; - ts_event_en =PTP_TCR_TSEVNTENA ; +if (priv->synopsys_id !=DWMAC_CORE_5_10 ) + ts_event_en =PTP_TCR_TSEVNTENA ; ptp_over_ipv4_udp =PTP_TCR_TSIPV4ENA ; ptp_over_ipv6_udp =PTP_TCR_TSIPV6ENA ; ptp_over_ethernet =PTP_TCR_TSIPENA ;
Greg Kroah-Hartman
maintainerPATCH 6/34 net: usb: qmi_wwan: add Telit LE910C1-EUX composition
In reply to Greg Kroah-HartmanFrom: Daniele Palmas <[email protected]>
[ Upstream commit 591612aa578cd7148b7b9d74869ef40118978389 ]
Add support for Telit LE910C1-EUX composition
0x1031: tty, tty, tty, rmnet
--- drivers/net/usb/qmi_wwan.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1324,6 +1324,7 @@ static const struct usb_device_id produc {QMI_FIXED_INTF(0x1bbb, 0x0203, 2)}, /* Alcatel L800MA */ {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */ {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)}, /* Telit FN980 */ {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */
Greg Kroah-Hartman
maintainerPATCH 7/34 NFC: st21nfca: add missed kfree_skb() in an error path
In reply to Greg Kroah-HartmanFrom: Chuhong Yuan <[email protected]>
[ Upstream commit 3decabdc714ca56c944f4669b4cdec5c2c1cea23 ]
st21nfca_tm_send_atr_res() misses to call kfree_skb() in an error path. Add the missed function call to fix it.
--- drivers/nfc/st21nfca/dep.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/nfc/st21nfca/dep.c +3 -1
@@ -173,8 +173,10 @@ static int st21nfca_tm_send_atr_res(strumemcpy (atr_res->gbi, atr_req->gbi, gb_len); r =nfc_set_remote_general_bytes (hdev->ndev, atr_res->gbi, gb_len); -if (r <0 ) +if (r <0 ) { +kfree_skb (skb);return r; + } } info->dep_info.curr_nfc_dep_pni =0 ;
Greg Kroah-Hartman
maintainerPATCH 8/34 nfp: flower: fix used time of merge flow statistics
In reply to Greg Kroah-HartmanFrom: Heinrich Kuhn <[email protected]>
[ Upstream commit 5b186cd60f033110960a3db424ffbd6de4cee528 ]
Prior to this change the correct value for the used counter is calculated but not stored nor, therefore, propagated to user-space. In use-cases such as OVS use-case at least this results in active flows being removed from the hardware datapath. Which results in both unnecessary flow tear-down and setup, and packet processing on the host.
This patch addresses the problem by saving the calculated used value which allows the value to propagate to user-space.
Found by inspection.
--- drivers/net/ethernet/netronome/nfp/flower/offload.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/net/ethernet/netronome/nfp/flower/offload.c +2 -1
@@ -1368,7 +1368,8 @@ __nfp_flower_update_merge_stats(struct n ctx_id =be32_to_cpu (sub_flow->meta.host_ctx_id); priv->stats[ctx_id].pkts += pkts; priv->stats[ctx_id].bytes += bytes; -max_t (u64, priv->stats[ctx_id].used, used); + priv->stats[ctx_id].used =max_t (u64, used, + priv->stats[ctx_id].used); } }
Greg Kroah-Hartman
maintainerPATCH 9/34 vsock: fix timeout in vsock_accept()
In reply to Greg Kroah-HartmanFrom: Stefano Garzarella <[email protected]>
[ Upstream commit 7e0afbdfd13d1e708fe96e31c46c4897101a6a43 ]
The accept(2) is an "input" socket interface, so we should use SO_RCVTIMEO instead of SO_SNDTIMEO to set the timeout.
So this patch replace sock_sndtimeo() with sock_rcvtimeo() to use the right timeout in the vsock_accept().
--- net/vmw_vsock/af_vsock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/vmw_vsock/af_vsock.c +1 -1
@@ -1275,7 +1275,7 @@ static int vsock_accept(struct socket *s/* Wait for children sockets to appear; these are the new sockets * created upon connection establishment. */ - timeout =sock_sndtimeo (listener, flags &O_NONBLOCK ); + timeout =sock_rcvtimeo (listener, flags &O_NONBLOCK );prepare_to_wait (sk_sleep (listener), &wait,TASK_INTERRUPTIBLE ); while ((connected = vsock_dequeue_accept(listener)) == NULL &&
Greg Kroah-Hartman
maintainerPATCH 10/34 net: check untrusted gso_size at kernel entry
In reply to Greg Kroah-HartmanFrom: Willem de Bruijn <[email protected]>
[ Upstream commit 6dd912f82680761d8fb6b1bb274a69d4c7010988 ]
Syzkaller again found a path to a kernel crash through bad gso input:
a packet with gso size exceeding len.
These packets are dropped in tcp_gso_segment and udp[46]_ufo_fragment. But they may affect gso size calculations earlier in the path.
Now that we have thlen as of commit 9274124f023b ("net: stricter validation of untrusted gso packets"), check gso_size at entry too.
--- include/linux/virtio_net.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)
include/linux/virtio_net.h +12 -2
@@ -31,6 +31,7 @@ static inline int virtio_net_hdr_to_skb( {unsigned int gso_type =0 ;unsigned int thlen =0 ; +unsigned int p_off =0 ;unsigned int ip_proto;if (hdr->gso_type !=VIRTIO_NET_HDR_GSO_NONE ) {
@@ -68,7 +69,8 @@ static inline int virtio_net_hdr_to_skb(if (!skb_partial_csum_set (skb, start, off))return -EINVAL ; -if (skb_transport_offset (skb) + thlen >skb_headlen (skb)) + p_off =skb_transport_offset (skb) + thlen; +if (p_off >skb_headlen (skb))return -EINVAL ; }else {/* gso packets without NEEDS_CSUM do not set transport_offset.
@@ -92,17 +94,25 @@ retry:return -EINVAL ; } -if (keys.control.thoff + thlen >skb_headlen (skb) || + p_off = keys.control.thoff + thlen; +if (p_off >skb_headlen (skb) || keys.basic.ip_proto != ip_proto)return -EINVAL ;skb_set_transport_header (skb, keys.control.thoff); + }else if (gso_type) { + p_off = thlen; +if (p_off >skb_headlen (skb)) +return -EINVAL ; } }if (hdr->gso_type !=VIRTIO_NET_HDR_GSO_NONE ) {u16 gso_size =__virtio16_to_cpu (little_endian, hdr->gso_size); +if (skb->len - p_off <= gso_size) +return -EINVAL ; +skb_shinfo (skb)->gso_size = gso_size;skb_shinfo (skb)->gso_type = gso_type;
Greg Kroah-Hartman
maintainerPATCH 11/34 net: be more gentle about silly gso requests coming from user
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
[ Upstream commit 7c6d2ecbda83150b2036a2b36b21381ad4667762 ]
Recent change in virtio_net_hdr_to_skb() broke some packetdrill tests.
When --mss=XXX option is set, packetdrill always provide gso_type & gso_size for its inbound packets, regardless of packet size.
if (packet->tcp && packet->mss) {
if (packet->ipv4)
gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
else
gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
gso.gso_size = packet->mss;
}Since many other programs could do the same, relax virtio_net_hdr_to_skb() to no longer return an error, but instead ignore gso settings.
This keeps Willem intent to make sure no malicious packet could reach gso stack.
Note that TCP stack has a special logic in tcp_set_skb_tso_segs() to clear gso_size for small packets.
--- include/linux/virtio_net.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
include/linux/virtio_net.h +9 -8
@@ -109,16 +109,17 @@ retry:if (hdr->gso_type !=VIRTIO_NET_HDR_GSO_NONE ) {u16 gso_size =__virtio16_to_cpu (little_endian, hdr->gso_size); +struct skb_shared_info *shinfo =skb_shinfo (skb); -if (skb->len - p_off <= gso_size) -return -EINVAL ; +/* Too small packets are not really GSO ones. */ +if (skb->len - p_off > gso_size) { + shinfo->gso_size = gso_size; + shinfo->gso_type = gso_type; -skb_shinfo (skb)->gso_size = gso_size; -skb_shinfo (skb)->gso_type = gso_type; - -/* Header must be checked, and gso_segs computed. */ -skb_shinfo (skb)->gso_type |=SKB_GSO_DODGY ; -skb_shinfo (skb)->gso_segs =0 ; +/* Header must be checked, and gso_segs computed. */ + shinfo->gso_type |=SKB_GSO_DODGY ; + shinfo->gso_segs =0 ; + } }return 0 ;
Greg Kroah-Hartman
maintainerPATCH 12/34 USB: serial: qcserial: add DW5816e QDL support
In reply to Greg Kroah-HartmanFrom: Matt Jolly <[email protected]>
commit 3429444abdd9dbd5faebd9bee552ec6162b17ad6 upstream.
Add support for Dell Wireless 5816e Download Mode (AKA boot & hold mode / QDL download mode) to drivers/usb/serial/qcserial.c
This is required to update device firmware.
--- drivers/usb/serial/qcserial.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/serial/qcserial.c +1 -0
@@ -173,6 +173,7 @@ static const struct usb_device_id id_tab {DEVICE_SWI(0x413c, 0x81b3)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ {DEVICE_SWI(0x413c, 0x81b5)}, /* Dell Wireless 5811e QDL */ {DEVICE_SWI(0x413c, 0x81b6)}, /* Dell Wireless 5811e QDL */ + {DEVICE_SWI(0x413c, 0x81cb)}, /* Dell Wireless 5816e QDL */ {DEVICE_SWI(0x413c, 0x81cc)}, /* Dell Wireless 5816e */ {DEVICE_SWI(0x413c, 0x81cf)}, /* Dell Wireless 5819 */ {DEVICE_SWI(0x413c, 0x81d0)}, /* Dell Wireless 5819 */
Greg Kroah-Hartman
maintainerPATCH 13/34 USB: serial: usb_wwan: do not resubmit rx urb on fatal errors
In reply to Greg Kroah-HartmanFrom: Bin Liu <[email protected]>
commit 986c1748c84d7727defeaeca74a73b37f7d5cce1 upstream.
usb_wwan_indat_callback() shouldn't resubmit rx urb if the previous urb status is a fatal error. Or the usb controller would keep processing the new urbs then run into interrupt storm, and has no chance to recover.
--- drivers/usb/serial/usb_wwan.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/usb/serial/usb_wwan.c +4 -0
@@ -270,6 +270,10 @@ static void usb_wwan_indat_callback(struif (status) {dev_dbg (dev,"%s: nonzero status: %d on endpoint %02x.\n" , __func__, status, endpoint); + +/* don't resubmit on fatal errors */ +if (status == -ESHUTDOWN || status == -ENOENT ) +return ; }else {if (urb->actual_length) { tty_insert_flip_string(&port->port, data,
Greg Kroah-Hartman
maintainerPATCH 14/34 USB: serial: option: add Telit LE910C1-EUX compositions
In reply to Greg Kroah-HartmanFrom: Daniele Palmas <[email protected]>
commit 399ad9477c523f721f8e51d4f824bdf7267f120c upstream.
Add Telit LE910C1-EUX compositions:
0x1031: tty, tty, tty, rmnet 0x1033: tty, tty, tty, ecm
--- drivers/usb/serial/option.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/usb/serial/option.c +4 -0
@@ -1157,6 +1157,10 @@ static const struct usb_device_id option { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1031, 0xff), /* Telit LE910C1-EUX */ + .driver_info = NCTRL(0) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1033, 0xff), /* Telit LE910C1-EUX (ECM) */ + .driver_info = NCTRL(0) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG0), .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG1),
Greg Kroah-Hartman
maintainerPATCH 15/34 USB: serial: ch341: add basis for quirk detection
In reply to Greg Kroah-HartmanFrom: Michael Hanselmann <[email protected]>
commit c404bf4aa9236cb4d1068e499ae42acf48a6ff97 upstream.
A subset of CH341 devices does not support all features, namely the prescaler is limited to a reduced precision and there is no support for sending a RS232 break condition. This patch adds a detection function which will be extended to set quirk flags as they're implemented.
The author's affected device has an imprint of "340" on the turquoise-colored plug, but not all such devices appear to be affected.
[ johan: use long type for quirks; rephrase and use port device for
messages; handle short reads; set quirk flags directly in helper function ]
--- drivers/usb/serial/ch341.c | 53 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+)
drivers/usb/serial/ch341.c +53 -0
@@ -93,6 +93,7 @@ struct ch341_private {u8 mcr;u8 msr;u8 lcr; +unsigned long quirks; }; static void ch341_set_termios(struct tty_struct *tty,
@@ -245,6 +246,53 @@ out: kfree(buffer);return r; } +static int ch341_detect_quirks (struct usb_serial_port *port) +{ +struct ch341_private *priv =usb_get_serial_port_data (port); +struct usb_device *udev = port->serial->dev; +const unsigned int size =2 ; +unsigned long quirks =0 ; +char *buffer; +int r; + + buffer =kmalloc (size,GFP_KERNEL ); +if (!buffer) +return -ENOMEM ; + +/* +* A subset of CH34x devices does not support all features. The +* prescaler is limited and there is no support for sending a RS232 +* break condition. A read failure when trying to set up the latter is +* used to detect these devices. +*/ + r =usb_control_msg (udev,usb_rcvctrlpipe (udev,0 ),CH341_REQ_READ_REG , +USB_TYPE_VENDOR |USB_RECIP_DEVICE |USB_DIR_IN , +CH341_REG_BREAK ,0 , buffer, size,DEFAULT_TIMEOUT ); +if (r == -EPIPE ) { +dev_dbg (&port->dev,"break control not supported\n" ); + r =0 ; + goto out; + } + +if (r != size) { +if (r >=0 ) + r = -EIO ; +dev_err (&port->dev,"failed to read break control: %d\n" , r); + goto out; + } + + r =0 ; +out: +kfree (buffer); + +if (quirks) { +dev_dbg (&port->dev,"enabling quirk flags: 0x%02lx\n" , quirks); + priv->quirks |= quirks; + } + +return r; +} +static int ch341_port_probe (struct usb_serial_port *port) {struct ch341_private *priv;
@@ -267,6 +315,11 @@ static int ch341_port_probe(struct usb_s goto error;usb_set_serial_port_data (port, priv); + + r =ch341_detect_quirks (port); +if (r <0 ) + goto error; +return 0 ; error:kfree (priv);
Greg Kroah-Hartman
maintainerPATCH 16/34 iio:chemical:sps30: Fix timestamp alignment
In reply to Greg Kroah-HartmanFrom: Jonathan Cameron <[email protected]>
commit a5bf6fdd19c327bcfd9073a8740fa19ca4525fd4 upstream.
One of a class of bugs pointed out by Lars in a recent review. iio_push_to_buffers_with_timestamp assumes the buffer used is aligned to the size of the timestamp (8 bytes). This is not guaranteed in this driver which uses an array of smaller elements on the stack.
--- drivers/iio/chemical/sps30.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/iio/chemical/sps30.c +6 -3
@@ -230,15 +230,18 @@ static irqreturn_t sps30_trigger_handlerstruct iio_dev *indio_dev = pf->indio_dev;struct sps30_state *state =iio_priv (indio_dev);int ret; -s32 data[4 +2 ];/* PM1, PM2P5, PM4, PM10, timestamp */ +struct { +s32 data[4 ];/* PM1, PM2P5, PM4, PM10 */ +s64 ts; + } scan;mutex_lock (&state->lock); - ret =sps30_do_meas (state, data,4 ); + ret =sps30_do_meas (state, scan.data,ARRAY_SIZE (scan.data));mutex_unlock (&state->lock);if (ret) goto err; -iio_push_to_buffers_with_timestamp (indio_dev, data, +iio_push_to_buffers_with_timestamp (indio_dev, &scan,iio_get_time_ns (indio_dev)); err:iio_trigger_notify_done (indio_dev->trig);
Greg Kroah-Hartman
maintainerPATCH 17/34 iio: vcnl4000: Fix i2c swapped word reading.
In reply to Greg Kroah-HartmanFrom: Mathieu Othacehe <[email protected]>
commit 18dfb5326370991c81a6d1ed6d1aeee055cb8c05 upstream.
The bytes returned by the i2c reading need to be swapped unconditionally. Otherwise, on be16 platforms, an incorrect value will be returned.
Taking the slow path via next merge window as its been around a while and we have a patch set dependent on this which would be held up.
--- drivers/iio/light/vcnl4000.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/iio/light/vcnl4000.c +2 -4
@@ -193,7 +193,6 @@ static int vcnl4000_measure(struct vcnl4 u8 rdy_mask, u8 data_reg, int *val) { int tries = 20; -__be16 buf;int ret;mutex_lock (&data->vcnl4000_lock);
@@ -220,13 +219,12 @@ static int vcnl4000_measure(struct vcnl4 goto fail; } - ret =i2c_smbus_read_i2c_block_data (data->client, - data_reg,sizeof (buf), (u8 *) &buf); + ret =i2c_smbus_read_word_swapped (data->client, data_reg);if (ret <0 ) goto fail;mutex_unlock (&data->vcnl4000_lock); - *val =be16_to_cpu (buf); + *val = ret;return 0 ;
Greg Kroah-Hartman
maintainerPATCH 18/34 iio:chemical:pms7003: Fix timestamp alignment and prevent data leak.
In reply to Greg Kroah-HartmanFrom: Jonathan Cameron <[email protected]>
commit 13e945631c2ffb946c0af342812a3cd39227de6e upstream.
One of a class of bugs pointed out by Lars in a recent review. iio_push_to_buffers_with_timestamp assumes the buffer used is aligned to the size of the timestamp (8 bytes). This is not guaranteed in this driver which uses an array of smaller elements on the stack. As Lars also noted this anti pattern can involve a leak of data to userspace and that indeed can happen here. We close both issues by moving to a suitable structure in the iio_priv() data with alignment explicitly requested. This data is allocated with kzalloc so no data can leak appart from previous readings.
--- drivers/iio/chemical/pms7003.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
drivers/iio/chemical/pms7003.c +12 -5
@@ -73,6 +73,11 @@ struct pms7003_state {struct pms7003_frame frame;struct completion frame_ready;struct mutex lock;/* must be held whenever state gets touched */ +/* Used to construct scan to push to the IIO buffer */ +struct { +u16 data[3 ];/* PM1, PM2P5, PM10 */ +s64 ts; + } scan; };static int pms7003_do_cmd (struct pms7003_state *state,enum pms7003_cmd cmd)
@@ -104,7 +109,6 @@ static irqreturn_t pms7003_trigger_handlstruct iio_dev *indio_dev = pf->indio_dev;struct pms7003_state *state =iio_priv (indio_dev);struct pms7003_frame *frame = &state->frame; -u16 data[3 +1 +4 ];/* PM1, PM2P5, PM10, padding, timestamp */ int ret;mutex_lock (&state->lock);
@@ -114,12 +118,15 @@ static irqreturn_t pms7003_trigger_handl goto err; } - data[PM1 ] =pms7003_get_pm (frame->data +PMS7003_PM1_OFFSET ); - data[PM2P5 ] =pms7003_get_pm (frame->data +PMS7003_PM2P5_OFFSET ); - data[PM10 ] =pms7003_get_pm (frame->data +PMS7003_PM10_OFFSET ); + state->scan.data[PM1 ] = +pms7003_get_pm (frame->data +PMS7003_PM1_OFFSET ); + state->scan.data[PM2P5 ] = +pms7003_get_pm (frame->data +PMS7003_PM2P5_OFFSET ); + state->scan.data[PM10 ] = +pms7003_get_pm (frame->data +PMS7003_PM10_OFFSET );mutex_unlock (&state->lock); -iio_push_to_buffers_with_timestamp (indio_dev, data, +iio_push_to_buffers_with_timestamp (indio_dev, &state->scan,iio_get_time_ns (indio_dev)); err:iio_trigger_notify_done (indio_dev->trig);
Greg Kroah-Hartman
maintainerPATCH 19/34 iio: adc: stm32-adc: fix a wrong error message when probing interrupts
In reply to Greg Kroah-HartmanFrom: Fabrice Gasnier <[email protected]>
commit 10134ec3f8cefa6a40fe84987f1795e9e0da9715 upstream.
A wrong error message is printed out currently, like on STM32MP15:
- stm32-adc-core 48003000.adc: IRQ index 2 not found.
This is seen since commit 7723f4c5ecdb ("driver core: platform: Add an error message to platform_get_irq*()").
The STM32 ADC core driver wrongly requests up to 3 interrupt lines. It should request only the necessary IRQs, based on the compatible:
- stm32f4/h7 ADCs share a common interrupt
- stm32mp1, has one interrupt line per ADC.
So add the number of required interrupts to the compatible data.
--- drivers/iio/adc/stm32-adc-core.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-)
drivers/iio/adc/stm32-adc-core.c +14 -20
@@ -65,12 +65,14 @@ struct stm32_adc_priv;* @clk_sel: clock selection routine * @max_clk_rate_hz: maximum analog clock rate (Hz, from datasheet) * @has_syscfg: SYSCFG capability flags +* @num_irqs: number of interrupt lines */ struct stm32_adc_priv_cfg {const struct stm32_adc_common_regs *regs;int (*clk_sel)(struct platform_device *,struct stm32_adc_priv *);u32 max_clk_rate_hz;unsigned int has_syscfg; +unsigned int num_irqs; };/**
@@ -372,21 +374,15 @@ static int stm32_adc_irq_probe(struct plstruct device_node *np = pdev->dev.of_node;unsigned int i; -for (i =0 ; i <STM32_ADC_MAX_ADCS ; i++) { +/* +* Interrupt(s) must be provided, depending on the compatible: +* - stm32f4/h7 shares a common interrupt line. +* - stm32mp1, has one line per ADC +*/ +for (i =0 ; i < priv->cfg->num_irqs; i++) { priv->irq[i] =platform_get_irq (pdev, i); -if (priv->irq[i] <0 ) { -/* -* At least one interrupt must be provided, make others -* optional: -* - stm32f4/h7 shares a common interrupt. -* - stm32mp1, has one line per ADC (either for ADC1, -* ADC2 or both). -*/ -if (i && priv->irq[i] == -ENXIO ) -continue ; - +if (priv->irq[i] <0 )return priv->irq[i]; - } } priv->domain = irq_domain_add_simple(np, STM32_ADC_MAX_ADCS, 0,
@@ -397,9 +393,7 @@ static int stm32_adc_irq_probe(struct plreturn -ENOMEM ; } -for (i =0 ; i <STM32_ADC_MAX_ADCS ; i++) { -if (priv->irq[i] <0 ) -continue ; +for (i =0 ; i < priv->cfg->num_irqs; i++) {irq_set_chained_handler (priv->irq[i], stm32_adc_irq_handler);irq_set_handler_data (priv->irq[i], priv); }
@@ -417,11 +411,8 @@ static void stm32_adc_irq_remove(structirq_dispose_mapping (irq_find_mapping (priv->domain, hwirq));irq_domain_remove (priv->domain); -for (i =0 ; i <STM32_ADC_MAX_ADCS ; i++) { -if (priv->irq[i] <0 ) -continue ; +for (i =0 ; i < priv->cfg->num_irqs; i++)irq_set_chained_handler (priv->irq[i],NULL ); - } } static int stm32_adc_core_switches_supply_en(struct stm32_adc_priv *priv,
@@ -803,6 +794,7 @@ static const struct stm32_adc_priv_cfg s .regs = &stm32f4_adc_common_regs, .clk_sel = stm32f4_adc_clk_sel, .max_clk_rate_hz = 36000000, + .num_irqs = 1, };static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = {
@@ -810,6 +802,7 @@ static const struct stm32_adc_priv_cfg s .clk_sel = stm32h7_adc_clk_sel, .max_clk_rate_hz = 36000000, .has_syscfg = HAS_VBOOSTER, + .num_irqs = 1, };static const struct stm32_adc_priv_cfg stm32mp1_adc_priv_cfg = {
@@ -817,6 +810,7 @@ static const struct stm32_adc_priv_cfg s .clk_sel = stm32h7_adc_clk_sel, .max_clk_rate_hz = 40000000, .has_syscfg = HAS_VBOOSTER | HAS_ANASWVDD, + .num_irqs = 2, };static const struct of_device_id stm32_adc_of_match[] = {
Greg Kroah-Hartman
maintainerPATCH 20/34 usb: musb: start session in resume for host port
In reply to Greg Kroah-HartmanFrom: Bin Liu <[email protected]>
commit 7f88a5ac393f39319f69b8b20cc8d5759878d1a1 upstream.
Commit 17539f2f4f0b ("usb: musb: fix enumeration after resume") replaced musb_start() in musb_resume() to not override softconnect bit, but it doesn't restart the session for host port which was done in musb_start(). The session could be disabled in musb_suspend(), which leads the host port doesn't stay in host mode.
So let's start the session specifically for host port in musb_resume().
--- drivers/usb/musb/musb_core.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/usb/musb/musb_core.c +7 -0
@@ -2721,6 +2721,13 @@ static int musb_resume(struct device *demusb_enable_interrupts (musb);musb_platform_enable (musb); +/* session might be disabled in suspend */ +if (musb->port_mode ==MUSB_HOST && + !(musb->ops->quirks &MUSB_PRESERVE_SESSION )) { + devctl |=MUSB_DEVCTL_SESSION ; +musb_writeb (musb->mregs,MUSB_DEVCTL , devctl); + } +spin_lock_irqsave (&musb->lock, flags); error =musb_run_resume_work (musb);if (error)
Greg Kroah-Hartman
maintainerPATCH 21/34 usb: musb: Fix runtime PM imbalance on error
In reply to Greg Kroah-HartmanFrom: Dinghao Liu <[email protected]>
commit e4befc121df03dc8ed2ac1031c98f9538e244bae upstream.
When copy_from_user() returns an error code, there is a runtime PM usage counter imbalance.
Fix this by moving copy_from_user() to the beginning of this function.
--- drivers/usb/musb/musb_debugfs.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/usb/musb/musb_debugfs.c +5 -5
@@ -168,6 +168,11 @@ static ssize_t musb_test_mode_write(struu8 test;char buf[24 ]; +memset (buf,0x00 ,sizeof (buf)); + +if (copy_from_user (buf, ubuf,min_t (size_t,sizeof (buf) -1 , count))) +return -EFAULT ; +pm_runtime_get_sync (musb->controller); test =musb_readb (musb->mregs,MUSB_TESTMODE );if (test) {
@@ -176,11 +181,6 @@ static ssize_t musb_test_mode_write(stru goto ret; } -memset (buf,0x00 ,sizeof (buf)); - -if (copy_from_user (buf, ubuf,min_t (size_t,sizeof (buf) -1 , count))) -return -EFAULT ; -if (strstarts (buf,"force host full-speed" )) test =MUSB_TEST_FORCE_HOST |MUSB_TEST_FORCE_FS ;
Greg Kroah-Hartman
maintainerPATCH 22/34 vt: keyboard: avoid signed integer overflow in k_ascii
In reply to Greg Kroah-HartmanFrom: Dmitry Torokhov <[email protected]>
commit b86dab054059b970111b5516ae548efaae5b3aae upstream.
When k_ascii is invoked several times in a row there is a potential for signed integer overflow:
UBSAN: Undefined behaviour in drivers/tty/vt/keyboard.c:888:19 signed integer overflow: 10 * 1111111111 cannot be represented in type 'int' CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.6.11 #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011 Call Trace: <IRQ> __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0xce/0x128 lib/dump_stack.c:118 ubsan_epilogue+0xe/0x30 lib/ubsan.c:154 handle_overflow+0xdc/0xf0 lib/ubsan.c:184 __ubsan_handle_mul_overflow+0x2a/0x40 lib/ubsan.c:205 k_ascii+0xbf/0xd0 drivers/tty/vt/keyboard.c:888 kbd_keycode drivers/tty/vt/keyboard.c:1477 [inline] kbd_event+0x888/0x3be0 drivers/tty/vt/keyboard.c:1495
While it can be worked around by using check_mul_overflow()/ check_add_overflow(), it is better to introduce a separate flag to signal that number pad is being used to compose a symbol, and change type of the accumulator from signed to unsigned, thus avoiding undefined behavior when it overflows.
--- drivers/tty/vt/keyboard.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-)
drivers/tty/vt/keyboard.c +16 -10
@@ -127,7 +127,11 @@ static DEFINE_SPINLOCK(func_buf_lock); /static unsigned long key_down[BITS_TO_LONGS (KEY_CNT )];/* keyboard key bitmap */ static unsigned char shift_down[NR_SHIFT ];/* shift state counters.. */ static bool dead_key_next; -static int npadch =-1 ;/* -1 or number assembled on pad */ + +/* Handles a number being assembled on the number pad */ +static bool npadch_active; +static unsigned int npadch_value; +static unsigned int diacr;static char rep;/* flag telling character repeat */
@@ -845,12 +849,12 @@ static void k_shift(struct vc_data *vc, shift_state &= ~(1 << value);/* kludge */ -if (up_flag && shift_state != old_state && npadch !=-1 ) { +if (up_flag && shift_state != old_state && npadch_active) {if (kbd->kbdmode ==VC_UNICODE ) -to_utf8 (vc, npadch); +to_utf8 (vc, npadch_value);else -put_queue (vc, npadch &0xff ); - npadch =-1 ; +put_queue (vc, npadch_value &0xff ); + npadch_active = false; } }
@@ -868,7 +872,7 @@ static void k_meta(struct vc_data *vc, ustatic void k_ascii (struct vc_data *vc,unsigned char value,char up_flag) { -int base; +unsigned int base;if (up_flag)return ;
@@ -882,10 +886,12 @@ static void k_ascii(struct vc_data *vc, base =16 ; } -if (npadch ==-1 ) - npadch = value; -else - npadch = npadch * base + value; +if (!npadch_active) { + npadch_value =0 ; + npadch_active = true; + } + + npadch_value = npadch_value * base + value; }static void k_lock (struct vc_data *vc,unsigned char value,char up_flag)
Greg Kroah-Hartman
maintainerPATCH 23/34 tty: hvc_console, fix crashes on parallel open/close
In reply to Greg Kroah-HartmanFrom: Jiri Slaby <[email protected]>
commit 24eb2377f977fe06d84fca558f891f95bc28a449 upstream.
hvc_open sets tty->driver_data to NULL when open fails at some point. Typically, the failure happens in hp->ops->notifier_add(). If there is a racing process which tries to open such mangled tty, which was not closed yet, the process will crash in hvc_open as tty->driver_data is NULL.
All this happens because close wants to know whether open failed or not. But ->open should not NULL this and other tty fields for ->close to be happy. ->open should call tty_port_set_initialized(true) and close should check by tty_port_initialized() instead. So do this properly in this driver.
So this patch removes these from ->open:
* tty_port_tty_set(&hp->port, NULL). This happens on last close.
* tty->driver_data = NULL. Dtto.
* tty_port_put(&hp->port). This happens in shutdown and until now, this must have been causing a reference underflow, if I am not missing something.
--- drivers/tty/hvc/hvc_console.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-)
drivers/tty/hvc/hvc_console.c +8 -15
@@ -371,15 +371,14 @@ static int hvc_open(struct tty_struct *t* tty fields and return the kref reference. */ if (rc) { -tty_port_tty_set (&hp->port,NULL ); - tty->driver_data =NULL ; -tty_port_put (&hp->port);printk (KERN_ERR "hvc_open: request_irq failed with rc %d.\n" , rc); - }else + }else {/* We are ready... raise DTR/RTS */ if (C_BAUD (tty))if (hp->ops->dtr_rts) hp->ops->dtr_rts (hp,1 ); +tty_port_set_initialized (&hp->port, true); + }/* Force wakeup of the polling thread */ hvc_kick ();
@@ -389,22 +388,12 @@ static int hvc_open(struct tty_struct *tstatic void hvc_close (struct tty_struct *tty,struct file * filp) { -struct hvc_struct *hp; +struct hvc_struct *hp = tty->driver_data;unsigned long flags;if (tty_hung_up_p (filp))return ; -/* -* No driver_data means that this close was issued after a failed -* hvc_open by the tty layer's release_dev() function and we can just -* exit cleanly because the kref reference wasn't made. -*/ -if (!tty->driver_data) -return ; - - hp = tty->driver_data; -spin_lock_irqsave (&hp->port.lock, flags);if (--hp->port.count ==0 ) {
@@ -412,6 +401,9 @@ static void hvc_close(struct tty_struct/* We are done with the tty pointer now. */ tty_port_tty_set (&hp->port,NULL ); +if (!tty_port_initialized (&hp->port)) +return ; +if (C_HUPCL (tty))if (hp->ops->dtr_rts) hp->ops->dtr_rts (hp,0 );
@@ -428,6 +420,7 @@ static void hvc_close(struct tty_struct* waking periodically to check chars_in_buffer(). */ tty_wait_until_sent (tty,HVC_CLOSE_WAIT ); +tty_port_set_initialized (&hp->port, false); }else {if (hp->port.count <0 ) printk(KERN_ERR "hvc_close %X: oops, count is %d\n",
Greg Kroah-Hartman
maintainerPATCH 24/34 staging: rtl8712: Fix IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK
In reply to Greg Kroah-HartmanFrom: Pascal Terjan <[email protected]>
commit 15ea976a1f12b5fd76b1bd6ff3eb5132fd28047f upstream.
The value in shared headers was fixed 9 years ago in commit 8d661f1e462d ("ieee80211: correct IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK macro") and while looking at using shared headers for other duplicated constants I noticed this driver uses the old value.
The macros are also defined twice in this file so I am deleting the second definition.
--- drivers/staging/rtl8712/wifi.h | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-)
drivers/staging/rtl8712/wifi.h +1 -8
@@ -440,7 +440,7 @@ static inline unsigned char *get_hdr_bss/* block-ack parameters */ #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002#define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C -#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0 +#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0#define IEEE80211_DELBA_PARAM_TID_MASK 0xF000#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
@@ -532,13 +532,6 @@ struct ieee80211_ht_addt_info {#define IEEE80211_HT_IE_NON_GF_STA_PRSNT 0x0004#define IEEE80211_HT_IE_NON_HT_STA_PRSNT 0x0010 -/* block-ack parameters */ -#define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002 -#define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C -#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0 -#define IEEE80211_DELBA_PARAM_TID_MASK 0xF000 -#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800 -/* * A-PMDU buffer sizes * According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2)
Greg Kroah-Hartman
maintainerPATCH 25/34 CDC-ACM: heed quirk also in error handling
In reply to Greg Kroah-HartmanFrom: Oliver Neukum <[email protected]>
commit 97fe809934dd2b0b37dfef3a2fc70417f485d7af upstream.
If buffers are iterated over in the error case, the lower limits for quirky devices must be heeded.
--- drivers/usb/class/cdc-acm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/class/cdc-acm.c +1 -1
@@ -584,7 +584,7 @@ static void acm_softint(struct work_stru }if (test_and_clear_bit (ACM_ERROR_DELAY , &acm->flags)) { -for (i =0 ; i <ACM_NR ; i++) +for (i =0 ; i < acm->rx_buflimit; i++)if (test_and_clear_bit (i, &acm->urbs_in_error_delay))acm_submit_read_urb (acm, i,GFP_NOIO ); }
Greg Kroah-Hartman
maintainerPATCH 26/34 nvmem: qfprom: remove incorrect write support
In reply to Greg Kroah-HartmanFrom: Srinivas Kandagatla <[email protected]>
commit 8d9eb0d6d59a5d7028c80a30831143d3e75515a7 upstream.
qfprom has different address spaces for read and write. Reads are always done from corrected address space, where as writes are done on raw address space.
Writing to corrected address space is invalid and ignored, so it does not make sense to have this support in the driver which only supports corrected address space regions at the moment.
--- drivers/nvmem/qfprom.c | 14 -------------- 1 file changed, 14 deletions(-)
drivers/nvmem/qfprom.c +0 -14
@@ -27,25 +27,11 @@ static int qfprom_reg_read(void *contextreturn 0 ; } -static int qfprom_reg_write (void *context, -unsigned int reg,void *_val,size_t bytes) -{ -struct qfprom_priv *priv = context; -u8 *val = _val; -int i =0 , words = bytes; - -while (words--) -writeb (*val++, priv->base + reg + i++); - -return 0 ; -} -static struct nvmem_config econfig = { .name ="qfprom" , .stride =1 , .word_size =1 , .reg_read = qfprom_reg_read, - .reg_write = qfprom_reg_write, };static int qfprom_probe (struct platform_device *pdev)
Greg Kroah-Hartman
maintainerPATCH 27/34 x86/speculation/spectre_v2: Exclude Zhaoxin CPUs from SPECTRE_V2
In reply to Greg Kroah-HartmanFrom: Tony W Wang-oc <[email protected]>
commit 1e41a766c98b481400ab8c5a7aa8ea63a1bb03de upstream.
New Zhaoxin family 7 CPUs are not affected by SPECTRE_V2. So define a separate cpu_vuln_whitelist bit NO_SPECTRE_V2 and add these CPUs to the cpu vulnerability whitelist.
--- arch/x86/kernel/cpu/common.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
arch/x86/kernel/cpu/common.c +8 -1
@@ -1024,6 +1024,7 @@ static void identify_cpu_without_cpuid(s#define MSBDS_ONLY BIT(5)#define NO_SWAPGS BIT(6)#define NO_ITLB_MULTIHIT BIT(7) +#define NO_SPECTRE_V2 BIT(8)#define VULNWL (_vendor, _family, _model, _whitelist) \ { X86_VENDOR_##_vendor, _family, _model, X86_FEATURE_ANY, _whitelist }
@@ -1085,6 +1086,10 @@ static const __initconst struct x86_cpu_/* FAMILY_ANY must be last, otherwise 0x0f - 0x12 matches won't work */ VULNWL_AMD (X86_FAMILY_ANY ,NO_MELTDOWN |NO_L1TF |NO_MDS |NO_SWAPGS |NO_ITLB_MULTIHIT ),VULNWL_HYGON (X86_FAMILY_ANY ,NO_MELTDOWN |NO_L1TF |NO_MDS |NO_SWAPGS |NO_ITLB_MULTIHIT ), + +/* Zhaoxin Family 7 */ +VULNWL (CENTAUR ,7 ,X86_MODEL_ANY ,NO_SPECTRE_V2 ), + VULNWL(ZHAOXIN, 7, X86_MODEL_ANY, NO_SPECTRE_V2), {} };
@@ -1117,7 +1122,9 @@ static void __init cpu_set_bug_bits(strureturn ;setup_force_cpu_bug (X86_BUG_SPECTRE_V1 ); -setup_force_cpu_bug (X86_BUG_SPECTRE_V2 ); + +if (!cpu_matches (NO_SPECTRE_V2 )) +setup_force_cpu_bug (X86_BUG_SPECTRE_V2 );if (!cpu_matches (NO_SSB ) && !(ia32_cap &ARCH_CAP_SSB_NO ) && !cpu_has (c,X86_FEATURE_AMD_SSB_NO ))
Greg Kroah-Hartman
maintainerPATCH 28/34 x86/cpu: Add a steppings field to struct x86_cpu_id
In reply to Greg Kroah-HartmanFrom: Mark Gross <[email protected]>
commit e9d7144597b10ff13ff2264c059f7d4a7fbc89ac upstream
Intel uses the same family/model for several CPUs. Sometimes the stepping must be checked to tell them apart.
On x86 there can be at most 16 steppings. Add a steppings bitmask to x86_cpu_id and a X86_MATCH_VENDOR_FAMILY_MODEL_STEPPING_FEATURE macro and support for matching against family/model/stepping.
[ bp: Massage.
tglx: Lightweight variant for backporting ]
--- arch/x86/include/asm/cpu_device_id.h | 30 ++++++++++++++++++++++++++++++ arch/x86/kernel/cpu/match.c | 7 ++++++- include/linux/mod_devicetable.h | 6 ++++++ 3 files changed, 42 insertions(+), 1 deletion(-)
arch/x86/include/asm/cpu_device_id.h +30 -0
@@ -9,6 +9,36 @@#include <linux/mod_devicetable.h> +#define X86_CENTAUR_FAM6_C7_D 0xd +#define X86_CENTAUR_FAM6_NANO 0xf + +#define X86_STEPPINGS (mins, maxs) GENMASK(maxs, mins) + +/** +* X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE - Base macro for CPU matching +* @_vendor: The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY +* The name is expanded to X86_VENDOR_@_vendor +* @_family: The family number or X86_FAMILY_ANY +* @_model: The model number, model constant or X86_MODEL_ANY +* @_steppings: Bitmask for steppings, stepping constant or X86_STEPPING_ANY +* @_feature: A X86_FEATURE bit or X86_FEATURE_ANY +* @_data: Driver specific data or NULL. The internal storage +* format is unsigned long. The supplied value, pointer +* etc. is casted to unsigned long internally. +* +* Backport version to keep the SRBDS pile consistant. No shorter variants +* required for this. +*/ +#define X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE (_vendor, _family, _model, \ + _steppings, _feature, _data) { \ + .vendor = X86_VENDOR_##_vendor, \ + .family = _family, \ + .model = _model, \ + .steppings = _steppings, \ + .feature = _feature, \ + .driver_data = (unsigned long) _data \ +} +/* * Match specific microcode revisions. *
arch/x86/kernel/cpu/match.c +6 -1
@@ -34,13 +34,18 @@ const struct x86_cpu_id *x86_match_cpu(cconst struct x86_cpu_id *m;struct cpuinfo_x86 *c = &boot_cpu_data; -for (m = match; m->vendor | m->family | m->model | m->feature; m++) { +for (m = match; + m->vendor | m->family | m->model | m->steppings | m->feature; + m++) {if (m->vendor !=X86_VENDOR_ANY && c->x86_vendor != m->vendor)continue ;if (m->family !=X86_FAMILY_ANY && c->x86 != m->family)continue ;if (m->model !=X86_MODEL_ANY && c->x86_model != m->model)continue ; +if (m->steppings !=X86_STEPPING_ANY && + !(BIT (c->x86_stepping) & m->steppings)) +continue ;if (m->feature !=X86_FEATURE_ANY && !cpu_has (c, m->feature))continue ;return m;
include/linux/mod_devicetable.h +6 -0
@@ -657,6 +657,10 @@ struct mips_cdmm_device_id {/* * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id. * Although gcc seems to ignore this error, clang fails without this define. +* +* Note: The ordering of the struct is different from upstream because the +* static initializers in kernels < 5.7 still use C89 style while upstream +* has been converted to proper C99 initializers. */ #define x86cpu_device_id x86_cpu_idstruct x86_cpu_id {
@@ -665,6 +669,7 @@ struct x86_cpu_id {__u16 model;__u16 feature;/* bit index */ kernel_ulong_t driver_data; +__u16 steppings; };#define X86_FEATURE_MATCH (x) \
@@ -673,6 +678,7 @@ struct x86_cpu_id {#define X86_VENDOR_ANY 0xffff#define X86_FAMILY_ANY 0#define X86_MODEL_ANY 0 +#define X86_STEPPING_ANY 0#define X86_FEATURE_ANY 0/* Same as FPU, you can't test for that */ /*
Greg Kroah-Hartman
maintainerPATCH 29/34 x86/cpu: Add table argument to cpu_matches()
In reply to Greg Kroah-HartmanFrom: Mark Gross <[email protected]>
commit 93920f61c2ad7edb01e63323832585796af75fc9 upstream
To make cpu_matches() reusable for other matching tables, have it take a pointer to a x86_cpu_id table as an argument.
[ bp: Flip arguments order. ]
--- arch/x86/kernel/cpu/common.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-)
arch/x86/kernel/cpu/common.c +14 -11
@@ -1093,9 +1093,9 @@ static const __initconst struct x86_cpu_ {} }; -static bool __init cpu_matches (unsigned long which) +static bool __init cpu_matches (const struct x86_cpu_id *table,unsigned long which) { -const struct x86_cpu_id *m =x86_match_cpu (cpu_vuln_whitelist); +const struct x86_cpu_id *m =x86_match_cpu (table);return m && !!(m->driver_data & which); }
@@ -1115,31 +1115,34 @@ static void __init cpu_set_bug_bits(struu64 ia32_cap =x86_read_arch_cap_msr ();/* Set ITLB_MULTIHIT bug if cpu is not in the whitelist and not mitigated */ -if (!cpu_matches (NO_ITLB_MULTIHIT ) && !(ia32_cap &ARCH_CAP_PSCHANGE_MC_NO )) +if (!cpu_matches (cpu_vuln_whitelist,NO_ITLB_MULTIHIT ) && + !(ia32_cap &ARCH_CAP_PSCHANGE_MC_NO ))setup_force_cpu_bug (X86_BUG_ITLB_MULTIHIT ); -if (cpu_matches (NO_SPECULATION )) +if (cpu_matches (cpu_vuln_whitelist,NO_SPECULATION ))return ;setup_force_cpu_bug (X86_BUG_SPECTRE_V1 ); -if (!cpu_matches (NO_SPECTRE_V2 )) +if (!cpu_matches (cpu_vuln_whitelist,NO_SPECTRE_V2 ))setup_force_cpu_bug (X86_BUG_SPECTRE_V2 ); -if (!cpu_matches (NO_SSB ) && !(ia32_cap &ARCH_CAP_SSB_NO ) && +if (!cpu_matches (cpu_vuln_whitelist,NO_SSB ) && + !(ia32_cap &ARCH_CAP_SSB_NO ) && !cpu_has (c,X86_FEATURE_AMD_SSB_NO ))setup_force_cpu_bug (X86_BUG_SPEC_STORE_BYPASS );if (ia32_cap &ARCH_CAP_IBRS_ALL )setup_force_cpu_cap (X86_FEATURE_IBRS_ENHANCED ); -if (!cpu_matches (NO_MDS ) && !(ia32_cap &ARCH_CAP_MDS_NO )) { +if (!cpu_matches (cpu_vuln_whitelist,NO_MDS ) && + !(ia32_cap &ARCH_CAP_MDS_NO )) {setup_force_cpu_bug (X86_BUG_MDS ); -if (cpu_matches (MSBDS_ONLY )) +if (cpu_matches (cpu_vuln_whitelist,MSBDS_ONLY ))setup_force_cpu_bug (X86_BUG_MSBDS_ONLY ); } -if (!cpu_matches (NO_SWAPGS )) +if (!cpu_matches (cpu_vuln_whitelist,NO_SWAPGS ))setup_force_cpu_bug (X86_BUG_SWAPGS );/*
@@ -1157,7 +1160,7 @@ static void __init cpu_set_bug_bits(stru (ia32_cap & ARCH_CAP_TSX_CTRL_MSR)))setup_force_cpu_bug (X86_BUG_TAA ); -if (cpu_matches (NO_MELTDOWN )) +if (cpu_matches (cpu_vuln_whitelist,NO_MELTDOWN ))return ;/* Rogue Data Cache Load? No! */
@@ -1166,7 +1169,7 @@ static void __init cpu_set_bug_bits(strusetup_force_cpu_bug (X86_BUG_CPU_MELTDOWN ); -if (cpu_matches (NO_L1TF )) +if (cpu_matches (cpu_vuln_whitelist,NO_L1TF ))return ;setup_force_cpu_bug (X86_BUG_L1TF );
Greg Kroah-Hartman
maintainerPATCH 30/34 x86/speculation: Add Special Register Buffer Data Sampling (SRBDS) mitigation
In reply to Greg Kroah-HartmanFrom: Mark Gross <[email protected]>
commit 7e5b3c267d256822407a22fdce6afdf9cd13f9fb upstream
SRBDS is an MDS-like speculative side channel that can leak bits from the random number generator (RNG) across cores and threads. New microcode serializes the processor access during the execution of RDRAND and RDSEED. This ensures that the shared buffer is overwritten before it is released for reuse.
While it is present on all affected CPU models, the microcode mitigation is not needed on models that enumerate ARCH_CAPABILITIES[MDS_NO] in the cases where TSX is not supported or has been disabled with TSX_CTRL.
The mitigation is activated by default on affected processors and it increases latency for RDRAND and RDSEED instructions. Among other effects this will reduce throughput from /dev/urandom.
* Enable administrator to configure the mitigation off when desired using either mitigations=off or srbds=off.
* Export vulnerability status via sysfs
* Rename file-scoped macros to apply for non-whitelist table initializations.
[ bp: Massage,
- s/VULNBL_INTEL_STEPPING/VULNBL_INTEL_STEPPINGS/g,
- do not read arch cap MSR a second time in tsx_fused_off() - just pass it in,
- flip check in cpu_set_bug_bits() to save an indentation level,
- reflow comments.
jpoimboe: s/Mitigated/Mitigation/ in user-visible strings
tglx: Dropped the fused off magic for now
]
--- Documentation/ABI/testing/sysfs-devices-system-cpu | 1 Documentation/admin-guide/kernel-parameters.txt | 20 +++ arch/x86/include/asm/cpufeatures.h | 2 arch/x86/include/asm/msr-index.h | 4 arch/x86/kernel/cpu/bugs.c | 106 +++++++++++++++++++++ arch/x86/kernel/cpu/common.c | 31 ++++++ arch/x86/kernel/cpu/cpu.h | 1 drivers/base/cpu.c | 8 + 8 files changed, 173 insertions(+)
Documentation/ABI/testing/sysfs-devices-system-cpu +1 -0
@@ -486,6 +486,7 @@ What: /sys/devices/system/cpu/vulnerabi /sys/devices/system/cpu/vulnerabilities/spec_store_bypass /sys/devices/system/cpu/vulnerabilities/l1tf /sys/devices/system/cpu/vulnerabilities/mds + /sys/devices/system/cpu/vulnerabilities/srbds /sys/devices/system/cpu/vulnerabilities/tsx_async_abort /sys/devices/system/cpu/vulnerabilities/itlb_multihit Date: January 2018
Documentation/admin-guide/kernel-parameters.txt +20 -0
@@ -4579,6 +4579,26 @@ spia_pedr= spia_peddr= + srbds= [X86,INTEL] + Control the Special Register Buffer Data Sampling + (SRBDS) mitigation. + + Certain CPUs are vulnerable to an MDS-like + exploit which can leak bits from the random + number generator. + + By default, this issue is mitigated by + microcode. However, the microcode fix can cause + the RDRAND and RDSEED instructions to become + much slower. Among other effects, this will + result in reduced throughput from /dev/urandom. + + The microcode mitigation can be disabled with + the following option: + + off: Disable mitigation and remove + performance impact to RDRAND and RDSEED + srcutree.counter_wrap_check [KNL] Specifies how frequently to check for grace-period sequence counter wrap for the
arch/x86/include/asm/cpufeatures.h +2 -0
@@ -357,6 +357,7 @@#define X86_FEATURE_AVX512_4VNNIW (18*32+ 2)/* AVX-512 Neural Network Instructions */ #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3)/* AVX-512 Multiply Accumulation Single precision */ #define X86_FEATURE_AVX512_VP2INTERSECT (18*32+ 8)/* AVX-512 Intersect for D/Q */ +#define X86_FEATURE_SRBDS_CTRL (18*32+ 9)/* "" SRBDS mitigation MSR available */ #define X86_FEATURE_MD_CLEAR (18*32+10)/* VERW clears CPU buffers */ #define X86_FEATURE_TSX_FORCE_ABORT (18*32+13)/* "" TSX_FORCE_ABORT */ #define X86_FEATURE_PCONFIG (18*32+18)/* Intel PCONFIG */
@@ -401,5 +402,6 @@#define X86_BUG_SWAPGS X86_BUG(21)/* CPU is affected by speculation through SWAPGS */ #define X86_BUG_TAA X86_BUG(22)/* CPU is affected by TSX Async Abort(TAA) */ #define X86_BUG_ITLB_MULTIHIT X86_BUG(23)/* CPU may incur MCE during certain page attribute changes */ +#define X86_BUG_SRBDS X86_BUG(24)/* CPU may leak RNG bits if not mitigated */ #endif /* _ASM_X86_CPUFEATURES_H */
arch/x86/include/asm/msr-index.h +4 -0
@@ -119,6 +119,10 @@#define TSX_CTRL_RTM_DISABLE BIT(0)/* Disable RTM feature */ #define TSX_CTRL_CPUID_CLEAR BIT(1)/* Disable TSX enumeration */ +/* SRBDS support */ +#define MSR_IA32_MCU_OPT_CTRL 0x00000123 +#define RNGDS_MITG_DIS BIT(0) +#define MSR_IA32_SYSENTER_CS 0x00000174#define MSR_IA32_SYSENTER_ESP 0x00000175#define MSR_IA32_SYSENTER_EIP 0x00000176
arch/x86/kernel/cpu/bugs.c +106 -0
140 lines not on this page · raw message
arch/x86/kernel/cpu/common.c +31 -0
@@ -1093,6 +1093,27 @@ static const __initconst struct x86_cpu_ {} }; +#define VULNBL_INTEL_STEPPINGS (model, steppings, issues) \ + X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(INTEL, 6, \ + INTEL_FAM6_##model, steppings, \ + X86_FEATURE_ANY, issues) + +#define SRBDS BIT(0) + +static const struct x86_cpu_id cpu_vuln_blacklist[]__initconst = { +VULNBL_INTEL_STEPPINGS (IVYBRIDGE ,X86_STEPPING_ANY ,SRBDS ), +VULNBL_INTEL_STEPPINGS (HASWELL ,X86_STEPPING_ANY ,SRBDS ), +VULNBL_INTEL_STEPPINGS (HASWELL_L ,X86_STEPPING_ANY ,SRBDS ), +VULNBL_INTEL_STEPPINGS (HASWELL_G ,X86_STEPPING_ANY ,SRBDS ), +VULNBL_INTEL_STEPPINGS (BROADWELL_G ,X86_STEPPING_ANY ,SRBDS ), +VULNBL_INTEL_STEPPINGS (BROADWELL ,X86_STEPPING_ANY ,SRBDS ), +VULNBL_INTEL_STEPPINGS (SKYLAKE_L ,X86_STEPPING_ANY ,SRBDS ), +VULNBL_INTEL_STEPPINGS (SKYLAKE ,X86_STEPPING_ANY ,SRBDS ), +VULNBL_INTEL_STEPPINGS (KABYLAKE_L ,X86_STEPPINGS (0x0 ,0xC ),SRBDS ), +VULNBL_INTEL_STEPPINGS (KABYLAKE ,X86_STEPPINGS (0x0 ,0xD ),SRBDS ), + {} +}; +static bool __init cpu_matches (const struct x86_cpu_id *table,unsigned long which) {const struct x86_cpu_id *m =x86_match_cpu (table);
@@ -1160,6 +1181,15 @@ static void __init cpu_set_bug_bits(stru (ia32_cap & ARCH_CAP_TSX_CTRL_MSR)))setup_force_cpu_bug (X86_BUG_TAA ); +/* +* SRBDS affects CPUs which support RDRAND or RDSEED and are listed +* in the vulnerability blacklist. +*/ +if ((cpu_has (c,X86_FEATURE_RDRAND ) || +cpu_has (c,X86_FEATURE_RDSEED )) && +cpu_matches (cpu_vuln_blacklist,SRBDS )) +setup_force_cpu_bug (X86_BUG_SRBDS ); +if (cpu_matches (cpu_vuln_whitelist,NO_MELTDOWN ))return ;
@@ -1607,6 +1637,7 @@ void identify_secondary_cpu(struct cpuinmtrr_ap_init ();validate_apic_and_package_id (c);x86_spec_ctrl_setup_ap (); +update_srbds_msr (); }static __init int setup_noclflush (char *arg)
arch/x86/kernel/cpu/cpu.h +1 -0
@@ -77,6 +77,7 @@ extern void detect_ht(struct cpuinfo_x86unsigned int aperfmperf_get_khz (int cpu);extern void x86_spec_ctrl_setup_ap (void ); +extern void update_srbds_msr (void );extern u64 x86_read_arch_cap_msr (void );
drivers/base/cpu.c +8 -0
@@ -567,6 +567,12 @@ ssize_t __weak cpu_show_itlb_multihit(streturn sprintf (buf,"Not affected\n" ); } +ssize_t __weak cpu_show_srbds (struct device *dev, +struct device_attribute *attr,char *buf) +{ +return sprintf (buf,"Not affected\n" ); +} + static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL); static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL); static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL);
@@ -575,6 +581,7 @@ static DEVICE_ATTR(l1tf, 0444, cpu_show_ static DEVICE_ATTR(mds, 0444, cpu_show_mds, NULL); static DEVICE_ATTR(tsx_async_abort, 0444, cpu_show_tsx_async_abort, NULL); static DEVICE_ATTR(itlb_multihit, 0444, cpu_show_itlb_multihit, NULL); +static DEVICE_ATTR(srbds, 0444, cpu_show_srbds, NULL);static struct attribute *cpu_root_vulnerabilities_attrs[] = { &dev_attr_meltdown.attr,
@@ -585,6 +592,7 @@ static struct attribute *cpu_root_vulner &dev_attr_mds.attr, &dev_attr_tsx_async_abort.attr, &dev_attr_itlb_multihit.attr, + &dev_attr_srbds.attr, NULL };
Greg Kroah-Hartman
maintainerPATCH 31/34 x86/speculation: Add SRBDS vulnerability and mitigation documentation
In reply to Greg Kroah-HartmanFrom: Mark Gross <[email protected]>
commit 7222a1b5b87417f22265c92deea76a6aecd0fb0f upstream
Add documentation for the SRBDS vulnerability and its mitigation.
[ bp: Massage.
jpoimboe: sysfs table strings. ]
--- Documentation/admin-guide/hw-vuln/index.rst | 1 Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst | 148 ++++++++++ 2 files changed, 149 insertions(+) create mode 100644 Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst
Documentation/admin-guide/hw-vuln/index.rst +1 -0
@@ -14,3 +14,4 @@ are configurable at compile, boot or run mds tsx_async_abort multihit.rst + special-register-buffer-data-sampling.rst
Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst new file +148 -0
148 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 32/34 x86/speculation: Add Ivy Bridge to affected list
In reply to Greg Kroah-HartmanFrom: Josh Poimboeuf <[email protected]>
commit 3798cc4d106e91382bfe016caa2edada27c2bb3f upstream
Make the docs match the code.
--- Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst +4 -3
@@ -27,6 +27,8 @@ by software using TSX_CTRL_MSR otherwise ============= ============ ======== common name Family_Model Stepping ============= ============ ======== + IvyBridge 06_3AH All + Haswell 06_3CH All Haswell_L 06_45H All Haswell_G 06_46H All
@@ -37,9 +39,8 @@ by software using TSX_CTRL_MSR otherwise Skylake_L 06_4EH All Skylake 06_5EH All - Kabylake_L 06_8EH <=0xC - - Kabylake 06_9EH <=0xD + Kabylake_L 06_8EH <= 0xC + Kabylake 06_9EH <= 0xD ============= ============ ======== Related CVEs
Greg Kroah-Hartman
maintainerPATCH 33/34 uprobes: ensure that uprobe->offset and ->ref_ctr_offset are properly aligned
In reply to Greg Kroah-HartmanFrom: Oleg Nesterov <[email protected]>
commit 013b2deba9a6b80ca02f4fafd7dedf875e9b4450 upstream.
uprobe_write_opcode() must not cross page boundary; prepare_uprobe() relies on arch_uprobe_analyze_insn() which should validate "vaddr" but some architectures (csky, s390, and sparc) don't do this.
We can remove the BUG_ON() check in prepare_uprobe() and validate the offset early in __uprobe_register(). The new IS_ALIGNED() check matches the alignment check in arch_prepare_kprobe() on supported architectures, so I think that all insns must be aligned to UPROBE_SWBP_INSN_SIZE.
Another problem is __update_ref_ctr() which was wrong from the very beginning, it can read/write outside of kmap'ed page unless "vaddr" is aligned to sizeof(short), __uprobe_register() should check this too.
--- kernel/events/uprobes.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
kernel/events/uprobes.c +12 -4
@@ -867,10 +867,6 @@ static int prepare_uprobe(struct uprobeif (ret) goto out; -/* uprobe_write_opcode() assumes we don't cross page boundary */ -BUG_ON ((uprobe->offset & ~PAGE_MASK ) + -UPROBE_SWBP_INSN_SIZE >PAGE_SIZE ); -smp_wmb ();/* pairs with the smp_rmb() in handle_swbp() */ set_bit (UPROBE_COPY_INSN , &uprobe->flags);
@@ -1166,6 +1162,15 @@ static int __uprobe_register(struct inodif (offset >i_size_read (inode))return -EINVAL ; +/* +* This ensures that copy_from_page(), copy_to_page() and +* __update_ref_ctr() can't cross page boundary. +*/ +if (!IS_ALIGNED (offset,UPROBE_SWBP_INSN_SIZE )) +return -EINVAL ; +if (!IS_ALIGNED (ref_ctr_offset,sizeof (short ))) +return -EINVAL ; + retry: uprobe =alloc_uprobe (inode, offset, ref_ctr_offset);if (!uprobe)
@@ -2014,6 +2019,9 @@ static int is_trap_at_addr(struct mm_struprobe_opcode_t opcode;int result; +if (WARN_ON_ONCE (!IS_ALIGNED (vaddr,UPROBE_SWBP_INSN_SIZE ))) +return -EINVAL ; +pagefault_disable (); result =__get_user (opcode, (uprobe_opcode_t __user *)vaddr);pagefault_enable ();
Greg Kroah-Hartman
maintainerPATCH 34/34 Revert "net/mlx5: Annotate mutex destroy for root ns"
In reply to Greg Kroah-HartmanFrom: Greg Kroah-Hartman <[email protected]>
This reverts commit 3f4f034a8676e366857861e76c3ad11ae059b2fb which is commit 9ca415399dae133b00273a4283ef31d003a6818d upstream.
It was backported incorrectly, Paul writes at:
https://lore.kernel.org/r/[email protected]
I happened to notice this commit:
9ca415399dae - "net/mlx5: Annotate mutex destroy for root ns"
...was backported to 4.19 and 5.4 and v5.6 in linux-stable.
It patches del_sw_root_ns() - which only exists after v5.7-rc7 from:
6eb7a268a99b - "net/mlx5: Don't maintain a case of del_sw_func being null"
which creates the one line del_sw_root_ns stub function around kfree(node) by breaking it out of tree_put_node().
In the absense of del_sw_root_ns - the backport finds an identical one line kfree stub fcn - named del_sw_prio from this earlier commit:
139ed6c6c46a - "net/mlx5: Fix steering memory leak" [in v4.15-rc5]
and then puts the mutex_destroy() into that (wrong) function, instead of putting it into tree_put_node where the root ns case used to be hand
--- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 6 ------ 1 file changed, 6 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +0 -6
@@ -417,12 +417,6 @@ static void del_sw_ns(struct fs_node *nostatic void del_sw_prio (struct fs_node *node) { -struct mlx5_flow_root_namespace *root_ns; -struct mlx5_flow_namespace *ns; - -fs_get_obj (ns, node); - root_ns = container_of(ns, struct mlx5_flow_root_namespace, ns); -mutex_destroy (&root_ns->chain_lock);kfree (node); }
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.46 release. There are 34 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 Thu, 11 Jun 2020 17:40:27 +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.4.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.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
------------------------------------------------------------------------
kernel: 5.4.46-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-5.4.y
git commit: 12a5ce113626ce8208aef76d4d2e9fc93ea48ddf
git describe: v5.4.45-35-g12a5ce113626
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-5.4-oe/build/v5.4.45-35-g12a5ce113626
No regressions (compared to build v5.4.44-39-g0e4e419d5fc3)
No fixes (compared to build v5.4.44-39-g0e4e419d5fc3)
Ran 29093 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
* install-android-platform-tools-r2800
* kselftest
* kselftest/drivers
* kselftest/filesystems
* kselftest/net
* libgpiod
* libhugetlbfs
* linux-log-parser
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-cve-tests
* ltp-dio-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-sched-tests
* perf
* v4l2-compliance
* kvm-unit-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* network-basic-tests
* ltp-controllers-tests
* ltp-open-posix-tests
* 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
Jon Hunter
maintainerQuoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.46 release. There are 34 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 Thu, 11 Jun 2020 17:40:27 +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.4.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
All tests are passing for Tegra ...
Test results for stable-v5.4:
11 builds: 11 pass, 0 fail
26 boots: 26 pass, 0 fail
50 tests: 50 pass, 0 failLinux version: 5.4.46-rc1-g12a5ce113626
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra30-cardhu-a04Cheers
Jon
Signature · 1 line
nvpublic
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.46 release. There are 34 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 Thu, 11 Jun 2020 17:40:27 +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.4.46-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.46 release. There are 34 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 Thu, 11 Jun 2020 17:40:27 +0000. Anything received after that time might be too late.
Build results:
total: 157 pass: 157 fail: 0 Qemu test results: total: 430 pass: 430 fail: 0
Guenter