4.16.9-stable review
Greg Kroah-Hartman
maintainercover 4.16.9-stable review
This is the start of the stable review cycle for the 4.16.9 release. There are 72 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 Wed May 16 06:47:58 UTC 2018. 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/v4.x/stable-review/patch-4.16.9-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-4.16.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.16.9-rc1
Peter Zijlstra <[email protected]>
perf/x86: Fix possible Spectre-v1 indexing for x86_pmu::event_map()
Peter Zijlstra <[email protected]>
perf/core: Fix possible Spectre-v1 indexing for ->aux_pages[]
Peter Zijlstra <[email protected]>
perf/x86/msr: Fix possible Spectre-v1 indexing in the MSR driver
Peter Zijlstra <[email protected]>
perf/x86/cstate: Fix possible Spectre-v1 indexing for pkg_msr
Peter Zijlstra <[email protected]>
perf/x86: Fix possible Spectre-v1 indexing for hw_perf_event cache_*
Masami Hiramatsu <[email protected]>
tracing/uprobe_event: Fix strncpy corner case
Peter Zijlstra <[email protected]>
sched/autogroup: Fix possible Spectre-v1 indexing for sched_prio_to_weight[]
Peter Zijlstra <[email protected]>
sched/core: Fix possible Spectre-v1 indexing for sched_prio_to_weight[]
Jean Delvare <[email protected]>
swiotlb: silent unwanted warning "buffer is full"
Steve French <[email protected]>
smb3: directory sync should not return an error
Charles Machalow <[email protected]>
nvme: Fix sync controller reset return
Jens Axboe <[email protected]>
nvme: add quirk to force medium priority for SQ creation
Marek Szyprowski <[email protected]>
thermal: exynos: Propagate error value from tmu_read()
Marek Szyprowski <[email protected]>
thermal: exynos: Reading temperature makes sense only when TMU is turned on
Hans de Goede <[email protected]>
Bluetooth: btusb: Only check needs_reset_resume DMI table for QCA rome chipsets
Hans de Goede <[email protected]>
Bluetooth: btusb: Add Dell XPS 13 9360 to btusb_needs_reset_resume_table
Hans de Goede <[email protected]>
Revert "Bluetooth: btusb: Fix quirk for Atheros 1525/QCA6174"
Uwe Kleine-König <[email protected]>
arm: dts: imx[35]*: declare flexcan devices to be compatible to imx25's flexcan
Rafael J. Wysocki <[email protected]>
cpufreq: schedutil: Avoid using invalid next_freq
Rafael J. Wysocki <[email protected]>
PCI / PM: Check device_may_wakeup() in pci_enable_wake()
Kai Heng Feng <[email protected]>
PCI / PM: Always check PME wakeup capability for runtime wakeup support
Gustavo A. R. Silva <[email protected]>
atm: zatm: Fix potential Spectre v1
Gustavo A. R. Silva <[email protected]>
net: atm: Fix potential Spectre v1
Ville Syrjälä <[email protected]>
drm/atomic: Clean private obj old_state/new_state in drm_atomic_state_default_clear()
Ville Syrjälä <[email protected]>
drm/atomic: Clean old_state/new_state in drm_atomic_state_default_clear()
Ben Skeggs <[email protected]>
drm/nouveau/ttm: don't dereference nvbo::cli, it can outlive client
Lyude Paul <[email protected]>
drm/nouveau: Fix deadlock in nv50_mstm_register_connector()
Rodrigo Vivi <[email protected]>
drm/i915: Adjust eDP's logical vco in a reliable place.
Florent Flament <[email protected]>
drm/i915: Fix drm:intel_enable_lvds ERROR message in kernel log
Michel Dänzer <[email protected]>
drm/ttm: Use GFP_TRANSHUGE_LIGHT for allocating huge pages
Boris Brezillon <[email protected]>
drm/vc4: Fix scaling of uni-planar formats
Boris Brezillon <[email protected]>
mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
Miquel Raynal <[email protected]>
mtd: rawnand: marvell: fix command xtype in BCH write hook
Chris Packham <[email protected]>
mtd: rawnand: marvell: pass ms delay to wait_op
Lukas Wunner <[email protected]>
can: hi311x: Work around TX complete interrupt erratum
Lukas Wunner <[email protected]>
can: hi311x: Acquire SPI lock on ->do_get_berr_counter
Jimmy Assarsson <[email protected]>
can: kvaser_usb: Increase correct stats counter in kvaser_usb_rx_can_msg()
Uwe Kleine-König <[email protected]>
can: flexcan: fix endianess detection
Ilya Dryomov <[email protected]>
ceph: fix rsize/wsize capping in ceph_direct_read_write()
David Rientjes <[email protected]>
mm, oom: fix concurrent munlock and oom reaper unmap, v3
Pavel Tatashin <[email protected]>
mm: sections are not offlined during memory hotremove
Vitaly Wool <[email protected]>
z3fold: fix reclaim lock-ups
Steven Rostedt (VMware) <[email protected]>
tracing: Fix regex_match_front() to not over compare the test string
Mikulas Patocka <[email protected]>
dm integrity: use kvfree for kvmalloc'd memory
Hans de Goede <[email protected]>
libata: Apply NOLPM quirk for SanDisk SD7UB3Q*G1001 SSDs
Johan Hovold <[email protected]>
rfkill: gpio: fix memory leak in probe error path
Uwe Kleine-König <[email protected]>
gpio: fix error path in lineevent_create
Govert Overgaauw <[email protected]>
gpio: fix aspeed_gpio unmask irq
Timur Tabi <[email protected]>
gpioib: do not free unrequested descriptors
Jann Horn <[email protected]>
compat: fix 4-byte infoleak via uninitialized struct field
Jan Kara <[email protected]>
bdi: Fix oops in wb_workfn()
Tetsuo Handa <[email protected]>
bdi: Fix use after free bug in debugfs_remove()
Tetsuo Handa <[email protected]>
bdi: wake up concurrent wb_shutdown() callers.
Eric Dumazet <[email protected]>
tcp: fix TCP_REPAIR_QUEUE bound checking
Alexander Popov <[email protected]>
i2c: dev: prevent ZERO_SIZE_PTR deref in i2cdev_ioctl_rdwr()
Jiri Olsa <[email protected]>
perf: Remove superfluous allocation error check
Michal Hocko <[email protected]>
memcg: fix per_node_info cleanup
Yonghong Song <[email protected]>
bpf/tracing: fix a deadlock in perf_event_detach_bpf_prog
Eric Dumazet <[email protected]>
inetpeer: fix uninit-value in inet_getpeer
Eric Dumazet <[email protected]>
soreuseport: initialise timewait reuseport field
Eric Dumazet <[email protected]>
ipv4: fix uninit-value in ip_route_output_key_hash_rcu()
Eric Dumazet <[email protected]>
dccp: initialize ireq->ir_mark
Eric Dumazet <[email protected]>
net: fix uninit-value in __hw_addr_add_ex()
Eric Dumazet <[email protected]>
net: initialize skb->peeked when cloning
Eric Dumazet <[email protected]>
net: fix rtnh_ok()
Eric Dumazet <[email protected]>
netlink: fix uninit-value in netlink_sendmsg
Eric Dumazet <[email protected]>
crypto: af_alg - fix possible uninit-value in alg_bind()
Sowmini Varadhan <[email protected]>
rds: tcp: must use spin_lock_irq* and not spin_lock_bh with rds_tcp_conn_lock
Tom Herbert <[email protected]>
kcm: Call strp_stop before strp_done in kcm_attach
Tero Kristo <[email protected]>
clk: ti: fix flag space conflict with clkctrl clocks
Florian Westphal <[email protected]>
netfilter: ebtables: don't attempt to allocate 0-sized compat array
Julian Anastasov <[email protected]>
ipvs: fix rtnl_lock lockups caused by start_sync_thread
-------------
Diffstat:
Makefile | 4 +- arch/arm/boot/dts/imx35.dtsi | 4 +- arch/arm/boot/dts/imx53.dtsi | 4 +- arch/x86/events/core.c | 8 +- arch/x86/events/intel/cstate.c | 2 + arch/x86/events/msr.c | 9 +- crypto/af_alg.c | 8 +- drivers/ata/libata-core.c | 3 + drivers/atm/zatm.c | 3 + drivers/bluetooth/btusb.c | 19 +++- drivers/clk/ti/clock.h | 9 +- drivers/gpio/gpio-aspeed.c | 2 +- drivers/gpio/gpiolib.c | 7 +- drivers/gpu/drm/drm_atomic.c | 8 ++ drivers/gpu/drm/i915/intel_cdclk.c | 41 +++++++- drivers/gpu/drm/i915/intel_dp.c | 20 ---- drivers/gpu/drm/i915/intel_lvds.c | 3 +- drivers/gpu/drm/nouveau/nouveau_bo.c | 1 - drivers/gpu/drm/nouveau/nouveau_bo.h | 2 - drivers/gpu/drm/nouveau/nouveau_ttm.c | 6 +- drivers/gpu/drm/nouveau/nv50_display.c | 7 +- drivers/gpu/drm/ttm/ttm_page_alloc.c | 11 ++- drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 3 +- drivers/gpu/drm/vc4/vc4_plane.c | 2 +- drivers/i2c/i2c-dev.c | 2 +- drivers/md/dm-integrity.c | 2 +- drivers/mtd/nand/marvell_nand.c | 12 ++- drivers/mtd/nand/nand_base.c | 5 + drivers/net/can/flexcan.c | 26 +++--- drivers/net/can/spi/hi311x.c | 11 ++- drivers/net/can/usb/kvaser_usb.c | 2 +- drivers/nvme/host/core.c | 3 +- drivers/nvme/host/nvme.h | 5 + drivers/nvme/host/pci.c | 12 ++- drivers/pci/pci.c | 37 ++++++-- drivers/thermal/samsung/exynos_tmu.c | 14 ++- fs/ceph/file.c | 10 +- fs/cifs/cifsfs.c | 13 +++ fs/fs-writeback.c | 2 +- include/linux/bpf.h | 4 +- include/linux/oom.h | 2 + include/linux/wait_bit.h | 17 ++++ include/net/inet_timewait_sock.h | 1 + include/net/nexthop.h | 2 +- kernel/bpf/core.c | 45 +++++---- kernel/compat.c | 1 + kernel/events/callchain.c | 10 +- kernel/events/ring_buffer.c | 7 +- kernel/sched/autogroup.c | 7 +- kernel/sched/core.c | 7 +- kernel/sched/cpufreq_schedutil.c | 3 +- kernel/trace/bpf_trace.c | 25 ++++- kernel/trace/trace_events_filter.c | 3 + kernel/trace/trace_uprobe.c | 2 + lib/swiotlb.c | 2 +- mm/backing-dev.c | 3 +- mm/memcontrol.c | 3 + mm/mmap.c | 44 +++++---- mm/oom_kill.c | 81 ++++++++-------- mm/sparse.c | 2 +- mm/z3fold.c | 42 ++++++--- net/atm/lec.c | 9 +- net/bridge/netfilter/ebtables.c | 11 ++- net/core/dev_addr_lists.c | 4 +- net/core/skbuff.c | 1 + net/dccp/ipv4.c | 1 + net/dccp/ipv6.c | 1 + net/ipv4/inet_timewait_sock.c | 1 + net/ipv4/inetpeer.c | 1 + net/ipv4/route.c | 11 ++- net/ipv4/tcp.c | 2 +- net/kcm/kcmsock.c | 1 + net/netfilter/ipvs/ip_vs_ctl.c | 8 -- net/netfilter/ipvs/ip_vs_sync.c | 155 ++++++++++++++++--------------- net/netlink/af_netlink.c | 2 + net/rds/tcp.c | 17 ++-- net/rfkill/rfkill-gpio.c | 7 +- 77 files changed, 563 insertions(+), 324 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/72 ipvs: fix rtnl_lock lockups caused by start_sync_thread
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Julian Anastasov <[email protected]>
commit 5c64576a77894a50be80be0024bed27171b55989 upstream.
syzkaller reports for wrong rtnl_lock usage in sync code [1] and [2]
We have 2 problems in start_sync_thread if error path is taken, eg. on memory allocation error or failure to configure sockets for mcast group or addr/port binding:
1. recursive locking: holding rtnl_lock while calling sock_release which in turn calls again rtnl_lock in ip_mc_drop_socket to leave the mcast group, as noticed by Florian Westphal. Additionally, sock_release can not be called while holding sync_mutex (ABBA deadlock).
2. task hung: holding rtnl_lock while calling kthread_stop to stop the running kthreads. As the kthreads do the same to leave the mcast group (sock_release -> ip_mc_drop_socket -> rtnl_lock) they hang.
Fix the problems by calling rtnl_unlock early in the error path, now sock_release is called after unlocking both mutexes.
Problem 3 (task hung reported by syzkaller [2]) is variant of problem 2: use _trylock to prevent one user to call rtnl_lock and then while waiting for sync_mutex to block kthreads that execute sock_release when they are stopped by stop_sync_thread.
[1]
IPVS: stopping backup sync thread 4500 ...
WARNING: possible recursive locking detected 4.16.0-rc7+ #3 Not tainted
--------------------------------------------
syzkaller688027/4497 is trying to acquire lock:
(rtnl_mutex){+.+.}, at: [<00000000bb14d7fb>] rtnl_lock+0x17/0x20net/core/rtnetlink.c:74
but task is already holding lock:
IPVS: stopping backup sync thread 4495 ...
(rtnl_mutex){+.+.}, at: [<00000000bb14d7fb>] rtnl_lock+0x17/0x20net/core/rtnetlink.c:74
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
---- lock(rtnl_mutex);
lock(rtnl_mutex);
*** DEADLOCK ***
May be due to missing lock nesting notation
2 locks held by syzkaller688027/4497:
#0: (rtnl_mutex){+.+.}, at: [<00000000bb14d7fb>] rtnl_lock+0x17/0x20net/core/rtnetlink.c:74
#1: (ipvs->sync_mutex){+.+.}, at: [<00000000703f78e3>]
do_ip_vs_set_ctl+0x10f8/0x1cc0 net/netfilter/ipvs/ip_vs_ctl.c:2388 stack backtrace: CPU: 1 PID: 4497 Comm: syzkaller688027 Not tainted 4.16.0-rc7+ #3 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:17 [inline] dump_stack+0x194/0x24d lib/dump_stack.c:53 print_deadlock_bug kernel/locking/lockdep.c:1761 [inline] check_deadlock kernel/locking/lockdep.c:1805 [inline] validate_chain kernel/locking/lockdep.c:2401 [inline] __lock_acquire+0xe8f/0x3e00 kernel/locking/lockdep.c:3431 lock_acquire+0x1d5/0x580 kernel/locking/lockdep.c:3920 __mutex_lock_common kernel/locking/mutex.c:756 [inline] __mutex_lock+0x16f/0x1a80 kernel/locking/mutex.c:893 mutex_lock_nested+0x16/0x20 kernel/locking/mutex.c:908 rtnl_lock+0x17/0x20 net/core/rtnetlink.c:74 ip_mc_drop_socket+0x88/0x230 net/ipv4/igmp.c:2643 inet_release+0x4e/0x1c0 net/ipv4/af_inet.c:413 sock_release+0x8d/0x1e0 net/socket.c:595 start_sync_thread+0x2213/0x2b70 net/netfilter/ipvs/ip_vs_sync.c:1924 do_ip_vs_set_ctl+0x1139/0x1cc0 net/netfilter/ipvs/ip_vs_ctl.c:2389 nf_sockopt net/netfilter/nf_sockopt.c:106 [inline] nf_setsockopt+0x67/0xc0 net/netfilter/nf_sockopt.c:115 ip_setsockopt+0x97/0xa0 net/ipv4/ip_sockglue.c:1261 udp_setsockopt+0x45/0x80 net/ipv4/udp.c:2406 sock_common_setsockopt+0x95/0xd0 net/core/sock.c:2975 SYSC_setsockopt net/socket.c:1849 [inline] SyS_setsockopt+0x189/0x360 net/socket.c:1828 do_syscall_64+0x281/0x940 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x42/0xb7 RIP: 0033:0x446a69 RSP: 002b:00007fa1c3a64da8 EFLAGS: 00000246 ORIG_RAX: 0000000000000036 RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000446a69 RDX: 000000000000048b RSI: 0000000000000000 RDI: 0000000000000003 RBP: 00000000006e29fc R08: 0000000000000018 R09: 0000000000000000 R10: 00000000200000c0 R11: 0000000000000246 R12: 00000000006e29f8 R13: 00676e697279656b R14: 00007fa1c3a659c0 R15: 00000000006e2b60
[2]
IPVS: sync thread started: state = BACKUP, mcast_ifn = syz_tun, syncid = 4, id = 0
IPVS: stopping backup sync thread 25415 ...
INFO: task syz-executor7:25421 blocked for more than 120 seconds.
Not tainted 4.16.0-rc6+ #284
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
syz-executor7 D23688 25421 4408 0x00000004
Call Trace:
context_switch kernel/sched/core.c:2862 [inline]
__schedule+0x8fb/0x1ec0 kernel/sched/core.c:3440
schedule+0xf5/0x430 kernel/sched/core.c:3499
schedule_timeout+0x1a3/0x230 kernel/time/timer.c:1777
do_wait_for_common kernel/sched/completion.c:86 [inline]
__wait_for_common kernel/sched/completion.c:107 [inline]
wait_for_common kernel/sched/completion.c:118 [inline]
wait_for_completion+0x415/0x770 kernel/sched/completion.c:139
kthread_stop+0x14a/0x7a0 kernel/kthread.c:530
stop_sync_thread+0x3d9/0x740 net/netfilter/ipvs/ip_vs_sync.c:1996
do_ip_vs_set_ctl+0x2b1/0x1cc0 net/netfilter/ipvs/ip_vs_ctl.c:2394
nf_sockopt net/netfilter/nf_sockopt.c:106 [inline]
nf_setsockopt+0x67/0xc0 net/netfilter/nf_sockopt.c:115
ip_setsockopt+0x97/0xa0 net/ipv4/ip_sockglue.c:1253
sctp_setsockopt+0x2ca/0x63e0 net/sctp/socket.c:4154
sock_common_setsockopt+0x95/0xd0 net/core/sock.c:3039
SYSC_setsockopt net/socket.c:1850 [inline]
SyS_setsockopt+0x189/0x360 net/socket.c:1829
do_syscall_64+0x281/0x940 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x42/0xb7
RIP: 0033:0x454889
RSP: 002b:00007fc927626c68 EFLAGS: 00000246 ORIG_RAX: 0000000000000036
RAX: ffffffffffffffda RBX: 00007fc9276276d4 RCX: 0000000000454889
RDX: 000000000000048c RSI: 0000000000000000 RDI: 0000000000000017
RBP: 000000000072bf58 R08: 0000000000000018 R09: 0000000000000000
R10: 0000000020000000 R11: 0000000000000246 R12: 00000000ffffffff
R13: 000000000000051c R14: 00000000006f9b40 R15: 0000000000000001
Showing all locks held in the system:
2 locks held by khungtaskd/868:
#0: (rcu_read_lock){....}, at: [<00000000a1a8f002>]
check_hung_uninterruptible_tasks kernel/hung_task.c:175 [inline]
#0: (rcu_read_lock){....}, at: [<00000000a1a8f002>] watchdog+0x1c5/0xd60
kernel/hung_task.c:249
#1: (tasklist_lock){.+.+}, at: [<0000000037c2f8f9>]
debug_show_all_locks+0xd3/0x3d0 kernel/locking/lockdep.c:4470
1 lock held by rsyslogd/4247:
#0: (&f->f_pos_lock){+.+.}, at: [<000000000d8d6983>]
__fdget_pos+0x12b/0x190 fs/file.c:765
2 locks held by getty/4338:
#0: (&tty->ldisc_sem){++++}, at: [<00000000bee98654>]
ldsem_down_read+0x37/0x40 drivers/tty/tty_ldsem.c:365
#1: (&ldata->atomic_read_lock){+.+.}, at: [<00000000c1d180aa>]
n_tty_read+0x2ef/0x1a40 drivers/tty/n_tty.c:2131
2 locks held by getty/4339:
#0: (&tty->ldisc_sem){++++}, at: [<00000000bee98654>]
ldsem_down_read+0x37/0x40 drivers/tty/tty_ldsem.c:365
#1: (&ldata->atomic_read_lock){+.+.}, at: [<00000000c1d180aa>]
n_tty_read+0x2ef/0x1a40 drivers/tty/n_tty.c:2131
2 locks held by getty/4340:
#0: (&tty->ldisc_sem){++++}, at: [<00000000bee98654>]
ldsem_down_read+0x37/0x40 drivers/tty/tty_ldsem.c:365
#1: (&ldata->atomic_read_lock){+.+.}, at: [<00000000c1d180aa>]
n_tty_read+0x2ef/0x1a40 drivers/tty/n_tty.c:2131
2 locks held by getty/4341:
#0: (&tty->ldisc_sem){++++}, at: [<00000000bee98654>]
ldsem_down_read+0x37/0x40 drivers/tty/tty_ldsem.c:365
#1: (&ldata->atomic_read_lock){+.+.}, at: [<00000000c1d180aa>]
n_tty_read+0x2ef/0x1a40 drivers/tty/n_tty.c:2131
2 locks held by getty/4342:
#0: (&tty->ldisc_sem){++++}, at: [<00000000bee98654>]
ldsem_down_read+0x37/0x40 drivers/tty/tty_ldsem.c:365
#1: (&ldata->atomic_read_lock){+.+.}, at: [<00000000c1d180aa>]
n_tty_read+0x2ef/0x1a40 drivers/tty/n_tty.c:2131
2 locks held by getty/4343:
#0: (&tty->ldisc_sem){++++}, at: [<00000000bee98654>]
ldsem_down_read+0x37/0x40 drivers/tty/tty_ldsem.c:365
#1: (&ldata->atomic_read_lock){+.+.}, at: [<00000000c1d180aa>]
n_tty_read+0x2ef/0x1a40 drivers/tty/n_tty.c:2131
2 locks held by getty/4344:
#0: (&tty->ldisc_sem){++++}, at: [<00000000bee98654>]
ldsem_down_read+0x37/0x40 drivers/tty/tty_ldsem.c:365
#1: (&ldata->atomic_read_lock){+.+.}, at: [<00000000c1d180aa>]
n_tty_read+0x2ef/0x1a40 drivers/tty/n_tty.c:2131
3 locks held by kworker/0:5/6494:
#0: ((wq_completion)"%s"("ipv6_addrconf")){+.+.}, at:
[<00000000a062b18e>] work_static include/linux/workqueue.h:198 [inline]
#0: ((wq_completion)"%s"("ipv6_addrconf")){+.+.}, at:
[<00000000a062b18e>] set_work_data kernel/workqueue.c:619 [inline]
#0: ((wq_completion)"%s"("ipv6_addrconf")){+.+.}, at:
[<00000000a062b18e>] set_work_pool_and_clear_pending kernel/workqueue.c:646
[inline]
#0: ((wq_completion)"%s"("ipv6_addrconf")){+.+.}, at:
[<00000000a062b18e>] process_one_work+0xb12/0x1bb0 kernel/workqueue.c:2084
#1: ((addr_chk_work).work){+.+.}, at: [<00000000278427d5>]
process_one_work+0xb89/0x1bb0 kernel/workqueue.c:2088
#2: (rtnl_mutex){+.+.}, at: [<00000000066e35ac>] rtnl_lock+0x17/0x20
net/core/rtnetlink.c:74
1 lock held by syz-executor7/25421:
#0: (ipvs->sync_mutex){+.+.}, at: [<00000000d414a689>]
do_ip_vs_set_ctl+0x277/0x1cc0 net/netfilter/ipvs/ip_vs_ctl.c:2393
2 locks held by syz-executor7/25427:
#0: (rtnl_mutex){+.+.}, at: [<00000000066e35ac>] rtnl_lock+0x17/0x20
net/core/rtnetlink.c:74
#1: (ipvs->sync_mutex){+.+.}, at: [<00000000e6d48489>]
do_ip_vs_set_ctl+0x10f8/0x1cc0 net/netfilter/ipvs/ip_vs_ctl.c:2388
1 lock held by syz-executor7/25435:
#0: (rtnl_mutex){+.+.}, at: [<00000000066e35ac>] rtnl_lock+0x17/0x20net/core/rtnetlink.c:74
1 lock held by ipvs-b:2:0/25415:
#0: (rtnl_mutex){+.+.}, at: [<00000000066e35ac>] rtnl_lock+0x17/0x20net/core/rtnetlink.c:74
--- net/netfilter/ipvs/ip_vs_ctl.c | 8 -- net/netfilter/ipvs/ip_vs_sync.c | 155 ++++++++++++++++++++-------------------- 2 files changed, 80 insertions(+), 83 deletions(-)
net/netfilter/ipvs/ip_vs_ctl.c +0 -8
@@ -2384,11 +2384,7 @@ do_ip_vs_set_ctl(struct sock *sk, int cmstrlcpy (cfg.mcast_ifn, dm->mcast_ifn,sizeof (cfg.mcast_ifn)); cfg.syncid = dm->syncid; -rtnl_lock (); -mutex_lock (&ipvs->sync_mutex); ret =start_sync_thread (ipvs, &cfg, dm->state); -mutex_unlock (&ipvs->sync_mutex); -rtnl_unlock (); }else {mutex_lock (&ipvs->sync_mutex); ret =stop_sync_thread (ipvs, dm->state);
@@ -3481,12 +3477,8 @@ static int ip_vs_genl_new_daemon(structif (ipvs->mixed_address_family_dests >0 )return -EINVAL ; -rtnl_lock (); -mutex_lock (&ipvs->sync_mutex); ret =start_sync_thread (ipvs, &c,nla_get_u32 (attrs[IPVS_DAEMON_ATTR_STATE ])); -mutex_unlock (&ipvs->sync_mutex); -rtnl_unlock ();return ret; }
net/netfilter/ipvs/ip_vs_sync.c +80 -75
361 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 2/72 netfilter: ebtables: dont attempt to allocate 0-sized compat array
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
commit 3f1e53abff84cf40b1adb3455d480dd295bf42e8 upstream.
Dmitry reports 32bit ebtables on 64bit kernel got broken by a recent change that returns -EINVAL when ruleset has no entries.
ebtables however only counts user-defined chains, so for the initial table nentries will be 0.
Don't try to allocate the compat array in this case, as no user defined rules exist no rule will need 64bit translation.
--- net/bridge/netfilter/ebtables.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
net/bridge/netfilter/ebtables.c +6 -5
@@ -1821,13 +1821,14 @@ static int compat_table_info(const struc {unsigned int size = info->entries_size;const void *entries = info->entries; -int ret; newinfo->entries_size = size; - - ret =xt_compat_init_offsets (NFPROTO_BRIDGE , info->nentries); -if (ret) -return ret; +if (info->nentries) { +int ret =xt_compat_init_offsets (NFPROTO_BRIDGE , + info->nentries); +if (ret) +return ret; + }return EBT_ENTRY_ITERATE (entries, size, compat_calc_entry, info, entries, newinfo);
Greg Kroah-Hartman
maintainerPATCH 3/72 clk: ti: fix flag space conflict with clkctrl clocks
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tero Kristo <[email protected]>
commit 269bd202bc0fd04e841cb123867fd3f49e04ace9 upstream.
The introduction of support for CLK_SET_RATE_PARENT flag for clkctrl clocks used a generic clock flag, which causes a conflict with the rest of the clkctrl flags, namely the NO_IDLEST flag. This can cause boot failures on certain platforms where this flag is introduced, by omitting the wait for the clockctrl module to be fully enabled before proceeding with rest of the code.
Fix this by moving all the clkctrl specific flags to their own bit-range.
--- drivers/clk/ti/clock.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/clk/ti/clock.h +5 -4
@@ -74,6 +74,11 @@ enum {#define CLKF_CORE (1 << 9)#define CLKF_J_TYPE (1 << 10) +/* CLKCTRL flags */ +#define CLKF_SW_SUP BIT(5) +#define CLKF_HW_SUP BIT(6) +#define CLKF_NO_IDLEST BIT(7) +#define CLK (dev, con, ck) \ { \ .lk = { \
@@ -183,10 +188,6 @@ extern const struct omap_clkctrl_data amextern const struct omap_clkctrl_data dm814_clkctrl_data[];extern const struct omap_clkctrl_data dm816_clkctrl_data[]; -#define CLKF_SW_SUP BIT(0) -#define CLKF_HW_SUP BIT(1) -#define CLKF_NO_IDLEST BIT(2) -typedef void (*ti_of_clk_init_cb_t )(void *,struct device_node *); struct clk *ti_clk_register(struct device *dev, struct clk_hw *hw,
Greg Kroah-Hartman
maintainerPATCH 4/72 kcm: Call strp_stop before strp_done in kcm_attach
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tom Herbert <[email protected]>
commit dff8baa261174de689a44572d0ea182d7aa70598 upstream.
In kcm_attach strp_done is called when sk_user_data is already set to fail the attach. strp_done needs the strp to be stopped and warns if it isn't. Call strp_stop in this case to eliminate the warning message.
--- net/kcm/kcmsock.c | 1 + 1 file changed, 1 insertion(+)
net/kcm/kcmsock.c +1 -0
@@ -1425,6 +1425,7 @@ static int kcm_attach(struct socket *soc*/ if (csk->sk_user_data) {write_unlock_bh (&csk->sk_callback_lock); +strp_stop (&psock->strp);strp_done (&psock->strp);kmem_cache_free (kcm_psockp, psock); err = -EALREADY ;
Greg Kroah-Hartman
maintainerPATCH 5/72 rds: tcp: must use spin_lock_irq* and not spin_lock_bh with rds_tcp_conn_lock
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sowmini Varadhan <[email protected]>
commit 53d0e83f9329aa51dcc205b514dbee05cb4df309 upstream.
rds_tcp_connection allocation/free management has the potential to be called from __rds_conn_create after IRQs have been disabled, so spin_[un]lock_bh cannot be used with rds_tcp_conn_lock.
Bottom-halves that need to synchronize for critical sections protected by rds_tcp_conn_lock should instead use rds_destroy_pending() correctly.
netns/module teardown and rds connection/workq management")
--- net/rds/tcp.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
net/rds/tcp.c +9 -8
@@ -275,13 +275,14 @@ static int rds_tcp_laddr_check(struct nestatic void rds_tcp_conn_free (void *arg) {struct rds_tcp_connection *tc = arg; +unsigned long flags;rdsdebug ("freeing tc %p\n" , tc); -spin_lock_bh (&rds_tcp_conn_lock); +spin_lock_irqsave (&rds_tcp_conn_lock, flags);if (!tc->t_tcp_node_detached)list_del (&tc->t_tcp_node); -spin_unlock_bh (&rds_tcp_conn_lock); +spin_unlock_irqrestore (&rds_tcp_conn_lock, flags);kmem_cache_free (rds_tcp_conn_slab, tc); }
@@ -311,13 +312,13 @@ static int rds_tcp_conn_alloc(struct rdsrdsdebug ("rds_conn_path [%d] tc %p\n" , i, conn->c_path[i].cp_transport_data); } -spin_lock_bh (&rds_tcp_conn_lock); +spin_lock_irq (&rds_tcp_conn_lock);for (i =0 ; i <RDS_MPATH_WORKERS ; i++) { tc = conn->c_path[i].cp_transport_data; tc->t_tcp_node_detached = false;list_add_tail (&tc->t_tcp_node, &rds_tcp_conn_list); } -spin_unlock_bh (&rds_tcp_conn_lock); +spin_unlock_irq (&rds_tcp_conn_lock); fail:if (ret) {for (j =0 ; j < i; j++)
@@ -529,7 +530,7 @@ static void rds_tcp_kill_sock(struct net rtn->rds_tcp_listen_sock =NULL ;rds_tcp_listen_stop (lsock, &rtn->rds_tcp_accept_w); -spin_lock_bh (&rds_tcp_conn_lock); +spin_lock_irq (&rds_tcp_conn_lock);list_for_each_entry_safe (tc, _tc, &rds_tcp_conn_list, t_tcp_node) {struct net *c_net =read_pnet (&tc->t_cpath->cp_conn->c_net);
@@ -542,7 +543,7 @@ static void rds_tcp_kill_sock(struct net tc->t_tcp_node_detached = true; } } -spin_unlock_bh (&rds_tcp_conn_lock); +spin_unlock_irq (&rds_tcp_conn_lock);list_for_each_entry_safe (tc, _tc, &tmp_list, t_tcp_node)rds_conn_destroy (tc->t_cpath->cp_conn); }
@@ -590,7 +591,7 @@ static void rds_tcp_sysctl_reset(struct {struct rds_tcp_connection *tc, *_tc; -spin_lock_bh (&rds_tcp_conn_lock); +spin_lock_irq (&rds_tcp_conn_lock);list_for_each_entry_safe (tc, _tc, &rds_tcp_conn_list, t_tcp_node) {struct net *c_net =read_pnet (&tc->t_cpath->cp_conn->c_net);
@@ -600,7 +601,7 @@ static void rds_tcp_sysctl_reset(struct/* reconnect with new parameters */ rds_conn_path_drop (tc->t_cpath, false); } -spin_unlock_bh (&rds_tcp_conn_lock); +spin_unlock_irq (&rds_tcp_conn_lock); } static int rds_tcp_skbuf_handler(struct ctl_table *ctl, int write,
Greg Kroah-Hartman
maintainerPATCH 6/72 crypto: af_alg - fix possible uninit-value in alg_bind()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit a466856e0b7ab269cdf9461886d007e88ff575b0 upstream.
syzbot reported :
BUG: KMSAN: uninit-value in alg_bind+0xe3/0xd90 crypto/af_alg.c:162
We need to check addr_len before dereferencing sa (or uaddr)
--- crypto/af_alg.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
crypto/af_alg.c +4 -4
@@ -158,16 +158,16 @@ static int alg_bind(struct socket *sock,void *private;int err; -/* If caller uses non-allowed flag, return error. */ -if ((sa->salg_feat & ~allowed) || (sa->salg_mask & ~allowed)) -return -EINVAL ; -if (sock->state ==SS_CONNECTED )return -EINVAL ;if (addr_len <sizeof (*sa))return -EINVAL ; +/* If caller uses non-allowed flag, return error. */ +if ((sa->salg_feat & ~allowed) || (sa->salg_mask & ~allowed)) +return -EINVAL ; + sa->salg_type[sizeof (sa->salg_type) -1 ] =0 ; sa->salg_name[sizeof (sa->salg_name) + addr_len -sizeof (*sa) -1 ] =0 ;
Greg Kroah-Hartman
maintainerPATCH 7/72 netlink: fix uninit-value in netlink_sendmsg
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit 6091f09c2f79730d895149bcfe3d66140288cd0e upstream.
syzbot reported :
BUG: KMSAN: uninit-value in ffs arch/x86/include/asm/bitops.h:432 [inline] BUG: KMSAN: uninit-value in netlink_sendmsg+0xb26/0x1310 net/netlink/af_netlink.c:1851
--- net/netlink/af_netlink.c | 2 ++ 1 file changed, 2 insertions(+)
net/netlink/af_netlink.c +2 -0
@@ -1845,6 +1845,8 @@ static int netlink_sendmsg(struct socketif (msg->msg_namelen) { err = -EINVAL ; +if (msg->msg_namelen <sizeof (struct sockaddr_nl )) + goto out;if (addr->nl_family !=AF_NETLINK ) goto out; dst_portid = addr->nl_pid;
Greg Kroah-Hartman
maintainerPATCH 8/72 net: fix rtnh_ok()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit b1993a2de12c9e75c35729e2ffbc3a92d50c0d31 upstream.
syzbot reported :
BUG: KMSAN: uninit-value in rtnh_ok include/net/nexthop.h:11 [inline] BUG: KMSAN: uninit-value in fib_count_nexthops net/ipv4/fib_semantics.c:469 [inline] BUG: KMSAN: uninit-value in fib_create_info+0x554/0x8d20 net/ipv4/fib_semantics.c:1091
@remaining is an integer, coming from user space. If it is negative we want rtnh_ok() to return false.
--- include/net/nexthop.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/net/nexthop.h +1 -1
@@ -7,7 +7,7 @@static inline int rtnh_ok (const struct rtnexthop *rtnh,int remaining) { -return remaining >=sizeof (*rtnh) && +return remaining >= (int )sizeof (*rtnh) && rtnh->rtnh_len >=sizeof (*rtnh) && rtnh->rtnh_len <= remaining; }
Greg Kroah-Hartman
maintainerPATCH 9/72 net: initialize skb->peeked when cloning
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit b13dda9f9aa7caceeee61c080c2e544d5f5d85e5 upstream.
syzbot reported __skb_try_recv_from_queue() was using skb->peeked while it was potentially unitialized.
We need to clear it in __skb_clone()
--- net/core/skbuff.c | 1 + 1 file changed, 1 insertion(+)
net/core/skbuff.c +1 -0
@@ -857,6 +857,7 @@ static struct sk_buff *__skb_clone(struc n->hdr_len = skb->nohdr ?skb_headroom (skb) : skb->hdr_len; n->cloned =1 ; n->nohdr =0 ; + n->peeked =0 ; n->destructor =NULL ;C (tail);C (end);
Greg Kroah-Hartman
maintainerPATCH 10/72 net: fix uninit-value in __hw_addr_add_ex()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit 77d36398d99f2565c0a8d43a86fd520a82e64bb8 upstream.
syzbot complained :
BUG: KMSAN: uninit-value in memcmp+0x119/0x180 lib/string.c:861 CPU: 0 PID: 3 Comm: kworker/0:0 Not tainted 4.16.0+ #82 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Workqueue: ipv6_addrconf addrconf_dad_work Call Trace: __dump_stack lib/dump_stack.c:17 [inline] dump_stack+0x185/0x1d0 lib/dump_stack.c:53 kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067 __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676 memcmp+0x119/0x180 lib/string.c:861 __hw_addr_add_ex net/core/dev_addr_lists.c:60 [inline] __dev_mc_add+0x1c2/0x8e0 net/core/dev_addr_lists.c:670 dev_mc_add+0x6d/0x80 net/core/dev_addr_lists.c:687 igmp6_group_added+0x2db/0xa00 net/ipv6/mcast.c:662 ipv6_dev_mc_inc+0xe9e/0x1130 net/ipv6/mcast.c:914 addrconf_join_solict net/ipv6/addrconf.c:2078 [inline] addrconf_dad_begin net/ipv6/addrconf.c:3828 [inline] addrconf_dad_work+0x427/0x2150 net/ipv6/addrconf.c:3954 process_one_work+0x12c6/0x1f60 kernel/workqueue.c:2113 worker_thread+0x113c/0x24f0 kernel/workqueue.c:2247 kthread+0x539/0x720 kernel/kthread.c:239
--- net/core/dev_addr_lists.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/core/dev_addr_lists.c +2 -2
@@ -57,8 +57,8 @@ static int __hw_addr_add_ex(struct netdereturn -EINVAL ;list_for_each_entry (ha, &list->list, list) { -if (!memcmp (ha->addr, addr, addr_len) && - ha->type == addr_type) { +if (ha->type == addr_type && + !memcmp (ha->addr, addr, addr_len)) {if (global) {/* check if addr is already used as global */ if (ha->global_use)
Greg Kroah-Hartman
maintainerPATCH 11/72 dccp: initialize ireq->ir_mark
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit b855ff827476adbdc2259e9895681d82b7b26065 upstream.
syzbot reported an uninit-value read of skb->mark in iptable_mangle_hook()
Thanks to the nice report, I tracked the problem to dccp not caring of ireq->ir_mark for passive sessions.
BUG: KMSAN: uninit-value in ipt_mangle_out net/ipv4/netfilter/iptable_mangle.c:66 [inline] BUG: KMSAN: uninit-value in iptable_mangle_hook+0x5e5/0x720 net/ipv4/netfilter/iptable_mangle.c:84 CPU: 0 PID: 5300 Comm: syz-executor3 Not tainted 4.16.0+ #81 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:17 [inline] dump_stack+0x185/0x1d0 lib/dump_stack.c:53 kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067 __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676 ipt_mangle_out net/ipv4/netfilter/iptable_mangle.c:66 [inline] iptable_mangle_hook+0x5e5/0x720 net/ipv4/netfilter/iptable_mangle.c:84 nf_hook_entry_hookfn include/linux/netfilter.h:120 [inline] nf_hook_slow+0x158/0x3d0 net/netfilter/core.c:483 nf_hook include/linux/netfilter.h:243 [inline] __ip_local_out net/ipv4/ip_output.c:113 [inline] ip_local_out net/ipv4/ip_output.c:122 [inline] ip_queue_xmit+0x1d21/0x21c0 net/ipv4/ip_output.c:504 dccp_transmit_skb+0x15eb/0x1900 net/dccp/output.c:142 dccp_xmit_packet+0x814/0x9e0 net/dccp/output.c:281 dccp_write_xmit+0x20f/0x480 net/dccp/output.c:363 dccp_sendmsg+0x12ca/0x12d0 net/dccp/proto.c:818 inet_sendmsg+0x48d/0x740 net/ipv4/af_inet.c:764 sock_sendmsg_nosec net/socket.c:630 [inline] sock_sendmsg net/socket.c:640 [inline] ___sys_sendmsg+0xec0/0x1310 net/socket.c:2046 __sys_sendmsg net/socket.c:2080 [inline] SYSC_sendmsg+0x2a3/0x3d0 net/socket.c:2091 SyS_sendmsg+0x54/0x80 net/socket.c:2087 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2 RIP: 0033:0x455259 RSP: 002b:00007f1a4473dc68 EFLAGS: 00000246 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 00007f1a4473e6d4 RCX: 0000000000455259 RDX: 0000000000000000 RSI: 0000000020b76fc8 RDI: 0000000000000015 RBP: 000000000072bea0 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff R13: 00000000000004f0 R14: 00000000006fa720 R15: 0000000000000000
Uninit was stored to memory at:
kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline] kmsan_save_stack mm/kmsan/kmsan.c:293 [inline] kmsan_internal_chain_origin+0x12b/0x210 mm/kmsan/kmsan.c:684 __msan_chain_origin+0x69/0xc0 mm/kmsan/kmsan_instr.c:521 ip_queue_xmit+0x1e35/0x21c0 net/ipv4/ip_output.c:502 dccp_transmit_skb+0x15eb/0x1900 net/dccp/output.c:142 dccp_xmit_packet+0x814/0x9e0 net/dccp/output.c:281 dccp_write_xmit+0x20f/0x480 net/dccp/output.c:363 dccp_sendmsg+0x12ca/0x12d0 net/dccp/proto.c:818 inet_sendmsg+0x48d/0x740 net/ipv4/af_inet.c:764 sock_sendmsg_nosec net/socket.c:630 [inline] sock_sendmsg net/socket.c:640 [inline] ___sys_sendmsg+0xec0/0x1310 net/socket.c:2046 __sys_sendmsg net/socket.c:2080 [inline] SYSC_sendmsg+0x2a3/0x3d0 net/socket.c:2091 SyS_sendmsg+0x54/0x80 net/socket.c:2087 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2 Uninit was stored to memory at: kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline] kmsan_save_stack mm/kmsan/kmsan.c:293 [inline] kmsan_internal_chain_origin+0x12b/0x210 mm/kmsan/kmsan.c:684 __msan_chain_origin+0x69/0xc0 mm/kmsan/kmsan_instr.c:521 inet_csk_clone_lock+0x503/0x580 net/ipv4/inet_connection_sock.c:797 dccp_create_openreq_child+0x7f/0x890 net/dccp/minisocks.c:92 dccp_v4_request_recv_sock+0x22c/0xe90 net/dccp/ipv4.c:408 dccp_v6_request_recv_sock+0x290/0x2000 net/dccp/ipv6.c:414 dccp_check_req+0x7b9/0x8f0 net/dccp/minisocks.c:197 dccp_v4_rcv+0x12e4/0x2630 net/dccp/ipv4.c:840 ip_local_deliver_finish+0x6ed/0xd40 net/ipv4/ip_input.c:216 NF_HOOK include/linux/netfilter.h:288 [inline] ip_local_deliver+0x43c/0x4e0 net/ipv4/ip_input.c:257 dst_input include/net/dst.h:449 [inline] ip_rcv_finish+0x1253/0x16d0 net/ipv4/ip_input.c:397 NF_HOOK include/linux/netfilter.h:288 [inline] ip_rcv+0x119d/0x16f0 net/ipv4/ip_input.c:493 __netif_receive_skb_core+0x47cf/0x4a80 net/core/dev.c:4562 __netif_receive_skb net/core/dev.c:4627 [inline] process_backlog+0x62d/0xe20 net/core/dev.c:5307 napi_poll net/core/dev.c:5705 [inline] net_rx_action+0x7c1/0x1a70 net/core/dev.c:5771 __do_softirq+0x56d/0x93d kernel/softirq.c:285 Uninit was created at: kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline] kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:188 kmsan_kmalloc+0x94/0x100 mm/kmsan/kmsan.c:314 kmem_cache_alloc+0xaab/0xb90 mm/slub.c:2756 reqsk_alloc include/net/request_sock.h:88 [inline] inet_reqsk_alloc+0xc4/0x7f0 net/ipv4/tcp_input.c:6145 dccp_v4_conn_request+0x5cc/0x1770 net/dccp/ipv4.c:600 dccp_v6_conn_request+0x299/0x1880 net/dccp/ipv6.c:317 dccp_rcv_state_process+0x2ea/0x2410 net/dccp/input.c:612 dccp_v4_do_rcv+0x229/0x340 net/dccp/ipv4.c:682 dccp_v6_do_rcv+0x16d/0x1220 net/dccp/ipv6.c:578 sk_backlog_rcv include/net/sock.h:908 [inline] __sk_receive_skb+0x60e/0xf20 net/core/sock.c:513 dccp_v4_rcv+0x24d4/0x2630 net/dccp/ipv4.c:874 ip_local_deliver_finish+0x6ed/0xd40 net/ipv4/ip_input.c:216 NF_HOOK include/linux/netfilter.h:288 [inline] ip_local_deliver+0x43c/0x4e0 net/ipv4/ip_input.c:257 dst_input include/net/dst.h:449 [inline] ip_rcv_finish+0x1253/0x16d0 net/ipv4/ip_input.c:397 NF_HOOK include/linux/netfilter.h:288 [inline] ip_rcv+0x119d/0x16f0 net/ipv4/ip_input.c:493 __netif_receive_skb_core+0x47cf/0x4a80 net/core/dev.c:4562 __netif_receive_skb net/core/dev.c:4627 [inline] process_backlog+0x62d/0xe20 net/core/dev.c:5307 napi_poll net/core/dev.c:5705 [inline] net_rx_action+0x7c1/0x1a70 net/core/dev.c:5771 __do_softirq+0x56d/0x93d kernel/softirq.c:285
--- net/dccp/ipv4.c | 1 + net/dccp/ipv6.c | 1 + 2 files changed, 2 insertions(+)
net/dccp/ipv4.c +1 -0
@@ -614,6 +614,7 @@ int dccp_v4_conn_request(struct sock *sk ireq =inet_rsk (req);sk_rcv_saddr_set (req_to_sk (req),ip_hdr (skb)->daddr);sk_daddr_set (req_to_sk (req),ip_hdr (skb)->saddr); + ireq->ir_mark =inet_request_mark (sk, skb); ireq->ireq_family =AF_INET ; ireq->ir_iif = sk->sk_bound_dev_if;
net/dccp/ipv6.c +1 -0
@@ -351,6 +351,7 @@ static int dccp_v6_conn_request(struct s ireq->ir_v6_rmt_addr =ipv6_hdr (skb)->saddr; ireq->ir_v6_loc_addr =ipv6_hdr (skb)->daddr; ireq->ireq_family =AF_INET6 ; + ireq->ir_mark =inet_request_mark (sk, skb); if (ipv6_opt_accepted(sk, skb, IP6CB(skb)) || np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
Greg Kroah-Hartman
maintainerPATCH 12/72 ipv4: fix uninit-value in ip_route_output_key_hash_rcu()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit d0ea2b12500543535be3f54e17920fffc9bb45f6 upstream.
syzbot complained that res.type could be used while not initialized.
Using RTN_UNSPEC as initial value seems better than using garbage.
BUG: KMSAN: uninit-value in __mkroute_output net/ipv4/route.c:2200 [inline] BUG: KMSAN: uninit-value in ip_route_output_key_hash_rcu+0x31f0/0x3940 net/ipv4/route.c:2493 CPU: 1 PID: 12207 Comm: syz-executor0 Not tainted 4.16.0+ #81 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:17 [inline] dump_stack+0x185/0x1d0 lib/dump_stack.c:53 kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067 __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676 __mkroute_output net/ipv4/route.c:2200 [inline] ip_route_output_key_hash_rcu+0x31f0/0x3940 net/ipv4/route.c:2493 ip_route_output_key_hash net/ipv4/route.c:2322 [inline] __ip_route_output_key include/net/route.h:126 [inline] ip_route_output_flow+0x1eb/0x3c0 net/ipv4/route.c:2577 raw_sendmsg+0x1861/0x3ed0 net/ipv4/raw.c:653 inet_sendmsg+0x48d/0x740 net/ipv4/af_inet.c:764 sock_sendmsg_nosec net/socket.c:630 [inline] sock_sendmsg net/socket.c:640 [inline] SYSC_sendto+0x6c3/0x7e0 net/socket.c:1747 SyS_sendto+0x8a/0xb0 net/socket.c:1715 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2 RIP: 0033:0x455259 RSP: 002b:00007fdc0625dc68 EFLAGS: 00000246 ORIG_RAX: 000000000000002c RAX: ffffffffffffffda RBX: 00007fdc0625e6d4 RCX: 0000000000455259 RDX: 0000000000000000 RSI: 0000000020000040 RDI: 0000000000000013 RBP: 000000000072bea0 R08: 0000000020000080 R09: 0000000000000010 R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff R13: 00000000000004f7 R14: 00000000006fa7c8 R15: 0000000000000000
Local variable description: ----res.i.i@ip_route_output_flow Variable was created at:
ip_route_output_flow+0x75/0x3c0 net/ipv4/route.c:2576 raw_sendmsg+0x1861/0x3ed0 net/ipv4/raw.c:653
--- net/ipv4/route.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
net/ipv4/route.c +6 -5
@@ -2306,13 +2306,14 @@ struct rtable *ip_route_output_key_hash( const struct sk_buff *skb) {__u8 tos =RT_FL_TOS (fl4); -struct fib_result res; +struct fib_result res = { + .type =RTN_UNSPEC , + .fi =NULL , + .table =NULL , + .tclassid =0 , + };struct rtable *rth; - res.tclassid =0 ; - res.fi =NULL ; - res.table =NULL ; - fl4->flowi4_iif =LOOPBACK_IFINDEX ; fl4->flowi4_tos = tos &IPTOS_RT_MASK ; fl4->flowi4_scope = ((tos & RTO_ONLINK) ?
Greg Kroah-Hartman
maintainerPATCH 13/72 soreuseport: initialise timewait reuseport field
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit 3099a52918937ab86ec47038ad80d377ba16c531 upstream.
syzbot reported an uninit-value in inet_csk_bind_conflict() [1]
It turns out we never propagated sk->sk_reuseport into timewait socket.
[1]
BUG: KMSAN: uninit-value in inet_csk_bind_conflict+0x5f9/0x990 net/ipv4/inet_connection_sock.c:151 CPU: 1 PID: 3589 Comm: syzkaller008242 Not tainted 4.16.0+ #82 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:17 [inline] dump_stack+0x185/0x1d0 lib/dump_stack.c:53 kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067 __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676 inet_csk_bind_conflict+0x5f9/0x990 net/ipv4/inet_connection_sock.c:151 inet_csk_get_port+0x1d28/0x1e40 net/ipv4/inet_connection_sock.c:320 inet6_bind+0x121c/0x1820 net/ipv6/af_inet6.c:399 SYSC_bind+0x3f2/0x4b0 net/socket.c:1474 SyS_bind+0x54/0x80 net/socket.c:1460 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2 RIP: 0033:0x4416e9 RSP: 002b:00007ffce6d15c88 EFLAGS: 00000217 ORIG_RAX: 0000000000000031 RAX: ffffffffffffffda RBX: 0100000000000000 RCX: 00000000004416e9 RDX: 000000000000001c RSI: 0000000020402000 RDI: 0000000000000004 RBP: 0000000000000000 R08: 00000000e6d15e08 R09: 00000000e6d15e08 R10: 0000000000000004 R11: 0000000000000217 R12: 0000000000009478 R13: 00000000006cd448 R14: 0000000000000000 R15: 0000000000000000
Uninit was stored to memory at:
kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline] kmsan_save_stack mm/kmsan/kmsan.c:293 [inline] kmsan_internal_chain_origin+0x12b/0x210 mm/kmsan/kmsan.c:684 __msan_chain_origin+0x69/0xc0 mm/kmsan/kmsan_instr.c:521 tcp_time_wait+0xf17/0xf50 net/ipv4/tcp_minisocks.c:283 tcp_rcv_state_process+0xebe/0x6490 net/ipv4/tcp_input.c:6003 tcp_v6_do_rcv+0x11dd/0x1d90 net/ipv6/tcp_ipv6.c:1331 sk_backlog_rcv include/net/sock.h:908 [inline] __release_sock+0x2d6/0x680 net/core/sock.c:2271 release_sock+0x97/0x2a0 net/core/sock.c:2786 tcp_close+0x277/0x18f0 net/ipv4/tcp.c:2269 inet_release+0x240/0x2a0 net/ipv4/af_inet.c:427 inet6_release+0xaf/0x100 net/ipv6/af_inet6.c:435 sock_release net/socket.c:595 [inline] sock_close+0xe0/0x300 net/socket.c:1149 __fput+0x49e/0xa10 fs/file_table.c:209 ____fput+0x37/0x40 fs/file_table.c:243 task_work_run+0x243/0x2c0 kernel/task_work.c:113 exit_task_work include/linux/task_work.h:22 [inline] do_exit+0x10e1/0x38d0 kernel/exit.c:867 do_group_exit+0x1a0/0x360 kernel/exit.c:970 SYSC_exit_group+0x21/0x30 kernel/exit.c:981 SyS_exit_group+0x25/0x30 kernel/exit.c:979 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2 Uninit was stored to memory at: kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline] kmsan_save_stack mm/kmsan/kmsan.c:293 [inline] kmsan_internal_chain_origin+0x12b/0x210 mm/kmsan/kmsan.c:684 __msan_chain_origin+0x69/0xc0 mm/kmsan/kmsan_instr.c:521 inet_twsk_alloc+0xaef/0xc00 net/ipv4/inet_timewait_sock.c:182 tcp_time_wait+0xd9/0xf50 net/ipv4/tcp_minisocks.c:258 tcp_rcv_state_process+0xebe/0x6490 net/ipv4/tcp_input.c:6003 tcp_v6_do_rcv+0x11dd/0x1d90 net/ipv6/tcp_ipv6.c:1331 sk_backlog_rcv include/net/sock.h:908 [inline] __release_sock+0x2d6/0x680 net/core/sock.c:2271 release_sock+0x97/0x2a0 net/core/sock.c:2786 tcp_close+0x277/0x18f0 net/ipv4/tcp.c:2269 inet_release+0x240/0x2a0 net/ipv4/af_inet.c:427 inet6_release+0xaf/0x100 net/ipv6/af_inet6.c:435 sock_release net/socket.c:595 [inline] sock_close+0xe0/0x300 net/socket.c:1149 __fput+0x49e/0xa10 fs/file_table.c:209 ____fput+0x37/0x40 fs/file_table.c:243 task_work_run+0x243/0x2c0 kernel/task_work.c:113 exit_task_work include/linux/task_work.h:22 [inline] do_exit+0x10e1/0x38d0 kernel/exit.c:867 do_group_exit+0x1a0/0x360 kernel/exit.c:970 SYSC_exit_group+0x21/0x30 kernel/exit.c:981 SyS_exit_group+0x25/0x30 kernel/exit.c:979 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2 Uninit was created at: kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline] kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:188 kmsan_kmalloc+0x94/0x100 mm/kmsan/kmsan.c:314 kmem_cache_alloc+0xaab/0xb90 mm/slub.c:2756 inet_twsk_alloc+0x13b/0xc00 net/ipv4/inet_timewait_sock.c:163 tcp_time_wait+0xd9/0xf50 net/ipv4/tcp_minisocks.c:258 tcp_rcv_state_process+0xebe/0x6490 net/ipv4/tcp_input.c:6003 tcp_v6_do_rcv+0x11dd/0x1d90 net/ipv6/tcp_ipv6.c:1331 sk_backlog_rcv include/net/sock.h:908 [inline] __release_sock+0x2d6/0x680 net/core/sock.c:2271 release_sock+0x97/0x2a0 net/core/sock.c:2786 tcp_close+0x277/0x18f0 net/ipv4/tcp.c:2269 inet_release+0x240/0x2a0 net/ipv4/af_inet.c:427 inet6_release+0xaf/0x100 net/ipv6/af_inet6.c:435 sock_release net/socket.c:595 [inline] sock_close+0xe0/0x300 net/socket.c:1149 __fput+0x49e/0xa10 fs/file_table.c:209 ____fput+0x37/0x40 fs/file_table.c:243 task_work_run+0x243/0x2c0 kernel/task_work.c:113 exit_task_work include/linux/task_work.h:22 [inline] do_exit+0x10e1/0x38d0 kernel/exit.c:867 do_group_exit+0x1a0/0x360 kernel/exit.c:970 SYSC_exit_group+0x21/0x30 kernel/exit.c:981 SyS_exit_group+0x25/0x30 kernel/exit.c:979 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2
--- include/net/inet_timewait_sock.h | 1 + net/ipv4/inet_timewait_sock.c | 1 + 2 files changed, 2 insertions(+)
include/net/inet_timewait_sock.h +1 -0
@@ -43,6 +43,7 @@ struct inet_timewait_sock {#define tw_family __tw_common.skc_family#define tw_state __tw_common.skc_state#define tw_reuse __tw_common.skc_reuse +#define tw_reuseport __tw_common.skc_reuseport#define tw_ipv6only __tw_common.skc_ipv6only#define tw_bound_dev_if __tw_common.skc_bound_dev_if#define tw_node __tw_common.skc_nulls_node
net/ipv4/inet_timewait_sock.c +1 -0
@@ -178,6 +178,7 @@ struct inet_timewait_sock *inet_twsk_all tw->tw_dport = inet->inet_dport; tw->tw_family = sk->sk_family; tw->tw_reuse = sk->sk_reuse; + tw->tw_reuseport = sk->sk_reuseport; tw->tw_hash = sk->sk_hash; tw->tw_ipv6only =0 ; tw->tw_transparent = inet->transparent;
Greg Kroah-Hartman
maintainerPATCH 14/72 inetpeer: fix uninit-value in inet_getpeer
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit b6a37e5e25414df4b8e9140a5c6f5ee0ec6f3b90 upstream.
syzbot/KMSAN reported that p->dtime was read while it was not yet initialized in :
delta = (__u32)jiffies - p->dtime; if (delta < ttl || !refcount_dec_if_one(&p->refcnt)) gc_stack[i] = NULL;
This is a false positive, because the inetpeer wont be erased from rb-tree if the refcount_dec_if_one(&p->refcnt) does not succeed. And this wont happen before first inet_putpeer() call for this inetpeer has been done, and ->dtime field is written exactly before the refcount_dec_and_test(&p->refcnt).
The KMSAN report was :
BUG: KMSAN: uninit-value in inet_peer_gc net/ipv4/inetpeer.c:163 [inline] BUG: KMSAN: uninit-value in inet_getpeer+0x1567/0x1e70 net/ipv4/inetpeer.c:228 CPU: 0 PID: 9494 Comm: syz-executor5 Not tainted 4.16.0+ #82 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:17 [inline] dump_stack+0x185/0x1d0 lib/dump_stack.c:53 kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067 __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676 inet_peer_gc net/ipv4/inetpeer.c:163 [inline] inet_getpeer+0x1567/0x1e70 net/ipv4/inetpeer.c:228 inet_getpeer_v4 include/net/inetpeer.h:110 [inline] icmpv4_xrlim_allow net/ipv4/icmp.c:330 [inline] icmp_send+0x2b44/0x3050 net/ipv4/icmp.c:725 ip_options_compile+0x237c/0x29f0 net/ipv4/ip_options.c:472 ip_rcv_options net/ipv4/ip_input.c:284 [inline] ip_rcv_finish+0xda8/0x16d0 net/ipv4/ip_input.c:365 NF_HOOK include/linux/netfilter.h:288 [inline] ip_rcv+0x119d/0x16f0 net/ipv4/ip_input.c:493 __netif_receive_skb_core+0x47cf/0x4a80 net/core/dev.c:4562 __netif_receive_skb net/core/dev.c:4627 [inline] netif_receive_skb_internal+0x49d/0x630 net/core/dev.c:4701 netif_receive_skb+0x230/0x240 net/core/dev.c:4725 tun_rx_batched drivers/net/tun.c:1555 [inline] tun_get_user+0x6d88/0x7580 drivers/net/tun.c:1962 tun_chr_write_iter+0x1d4/0x330 drivers/net/tun.c:1990 do_iter_readv_writev+0x7bb/0x970 include/linux/fs.h:1776 do_iter_write+0x30d/0xd40 fs/read_write.c:932 vfs_writev fs/read_write.c:977 [inline] do_writev+0x3c9/0x830 fs/read_write.c:1012 SYSC_writev+0x9b/0xb0 fs/read_write.c:1085 SyS_writev+0x56/0x80 fs/read_write.c:1082 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2 RIP: 0033:0x455111 RSP: 002b:00007fae0365cba0 EFLAGS: 00000293 ORIG_RAX: 0000000000000014 RAX: ffffffffffffffda RBX: 000000000000002e RCX: 0000000000455111 RDX: 0000000000000001 RSI: 00007fae0365cbf0 RDI: 00000000000000fc RBP: 0000000020000040 R08: 00000000000000fc R09: 0000000000000000 R10: 000000000000002e R11: 0000000000000293 R12: 00000000ffffffff R13: 0000000000000658 R14: 00000000006fc8e0 R15: 0000000000000000
Uninit was created at:
kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline] kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:188 kmsan_kmalloc+0x94/0x100 mm/kmsan/kmsan.c:314 kmem_cache_alloc+0xaab/0xb90 mm/slub.c:2756 inet_getpeer+0xed8/0x1e70 net/ipv4/inetpeer.c:210 inet_getpeer_v4 include/net/inetpeer.h:110 [inline] ip4_frag_init+0x4d1/0x740 net/ipv4/ip_fragment.c:153 inet_frag_alloc net/ipv4/inet_fragment.c:369 [inline] inet_frag_create net/ipv4/inet_fragment.c:385 [inline] inet_frag_find+0x7da/0x1610 net/ipv4/inet_fragment.c:418 ip_find net/ipv4/ip_fragment.c:275 [inline] ip_defrag+0x448/0x67a0 net/ipv4/ip_fragment.c:676 ip_check_defrag+0x775/0xda0 net/ipv4/ip_fragment.c:724 packet_rcv_fanout+0x2a8/0x8d0 net/packet/af_packet.c:1447 deliver_skb net/core/dev.c:1897 [inline] deliver_ptype_list_skb net/core/dev.c:1912 [inline] __netif_receive_skb_core+0x314a/0x4a80 net/core/dev.c:4545 __netif_receive_skb net/core/dev.c:4627 [inline] netif_receive_skb_internal+0x49d/0x630 net/core/dev.c:4701 netif_receive_skb+0x230/0x240 net/core/dev.c:4725 tun_rx_batched drivers/net/tun.c:1555 [inline] tun_get_user+0x6d88/0x7580 drivers/net/tun.c:1962 tun_chr_write_iter+0x1d4/0x330 drivers/net/tun.c:1990 do_iter_readv_writev+0x7bb/0x970 include/linux/fs.h:1776 do_iter_write+0x30d/0xd40 fs/read_write.c:932 vfs_writev fs/read_write.c:977 [inline] do_writev+0x3c9/0x830 fs/read_write.c:1012 SYSC_writev+0x9b/0xb0 fs/read_write.c:1085 SyS_writev+0x56/0x80 fs/read_write.c:1082 do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x3d/0xa2
--- net/ipv4/inetpeer.c | 1 + 1 file changed, 1 insertion(+)
net/ipv4/inetpeer.c +1 -0
@@ -210,6 +210,7 @@ struct inet_peer *inet_getpeer(struct in p =kmem_cache_alloc (peer_cachep,GFP_ATOMIC );if (p) { p->daddr = *daddr; + p->dtime = (__u32 )jiffies;refcount_set (&p->refcnt,2 );atomic_set (&p->rid,0 ); p->metrics[RTAX_LOCK -1 ] =INETPEER_METRICS_NEW ;
Greg Kroah-Hartman
maintainerPATCH 15/72 bpf/tracing: fix a deadlock in perf_event_detach_bpf_prog
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yonghong Song <[email protected]>
commit 3a38bb98d9abdc3856f26b5ed4332803065cd7cf upstream.
syzbot reported a possible deadlock in perf_event_detach_bpf_prog.
The error details:
======================================================
WARNING: possible circular locking dependency detected
4.16.0-rc7+ #3 Not tainted
------------------------------------------------------
syz-executor7/24531 is trying to acquire lock:
(bpf_event_mutex){+.+.}, at: [<000000008a849b07>] perf_event_detach_bpf_prog+0x92/0x3d0 kernel/trace/bpf_trace.c:854
but task is already holding lock:
(&mm->mmap_sem){++++}, at: [<0000000038768f87>] vm_mmap_pgoff+0x198/0x280 mm/util.c:353
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (&mm->mmap_sem){++++}:
__might_fault+0x13a/0x1d0 mm/memory.c:4571
_copy_to_user+0x2c/0xc0 lib/usercopy.c:25
copy_to_user include/linux/uaccess.h:155 [inline]
bpf_prog_array_copy_info+0xf2/0x1c0 kernel/bpf/core.c:1694
perf_event_query_prog_array+0x1c7/0x2c0 kernel/trace/bpf_trace.c:891
_perf_ioctl kernel/events/core.c:4750 [inline]
perf_ioctl+0x3e1/0x1480 kernel/events/core.c:4770
vfs_ioctl fs/ioctl.c:46 [inline]
do_vfs_ioctl+0x1b1/0x1520 fs/ioctl.c:686
SYSC_ioctl fs/ioctl.c:701 [inline]
SyS_ioctl+0x8f/0xc0 fs/ioctl.c:692
do_syscall_64+0x281/0x940 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x42/0xb7-> #0 (bpf_event_mutex){+.+.}:
lock_acquire+0x1d5/0x580 kernel/locking/lockdep.c:3920
__mutex_lock_common kernel/locking/mutex.c:756 [inline]
__mutex_lock+0x16f/0x1a80 kernel/locking/mutex.c:893
mutex_lock_nested+0x16/0x20 kernel/locking/mutex.c:908
perf_event_detach_bpf_prog+0x92/0x3d0 kernel/trace/bpf_trace.c:854
perf_event_free_bpf_prog kernel/events/core.c:8147 [inline]
_free_event+0xbdb/0x10f0 kernel/events/core.c:4116
put_event+0x24/0x30 kernel/events/core.c:4204
perf_mmap_close+0x60d/0x1010 kernel/events/core.c:5172
remove_vma+0xb4/0x1b0 mm/mmap.c:172
remove_vma_list mm/mmap.c:2490 [inline]
do_munmap+0x82a/0xdf0 mm/mmap.c:2731
mmap_region+0x59e/0x15a0 mm/mmap.c:1646
do_mmap+0x6c0/0xe00 mm/mmap.c:1483
do_mmap_pgoff include/linux/mm.h:2223 [inline]
vm_mmap_pgoff+0x1de/0x280 mm/util.c:355
SYSC_mmap_pgoff mm/mmap.c:1533 [inline]
SyS_mmap_pgoff+0x462/0x5f0 mm/mmap.c:1491
SYSC_mmap arch/x86/kernel/sys_x86_64.c:100 [inline]
SyS_mmap+0x16/0x20 arch/x86/kernel/sys_x86_64.c:91
do_syscall_64+0x281/0x940 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x42/0xb7other info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&mm->mmap_sem);
lock(bpf_event_mutex);
lock(&mm->mmap_sem);
lock(bpf_event_mutex); *** DEADLOCK ***
======================================================
The bug is introduced by Commit f371b304f12e ("bpf/tracing: allow user space to query prog array on the same tp") where copy_to_user, which requires mm->mmap_sem, is called inside bpf_event_mutex lock. At the same time, during perf_event file descriptor close, mm->mmap_sem is held first and then subsequent perf_event_detach_bpf_prog needs bpf_event_mutex lock. Such a senario caused a deadlock.
As suggested by Daniel, moving copy_to_user out of the bpf_event_mutex lock should fix the problem.
--- include/linux/bpf.h | 4 ++-- kernel/bpf/core.c | 45 +++++++++++++++++++++++++++++---------------- kernel/trace/bpf_trace.c | 25 +++++++++++++++++++++---- 3 files changed, 52 insertions(+), 22 deletions(-)
include/linux/bpf.h +2 -2
@@ -335,8 +335,8 @@ int bpf_prog_array_copy_to_user(struct bvoid bpf_prog_array_delete_safe (struct bpf_prog_array __rcu *progs,struct bpf_prog *old_prog);int bpf_prog_array_copy_info (struct bpf_prog_array __rcu *array, -__u32 __user *prog_ids,u32 request_cnt, -__u32 __user *prog_cnt); +u32 *prog_ids,u32 request_cnt, +u32 *prog_cnt); int bpf_prog_array_copy(struct bpf_prog_array __rcu *old_array, struct bpf_prog *exclude_prog, struct bpf_prog *include_prog,
kernel/bpf/core.c +29 -16
80 lines not on this page · raw message
kernel/trace/bpf_trace.c +21 -4
@@ -876,6 +876,7 @@ int perf_event_query_prog_array(struct p {struct perf_event_query_bpf __user *uquery = info;struct perf_event_query_bpf query = {}; +u32 *ids, prog_cnt, ids_len;int ret;if (!capable (CAP_SYS_ADMIN ))
@@ -884,15 +885,31 @@ int perf_event_query_prog_array(struct preturn -EINVAL ;if (copy_from_user (&query, uquery,sizeof (query)))return -EFAULT ; -if (query.ids_len >BPF_TRACE_MAX_PROGS ) + + ids_len = query.ids_len; +if (ids_len >BPF_TRACE_MAX_PROGS )return -E2BIG ; + ids =kcalloc (ids_len,sizeof (u32),GFP_USER | __GFP_NOWARN); +if (!ids) +return -ENOMEM ; +/* +* The above kcalloc returns ZERO_SIZE_PTR when ids_len = 0, which +* is required when user only wants to check for uquery->prog_cnt. +* There is no need to check for it since the case is handled +* gracefully in bpf_prog_array_copy_info. +*/ mutex_lock (&bpf_event_mutex); ret =bpf_prog_array_copy_info (event->tp_event->prog_array, - uquery->ids, - query.ids_len, - &uquery->prog_cnt); + ids, + ids_len, + &prog_cnt);mutex_unlock (&bpf_event_mutex); +if (copy_to_user (&uquery->prog_cnt, &prog_cnt,sizeof (prog_cnt)) || +copy_to_user (uquery->ids, ids, ids_len *sizeof (u32))) + ret = -EFAULT ; + +kfree (ids);return ret; }
Greg Kroah-Hartman
maintainerPATCH 16/72 memcg: fix per_node_info cleanup
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michal Hocko <[email protected]>
commit 4eaf431f6f71bbed40a4c733ffe93a7e8cedf9d9 upstream.
syzbot has triggered a NULL ptr dereference when allocation fault injection enforces a failure and alloc_mem_cgroup_per_node_info initializes memcg->nodeinfo only half way through.
But __mem_cgroup_free still tries to free all per-node data and dereferences pn->lruvec_stat_cpu unconditioanlly even if the specific per-node data hasn't been initialized.
The bug is quite unlikely to hit because small allocations do not fail and we would need quite some numa nodes to make struct mem_cgroup_per_node large enough to cross the costly order.
--- mm/memcontrol.c | 3 +++ 1 file changed, 3 insertions(+)
mm/memcontrol.c +3 -0
@@ -4108,6 +4108,9 @@ static void free_mem_cgroup_per_node_inf {struct mem_cgroup_per_node *pn = memcg->nodeinfo[node]; +if (!pn) +return ; +free_percpu (pn->lruvec_stat_cpu);kfree (pn); }
Greg Kroah-Hartman
maintainerPATCH 17/72 perf: Remove superfluous allocation error check
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Olsa <[email protected]>
commit bfb3d7b8b906b66551424d7636182126e1d134c8 upstream.
If the get_callchain_buffers fails to allocate the buffer it will decrease the nr_callchain_events right away.
There's no point of checking the allocation error for nr_callchain_events > 1. Removing that check.
--- kernel/events/callchain.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-)
kernel/events/callchain.c +2 -8
@@ -131,14 +131,8 @@ int get_callchain_buffers(int event_max_ goto exit; } -if (count >1 ) { -/* If the allocation failed, give up */ -if (!callchain_cpus_entries) - err = -ENOMEM ; - goto exit; - } - - err =alloc_callchain_buffers (); +if (count ==1 ) + err =alloc_callchain_buffers (); exit:if (err)atomic_dec (&nr_callchain_events);
Greg Kroah-Hartman
maintainerPATCH 18/72 i2c: dev: prevent ZERO_SIZE_PTR deref in i2cdev_ioctl_rdwr()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Popov <[email protected]>
commit 23a27722b5292ef0b27403c87a109feea8296a5c upstream.
i2cdev_ioctl_rdwr() allocates i2c_msg.buf using memdup_user(), which returns ZERO_SIZE_PTR if i2c_msg.len is zero.
Currently i2cdev_ioctl_rdwr() always dereferences the buf pointer in case of I2C_M_RD | I2C_M_RECV_LEN transfer. That causes a kernel oops in case of zero len.
Let's check the len against zero before dereferencing buf pointer.
This issue was triggered by syzkaller.
--- drivers/i2c/i2c-dev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/i2c/i2c-dev.c +1 -1
@@ -280,7 +280,7 @@ static noinline int i2cdev_ioctl_rdwr(st*/ if (msgs[i].flags &I2C_M_RECV_LEN ) {if (!(msgs[i].flags &I2C_M_RD ) || - msgs[i].buf[0 ] <1 || + msgs[i].len <1 || msgs[i].buf[0 ] <1 || msgs[i].len < msgs[i].buf[0 ] +I2C_SMBUS_BLOCK_MAX ) { res = -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 19/72 tcp: fix TCP_REPAIR_QUEUE bound checking
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit bf2acc943a45d2b2e8a9f1a5ddff6b6e43cc69d9 upstream.
syzbot is able to produce a nasty WARN_ON() in tcp_verify_left_out() with following C-repro :
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3setsockopt(3, SOL_TCP, TCP_REPAIR, [1], 4) = 0setsockopt(3, SOL_TCP, TCP_REPAIR_QUEUE, [-1], 4) = 0bind(3, {sa_family=AF_INET, sin_port=htons(20002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0 sendto(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
1242, MSG_FASTOPEN, {sa_family=AF_INET, sin_port=htons(20002), sin_addr=inet_addr("127.0.0.1")}, 16) = 1242setsockopt(3, SOL_TCP, TCP_REPAIR_WINDOW, "\4\0\0@+\205\0\0\377\377\0\0\377\377\377\177\0\0\0\0", 20) = 0writev(3, [{"\270", 1}], 1) = 1
setsockopt(3, SOL_TCP, TCP_REPAIR_OPTIONS, "\10\0\0\0\0\0\0\0\0\0\0\0|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 386) = 0 writev(3, [{"\210v\r[\226\320t\231qwQ\204\264l\254\t\1\20\245\214p\350H\223\254;\\\37\345\307p$"..., 3144}], 1) = 3144
The 3rd system call looks odd :setsockopt(3, SOL_TCP, TCP_REPAIR_QUEUE, [-1], 4) = 0
This patch makes sure bound checking is using an unsigned compare.
--- net/ipv4/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/ipv4/tcp.c +1 -1
@@ -2690,7 +2690,7 @@ static int do_tcp_setsockopt(struct sockcase TCP_REPAIR_QUEUE :if (!tp->repair) err = -EPERM ; -else if (val <TCP_QUEUES_NR ) +else if ((unsigned int )val <TCP_QUEUES_NR ) tp->repair_queue = val;else err = -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 20/72 bdi: wake up concurrent wb_shutdown() callers.
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tetsuo Handa <[email protected]>
commit 8236b0ae31c837d2b3a2565c5f8d77f637e824cc upstream.
syzbot is reporting hung tasks at wait_on_bit(WB_shutting_down) in wb_shutdown() [1]. This seems to be because commit 5318ce7d46866e1d ("bdi:
Shutdown writeback on all cgwbs in cgwb_bdi_destroy()") forgot to call wake_up_bit(WB_shutting_down) after clear_bit(WB_shutting_down).
Introduce a helper function clear_and_wake_up_bit() and use it, in order to avoid similar errors in future.
[1] https://syzkaller.appspot.com/bug?id=b297474817af98d5796bc544e1bb806fc3da0e5e
--- include/linux/wait_bit.h | 17 +++++++++++++++++ mm/backing-dev.c | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-)
include/linux/wait_bit.h +17 -0
@@ -262,4 +262,21 @@ int wait_on_atomic_t(atomic_t *val, wait return out_of_line_wait_on_atomic_t(val, action, mode); } +/** +* clear_and_wake_up_bit - clear a bit and wake up anyone waiting on that bit +* +* @bit: the bit of the word being waited on +* @word: the word being waited on, a kernel virtual address +* +* You can use this helper if bitflags are manipulated atomically rather than +* non-atomically under a lock. +*/ +static inline void clear_and_wake_up_bit (int bit,void *word) +{ +clear_bit_unlock (bit, word); +/* See wake_up_bit() for which memory barrier you need to use. */ +smp_mb__after_atomic (); +wake_up_bit (word, bit); +} +#endif /* _LINUX_WAIT_BIT_H */
mm/backing-dev.c +1 -1
@@ -394,7 +394,7 @@ static void wb_shutdown(struct bdi_write* the barrier provided by test_and_clear_bit() above. */ smp_wmb (); -clear_bit (WB_shutting_down, &wb->state); +clear_and_wake_up_bit (WB_shutting_down, &wb->state); }static void wb_exit (struct bdi_writeback *wb)
Greg Kroah-Hartman
maintainerPATCH 21/72 bdi: Fix use after free bug in debugfs_remove()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tetsuo Handa <[email protected]>
commit f53823c18131e755905b4f654196fd2cc3953f6e upstream.
syzbot is reporting use after free bug in debugfs_remove() [1].
This is because fault injection made memory allocation for debugfs_create_file() from bdi_debug_register() from bdi_register_va() fail and continued with setting WB_registered. But when debugfs_remove() is called from debugfs_remove(bdi->debug_dir) from bdi_debug_unregister()
from bdi_unregister() from release_bdi() because WB_registered was set
by bdi_register_va(), IS_ERR_OR_NULL(bdi->debug_dir) == false despite debugfs_remove(bdi->debug_dir) was already called from bdi_register_va().
Fix this by making IS_ERR_OR_NULL(bdi->debug_dir) == true.
[1] https://syzkaller.appspot.com/bug?id=5ab4efd91a96dcea9b68104f159adf4af2a6dfc1
--- mm/backing-dev.c | 1 + 1 file changed, 1 insertion(+)
mm/backing-dev.c +1 -0
@@ -126,6 +126,7 @@ static int bdi_debug_register(struct bac bdi, &bdi_debug_stats_fops);if (!bdi->debug_stats) {debugfs_remove (bdi->debug_dir); + bdi->debug_dir =NULL ;return -ENOMEM ; }
Greg Kroah-Hartman
maintainerPATCH 22/72 bdi: Fix oops in wb_workfn()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit b8b784958eccbf8f51ebeee65282ca3fd59ea391 upstream.
Syzbot has reported that it can hit a NULL pointer dereference in wb_workfn() due to wb->bdi->dev being NULL. This indicates that wb_workfn() was called for an already unregistered bdi which should not happen as wb_shutdown() called from bdi_unregister() should make sure all pending writeback works are completed before bdi is unregistered. Except that wb_workfn() itself can requeue the work with:
mod_delayed_work(bdi_wq, &wb->dwork, 0);
and if this happens while wb_shutdown() is waiting in:
flush_delayed_work(&wb->dwork);
the dwork can get executed after wb_shutdown() has finished and bdi_unregister() has cleared wb->bdi->dev.
Make wb_workfn() use wakeup_wb() for requeueing the work which takes all the necessary precautions against racing with bdi unregistration.
--- fs/fs-writeback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/fs-writeback.c +1 -1
@@ -1961,7 +1961,7 @@ void wb_workfn(struct work_struct *work) }if (!list_empty (&wb->work_list)) -mod_delayed_work (bdi_wq, &wb->dwork,0 ); +wb_wakeup (wb);else if (wb_has_dirty_io (wb) && dirty_writeback_interval)wb_wakeup_delayed (wb);
Greg Kroah-Hartman
maintainerPATCH 23/72 compat: fix 4-byte infoleak via uninitialized struct field
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jann Horn <[email protected]>
commit 0a0b98734479aa5b3c671d5190e86273372cab95 upstream.
Commit 3a4d44b61625 ("ntp: Move adjtimex related compat syscalls to native counterparts") removed the memset() in compat_get_timex(). Since then, the compat adjtimex syscall can invoke do_adjtimex() with an uninitialized ->tai.
If do_adjtimex() doesn't write to ->tai (e.g. because the arguments are invalid), compat_put_timex() then copies the uninitialized ->tai field to userspace.
Fix it by adding the memset() back.
--- kernel/compat.c | 1 + 1 file changed, 1 insertion(+)
kernel/compat.c +1 -0
@@ -34,6 +34,7 @@ int compat_get_timex(struct timex *txc, {struct compat_timex tx32; +memset (txc,0 ,sizeof (struct timex ));if (copy_from_user (&tx32, utp,sizeof (struct compat_timex )))return -EFAULT ;
Greg Kroah-Hartman
maintainerPATCH 24/72 gpioib: do not free unrequested descriptors
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Timur Tabi <[email protected]>
commit ab3dbcf78f60f46d6a0ad63b1f4b690b7a427140 upstream.
If the main loop in linehandle_create() encounters an error, it unwinds completely by freeing all previously requested GPIO descriptors. However, if the error occurs in the beginning of the loop before that GPIO is requested, then the exit code attempts to free a null descriptor. If extrachecks is enabled, gpiod_free() triggers a WARN_ON.
Instead, keep a separate count of legitimate GPIOs so that only those are freed.
--- drivers/gpio/gpiolib.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/gpio/gpiolib.c +3 -2
@@ -446,7 +446,7 @@ static int linehandle_create(struct gpiostruct gpiohandle_request handlereq;struct linehandle_state *lh;struct file *file; -int fd, i, ret; +int fd, i, count =0 , ret;u32 lflags;if (copy_from_user (&handlereq, ip,sizeof (handlereq)))
@@ -507,6 +507,7 @@ static int linehandle_create(struct gpioif (ret) goto out_free_descs; lh->descs[i] = desc; + count = i;if (lflags &GPIOHANDLE_REQUEST_ACTIVE_LOW )set_bit (FLAG_ACTIVE_LOW , &desc->flags);
@@ -577,7 +578,7 @@ static int linehandle_create(struct gpio out_put_unused_fd:put_unused_fd (fd); out_free_descs: -for (; i >=0 ; i--) +for (i =0 ; i < count; i++)gpiod_free (lh->descs[i]);kfree (lh->label); out_free_lh:
Greg Kroah-Hartman
maintainerPATCH 25/72 gpio: fix aspeed_gpio unmask irq
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Govert Overgaauw <[email protected]>
commit f241632fd087d3d9fbd5450f4d8c8604badd8348 upstream.
The unmask function disables all interrupts in a bank when unmasking an interrupt. Only disable the given interrupt.
--- drivers/gpio/gpio-aspeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpio/gpio-aspeed.c +1 -1
@@ -384,7 +384,7 @@ static void aspeed_gpio_irq_set_mask(strif (set) reg |= bit;else - reg &= bit; + reg &= ~bit;iowrite32 (reg, addr);spin_unlock_irqrestore (&gpio->lock, flags);
Greg Kroah-Hartman
maintainerPATCH 26/72 gpio: fix error path in lineevent_create
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
commit f001cc351ad3309ec8736c374e90e5a4bc472d41 upstream.
If gpiod_request() fails the cleanup must not call gpiod_free().
--- drivers/gpio/gpiolib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpio/gpiolib.c +1 -1
@@ -852,7 +852,7 @@ static int lineevent_create(struct gpio_ desc = &gdev->descs[offset]; ret =gpiod_request (desc, le->label);if (ret) - goto out_free_desc; + goto out_free_label; le->desc = desc; le->eflags = eflags;
Greg Kroah-Hartman
maintainerPATCH 27/72 rfkill: gpio: fix memory leak in probe error path
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit 4bf01ca21e2e0e4561d1a03c48c3d740418702db upstream.
Make sure to free the rfkill device in case registration fails during probe.
--- net/rfkill/rfkill-gpio.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
net/rfkill/rfkill-gpio.c +6 -1
@@ -137,13 +137,18 @@ static int rfkill_gpio_probe(struct plat ret =rfkill_register (rfkill->rfkill_dev);if (ret <0 ) -return ret; + goto err_destroy;platform_set_drvdata (pdev, rfkill);dev_info (&pdev->dev,"%s device registered.\n" , rfkill->name);return 0 ; + +err_destroy: +rfkill_destroy (rfkill->rfkill_dev); + +return ret; }static int rfkill_gpio_remove (struct platform_device *pdev)
Greg Kroah-Hartman
maintainerPATCH 28/72 libata: Apply NOLPM quirk for SanDisk SD7UB3Q*G1001 SSDs
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit 184add2ca23ce5edcac0ab9c3b9be13f91e7b567 upstream.
Richard Jones has reported that using med_power_with_dipm on a T450s with a Sandisk SD7UB3Q256G1001 SSD (firmware version X2180501) is causing the machine to hang.
Switching the LPM to max_performance fixes this, so it seems that this Sandisk SSD does not handle LPM well.
Note in the past there have been bug-reports about the following Sandisk models not working with min_power, so we may need to extend the quirk list in the future: name - firmware
Sandisk SD6SB2M512G1022I - X210400
Sandisk SD6PP4M-256G-1006 - A200906
--- drivers/ata/libata-core.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/ata/libata-core.c +3 -0
@@ -4549,6 +4549,9 @@ static const struct ata_blacklist_entry ATA_HORKAGE_ZERO_AFTER_TRIM | ATA_HORKAGE_NOLPM, }, +/* Sandisk devices which are known to not handle LPM well */ + { "SanDisk SD7UB3Q*G1001", NULL, ATA_HORKAGE_NOLPM, }, + /* devices that don't properly handle queued TRIM commands */ { "Micron_M500_*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },
Greg Kroah-Hartman
maintainerPATCH 29/72 dm integrity: use kvfree for kvmallocd memory
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mikulas Patocka <[email protected]>
commit fc8cec113904a47396bf0a1afc62920d66319d36 upstream.
Use kvfree instead of kfree because the array is allocated with kvmalloc.
--- drivers/md/dm-integrity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/md/dm-integrity.c +1 -1
@@ -2440,7 +2440,7 @@ static void dm_integrity_free_journal_scunsigned i;for (i =0 ; i < ic->journal_sections; i++)kvfree (sl[i]); -kfree (sl); +kvfree (sl); }static struct scatterlist **dm_integrity_alloc_journal_scatterlist (struct dm_integrity_c *ic,struct page_list *pl)
Greg Kroah-Hartman
maintainerPATCH 30/72 tracing: Fix regex_match_front() to not over compare the test string
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (VMware) <[email protected]>
commit dc432c3d7f9bceb3de6f5b44fb9c657c9810ed6d upstream.
The regex match function regex_match_front() in the tracing filter logic, was fixed to test just the pattern length from testing the entire test string. That is, it went from strncmp(str, r->pattern, len) to strcmp(str, r->pattern, r->len).
The issue is that str is not guaranteed to be nul terminated, and if r->len is greater than the length of str, it can access more memory than is allocated.
The solution is to add a simple test if (len < r->len) return 0.
--- kernel/trace/trace_events_filter.c | 3 +++ 1 file changed, 3 insertions(+)
kernel/trace/trace_events_filter.c +3 -0
@@ -338,6 +338,9 @@ static int regex_match_full(char *str, sstatic int regex_match_front (char *str,struct regex *r,int len) { +if (len < r->len) +return 0 ; +if (strncmp (str, r->pattern, r->len) ==0 )return 1 ;return 0 ;
Greg Kroah-Hartman
maintainerPATCH 31/72 z3fold: fix reclaim lock-ups
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vitaly Wool <[email protected]>
commit 6098d7e136692f9c6e23ae362c62ec822343e4d5 upstream.
Do not try to optimize in-page object layout while the page is under reclaim. This fixes lock-ups on reclaim and improves reclaim performance at the same time.
--- mm/z3fold.c | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-)
mm/z3fold.c +30 -12
@@ -144,7 +144,8 @@ enum z3fold_page_flags {PAGE_HEADLESS =0 ,MIDDLE_CHUNK_MAPPED ,NEEDS_COMPACTING , - PAGE_STALE +PAGE_STALE , + UNDER_RECLAIM };/*****************
@@ -173,6 +174,7 @@ static struct z3fold_header *init_z3foldclear_bit (MIDDLE_CHUNK_MAPPED , &page->private);clear_bit (NEEDS_COMPACTING , &page->private);clear_bit (PAGE_STALE , &page->private); +clear_bit (UNDER_RECLAIM , &page->private);spin_lock_init (&zhdr->page_lock);kref_init (&zhdr->refcount);
@@ -748,6 +750,10 @@ static void z3fold_free(struct z3fold_poatomic64_dec (&pool->pages_nr);return ; } +if (test_bit (UNDER_RECLAIM , &page->private)) { +z3fold_page_unlock (zhdr); +return ; + }if (test_and_set_bit (NEEDS_COMPACTING , &page->private)) {z3fold_page_unlock (zhdr);return ;
@@ -832,6 +838,8 @@ static int z3fold_reclaim_page(struct z3kref_get (&zhdr->refcount);list_del_init (&zhdr->buddy); zhdr->cpu =-1 ; +set_bit (UNDER_RECLAIM , &page->private); +break ; }list_del_init (&page->lru);
@@ -879,25 +887,35 @@ static int z3fold_reclaim_page(struct z3 goto next; } next: -spin_lock (&pool->lock);if (test_bit (PAGE_HEADLESS , &page->private)) {if (ret ==0 ) { -spin_unlock (&pool->lock);free_z3fold_page (page);return 0 ; } - }else if (kref_put (&zhdr->refcount, release_z3fold_page)) { -atomic64_dec (&pool->pages_nr); +spin_lock (&pool->lock); +list_add (&page->lru, &pool->lru); +spin_unlock (&pool->lock); + }else { +z3fold_page_lock (zhdr); +clear_bit (UNDER_RECLAIM , &page->private); +if (kref_put (&zhdr->refcount, + release_z3fold_page_locked)) { +atomic64_dec (&pool->pages_nr); +return 0 ; + } +/* +* if we are here, the page is still not completely +* free. Take the global pool lock then to be able +* to add it back to the lru list +*/ +spin_lock (&pool->lock); +list_add (&page->lru, &pool->lru);spin_unlock (&pool->lock); -return 0 ; +z3fold_page_unlock (zhdr); } -/* -* Add to the beginning of LRU. -* Pool lock has to be kept here to ensure the page has -* not already been released -*/ -list_add (&page->lru, &pool->lru); +/* We started off locked to we need to lock the pool back */ +spin_lock (&pool->lock); }spin_unlock (&pool->lock);return -EAGAIN ;
Greg Kroah-Hartman
maintainerPATCH 32/72 mm: sections are not offlined during memory hotremove
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pavel Tatashin <[email protected]>
commit 27227c733852f71008e9bf165950bb2edaed3a90 upstream.
Memory hotplug and hotremove operate with per-block granularity. If the machine has a large amount of memory (more than 64G), the size of a memory block can span multiple sections. By mistake, during hotremove we set only the first section to offline state.
The bug was discovered because kernel selftest started to fail:
https://lkml.kernel.org/r/20180423011247.GK5563@yexl-desktop
After commit, "mm/memory_hotplug: optimize probe routine". But, the bug is older than this commit. In this optimization we also added a check for sections to be in a proper state during hotplug operation.
--- mm/sparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/sparse.c +1 -1
@@ -666,7 +666,7 @@ void offline_mem_sections(unsigned longunsigned long pfn;for (pfn = start_pfn; pfn < end_pfn; pfn +=PAGES_PER_SECTION ) { -unsigned long section_nr =pfn_to_section_nr (start_pfn); +unsigned long section_nr =pfn_to_section_nr (pfn);struct mem_section *ms;/*
Greg Kroah-Hartman
maintainerPATCH 33/72 mm, oom: fix concurrent munlock and oom reaper unmap, v3
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Rientjes <[email protected]>
commit 27ae357fa82be5ab73b2ef8d39dcb8ca2563483a upstream.
Since exit_mmap() is done without the protection of mm->mmap_sem, it is possible for the oom reaper to concurrently operate on an mm until MMF_OOM_SKIP is set.
This allows munlock_vma_pages_all() to concurrently run while the oom reaper is operating on a vma. Since munlock_vma_pages_range() depends on clearing VM_LOCKED from vm_flags before actually doing the munlock to determine if any other vmas are locking the same memory, the check for VM_LOCKED in the oom reaper is racy.
This is especially noticeable on architectures such as powerpc where clearing a huge pmd requires serialize_against_pte_lookup(). If the pmd is zapped by the oom reaper during follow_page_mask() after the check for pmd_none() is bypassed, this ends up deferencing a NULL ptl or a kernel oops.
Fix this by manually freeing all possible memory from the mm before doing the munlock and then setting MMF_OOM_SKIP. The oom reaper can not run on the mm anymore so the munlock is safe to do in exit_mmap(). It also matches the logic that the oom reaper currently uses for determining when to set MMF_OOM_SKIP itself, so there's no new risk of excessive oom killing.
This issue fixes CVE-2018-1000200.
--- include/linux/oom.h | 2 + mm/mmap.c | 44 ++++++++++++++++------------ mm/oom_kill.c | 81 +++++++++++++++++++++++++++------------------------- 3 files changed, 71 insertions(+), 56 deletions(-)
include/linux/oom.h +2 -0
@@ -95,6 +95,8 @@ static inline int check_stable_address_sreturn 0 ; } +void __oom_reap_task_mm (struct mm_struct *mm); +extern unsigned long oom_badness (struct task_struct *p,struct mem_cgroup *memcg,const nodemask_t *nodemask,unsigned long totalpages);
mm/mmap.c +26 -18
56 lines not on this page · raw message
mm/oom_kill.c +43 -38
118 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 34/72 ceph: fix rsize/wsize capping in ceph_direct_read_write()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilya Dryomov <[email protected]>
commit 3a15b38fd2efc1d648cb33186bf71e9138c93491 upstream.
rsize/wsize cap should be applied before ceph_osdc_new_request() is called. Otherwise, if the size is limited by the cap instead of the stripe unit, ceph_osdc_new_request() would setup an extent op that is bigger than what dio_get_pages_alloc() would pin and add to the page vector, triggering asserts in the messenger.
--- fs/ceph/file.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
fs/ceph/file.c +5 -5
@@ -878,6 +878,11 @@ ceph_direct_read_write(struct kiocb *iocsize_t start =0 ;ssize_t len; +if (write) + size =min_t (u64, size, fsc->mount_options->wsize); +else + size =min_t (u64, size, fsc->mount_options->rsize); + vino =ceph_vino (inode); req = ceph_osdc_new_request(&fsc->client->osdc, &ci->i_layout, vino, pos, &size, 0,
@@ -893,11 +898,6 @@ ceph_direct_read_write(struct kiocb *iocbreak ; } -if (write) - size =min_t (u64, size, fsc->mount_options->wsize); -else - size =min_t (u64, size, fsc->mount_options->rsize); - len = size; pages =dio_get_pages_alloc (iter, len, &start, &num_pages);if (IS_ERR (pages)) {
Greg Kroah-Hartman
maintainerPATCH 35/72 can: flexcan: fix endianess detection
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
commit 0e030a373df3b8792b8991740fc31fe0629c6e58 upstream.
In commit 88462d2a7830 ("can: flexcan: Remodel FlexCAN register r/w APIs for big endian FlexCAN controllers.") the following logic was implemented:
if the dt property "big-endian" is given or the device is compatible to "fsl,p1010-flexcan": use big-endian mode; else use little-endian mode;
This relies on commit d50f4630c2e1 ("arm: dts: Remove p1010-flexcan compatible from imx series dts") which was applied a few commits later. Without this commit (or an old device tree used for booting a new kernel) the flexcan devices on i.MX25, i.MX28, i.MX35 and i.MX53 match the 'the device is compatible to "fsl,p1010-flexcan"' test and so are switched erroneously to big endian mode.
Instead of the check above put a quirk in devtype data and rely on of_match_device yielding the most compatible match
--- drivers/net/can/flexcan.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-)
drivers/net/can/flexcan.c +14 -12
@@ -200,6 +200,7 @@#define FLEXCAN_QUIRK_DISABLE_MECR BIT(4)/* Disable Memory error detection */ #define FLEXCAN_QUIRK_USE_OFF_TIMESTAMP BIT(5)/* Use timestamp based offloading */ #define FLEXCAN_QUIRK_BROKEN_PERR_STATE BIT(6)/* No interrupt for error passive */ +#define FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN BIT(7)/* default to BE register access */ /* Structure of the message buffer */ struct flexcan_mb {
@@ -288,6 +289,12 @@ struct flexcan_priv {static const struct flexcan_devtype_data fsl_p1010_devtype_data = { .quirks =FLEXCAN_QUIRK_BROKEN_WERR_STATE | +FLEXCAN_QUIRK_BROKEN_PERR_STATE | +FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN , +}; + +static const struct flexcan_devtype_data fsl_imx25_devtype_data = { + .quirks =FLEXCAN_QUIRK_BROKEN_WERR_STATE |FLEXCAN_QUIRK_BROKEN_PERR_STATE , };
@@ -1251,9 +1258,9 @@ static void unregister_flexcandev(structstatic const struct of_device_id flexcan_of_match[] = { { .compatible ="fsl,imx6q-flexcan" , .data = &fsl_imx6q_devtype_data, }, { .compatible ="fsl,imx28-flexcan" , .data = &fsl_imx28_devtype_data, }, - { .compatible ="fsl,imx53-flexcan" , .data = &fsl_p1010_devtype_data, }, - { .compatible ="fsl,imx35-flexcan" , .data = &fsl_p1010_devtype_data, }, - { .compatible ="fsl,imx25-flexcan" , .data = &fsl_p1010_devtype_data, }, + { .compatible ="fsl,imx53-flexcan" , .data = &fsl_imx25_devtype_data, }, + { .compatible ="fsl,imx35-flexcan" , .data = &fsl_imx25_devtype_data, }, + { .compatible ="fsl,imx25-flexcan" , .data = &fsl_imx25_devtype_data, }, { .compatible ="fsl,p1010-flexcan" , .data = &fsl_p1010_devtype_data, }, { .compatible ="fsl,vf610-flexcan" , .data = &fsl_vf610_devtype_data, }, { .compatible ="fsl,ls1021ar2-flexcan" , .data = &fsl_ls1021a_r2_devtype_data, },
@@ -1337,18 +1344,13 @@ static int flexcan_probe(struct platform priv =netdev_priv (dev); -if (of_property_read_bool (pdev->dev.of_node,"big-endian" )) { +if (of_property_read_bool (pdev->dev.of_node,"big-endian" ) || + devtype_data->quirks &FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN ) { priv->read = flexcan_read_be; priv->write = flexcan_write_be; }else { -if (of_device_is_compatible (pdev->dev.of_node, -"fsl,p1010-flexcan" )) { - priv->read = flexcan_read_be; - priv->write = flexcan_write_be; - }else { - priv->read = flexcan_read_le; - priv->write = flexcan_write_le; - } + priv->read = flexcan_read_le; + priv->write = flexcan_write_le; } priv->can.clock.freq = clock_freq;
Greg Kroah-Hartman
maintainerPATCH 36/72 can: kvaser_usb: Increase correct stats counter in kvaser_usb_rx_can_msg()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jimmy Assarsson <[email protected]>
commit 6ee00865ffe4e8c8ba4a68d26db53c7ec09bbb89 upstream.
Increase rx_dropped, if alloc_can_skb() fails, not tx_dropped.
--- drivers/net/can/usb/kvaser_usb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/can/usb/kvaser_usb.c +1 -1
@@ -1179,7 +1179,7 @@ static void kvaser_usb_rx_can_msg(const skb =alloc_can_skb (priv->netdev, &cf);if (!skb) { - stats->tx_dropped++; + stats->rx_dropped++;return ; }
Greg Kroah-Hartman
maintainerPATCH 37/72 can: hi311x: Acquire SPI lock on ->do_get_berr_counter
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukas Wunner <[email protected]>
commit 5cec9425b41dcf834c3d48776900d6acb7e96f38 upstream.
hi3110_get_berr_counter() may run concurrently to the rest of the driver but neglects to acquire the lock protecting access to the SPI device. As a result, it and the rest of the driver may clobber each other's tx and rx buffers.
We became aware of this issue because transmission of packets with "cangen -g 0 -i -x" frequently hung. It turns out that agetty executes ->do_get_berr_counter every few seconds via the following call stack:
CPU: 2 PID: 1605 Comm: agetty
[<7f3f7500>] (hi3110_get_berr_counter [hi311x])
[<7f130204>] (can_fill_info [can_dev])
[<80693bc0>] (rtnl_fill_ifinfo)
[<806949ec>] (rtnl_dump_ifinfo)
[<806b4834>] (netlink_dump)
[<806b4bc8>] (netlink_recvmsg)
[<8065f180>] (sock_recvmsg)
[<80660f90>] (___sys_recvmsg)
[<80661e7c>] (__sys_recvmsg)
[<80661ec0>] (SyS_recvmsg)
[<80108b20>] (ret_fast_syscall+0x0/0x1c)agetty listens to netlink messages in order to update the login prompt when IP addresses change (if /etc/issue contains \4 or \6 escape codes):
https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=e36deb6424e8
It's a useful feature, though it seems questionable that it causes CAN bit error statistics to be queried.
Be that as it may, if hi3110_get_berr_counter() is invoked while a frame is sent by hi3110_hw_tx(), bogus SPI transfers like the following may occur:
=> 12 00 (hi3110_get_berr_counter() wanted to transmit
EC 00 to query the transmit error counter, but the first byte was overwritten by hi3110_hw_tx_frame())
=> EA 00 3E 80 01 FB (hi3110_hw_tx_frame() wanted to transmit a
frame, but the first byte was overwritten by hi3110_get_berr_counter() because it wanted to query the receive error counter)
This sequence hangs the transmission because the driver believes it has sent a frame and waits for the interrupt signaling completion, but in reality the chip has never sent away the frame since the commands it received were malformed.
Fix by acquiring the SPI lock in hi3110_get_berr_counter().
I've scrutinized the entire driver for further unlocked SPI accesses but found no others.
--- drivers/net/can/spi/hi311x.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/can/spi/hi311x.c +2 -0
@@ -427,8 +427,10 @@ static int hi3110_get_berr_counter(conststruct hi3110_priv *priv =netdev_priv (net);struct spi_device *spi = priv->spi; +mutex_lock (&priv->hi3110_lock); bec->txerr =hi3110_read (spi,HI3110_READ_TEC ); bec->rxerr =hi3110_read (spi,HI3110_READ_REC ); +mutex_unlock (&priv->hi3110_lock);return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 38/72 can: hi311x: Work around TX complete interrupt erratum
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukas Wunner <[email protected]>
commit 32bee8f48fa048a3198109de50e51c092507ff52 upstream.
When sending packets as fast as possible using "cangen -g 0 -i -x", the HI-3110 occasionally latches the interrupt pin high on completion of a packet, but doesn't set the TXCPLT bit in the INTF register. The INTF register contains 0x00 as if no interrupt has occurred. Even waiting for a few milliseconds after the interrupt doesn't help.
Work around this apparent erratum by instead checking the TXMTY bit in the STATF register ("TX FIFO empty"). We know that we've queued up a packet for transmission if priv->tx_len is nonzero. If the TX FIFO is empty, transmission of that packet must have completed.
Note that this is congruent with our handling of received packets, which likewise gleans from the STATF register whether a packet is waiting in the RX FIFO, instead of looking at the INTF register.
--- drivers/net/can/spi/hi311x.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/net/can/spi/hi311x.c +5 -4
@@ -91,6 +91,7 @@#define HI3110_STAT_BUSOFF BIT(2)#define HI3110_STAT_ERRP BIT(3)#define HI3110_STAT_ERRW BIT(4) +#define HI3110_STAT_TXMTY BIT(7)#define HI3110_BTR0_SJW_SHIFT 6#define HI3110_BTR0_BRP_SHIFT 0
@@ -737,10 +738,7 @@ static irqreturn_t hi3110_can_ist(int ir } } -if (intf ==0 ) -break ; - -if (intf &HI3110_INT_TXCPLT ) { +if (priv->tx_len && statf &HI3110_STAT_TXMTY ) { net->stats.tx_packets++; net->stats.tx_bytes += priv->tx_len -1 ;can_led_event (net,CAN_LED_EVENT_TX );
@@ -750,6 +748,9 @@ static irqreturn_t hi3110_can_ist(int ir }netif_wake_queue (net); } + +if (intf ==0 ) +break ; }mutex_unlock (&priv->hi3110_lock);return IRQ_HANDLED ;
Greg Kroah-Hartman
maintainerPATCH 39/72 mtd: rawnand: marvell: pass ms delay to wait_op
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Packham <[email protected]>
commit b76401fc4ba720f0f38f7b1f9d54d5c2308bc18d upstream.
marvell_nfc_wait_op() expects the delay to be expressed in milliseconds but nand_sdr_timings uses picoseconds. Use PSEC_TO_MSEC when passing tPROG_max to marvell_nfc_wait_op().
--- drivers/mtd/nand/marvell_nand.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/mtd/nand/marvell_nand.c +2 -2
@@ -1070,7 +1070,7 @@ static int marvell_nfc_hw_ecc_hmg_do_wrireturn ret; ret =marvell_nfc_wait_op (chip, - chip->data_interface.timings.sdr.tPROG_max); +PSEC_TO_MSEC (chip->data_interface.timings.sdr.tPROG_max));return ret; }
@@ -1490,7 +1490,7 @@ static int marvell_nfc_hw_ecc_bch_write_ } ret =marvell_nfc_wait_op (chip, - chip->data_interface.timings.sdr.tPROG_max); +PSEC_TO_MSEC (chip->data_interface.timings.sdr.tPROG_max));marvell_nfc_disable_hw_ecc (chip);
Greg Kroah-Hartman
maintainerPATCH 40/72 mtd: rawnand: marvell: fix command xtype in BCH write hook
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miquel Raynal <[email protected]>
commit a2ee41fd953e7c3ff6c55a3038c80354d191a318 upstream.
One layout supported by the Marvell NAND controller supports NAND pages of 2048 bytes, all handled in one single chunk when using BCH with a strength of 4-bit per 512 bytes. In this case, instead of the generic XTYPE_WRITE_DISPATCH/XTYPE_LAST_NAKED_RW couple, the controller expects to receive XTYPE_MONOLITHIC_RW.
This fixes problems at boot like:
[ 1.315475] Scanning device for bad blocks [ 3.203108] marvell-nfc f10d0000.flash: Timeout waiting for RB signal [ 3.209564] nand_bbt: error while writing BBT block -110 [ 4.243106] marvell-nfc f10d0000.flash: Timeout waiting for RB signal [ 5.283106] marvell-nfc f10d0000.flash: Timeout waiting for RB signal [ 5.289562] nand_bbt: error -110 while marking block 2047 bad [ 6.323106] marvell-nfc f10d0000.flash: Timeout waiting for RB signal [ 6.329559] nand_bbt: error while writing BBT block -110 [ 7.363106] marvell-nfc f10d0000.flash: Timeout waiting for RB signal [ 8.403105] marvell-nfc f10d0000.flash: Timeout waiting for RB signal [ 8.409559] nand_bbt: error -110 while marking block 2046 bad
...
--- drivers/mtd/nand/marvell_nand.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/mtd/nand/marvell_nand.c +7 -1
@@ -1404,6 +1404,7 @@ marvell_nfc_hw_ecc_bch_write_chunk(strucstruct marvell_nand_chip *marvell_nand =to_marvell_nand (chip);struct marvell_nfc *nfc =to_marvell_nfc (chip->controller);const struct marvell_hw_ecc_layout *lt =to_marvell_nand (chip)->layout; +u32 xtype;int ret;struct marvell_nfc_op nfc_op = { .ndcb[0 ] =NDCB0_CMD_TYPE (TYPE_WRITE ) |NDCB0_LEN_OVRD ,
@@ -1419,7 +1420,12 @@ marvell_nfc_hw_ecc_bch_write_chunk(struc* last naked write. */ if (chunk ==0 ) { - nfc_op.ndcb[0 ] |=NDCB0_CMD_XTYPE (XTYPE_WRITE_DISPATCH ) | +if (lt->nchunks ==1 ) + xtype =XTYPE_MONOLITHIC_RW ; +else + xtype =XTYPE_WRITE_DISPATCH ; + + nfc_op.ndcb[0 ] |=NDCB0_CMD_XTYPE (xtype) |NDCB0_ADDR_CYC (marvell_nand->addr_cyc) |NDCB0_CMD1 (NAND_CMD_SEQIN ); nfc_op.ndcb[1 ] |=NDCB1_ADDRS_PAGE (page);
Greg Kroah-Hartman
maintainerPATCH 41/72 mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit 3057fcef385348fe85173f1b0c824d89f1176f72 upstream.
NAND chips require a bit of time to take the NAND operation into account and set the BUSY bit in the STATUS reg. Make sure we don't poll the STATUS reg too early in nand_soft_waitrdy().
--- drivers/mtd/nand/nand_base.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/mtd/nand/nand_base.c +5 -0
@@ -707,12 +707,17 @@ static void nand_wait_status_ready(struc*/ int nand_soft_waitrdy (struct nand_chip *chip,unsigned long timeout_ms) { +const struct nand_sdr_timings *timings;u8 status =0 ;int ret;if (!chip->exec_op)return -ENOTSUPP ; +/* Wait tWB before polling the STATUS reg. */ + timings =nand_get_sdr_timings (&chip->data_interface); +ndelay (PSEC_TO_NSEC (timings->tWB_max)); + ret =nand_status_op (chip,NULL );if (ret)return ret;
Re: [PATCH 4.16 41/72] mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
Quoted 34 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit
3057fcef385348fe85173f1b0c824d89f1176f72upstream.NAND chips require a bit of time to take the NAND operation into account and set the BUSY bit in the STATUS reg. Make sure we don't poll the STATUS reg too early in
nand_soft_waitrdy().Fixes 8878b126df76 ("mtd: nand: add ->exec_op() implementation")Cc <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Acked-by Miquel Raynal <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/nand_base.c | 5 +++++ 1 file changed, 5 insertions(+)drivers/mtd/nand/nand_base.c +1
-0@@ -707,12 +707,17 @@ static void nand_wait_status_ready(struc*/ int nand_soft_waitrdy (struct nand_chip *chip,unsigned long timeout_ms) { +const struct nand_sdr_timings *timings;u8 status =0 ;int ret;
drivers/mtd/nand/nand_base.c static void nand_wait_status_ready(struc · line 723
Quoted 10 lines
drivers/mtd/nand/nand_base.c +4
-0if (!chip->exec_op)return -ENOTSUPP ; +/* Wait tWB before polling the STATUS reg. */ + timings =nand_get_sdr_timings (&chip->data_interface); +ndelay (PSEC_TO_NSEC (timings->tWB_max)); + ret =nand_status_op (chip,NULL );if (ret)return ret;
kbuild test robot via vger.kernel.org
Attachments1:36 PM (19 hours ago)
to Boris, kbuild-all, linux-kernel
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
master
head: ccda3c4b77777f66aeb3c531352bb40d59501c59 commit: 3057fcef385348fe85173f1b0c824d89f1176f72 mtd: rawnand: Make
sure we wait tWB before polling the STATUS reg
date: 3 days ago
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
-O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 3057fcef385348fe85173f1b0c824d89f1176f72
# save the attached .config to linux build tree
make.cross ARCH=m68k
All errors (new ones prefixed by >>):
drivers/mtd/nand/raw/nand_base.o: In function `nand_soft_waitrdy':
Quoted 1 line
Quoted 1 line
nand_base.c:(.text+0x1022): undefined reference to `__udivdi3'
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Greg Kroah-Hartman
maintainerRe: [PATCH 4.16 41/72] mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
Quoted 67 lines · Geert Uytterhoeven
Quoted 34 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit
3057fcef385348fe85173f1b0c824d89f1176f72upstream.NAND chips require a bit of time to take the NAND operation into account and set the BUSY bit in the STATUS reg. Make sure we don't poll the STATUS reg too early in
nand_soft_waitrdy().Fixes 8878b126df76 ("mtd: nand: add ->exec_op() implementation")Cc <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Acked-by Miquel Raynal <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/nand_base.c | 5 +++++ 1 file changed, 5 insertions(+)drivers/mtd/nand/nand_base.c +1
-0@@ -707,12 +707,17 @@ static void nand_wait_status_ready(struc*/ int nand_soft_waitrdy (struct nand_chip *chip,unsigned long timeout_ms) { +const struct nand_sdr_timings *timings;u8 status =0 ;int ret;drivers/mtd/nand/nand_base.c static void nand_wait_status_ready(struc · line 723
Quoted 10 lines
drivers/mtd/nand/nand_base.c +4
-0if (!chip->exec_op)return -ENOTSUPP ; +/* Wait tWB before polling the STATUS reg. */ + timings =nand_get_sdr_timings (&chip->data_interface); +ndelay (PSEC_TO_NSEC (timings->tWB_max)); + ret =nand_status_op (chip,NULL );if (ret)return ret;kbuild test robot via vger.kernel.org
Attachments1:36 PM (19 hours ago)
to Boris, kbuild-all, linux-kernel
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
masterhead: ccda3c4b77777f66aeb3c531352bb40d59501c59 commit: 3057fcef385348fe85173f1b0c824d89f1176f72 mtd: rawnand: Makesure we wait tWB before polling the STATUS reg
date: 3 days ago
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
-O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout3057fcef385348fe85173f1b0c824d89f1176f72
# save the attached .config to linux build tree
make.cross ARCH=m68k
Quoted 4 lines
All errors (new ones prefixed by >>):
drivers/mtd/nand/raw/nand_base.o: In function `nand_soft_waitrdy':Quoted 1 line
Quoted 1 line
nand_base.c:(.text+0x1022): undefined reference to `__udivdi3'
Ugh. Does this also happen in Linus's tree?
thanks,
greg k-h
Re: [PATCH 4.16 41/72] mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
Quoted 68 lines · On Mon, 14 May 2018 11:04:22 +0200 Greg Kroah-Hartman…
Quoted 67 lines · Geert Uytterhoeven
Quoted 34 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit
3057fcef385348fe85173f1b0c824d89f1176f72upstream.NAND chips require a bit of time to take the NAND operation into account and set the BUSY bit in the STATUS reg. Make sure we don't poll the STATUS reg too early in
nand_soft_waitrdy().Fixes 8878b126df76 ("mtd: nand: add ->exec_op() implementation")Cc <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Acked-by Miquel Raynal <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/nand_base.c | 5 +++++ 1 file changed, 5 insertions(+)drivers/mtd/nand/nand_base.c +1
-0@@ -707,12 +707,17 @@ static void nand_wait_status_ready(struc*/ int nand_soft_waitrdy (struct nand_chip *chip,unsigned long timeout_ms) { +const struct nand_sdr_timings *timings;u8 status =0 ;int ret;drivers/mtd/nand/nand_base.c static void nand_wait_status_ready(struc · line 723
Quoted 10 lines
drivers/mtd/nand/nand_base.c +4
-0if (!chip->exec_op)return -ENOTSUPP ; +/* Wait tWB before polling the STATUS reg. */ + timings =nand_get_sdr_timings (&chip->data_interface); +ndelay (PSEC_TO_NSEC (timings->tWB_max)); + ret =nand_status_op (chip,NULL );if (ret)return ret;kbuild test robot via vger.kernel.org
Attachments1:36 PM (19 hours ago)
to Boris, kbuild-all, linux-kernel
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
masterhead: ccda3c4b77777f66aeb3c531352bb40d59501c59 commit: 3057fcef385348fe85173f1b0c824d89f1176f72 mtd: rawnand: Makesure we wait tWB before polling the STATUS reg
date: 3 days ago
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
-O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout3057fcef385348fe85173f1b0c824d89f1176f72
# save the attached .config to linux build tree
make.cross ARCH=m68k
Quoted 6 lines
Quoted 4 lines
All errors (new ones prefixed by >>):
drivers/mtd/nand/raw/nand_base.o: In function `nand_soft_waitrdy':Quoted 1 line
Quoted 1 line
nand_base.c:(.text+0x1022): undefined reference to `__udivdi3'
Ugh. Does this also happen in Linus's tree?
Yes it does, unfortunately :-/. I posted a fix here [1].
Re: [PATCH 4.16 41/72] mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
Quoted 73 lines · Boris Brezillon
Quoted 70 lines · On Mon, 14 May 2018 11:04:22 +0200 Greg Kroah-Hartman…
Quoted 69 lines · Geert Uytterhoeven
Quoted 34 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit
3057fcef385348fe85173f1b0c824d89f1176f72upstream.NAND chips require a bit of time to take the NAND operation into account and set the BUSY bit in the STATUS reg. Make sure we don't poll the STATUS reg too early in
nand_soft_waitrdy().Fixes 8878b126df76 ("mtd: nand: add ->exec_op() implementation")Cc <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Acked-by Miquel Raynal <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/nand_base.c | 5 +++++ 1 file changed, 5 insertions(+)drivers/mtd/nand/nand_base.c +1
-0@@ -707,12 +707,17 @@ static void nand_wait_status_ready(struc*/ int nand_soft_waitrdy (struct nand_chip *chip,unsigned long timeout_ms) { +const struct nand_sdr_timings *timings;u8 status =0 ;int ret;drivers/mtd/nand/nand_base.c static void nand_wait_status_ready(struc · line 723
Quoted 10 lines
drivers/mtd/nand/nand_base.c +4
-0if (!chip->exec_op)return -ENOTSUPP ; +/* Wait tWB before polling the STATUS reg. */ + timings =nand_get_sdr_timings (&chip->data_interface); +ndelay (PSEC_TO_NSEC (timings->tWB_max)); + ret =nand_status_op (chip,NULL );if (ret)return ret;kbuild test robot via vger.kernel.org
Attachments1:36 PM (19 hours ago)
to Boris, kbuild-all, linux-kernel
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
masterhead: ccda3c4b77777f66aeb3c531352bb40d59501c59 commit: 3057fcef385348fe85173f1b0c824d89f1176f72 mtd: rawnand: Makesure we wait tWB before polling the STATUS reg
date: 3 days ago
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
-O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout3057fcef385348fe85173f1b0c824d89f1176f72
# save the attached .config to linux build tree
make.cross ARCH=m68kAll errors (new ones prefixed by >>):
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines
drivers/mtd/nand/raw/nand_base.o: In function `nand_soft_waitrdy':Quoted 1 line
Quoted 1 line
nand_base.c:(.text+0x1022): undefined reference to `__udivdi3'
Ugh. Does this also happen in Linus's tree?
Yes it does, unfortunately :-/. I posted a fix here [1].
And a fix for the root cause:
https://patchwork.kernel.org/patch/10397919/
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Re: [PATCH 4.16 41/72] mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
In reply to Greg Kroah-HartmanHi Greg,
Quoted 68 lines · Greg Kroah-Hartman
Quoted 67 lines · Geert Uytterhoeven
Quoted 34 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit
3057fcef385348fe85173f1b0c824d89f1176f72upstream.NAND chips require a bit of time to take the NAND operation into account and set the BUSY bit in the STATUS reg. Make sure we don't poll the STATUS reg too early in
nand_soft_waitrdy().Fixes 8878b126df76 ("mtd: nand: add ->exec_op() implementation")Cc <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Acked-by Miquel Raynal <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/nand_base.c | 5 +++++ 1 file changed, 5 insertions(+)drivers/mtd/nand/nand_base.c +1
-0@@ -707,12 +707,17 @@ static void nand_wait_status_ready(struc*/ int nand_soft_waitrdy (struct nand_chip *chip,unsigned long timeout_ms) { +const struct nand_sdr_timings *timings;u8 status =0 ;int ret;drivers/mtd/nand/nand_base.c static void nand_wait_status_ready(struc · line 723
Quoted 10 lines
drivers/mtd/nand/nand_base.c +4
-0if (!chip->exec_op)return -ENOTSUPP ; +/* Wait tWB before polling the STATUS reg. */ + timings =nand_get_sdr_timings (&chip->data_interface); +ndelay (PSEC_TO_NSEC (timings->tWB_max)); + ret =nand_status_op (chip,NULL );if (ret)return ret;kbuild test robot via vger.kernel.org
Attachments1:36 PM (19 hours ago)
to Boris, kbuild-all, linux-kernel
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
masterhead: ccda3c4b77777f66aeb3c531352bb40d59501c59 commit: 3057fcef385348fe85173f1b0c824d89f1176f72 mtd: rawnand: Makesure we wait tWB before polling the STATUS reg
date: 3 days ago
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
-O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout3057fcef385348fe85173f1b0c824d89f1176f72
# save the attached .config to linux build tree
make.cross ARCH=m68k
Quoted 6 lines
Quoted 4 lines
All errors (new ones prefixed by >>):
drivers/mtd/nand/raw/nand_base.o: In function `nand_soft_waitrdy':Quoted 1 line
Quoted 1 line
nand_base.c:(.text+0x1022): undefined reference to `__udivdi3'
Ugh. Does this also happen in Linus's tree?
Unfortunately yes, this is torvalds/linux.git, cfr. "tree" above.
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Greg Kroah-Hartman
maintainerRe: [PATCH 4.16 41/72] mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
In reply to Greg Kroah-HartmanQuoted 68 lines · Greg Kroah-Hartman
Quoted 67 lines · Geert Uytterhoeven
Quoted 34 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit
3057fcef385348fe85173f1b0c824d89f1176f72upstream.NAND chips require a bit of time to take the NAND operation into account and set the BUSY bit in the STATUS reg. Make sure we don't poll the STATUS reg too early in
nand_soft_waitrdy().Fixes 8878b126df76 ("mtd: nand: add ->exec_op() implementation")Cc <[email protected]>Signed-off-by Boris Brezillon <[email protected]>Acked-by Miquel Raynal <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/mtd/nand/nand_base.c | 5 +++++ 1 file changed, 5 insertions(+)drivers/mtd/nand/nand_base.c +1
-0@@ -707,12 +707,17 @@ static void nand_wait_status_ready(struc*/ int nand_soft_waitrdy (struct nand_chip *chip,unsigned long timeout_ms) { +const struct nand_sdr_timings *timings;u8 status =0 ;int ret;drivers/mtd/nand/nand_base.c static void nand_wait_status_ready(struc · line 723
Quoted 10 lines
drivers/mtd/nand/nand_base.c +4
-0if (!chip->exec_op)return -ENOTSUPP ; +/* Wait tWB before polling the STATUS reg. */ + timings =nand_get_sdr_timings (&chip->data_interface); +ndelay (PSEC_TO_NSEC (timings->tWB_max)); + ret =nand_status_op (chip,NULL );if (ret)return ret;kbuild test robot via vger.kernel.org
Attachments1:36 PM (19 hours ago)
to Boris, kbuild-all, linux-kernel
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
masterhead: ccda3c4b77777f66aeb3c531352bb40d59501c59 commit: 3057fcef385348fe85173f1b0c824d89f1176f72 mtd: rawnand: Makesure we wait tWB before polling the STATUS reg
date: 3 days ago
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
-O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout3057fcef385348fe85173f1b0c824d89f1176f72
# save the attached .config to linux build tree
make.cross ARCH=m68k
Quoted 6 lines
Quoted 4 lines
All errors (new ones prefixed by >>):
drivers/mtd/nand/raw/nand_base.o: In function `nand_soft_waitrdy':Quoted 1 line
Quoted 1 line
nand_base.c:(.text+0x1022): undefined reference to `__udivdi3'
Ugh. Does this also happen in Linus's tree?
Ok, I've now dropped this patch and will queue it up later with the fix hits Linus's tree as well.
thanks,
greg k-h
Greg Kroah-Hartman
maintainerPATCH 42/72 drm/vc4: Fix scaling of uni-planar formats
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit 9a0e9802217291e54c4dd1fc5462f189a4be14ec upstream.
When using uni-planar formats (like RGB), the scaling parameters are stored in plane 0, not plane 1.
--- drivers/gpu/drm/vc4/vc4_plane.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/vc4/vc4_plane.c +1 -1
@@ -557,7 +557,7 @@ static int vc4_plane_mode_set(struct drm* the scl fields here. */ if (num_planes ==1 ) { - scl0 =vc4_get_scl_field (state,1 ); + scl0 =vc4_get_scl_field (state,0 ); scl1 = scl0; }else { scl0 =vc4_get_scl_field (state,1 );
Greg Kroah-Hartman
maintainerPATCH 43/72 drm/ttm: Use GFP_TRANSHUGE_LIGHT for allocating huge pages
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michel Dänzer <[email protected]>
commit da291320baec914f0bb4e65a9dccb86bd6c728f2 upstream.
GFP_TRANSHUGE tries very hard to allocate huge pages, which can result in long delays with high memory pressure. I have observed firefox freezing for up to around a minute due to this while restic was taking a full system backup.
Since we don't really need huge pages, use GFP_TRANSHUGE_LIGHT | __GFP_NORETRY instead, in order to fail quickly when there are no huge pages available.
Set __GFP_KSWAPD_RECLAIM as well, in order for huge pages to be freed up in the background if necessary.
With these changes, I'm no longer seeing freezes during a restic backup.
--- drivers/gpu/drm/ttm/ttm_page_alloc.c | 11 ++++++++--- drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-)
drivers/gpu/drm/ttm/ttm_page_alloc.c +8 -3
@@ -904,7 +904,8 @@ static int ttm_get_pages(struct page **pwhile (npages >=HPAGE_PMD_NR ) {gfp_t huge_flags = gfp_flags; - huge_flags |=GFP_TRANSHUGE ; + huge_flags |=GFP_TRANSHUGE_LIGHT | __GFP_NORETRY | + __GFP_KSWAPD_RECLAIM; huge_flags &= ~__GFP_MOVABLE; huge_flags &= ~__GFP_COMP; p =alloc_pages (huge_flags,HPAGE_PMD_ORDER );
@@ -1021,11 +1022,15 @@ int ttm_page_alloc_init(struct ttm_mem_g GFP_USER | GFP_DMA32, "uc dma", 0);ttm_page_pool_init_locked (&_manager->wc_pool_huge, -GFP_TRANSHUGE & ~(__GFP_MOVABLE | __GFP_COMP), + (GFP_TRANSHUGE_LIGHT | __GFP_NORETRY | + __GFP_KSWAPD_RECLAIM) & + ~(__GFP_MOVABLE | __GFP_COMP),"wc huge" , order);ttm_page_pool_init_locked (&_manager->uc_pool_huge, -GFP_TRANSHUGE & ~(__GFP_MOVABLE | __GFP_COMP) + (GFP_TRANSHUGE_LIGHT | __GFP_NORETRY | + __GFP_KSWAPD_RECLAIM) & + ~(__GFP_MOVABLE | __GFP_COMP) ,"uc huge" , order); _manager->options.max_size = max_pages;
drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +2 -1
@@ -915,7 +915,8 @@ static gfp_t ttm_dma_pool_gfp_flags(stru gfp_flags |= __GFP_ZERO;if (huge) { - gfp_flags |=GFP_TRANSHUGE ; + gfp_flags |=GFP_TRANSHUGE_LIGHT | __GFP_NORETRY | + __GFP_KSWAPD_RECLAIM; gfp_flags &= ~__GFP_MOVABLE; gfp_flags &= ~__GFP_COMP; }
Greg Kroah-Hartman
maintainerPATCH 44/72 drm/i915: Fix drm:intel_enable_lvds ERROR message in kernel log
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florent Flament <[email protected]>
commit e8f48f96db7e482995743f461b3e8a5c1a102533 upstream.
Fix [drm:intel_enable_lvds] *ERROR* timed out waiting for panel to power on in kernel log at boot time.
Toshiba Satellite Z930 laptops needs between 1 and 2 seconds to power on its screen during Intel i915 DRM initialization. This currently results in a [drm:intel_enable_lvds] *ERROR* timed out waiting for panel to power on message appearing in the kernel log during boot time and when stopping the machine.
This change increases the timeout of the intel_enable_lvds function from 1 to 5 seconds, letting enough time for the Satellite 930 LCD screen to power on, and suppressing the error message from the kernel log.
This patch has been successfully tested on Linux 4.14 running on a Toshiba Satellite Z930.
[vsyrjala: bump the timeout from 2 to 5 seconds to match the DP
code and properly cover the max hw timeout of ~4 seconds, and drop the comment about the specific machine since this is not a particulary surprising issue, nor specific to that one machine]
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103414
References: https://bugzilla.kernel.org/show_bug.cgi?id=57591
--- drivers/gpu/drm/i915/intel_lvds.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/i915/intel_lvds.c +2 -1
@@ -319,7 +319,8 @@ static void intel_enable_lvds(struct intI915_WRITE (PP_CONTROL (0 ),I915_READ (PP_CONTROL (0 )) |PANEL_POWER_ON );POSTING_READ (lvds_encoder->reg); -if (intel_wait_for_register (dev_priv,PP_STATUS (0 ),PP_ON ,PP_ON ,1000 )) + +if (intel_wait_for_register (dev_priv,PP_STATUS (0 ),PP_ON ,PP_ON ,5000 ))DRM_ERROR ("timed out waiting for panel to power on\n" );intel_panel_enable_backlight (pipe_config, conn_state);
Greg Kroah-Hartman
maintainerPATCH 45/72 drm/i915: Adjust eDPs logical vco in a reliable place.
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rodrigo Vivi <[email protected]>
commit 9d219554d9bf59875b4e571a0392d620e8954879 upstream.
On intel_dp_compute_config() we were calculating the needed vco for eDP on gen9 and we stashing it in intel_atomic_state.cdclk.logical.vco
However few moments later on intel_modeset_checks() we fully replace entire intel_atomic_state.cdclk.logical with dev_priv->cdclk.logical fully overwriting the logical desired vco for eDP on gen9.
So, with wrong VCO value we end up with wrong desired cdclk, but also it will raise a lot of WARNs: On gen9, when we read CDCLK_CTL to verify if we configured properly the desired frequency the CD Frequency Select bits [27:26] == 10b can mean 337.5 or 308.57 MHz depending on the VCO. So if we have wrong VCO value stashed we will believe the frequency selection didn't stick and start to raise WARNs of cdclk mismatch.
[ 42.857519] [drm:intel_dump_cdclk_state [i915]] Changing CDCLK to 308571 kHz, VCO 8640000 kHz, ref 24000 kHz, bypass 24000 kHz, voltage level 0 [ 42.897269] cdclk state doesn't match! [ 42.901052] WARNING: CPU: 5 PID: 1116 at drivers/gpu/drm/i915/intel_cdclk.c:2084 intel_set_cdclk+0x5d/0x110 [i915] [ 42.938004] RIP: 0010:intel_set_cdclk+0x5d/0x110 [i915] [ 43.155253] WARNING: CPU: 5 PID: 1116 at drivers/gpu/drm/i915/intel_cdclk.c:2084 intel_set_cdclk+0x5d/0x110 [i915] [ 43.170277] [drm:intel_dump_cdclk_state [i915]] [hw state] 337500 kHz, VCO 8100000 kHz, ref 24000 kHz, bypass 24000 kHz, voltage level 0 [ 43.182566] [drm:intel_dump_cdclk_state [i915]] [sw state] 308571 kHz, VCO 8640000 kHz, ref 24000 kHz, bypass 24000 kHz, voltage level 0
v2: Move the entire eDP's vco logical adjustment to inside
the skl_modeset_calc_cdclk as suggested by Ville.
--- drivers/gpu/drm/i915/intel_cdclk.c | 41 +++++++++++++++++++++++++++++++++---- drivers/gpu/drm/i915/intel_dp.c | 20 ------------------ 2 files changed, 37 insertions(+), 24 deletions(-)
drivers/gpu/drm/i915/intel_cdclk.c +37 -4
@@ -2108,9 +2108,44 @@ static int bdw_modeset_calc_cdclk(structreturn 0 ; } +static int skl_dpll0_vco (struct intel_atomic_state *intel_state) +{ +struct drm_i915_private *dev_priv =to_i915 (intel_state->base.dev); +struct intel_crtc *crtc; +struct intel_crtc_state *crtc_state; +int vco, i; + + vco = intel_state->cdclk.logical.vco; +if (!vco) + vco = dev_priv->skl_preferred_vco_freq; + +for_each_new_intel_crtc_in_state (intel_state, crtc, crtc_state, i) { +if (!crtc_state->base.enable) +continue ; + +if (!intel_crtc_has_type (crtc_state,INTEL_OUTPUT_EDP )) +continue ; + +/* +* DPLL0 VCO may need to be adjusted to get the correct +* clock for eDP. This will affect cdclk as well. +*/ +switch (crtc_state->port_clock /2 ) { +case 108000 : +case 216000 : + vco =8640000 ; +break ; +default : + vco =8100000 ; +break ; + } + } + +return vco; +} +static int skl_modeset_calc_cdclk (struct drm_atomic_state *state) { -struct drm_i915_private *dev_priv =to_i915 (state->dev);struct intel_atomic_state *intel_state =to_intel_atomic_state (state);int min_cdclk, cdclk, vco;
@@ -2118,9 +2153,7 @@ static int skl_modeset_calc_cdclk(structif (min_cdclk <0 )return min_cdclk; - vco = intel_state->cdclk.logical.vco; -if (!vco) - vco = dev_priv->skl_preferred_vco_freq; + vco =skl_dpll0_vco (intel_state);/* * FIXME should also account for plane ratio
drivers/gpu/drm/i915/intel_dp.c +0 -20
@@ -1794,26 +1794,6 @@ found: reduce_m_n); } -/* -* DPLL0 VCO may need to be adjusted to get the correct -* clock for eDP. This will affect cdclk as well. -*/ -if (intel_dp_is_edp (intel_dp) &&IS_GEN9_BC (dev_priv)) { -int vco; - -switch (pipe_config->port_clock /2 ) { -case 108000 : -case 216000 : - vco =8640000 ; -break ; -default : - vco =8100000 ; -break ; - } - -to_intel_atomic_state (pipe_config->base.state)->cdclk.logical.vco = vco; - } -if (!HAS_DDI (dev_priv))intel_dp_set_clock (encoder, pipe_config);
Greg Kroah-Hartman
maintainerPATCH 46/72 drm/nouveau: Fix deadlock in nv50_mstm_register_connector()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lyude Paul <[email protected]>
commit 352672db857290ab5b0e2b6a99c414f92bee024c upstream.
Currently; we're grabbing all of the modesetting locks before adding MST connectors to fbdev. This isn't actually necessary, and causes a deadlock as well:
======================================================
WARNING: possible circular locking dependency detected
4.17.0-rc3Lyude-Test+ #1 Tainted: G O
------------------------------------------------------
kworker/1:0/18 is trying to acquire lock:00000000c832f62d (&helper->lock){+.+.}, at: drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
but task is already holding lock:00000000942e28e2 (crtc_ww_class_mutex){+.+.}, at: drm_modeset_backoff+0x8e/0x1c0 [drm]
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #3 (crtc_ww_class_mutex){+.+.}:
ww_mutex_lock+0x43/0x80
drm_modeset_lock+0x71/0x130 [drm]
drm_helper_probe_single_connector_modes+0x7d/0x6b0 [drm_kms_helper]
drm_setup_crtcs+0x15e/0xc90 [drm_kms_helper]
__drm_fb_helper_initial_config_and_unlock+0x29/0x480 [drm_kms_helper]
nouveau_fbcon_init+0x138/0x1a0 [nouveau]
nouveau_drm_load+0x173/0x7e0 [nouveau]
drm_dev_register+0x134/0x1c0 [drm]
drm_get_pci_dev+0x8e/0x160 [drm]
nouveau_drm_probe+0x1a9/0x230 [nouveau]
pci_device_probe+0xcd/0x150
driver_probe_device+0x30b/0x480
__driver_attach+0xbc/0xe0
bus_for_each_dev+0x67/0x90
bus_add_driver+0x164/0x260
driver_register+0x57/0xc0
do_one_initcall+0x4d/0x323
do_init_module+0x5b/0x1f8
load_module+0x20e5/0x2ac0
__do_sys_finit_module+0xb7/0xd0
do_syscall_64+0x60/0x1b0
entry_SYSCALL_64_after_hwframe+0x49/0xbe-> #2 (crtc_ww_class_acquire){+.+.}:
drm_helper_probe_single_connector_modes+0x58/0x6b0 [drm_kms_helper]
drm_setup_crtcs+0x15e/0xc90 [drm_kms_helper]
__drm_fb_helper_initial_config_and_unlock+0x29/0x480 [drm_kms_helper]
nouveau_fbcon_init+0x138/0x1a0 [nouveau]
nouveau_drm_load+0x173/0x7e0 [nouveau]
drm_dev_register+0x134/0x1c0 [drm]
drm_get_pci_dev+0x8e/0x160 [drm]
nouveau_drm_probe+0x1a9/0x230 [nouveau]
pci_device_probe+0xcd/0x150
driver_probe_device+0x30b/0x480
__driver_attach+0xbc/0xe0
bus_for_each_dev+0x67/0x90
bus_add_driver+0x164/0x260
driver_register+0x57/0xc0
do_one_initcall+0x4d/0x323
do_init_module+0x5b/0x1f8
load_module+0x20e5/0x2ac0
__do_sys_finit_module+0xb7/0xd0
do_syscall_64+0x60/0x1b0
entry_SYSCALL_64_after_hwframe+0x49/0xbe-> #1 (&dev->mode_config.mutex){+.+.}:
drm_setup_crtcs+0x10c/0xc90 [drm_kms_helper]
__drm_fb_helper_initial_config_and_unlock+0x29/0x480 [drm_kms_helper]
nouveau_fbcon_init+0x138/0x1a0 [nouveau]
nouveau_drm_load+0x173/0x7e0 [nouveau]
drm_dev_register+0x134/0x1c0 [drm]
drm_get_pci_dev+0x8e/0x160 [drm]
nouveau_drm_probe+0x1a9/0x230 [nouveau]
pci_device_probe+0xcd/0x150
driver_probe_device+0x30b/0x480
__driver_attach+0xbc/0xe0
bus_for_each_dev+0x67/0x90
bus_add_driver+0x164/0x260
driver_register+0x57/0xc0
do_one_initcall+0x4d/0x323
do_init_module+0x5b/0x1f8
load_module+0x20e5/0x2ac0
__do_sys_finit_module+0xb7/0xd0
do_syscall_64+0x60/0x1b0
entry_SYSCALL_64_after_hwframe+0x49/0xbe-> #0 (&helper->lock){+.+.}:
__mutex_lock+0x70/0x9d0
drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper]
nv50_mstm_register_connector+0x2c/0x50 [nouveau]
drm_dp_add_port+0x2f5/0x420 [drm_kms_helper]
drm_dp_send_link_address+0x155/0x1e0 [drm_kms_helper]
drm_dp_add_port+0x33f/0x420 [drm_kms_helper]
drm_dp_send_link_address+0x155/0x1e0 [drm_kms_helper]
drm_dp_check_and_send_link_address+0x87/0xd0 [drm_kms_helper]
drm_dp_mst_link_probe_work+0x4d/0x80 [drm_kms_helper]
process_one_work+0x20d/0x650
worker_thread+0x3a/0x390
kthread+0x11e/0x140
ret_from_fork+0x3a/0x50other info that might help us debug this:
Chain exists of:
&helper->lock --> crtc_ww_class_acquire --> crtc_ww_class_mutex
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(crtc_ww_class_mutex);
lock(crtc_ww_class_acquire);
lock(crtc_ww_class_mutex);
lock(&helper->lock); *** DEADLOCK ***
5 locks held by kworker/1:0/18:
#0: 000000004a05cd50 ((wq_completion)"events_long"){+.+.}, at: process_one_work+0x187/0x650 #1: 00000000601c11d1 ((work_completion)(&mgr->work)){+.+.}, at: process_one_work+0x187/0x650 #2: 00000000586ca0df (&dev->mode_config.mutex){+.+.}, at: drm_modeset_lock_all+0x3a/0x1b0 [drm] #3: 00000000d3ca0ffa (crtc_ww_class_acquire){+.+.}, at: drm_modeset_lock_all+0x44/0x1b0 [drm] #4: 00000000942e28e2 (crtc_ww_class_mutex){+.+.}, at: drm_modeset_backoff+0x8e/0x1c0 [drm]
stack backtrace: CPU: 1 PID: 18 Comm: kworker/1:0 Tainted: G O 4.17.0-rc3Lyude-Test+ #1 Hardware name: Gateway FX6840/FX6840, BIOS P01-A3 05/17/2010 Workqueue: events_long drm_dp_mst_link_probe_work [drm_kms_helper] Call Trace: dump_stack+0x85/0xcb print_circular_bug.isra.38+0x1ce/0x1db __lock_acquire+0x128f/0x1350 ? lock_acquire+0x9f/0x200 ? lock_acquire+0x9f/0x200 ? __ww_mutex_lock.constprop.13+0x8f/0x1000 lock_acquire+0x9f/0x200 ? drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper] ? drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper] __mutex_lock+0x70/0x9d0 ? drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper] ? ww_mutex_lock+0x43/0x80 ? _cond_resched+0x15/0x30 ? ww_mutex_lock+0x43/0x80 ? drm_modeset_lock+0xb2/0x130 [drm] ? drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper] drm_fb_helper_add_one_connector+0x2a/0x60 [drm_kms_helper] nv50_mstm_register_connector+0x2c/0x50 [nouveau] drm_dp_add_port+0x2f5/0x420 [drm_kms_helper] ? mark_held_locks+0x50/0x80 ? kfree+0xcf/0x2a0 ? drm_dp_check_mstb_guid+0xd6/0x120 [drm_kms_helper] ? trace_hardirqs_on_caller+0xed/0x180 ? drm_dp_check_mstb_guid+0xd6/0x120 [drm_kms_helper] drm_dp_send_link_address+0x155/0x1e0 [drm_kms_helper] drm_dp_add_port+0x33f/0x420 [drm_kms_helper] ? nouveau_connector_aux_xfer+0x7c/0xb0 [nouveau] ? find_held_lock+0x2d/0x90 ? drm_dp_dpcd_access+0xd9/0xf0 [drm_kms_helper] ? __mutex_unlock_slowpath+0x3b/0x280 ? drm_dp_dpcd_access+0xd9/0xf0 [drm_kms_helper] drm_dp_send_link_address+0x155/0x1e0 [drm_kms_helper] drm_dp_check_and_send_link_address+0x87/0xd0 [drm_kms_helper] drm_dp_mst_link_probe_work+0x4d/0x80 [drm_kms_helper] process_one_work+0x20d/0x650 worker_thread+0x3a/0x390 ? process_one_work+0x650/0x650 kthread+0x11e/0x140 ? kthread_create_worker_on_cpu+0x50/0x50 ret_from_fork+0x3a/0x50
Taking example from i915, the only time we need to hold any modesetting locks is when changing the port on the mstc, and in that case we only need to hold the connection mutex.
--- drivers/gpu/drm/nouveau/nv50_display.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/gpu/drm/nouveau/nv50_display.c +3 -4
@@ -3272,10 +3272,11 @@ nv50_mstm_destroy_connector(struct drm_ddrm_connector_unregister (&mstc->connector); -drm_modeset_lock_all (drm->dev);drm_fb_helper_remove_one_connector (&drm->fbcon->helper, &mstc->connector); + +drm_modeset_lock (&drm->dev->mode_config.connection_mutex,NULL ); mstc->port =NULL ; -drm_modeset_unlock_all (drm->dev); +drm_modeset_unlock (&drm->dev->mode_config.connection_mutex);drm_connector_unreference (&mstc->connector); }
@@ -3285,9 +3286,7 @@ nv50_mstm_register_connector(struct drm_ {struct nouveau_drm *drm =nouveau_drm (connector->dev); -drm_modeset_lock_all (drm->dev);drm_fb_helper_add_one_connector (&drm->fbcon->helper, connector); -drm_modeset_unlock_all (drm->dev);drm_connector_register (connector); }
Greg Kroah-Hartman
maintainerPATCH 47/72 drm/nouveau/ttm: dont dereference nvbo::cli, it can outlive client
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ben Skeggs <[email protected]>
commit 0d5a03c3d9254813ca76d7886ff9ed76a0aea545 upstream.
Potentially responsible for some random OOPSes.
--- drivers/gpu/drm/nouveau/nouveau_bo.c | 1 - drivers/gpu/drm/nouveau/nouveau_bo.h | 2 -- drivers/gpu/drm/nouveau/nouveau_ttm.c | 6 +++--- 3 files changed, 3 insertions(+), 6 deletions(-)
drivers/gpu/drm/nouveau/nouveau_bo.c +0 -1
@@ -214,7 +214,6 @@ nouveau_bo_new(struct nouveau_cli *cli,INIT_LIST_HEAD (&nvbo->entry);INIT_LIST_HEAD (&nvbo->vma_list); nvbo->bo.bdev = &drm->ttm.bdev; - nvbo->cli = cli;/* This is confusing, and doesn't actually mean we want an uncached * mapping, but is what NOUVEAU_GEM_DOMAIN_COHERENT gets translated
drivers/gpu/drm/nouveau/nouveau_bo.h +0 -2
@@ -26,8 +26,6 @@ struct nouveau_bo {struct list_head vma_list; -struct nouveau_cli *cli; - unsigned contig:1; unsigned page:5; unsigned kind:8;
drivers/gpu/drm/nouveau/nouveau_ttm.c +3 -3
@@ -63,7 +63,7 @@ nouveau_vram_manager_new(struct ttm_mem_ struct ttm_mem_reg *reg) {struct nouveau_bo *nvbo =nouveau_bo (bo); -struct nouveau_drm *drm = nvbo->cli->drm; +struct nouveau_drm *drm =nouveau_bdev (bo->bdev);struct nouveau_mem *mem;int ret;
@@ -103,7 +103,7 @@ nouveau_gart_manager_new(struct ttm_mem_ struct ttm_mem_reg *reg) {struct nouveau_bo *nvbo =nouveau_bo (bo); -struct nouveau_drm *drm = nvbo->cli->drm; +struct nouveau_drm *drm =nouveau_bdev (bo->bdev);struct nouveau_mem *mem;int ret;
@@ -131,7 +131,7 @@ nv04_gart_manager_new(struct ttm_mem_typ struct ttm_mem_reg *reg) {struct nouveau_bo *nvbo =nouveau_bo (bo); -struct nouveau_drm *drm = nvbo->cli->drm; +struct nouveau_drm *drm =nouveau_bdev (bo->bdev);struct nouveau_mem *mem;int ret;
Greg Kroah-Hartman
maintainerPATCH 48/72 drm/atomic: Clean old_state/new_state in drm_atomic_state_default_clear()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ville Syrjälä <[email protected]>
commit f0b408eebc993310bea3f2daae286c40bd3f063b upstream.
Clear the old_state and new_state pointers for every object in drm_atomic_state_default_clear(). Otherwise drm_atomic_get_{new,old}_*_state() will hand out stale pointers to anyone who hasn't first confirmed that the object is in fact part of the current atomic transcation, if they are called after we've done the ww backoff dance while hanging on to the same drm_atomic_state.
For example, handle_conflicting_encoders() looks like it could hit this since it iterates the full connector list and just calls drm_atomic_get_new_connector_state() for each.
And I believe we have now witnessed this happening at least once in i915 check_digital_port_conflicts(). Commit 8b69449d2663 ("drm/i915:
Remove last references to drm_atomic_get_existing* macros") changed the safe drm_atomic_get_existing_connector_state() to the unsafe drm_atomic_get_new_connector_state(), which opened the doors for this particular bug there as well.
v2: Split private objs out to a separate patch (Daniel)
--- drivers/gpu/drm/drm_atomic.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/gpu/drm/drm_atomic.c +6 -0
@@ -155,6 +155,8 @@ void drm_atomic_state_default_clear(stru state->connectors[i].state); state->connectors[i].ptr =NULL ; state->connectors[i].state =NULL ; + state->connectors[i].old_state =NULL ; + state->connectors[i].new_state =NULL ;drm_connector_put (connector); }
@@ -169,6 +171,8 @@ void drm_atomic_state_default_clear(stru state->crtcs[i].ptr =NULL ; state->crtcs[i].state =NULL ; + state->crtcs[i].old_state =NULL ; + state->crtcs[i].new_state =NULL ; }for (i =0 ; i < config->num_total_plane; i++) {
@@ -181,6 +185,8 @@ void drm_atomic_state_default_clear(stru state->planes[i].state); state->planes[i].ptr =NULL ; state->planes[i].state =NULL ; + state->planes[i].old_state =NULL ; + state->planes[i].new_state =NULL ; }for (i =0 ; i < state->num_private_objs; i++) {
Greg Kroah-Hartman
maintainerPATCH 49/72 drm/atomic: Clean private obj old_state/new_state in drm_atomic_state_default_clear()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ville Syrjälä <[email protected]>
commit b5cb2e5a1f64d882a155add7522247ab0523051e upstream.
Clear the old_state and new_state pointers for private objects in drm_atomic_state_default_clear(). We don't actually have functions to get the new/old state for private objects so getting access to the potentially stale pointers requires a bit more manual labour than for other object types. But let's clear the pointers for private objects as well, if only to avoid future surprises when someone decides to add the functions to get at them.
v2: Split private objs to a separate patch (Daniel)
--- drivers/gpu/drm/drm_atomic.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/drm_atomic.c +2 -0
@@ -196,6 +196,8 @@ void drm_atomic_state_default_clear(stru state->private_objs[i].state); state->private_objs[i].ptr =NULL ; state->private_objs[i].state =NULL ; + state->private_objs[i].old_state =NULL ; + state->private_objs[i].new_state =NULL ; } state->num_private_objs =0 ;
Greg Kroah-Hartman
maintainerPATCH 50/72 net: atm: Fix potential Spectre v1
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
commit acf784bd0ce257fe43da7ca266f7a10b837479d2 upstream.
ioc_data.dev_num can be controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability.
This issue was detected with the help of Smatch:net/atm/lec.c:702 lec_vcc_attach() warn: potential spectre issue 'dev_lec'
Fix this by sanitizing ioc_data.dev_num before using it to index dev_lec. Also, notice that there is another instance in which array dev_lec is being indexed using ioc_data.dev_num at line 705:
lec_vcc_added(netdev_priv(dev_lec[ioc_data.dev_num]),
Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1].
[1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
--- net/atm/lec.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
net/atm/lec.c +7 -2
@@ -41,6 +41,9 @@ static unsigned char bridge_ula_lec[] =#include <linux/module.h> #include <linux/init.h> +/* Hardening for Spectre-v1 */ +#include <linux/nospec.h> +#include "lec.h" #include "lec_arpc.h" #include "resources.h"
@@ -687,8 +690,10 @@ static int lec_vcc_attach(struct atm_vcc bytes_left =copy_from_user (&ioc_data, arg,sizeof (struct atmlec_ioc ));if (bytes_left !=0 )pr_info ("copy from user failed for %d bytes\n" , bytes_left); -if (ioc_data.dev_num <0 || ioc_data.dev_num >=MAX_LEC_ITF || - !dev_lec[ioc_data.dev_num]) +if (ioc_data.dev_num <0 || ioc_data.dev_num >=MAX_LEC_ITF ) +return -EINVAL ; + ioc_data.dev_num =array_index_nospec (ioc_data.dev_num,MAX_LEC_ITF ); +if (!dev_lec[ioc_data.dev_num])return -EINVAL ; vpriv =kmalloc (sizeof (struct lec_vcc_priv ),GFP_KERNEL );if (!vpriv)
Greg Kroah-Hartman
maintainerPATCH 51/72 atm: zatm: Fix potential Spectre v1
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
commit 2be147f7459db5bbf292e0a6f135037b55e20b39 upstream.
pool can be indirectly controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability.
This issue was detected with the help of Smatch:
drivers/atm/zatm.c:1462 zatm_ioctl() warn: potential spectre issue 'zatm_dev->pool_info' (local cap)
Fix this by sanitizing pool before using it to index zatm_dev->pool_info
Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1].
[1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
--- drivers/atm/zatm.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/atm/zatm.c +3 -0
@@ -28,6 +28,7 @@#include <asm/io.h> #include <linux/atomic.h> #include <linux/uaccess.h> +#include <linux/nospec.h> #include "uPD98401.h" #include "uPD98402.h"
@@ -1458,6 +1459,8 @@ static int zatm_ioctl(struct atm_dev *dereturn -EFAULT ;if (pool <0 || pool >ZATM_LAST_POOL )return -EINVAL ; + pool =array_index_nospec (pool, +ZATM_LAST_POOL +1 );spin_lock_irqsave (&zatm_dev->lock, flags); info = zatm_dev->pool_info[pool];if (cmd ==ZATM_GETPOOLZ ) {
Greg Kroah-Hartman
maintainerPATCH 52/72 PCI / PM: Always check PME wakeup capability for runtime wakeup support
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kai Heng Feng <[email protected]>
commit 8feaec33b9868582654cd3d5355225dcb79aeca6 upstream.
USB controller ASM1042 stops working after commit de3ef1eb1cd0 (PM /
core: Drop run_wake flag from struct dev_pm_info).
The device in question is not power managed by platform firmware, furthermore, it only supports PME# from D3cold:
Capabilities: [78] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA PME(D0-,D1-,D2-,D3hot-,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Before commit de3ef1eb1cd0, the device never gets runtime suspended. After that commit, the device gets runtime suspended to D3hot, which can not generate any PME#.
usb_hcd_pci_probe() unconditionally calls device_wakeup_enable(), hence device_can_wakeup() in pci_dev_run_wake() always returns true.
So pci_dev_run_wake() needs to check PME wakeup capability as its first condition.
In addition, change wakeup flag passed to pci_target_state() from false to true, because we want to find the deepest state different from D3cold that the device can still generate PME#. In this case, it's D0 for the device in question.
--- drivers/pci/pci.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/pci/pci.c +4 -4
@@ -2125,16 +2125,16 @@ bool pci_dev_run_wake(struct pci_dev *de {struct pci_bus *bus = dev->bus; -if (device_can_wakeup (&dev->dev)) -return true; -if (!dev->pme_support)return false;/* PME-capable in principle, but not from the target power state */ -if (!pci_pme_capable (dev,pci_target_state (dev, false))) +if (!pci_pme_capable (dev,pci_target_state (dev, true)))return false; +if (device_can_wakeup (&dev->dev)) +return true; +while (bus->parent) {struct pci_dev *bridge = bus->self;
Greg Kroah-Hartman
maintainerPATCH 53/72 PCI / PM: Check device_may_wakeup() in pci_enable_wake()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
commit cfcadfaad7251d8b640713724b388164d75465b2 upstream.
Commit 0847684cfc5f0 (PCI / PM: Simplify device wakeup settings code) went too far and dropped the device_may_wakeup() check from pci_enable_wake() which causes wakeup to be enabled during system suspend, hibernation or shutdown for some PCI devices that are not allowed by user space to wake up the system from sleep (or power off).
As a result of this, excessive power is drawn by some of the affected systems while in sleep states or off.
Restore the device_may_wakeup() check in pci_enable_wake(), but make sure that the PCI bus type's runtime suspend callback will not call device_may_wakeup() which is about system wakeup from sleep and not about device wakeup from runtime suspend.
--- drivers/pci/pci.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-)
drivers/pci/pci.c +23 -6
@@ -1897,7 +1897,7 @@ void pci_pme_active(struct pci_dev *dev,EXPORT_SYMBOL (pci_pme_active);/** -* pci_enable_wake - enable PCI device as wakeup event source +* __pci_enable_wake - enable PCI device as wakeup event source * @dev: PCI device affected * @state: PCI state from which device will issue wakeup events * @enable: True to enable event generation; false to disable
@@ -1915,7 +1915,7 @@ EXPORT_SYMBOL(pci_pme_active);* Error code depending on the platform is returned if both the platform and * the native mechanism fail to enable the generation of wake-up events */ -int pci_enable_wake (struct pci_dev *dev,pci_power_t state,bool enable) +static int __pci_enable_wake (struct pci_dev *dev,pci_power_t state,bool enable) {int ret =0 ;
@@ -1956,6 +1956,23 @@ int pci_enable_wake(struct pci_dev *dev,return ret; } + +/** +* pci_enable_wake - change wakeup settings for a PCI device +* @pci_dev: Target device +* @state: PCI state from which device will issue wakeup events +* @enable: Whether or not to enable event generation +* +* If @enable is set, check device_may_wakeup() for the device before calling +* __pci_enable_wake() for it. +*/ +int pci_enable_wake (struct pci_dev *pci_dev,pci_power_t state,bool enable) +{ +if (enable && !device_may_wakeup (&pci_dev->dev)) +return -EINVAL ; + +return __pci_enable_wake (pci_dev, state, enable); +}EXPORT_SYMBOL (pci_enable_wake);/**
@@ -1968,9 +1985,9 @@ EXPORT_SYMBOL(pci_enable_wake);* should not be called twice in a row to enable wake-up due to PCI PM vs ACPI * ordering constraints. * -* This function only returns error code if the device is not capable of -* generating PME# from both D3_hot and D3_cold, and the platform is unable to -* enable wake-up power for it. +* This function only returns error code if the device is not allowed to wake +* up the system from sleep or it is not capable of generating PME# from both +* D3_hot and D3_cold and the platform is unable to enable wake-up power for it. */ int pci_wake_from_d3 (struct pci_dev *dev,bool enable) {
@@ -2101,7 +2118,7 @@ int pci_finish_runtime_suspend(struct pc dev->runtime_d3cold = target_state == PCI_D3cold; -pci_enable_wake (dev, target_state,pci_dev_run_wake (dev)); +__pci_enable_wake (dev, target_state,pci_dev_run_wake (dev)); error =pci_set_power_state (dev, target_state);
Greg Kroah-Hartman
maintainerPATCH 54/72 cpufreq: schedutil: Avoid using invalid next_freq
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
commit 97739501f207efe33145b918817f305b822987f8 upstream.
If the next_freq field of struct sugov_policy is set to UINT_MAX, it shouldn't be used for updating the CPU frequency (this is a special "invalid" value), but after commit b7eaf1aab9f8 (cpufreq:
schedutil: Avoid reducing frequency of busy CPUs prematurely) it may be passed as the new frequency to sugov_update_commit() in sugov_update_single().
Fix that by adding an extra check for the special UINT_MAX value of next_freq to sugov_update_single().
--- kernel/sched/cpufreq_schedutil.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/sched/cpufreq_schedutil.c +2 -1
@@ -290,7 +290,8 @@ static void sugov_update_single(struct u* Do not reduce the frequency if the CPU has not been idle * recently, as the reduction is likely to be premature then. */ -if (busy && next_f < sg_policy->next_freq) { +if (busy && next_f < sg_policy->next_freq && + sg_policy->next_freq !=UINT_MAX ) { next_f = sg_policy->next_freq;/* Reset cached freq as next_freq has changed */
Greg Kroah-Hartman
maintainerPATCH 55/72 arm: dts: imx[35]*: declare flexcan devices to be compatible to imx25s flexcan
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
commit 9a62dcf486c10daf5366f29df1c799f69b1510f9 upstream.
Commit d50f4630c2e1 ("arm: dts: Remove p1010-flexcan compatible from imx series dts") removed the fallback compatible "fsl,p1010-flexcan" from the imx device trees. As the flexcan cores on i.MX25, i.MX35 and i.MX53 are identical, introduce the first as fallback for the two latter ones.
--- arch/arm/boot/dts/imx35.dtsi | 4 ++-- arch/arm/boot/dts/imx53.dtsi | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
arch/arm/boot/dts/imx35.dtsi +2 -2
@@ -303,7 +303,7 @@ }; can1: can@53fe4000 { - compatible = "fsl,imx35-flexcan"; + compatible = "fsl,imx35-flexcan", "fsl,imx25-flexcan"; reg = <0x53fe4000 0x1000>; clocks = <&clks 33>, <&clks 33>; clock-names = "ipg", "per";
@@ -312,7 +312,7 @@ }; can2: can@53fe8000 { - compatible = "fsl,imx35-flexcan"; + compatible = "fsl,imx35-flexcan", "fsl,imx25-flexcan"; reg = <0x53fe8000 0x1000>; clocks = <&clks 34>, <&clks 34>; clock-names = "ipg", "per";
arch/arm/boot/dts/imx53.dtsi +2 -2
@@ -551,7 +551,7 @@ }; can1: can@53fc8000 { - compatible = "fsl,imx53-flexcan"; + compatible = "fsl,imx53-flexcan", "fsl,imx25-flexcan"; reg = <0x53fc8000 0x4000>; interrupts = <82>; clocks = <&clks IMX5_CLK_CAN1_IPG_GATE>,
@@ -561,7 +561,7 @@ }; can2: can@53fcc000 { - compatible = "fsl,imx53-flexcan"; + compatible = "fsl,imx53-flexcan", "fsl,imx25-flexcan"; reg = <0x53fcc000 0x4000>; interrupts = <83>; clocks = <&clks IMX5_CLK_CAN2_IPG_GATE>,
Greg Kroah-Hartman
maintainerPATCH 56/72 Revert "Bluetooth: btusb: Fix quirk for Atheros 1525/QCA6174"
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit 544a591668813583021474fa5c7ff4942244d654 upstream.
Commit f44cb4b19ed4 ("Bluetooth: btusb: Fix quirk for Atheros 1525/QCA6174") is causing bluetooth to no longer work for several people, see: https://bugzilla.redhat.com/show_bug.cgi?id=1568911
So lets revert it for now and try to find another solution for devices which need the modified quirk.
--- drivers/bluetooth/btusb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/bluetooth/btusb.c +1 -1
@@ -231,6 +231,7 @@ static const struct usb_device_id blackl { USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0x311e), .driver_info = BTUSB_ATH3012 },
@@ -263,7 +264,6 @@ static const struct usb_device_id blackl { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 }, /* QCA ROME chipset */ - { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x0cf3, 0xe007), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x0cf3, 0xe009), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x0cf3, 0xe010), .driver_info = BTUSB_QCA_ROME },
Greg Kroah-Hartman
maintainerPATCH 57/72 Bluetooth: btusb: Add Dell XPS 13 9360 to btusb_needs_reset_resume_table
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit 596b07a9a22656493726edf1739569102bd3e136 upstream.
The Dell XPS 13 9360 uses a QCA Rome chip which needs to be reset (and have its firmware reloaded) for bluetooth to work after suspend/resume.
--- drivers/bluetooth/btusb.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/bluetooth/btusb.c +7 -0
@@ -392,6 +392,13 @@ static const struct dmi_system_id btusb_ DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 3060"), }, }, + { + /* Dell XPS 9360 (QCA ROME device 0cf3:e300) */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9360"), + }, + }, {} };
Greg Kroah-Hartman
maintainerPATCH 58/72 Bluetooth: btusb: Only check needs_reset_resume DMI table for QCA rome chipsets
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit fc54910280eb38bde923cdf0898e74687d8e6989 upstream.
Jeremy Cline correctly points out in rhbz#1514836 that a device where the QCA rome chipset needs the USB_QUIRK_RESET_RESUME quirk, may also ship with a different wifi/bt chipset in some configurations.
If that is the case then we are needlessly penalizing those other chipsets with a reset-resume quirk, typically causing 0.4W extra power use because this disables runtime-pm.
This commit moves the DMI table check to a btusb_check_needs_reset_resume() helper (so that we can easily also call it for other chipsets) and calls this new helper only for QCA_ROME chipsets for now.
--- drivers/bluetooth/btusb.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
drivers/bluetooth/btusb.c +7 -3
@@ -2846,6 +2846,12 @@ static int btusb_config_oob_wake(struct }#endif +static void btusb_check_needs_reset_resume (struct usb_interface *intf) +{ +if (dmi_check_system (btusb_needs_reset_resume_table)) +interface_to_usbdev (intf)->quirks |=USB_QUIRK_RESET_RESUME ; +} +static int btusb_probe (struct usb_interface *intf,const struct usb_device_id *id) {
@@ -2968,9 +2974,6 @@ static int btusb_probe(struct usb_interf hdev->send = btusb_send_frame; hdev->notify = btusb_notify; -if (dmi_check_system (btusb_needs_reset_resume_table)) -interface_to_usbdev (intf)->quirks |=USB_QUIRK_RESET_RESUME ; -#ifdef CONFIG_PM err =btusb_config_oob_wake (hdev);if (err)
@@ -3109,6 +3112,7 @@ static int btusb_probe(struct usb_interf hdev->setup = btusb_setup_csr;set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks); +btusb_check_needs_reset_resume (intf); }if (id->driver_info &BTUSB_SNIFFER ) {
Greg Kroah-Hartman
maintainerPATCH 59/72 thermal: exynos: Reading temperature makes sense only when TMU is turned on
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Szyprowski <[email protected]>
commit 88fc6f73fddf64eb507b04f7b2bd01d7291db514 upstream.
When thermal sensor is not yet enabled, reading temperature might return random value. This might even result in stopping system booting when such temperature is higher than the critical value. Fix this by checking if TMU has been actually enabled before reading the temperature.
This change fixes booting of Exynos4210-based board with TMU enabled (for example Samsung Trats board), which was broken since v4.4 kernel release.
--- drivers/thermal/samsung/exynos_tmu.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/thermal/samsung/exynos_tmu.c +4 -1
@@ -185,6 +185,7 @@* @regulator: pointer to the TMU regulator structure. * @reg_conf: pointer to structure to register with core thermal. * @ntrip: number of supported trip points. +* @enabled: current status of TMU device * @tmu_initialize: SoC specific TMU initialization method * @tmu_control: SoC specific TMU control method * @tmu_read: SoC specific TMU temperature read method
@@ -205,6 +206,7 @@ struct exynos_tmu_data {struct regulator *regulator;struct thermal_zone_device *tzd;unsigned int ntrip; +bool enabled;int (*tmu_initialize)(struct platform_device *pdev);void (*tmu_control)(struct platform_device *pdev,bool on);
@@ -398,6 +400,7 @@ static void exynos_tmu_control(struct plmutex_lock (&data->lock);clk_enable (data->clk); data->tmu_control (pdev, on); + data->enabled = on;clk_disable (data->clk);mutex_unlock (&data->lock); }
@@ -890,7 +893,7 @@ static int exynos_get_temp(void *p, int {struct exynos_tmu_data *data = p; -if (!data || !data->tmu_read) +if (!data || !data->tmu_read || !data->enabled)return -EINVAL ;mutex_lock (&data->lock);
Greg Kroah-Hartman
maintainerPATCH 60/72 thermal: exynos: Propagate error value from tmu_read()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Szyprowski <[email protected]>
commit c8da6cdef57b459ac0fd5d9d348f8460a575ae90 upstream.
tmu_read() in case of Exynos4210 might return error for out of bound values. Current code ignores such value, what leads to reporting critical temperature value. Add proper error code propagation to exynos_get_temp() function.
--- drivers/thermal/samsung/exynos_tmu.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/thermal/samsung/exynos_tmu.c +7 -2
@@ -892,6 +892,7 @@ static void exynos7_tmu_control(struct pstatic int exynos_get_temp (void *p,int *temp) {struct exynos_tmu_data *data = p; +int value, ret =0 ;if (!data || !data->tmu_read || !data->enabled)return -EINVAL ;
@@ -899,12 +900,16 @@ static int exynos_get_temp(void *p, intmutex_lock (&data->lock);clk_enable (data->clk); - *temp =code_to_temp (data, data->tmu_read (data)) *MCELSIUS ; + value = data->tmu_read (data); +if (value <0 ) + ret = value; +else + *temp =code_to_temp (data, value) *MCELSIUS ;clk_disable (data->clk);mutex_unlock (&data->lock); -return 0 ; +return ret; }#ifdef CONFIG_THERMAL_EMULATION
Greg Kroah-Hartman
maintainerPATCH 61/72 nvme: add quirk to force medium priority for SQ creation
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
commit 9abd68ef454c824bfd18629033367b4382b5f390 upstream.
Some P3100 drives have a bug where they think WRRU (weighted round robin) is always enabled, even though the host doesn't set it. Since they think it's enabled, they also look at the submission queue creation priority. We used to set that to MEDIUM by default, but that was removed in commit 81c1cd98351b. This causes various issues on that drive. Add a quirk to still set MEDIUM priority for that controller.
--- drivers/nvme/host/nvme.h | 5 +++++ drivers/nvme/host/pci.c | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-)
drivers/nvme/host/nvme.h +5 -0
@@ -83,6 +83,11 @@ enum nvme_quirks {* Supports the LighNVM command set if indicated in vs[1]. */ NVME_QUIRK_LIGHTNVM = (1 <<6 ), + +/* +* Set MEDIUM priority on SQ creation +*/ + NVME_QUIRK_MEDIUM_PRIO_SQ = (1 << 7), };/*
drivers/nvme/host/pci.c +11 -1
@@ -1091,10 +1091,19 @@ static int adapter_alloc_cq(struct nvme_static int adapter_alloc_sq (struct nvme_dev *dev,u16 qid,struct nvme_queue *nvmeq) { +struct nvme_ctrl *ctrl = &dev->ctrl;struct nvme_command c;int flags =NVME_QUEUE_PHYS_CONTIG ;/* +* Some drives have a bug that auto-enables WRRU if MEDIUM isn't +* set. Since URGENT priority is zeroes, it makes all queues +* URGENT. +*/ +if (ctrl->quirks &NVME_QUIRK_MEDIUM_PRIO_SQ ) + flags |=NVME_SQ_PRIO_MEDIUM ; + +/* * Note: we (ab)use the fact that the prp fields survive if no data * is attached to the request. */
@@ -2684,7 +2693,8 @@ static const struct pci_device_id nvme_i .driver_data = NVME_QUIRK_STRIPE_SIZE | NVME_QUIRK_DEALLOCATE_ZEROES, }, { PCI_VDEVICE(INTEL, 0xf1a5), /* Intel 600P/P3100 */ - .driver_data = NVME_QUIRK_NO_DEEPEST_PS }, + .driver_data =NVME_QUIRK_NO_DEEPEST_PS | + NVME_QUIRK_MEDIUM_PRIO_SQ }, { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */ .driver_data = NVME_QUIRK_IDENTIFY_CNS, }, { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */
Greg Kroah-Hartman
maintainerPATCH 62/72 nvme: Fix sync controller reset return
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Charles Machalow <[email protected]>
commit 4e50d9ebaeaa3c6761d2b513ef7039510c8cf213 upstream.
If a controller reset is requested while the device has no namespaces, we were incorrectly returning ENETRESET. This patch adds the check for ADMIN_ONLY controller state to indicate a successful reset.
--- drivers/nvme/host/core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/nvme/host/core.c +2 -1
@@ -122,7 +122,8 @@ int nvme_reset_ctrl_sync(struct nvme_ctr ret =nvme_reset_ctrl (ctrl);if (!ret) {flush_work (&ctrl->reset_work); -if (ctrl->state !=NVME_CTRL_LIVE ) +if (ctrl->state !=NVME_CTRL_LIVE && + ctrl->state !=NVME_CTRL_ADMIN_ONLY ) ret = -ENETRESET ; }
Greg Kroah-Hartman
maintainerPATCH 63/72 smb3: directory sync should not return an error
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steve French <[email protected]>
commit 6e70c267e68d77679534dcf4aaf84e66f2cf1425 upstream.
As with NFS, which ignores sync on directory handles, fsync on a directory handle is a noop for CIFS/SMB3. Do not return an error on it. It breaks some database apps otherwise.
--- fs/cifs/cifsfs.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
fs/cifs/cifsfs.c +13 -0
@@ -1047,6 +1047,18 @@ out:return rc; } +/* +* Directory operations under CIFS/SMB2/SMB3 are synchronous, so fsync() +* is a dummy operation. +*/ +static int cifs_dir_fsync (struct file *file,loff_t start,loff_t end,int datasync) +{ +cifs_dbg (FYI ,"Sync directory - name: %pD datasync: 0x%x\n" , + file, datasync); + +return 0 ; +} +static ssize_t cifs_copy_file_range (struct file *src_file,loff_t off,struct file *dst_file,loff_t destoff,size_t len,unsigned int flags)
@@ -1181,6 +1193,7 @@ const struct file_operations cifs_dir_op .copy_file_range = cifs_copy_file_range, .clone_file_range = cifs_clone_file_range, .llseek = generic_file_llseek, + .fsync = cifs_dir_fsync, }; static void
Greg Kroah-Hartman
maintainerPATCH 64/72 swiotlb: silent unwanted warning "buffer is full"
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jean Delvare <[email protected]>
commit 05e13bb57e6f181d7605f8608181c7e6fb7f591d upstream.
If DMA_ATTR_NO_WARN is passed to swiotlb_alloc_buffer(), it should be passed further down to swiotlb_tbl_map_single(). Otherwise we escape half of the warnings but still log the other half.
This is one of the multiple causes of spurious warnings reported at:
https://bugs.freedesktop.org/show_bug.cgi?id=104082
--- lib/swiotlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
lib/swiotlb.c +1 -1
@@ -727,7 +727,7 @@ swiotlb_alloc_buffer(struct device *dev, phys_addr =swiotlb_tbl_map_single (dev,swiotlb_phys_to_dma (dev, io_tlb_start), -0 , size,DMA_FROM_DEVICE ,0 ); +0 , size,DMA_FROM_DEVICE , attrs);if (phys_addr ==SWIOTLB_MAP_ERROR ) goto out_warn;
Greg Kroah-Hartman
maintainerPATCH 65/72 sched/core: Fix possible Spectre-v1 indexing for sched_prio_to_weight[]
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Zijlstra <[email protected]>
commit 7281c8dec8a87685cb54d503d8cceef5a0fc2fdd upstream.
Quoted 1 line
kernel/sched/core.c:6921cpu_weight_nice_write_s64()warn: potential spectre issue 'sched_prio_to_weight'
Userspace controls @nice, so sanitize the value before using it to index an array.
--- kernel/sched/core.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
kernel/sched/core.c +6 -1
@@ -23,6 +23,7 @@#include <linux/mmu_context.h> #include <linux/module.h> #include <linux/nmi.h> +#include <linux/nospec.h> #include <linux/prefetch.h> #include <linux/profile.h> #include <linux/security.h>
@@ -6873,11 +6874,15 @@ static int cpu_weight_nice_write_s64(str struct cftype *cft, s64 nice) {unsigned long weight; +int idx;if (nice <MIN_NICE || nice >MAX_NICE )return -ERANGE ; - weight = sched_prio_to_weight[NICE_TO_PRIO (nice) -MAX_RT_PRIO ]; + idx =NICE_TO_PRIO (nice) -MAX_RT_PRIO ; + idx =array_index_nospec (idx,40 ); + weight = sched_prio_to_weight[idx]; +return sched_group_set_shares (css_tg (css),scale_load (weight)); }#endif
Greg Kroah-Hartman
maintainerPATCH 66/72 sched/autogroup: Fix possible Spectre-v1 indexing for sched_prio_to_weight[]
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Zijlstra <[email protected]>
commit 354d7793070611b4df5a79fbb0f12752d0ed0cc5 upstream.
Quoted 1 line
kernel/sched/autogroup.c:230proc_sched_autogroup_set_nice()warn: potential spectre issue 'sched_prio_to_weight'
Userspace controls @nice, sanitize the array index.
--- kernel/sched/autogroup.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
kernel/sched/autogroup.c +5 -2
@@ -4,6 +4,7 @@#include <linux/utsname.h> #include <linux/security.h> #include <linux/export.h> +#include <linux/nospec.h> #include "sched.h"
@@ -212,7 +213,7 @@ int proc_sched_autogroup_set_nice(structstatic unsigned long next =INITIAL_JIFFIES ;struct autogroup *ag;unsigned long shares; -int err; +int err, idx;if (nice <MIN_NICE || nice >MAX_NICE )return -EINVAL ;
@@ -230,7 +231,9 @@ int proc_sched_autogroup_set_nice(struct next =HZ /10 + jiffies; ag =autogroup_task_get (p); - shares =scale_load (sched_prio_to_weight[nice +20 ]); + + idx =array_index_nospec (nice +20 ,40 ); + shares =scale_load (sched_prio_to_weight[idx]);down_write (&ag->lock); err =sched_group_set_shares (ag->tg, shares);
Greg Kroah-Hartman
maintainerPATCH 67/72 tracing/uprobe_event: Fix strncpy corner case
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masami Hiramatsu <[email protected]>
commit 50268a3d266ecfdd6c5873d62b2758d9732fc598 upstream.
Fix string fetch function to terminate with NUL.
It is OK to drop the rest of string.
--- kernel/trace/trace_uprobe.c | 2 ++ 1 file changed, 2 insertions(+)
kernel/trace/trace_uprobe.c +2 -0
@@ -152,6 +152,8 @@ static void FETCH_FUNC_NAME(memory, strireturn ; ret =strncpy_from_user (dst, src, maxlen); +if (ret == maxlen) + dst[--ret] ='\0' ;if (ret <0 ) {/* Failed to fetch string */ ((u8 *)get_rloc_data (dest))[0 ] ='\0' ;
Greg Kroah-Hartman
maintainerPATCH 68/72 perf/x86: Fix possible Spectre-v1 indexing for hw_perf_event cache_*
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Zijlstra <[email protected]>
commit ef9ee4ad38445a30909c48998624861716f2a994 upstream.
Quoted 4 lines
arch/x86/events/core.c:319set_ext_hw_attr()warn: potential spectre issue 'hw_cache_event_ids[cache_type]' (local cap)arch/x86/events/core.c:319set_ext_hw_attr()warn: potential spectre issue 'hw_cache_event_ids' (local cap)arch/x86/events/core.c:328set_ext_hw_attr()warn: potential spectre issue 'hw_cache_extra_regs[cache_type]' (local cap)arch/x86/events/core.c:328set_ext_hw_attr()warn: potential spectre issue 'hw_cache_extra_regs' (local cap)
Userspace controls @config which contains 3 (byte) fields used for a 3 dimensional array deref.
--- arch/x86/events/core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
arch/x86/events/core.c +4 -1
@@ -304,17 +304,20 @@ set_ext_hw_attr(struct hw_perf_event *hw config = attr->config; - cache_type = (config >>0 ) &0xff ; + cache_type = (config >>0 ) &0xff ;if (cache_type >=PERF_COUNT_HW_CACHE_MAX )return -EINVAL ; + cache_type =array_index_nospec (cache_type,PERF_COUNT_HW_CACHE_MAX ); cache_op = (config >>8 ) &0xff ;if (cache_op >=PERF_COUNT_HW_CACHE_OP_MAX )return -EINVAL ; + cache_op =array_index_nospec (cache_op,PERF_COUNT_HW_CACHE_OP_MAX ); cache_result = (config >>16 ) &0xff ;if (cache_result >=PERF_COUNT_HW_CACHE_RESULT_MAX )return -EINVAL ; + cache_result =array_index_nospec (cache_result,PERF_COUNT_HW_CACHE_RESULT_MAX ); val = hw_cache_event_ids[cache_type][cache_op][cache_result];
Greg Kroah-Hartman
maintainerPATCH 69/72 perf/x86/cstate: Fix possible Spectre-v1 indexing for pkg_msr
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Zijlstra <[email protected]>
commit a5f81290ce475489fa2551c01a07470c1a4c932e upstream.
Quoted 1 line
arch/x86/events/intel/cstate.c:307cstate_pmu_event_init()warn: potential spectre issue 'pkg_msr' (local cap)
Userspace controls @attr, sanitize cfg (attr->config) before using it to index an array.
--- arch/x86/events/intel/cstate.c | 2 ++ 1 file changed, 2 insertions(+)
arch/x86/events/intel/cstate.c +2 -0
@@ -91,6 +91,7 @@#include <linux/module.h> #include <linux/slab.h> #include <linux/perf_event.h> +#include <linux/nospec.h> #include <asm/cpu_device_id.h> #include <asm/intel-family.h> #include "../perf_event.h"
@@ -301,6 +302,7 @@ static int cstate_pmu_event_init(struct }else if (event->pmu == &cstate_pkg_pmu) {if (cfg >=PERF_CSTATE_PKG_EVENT_MAX )return -EINVAL ; + cfg =array_index_nospec ((unsigned long )cfg,PERF_CSTATE_PKG_EVENT_MAX );if (!pkg_msr[cfg].attr)return -EINVAL ; event->hw.event_base = pkg_msr[cfg].msr;
Greg Kroah-Hartman
maintainerPATCH 70/72 perf/x86/msr: Fix possible Spectre-v1 indexing in the MSR driver
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Zijlstra <[email protected]>
commit 06ce6e9b6d6c09d4129c6e24a1314a395d816c10 upstream.
Quoted 1 line
arch/x86/events/msr.c:178msr_event_init()warn: potential spectre issue 'msr' (local cap)
Userspace controls @attr, sanitize cfg (attr->config) before using it to index an array.
--- arch/x86/events/msr.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
arch/x86/events/msr.c +6 -3
@@ -1,5 +1,6 @@// SPDX-License-Identifier: GPL-2.0 #include <linux/perf_event.h> +#include <linux/nospec.h> #include <asm/intel-family.h> enum perf_msr_id {
@@ -158,9 +159,6 @@ static int msr_event_init(struct perf_evif (event->attr.type != event->pmu->type)return -ENOENT ; -if (cfg >=PERF_MSR_EVENT_MAX ) -return -EINVAL ; -/* unsupported modes and filters */ if (event->attr.exclude_user || event->attr.exclude_kernel ||
@@ -171,6 +169,11 @@ static int msr_event_init(struct perf_ev event->attr.sample_period) /* no sampling */return -EINVAL ; +if (cfg >=PERF_MSR_EVENT_MAX ) +return -EINVAL ; + + cfg =array_index_nospec ((unsigned long )cfg,PERF_MSR_EVENT_MAX ); +if (!msr[cfg].attr)return -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 71/72 perf/core: Fix possible Spectre-v1 indexing for ->aux_pages[]
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Zijlstra <[email protected]>
commit 4411ec1d1993e8dbff2898390e3fed280d88e446 upstream.
Quoted 1 line
kernel/events/ring_buffer.c:871perf_mmap_to_page()warn: potential spectre issue 'rb->aux_pages'
Userspace controls @pgoff through the fault address. Sanitize the array index before doing the array dereference.
--- kernel/events/ring_buffer.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
kernel/events/ring_buffer.c +5 -2
@@ -14,6 +14,7 @@#include <linux/slab.h> #include <linux/circ_buf.h> #include <linux/poll.h> +#include <linux/nospec.h> #include "internal.h"
@@ -867,8 +868,10 @@ perf_mmap_to_page(struct ring_buffer *rbreturn NULL ;/* AUX space */ -if (pgoff >= rb->aux_pgoff) -return virt_to_page (rb->aux_pages[pgoff - rb->aux_pgoff]); +if (pgoff >= rb->aux_pgoff) { +int aux_pgoff =array_index_nospec (pgoff - rb->aux_pgoff, rb->aux_nr_pages); +return virt_to_page (rb->aux_pages[aux_pgoff]); + } }return __perf_mmap_to_page (rb, pgoff);
Greg Kroah-Hartman
maintainerPATCH 72/72 perf/x86: Fix possible Spectre-v1 indexing for x86_pmu::event_map()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Zijlstra <[email protected]>
commit 46b1b577229a091b137831becaa0fae8690ee15a upstream.
Quoted 6 lines
arch/x86/events/intel/cstate.c:307cstate_pmu_event_init()warn: potential spectre issue 'pkg_msr' (local cap)arch/x86/events/intel/core.c:337intel_pmu_event_map()warn: potential spectre issue 'intel_perfmon_event_map'arch/x86/events/intel/knc.c:122knc_pmu_event_map()warn: potential spectre issue 'knc_perfmon_event_map'arch/x86/events/intel/p4.c:722p4_pmu_event_map()warn: potential spectre issue 'p4_general_events'arch/x86/events/intel/p6.c:116p6_pmu_event_map()warn: potential spectre issue 'p6_perfmon_event_map'arch/x86/events/amd/core.c:132amd_pmu_event_map()warn: potential spectre issue 'amd_perfmon_event_map'
Userspace controls @attr, sanitize @attr->config before passing it on to x86_pmu::event_map().
--- arch/x86/events/core.c | 3 +++ 1 file changed, 3 insertions(+)
arch/x86/events/core.c +3 -0
@@ -27,6 +27,7 @@#include <linux/cpu.h> #include <linux/bitops.h> #include <linux/device.h> +#include <linux/nospec.h> #include <asm/apic.h> #include <asm/stacktrace.h>
@@ -424,6 +425,8 @@ int x86_setup_perfctr(struct perf_eventif (attr->config >= x86_pmu.max_events)return -EINVAL ; + attr->config =array_index_nospec ((unsigned long )attr->config, x86_pmu.max_events); +/* * The generic map: */
stable-rc/linux-4.16.y boot: 102 boots: 2 failed, 100 passed (v4.16.8-73-gdaccae8696e8)
stable-rc/linux-4.16.y boot: 102 boots: 2 failed, 100 passed (v4.16.8-73-gdaccae8696e8)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.16.y/kernel/v4.16.8-73-gdaccae8696e8/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.16.y/kernel/v4.16.8-73-gdaccae8696e8/
Tree: stable-rc
Branch: linux-4.16.y
Git Describe: v4.16.8-73-gdaccae8696e8
Git Commit: daccae8696e8b0a3b166b0a86a20095c25c08929
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 55 unique boards, 22 SoC families, 15 builds out of 186
Boot Regressions Detected:
arm:
exynos_defconfig:
exynos5250-snow:
lab-collabora: new failure (last pass: v4.16.8-23-g8339bc61b873)
qcom_defconfig:
qcom-apq8064-cm-qs600:
lab-baylibre-seattle: new failure (last pass: v4.16.8-23-g8339bc61b873)Boot Failures Detected:
arm:
exynos_defconfig
exynos5250-snow: 1 failed lab
qcom_defconfig
qcom-apq8064-cm-qs600: 1 failed lab
---
For more info write to <[email protected]>
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.9 release. There are 72 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 Wed May 16 06:47:58 UTC 2018. Anything received after that time might be too late.
Build results:
total: 143 pass: 142 fail: 1 Failed builds: m68k:allmodconfig Qemu test results: total: 139 pass: 139 fail: 0
Building m68k:allmodconfig ... failed:
ERROR: "__udivdi3" [drivers/mtd/nand/nand.ko] undefined!
ERROR: "__divdi3" [drivers/mtd/nand/nand.ko] undefined!
The problem is caused by upstream commit 3057fcef3853 ("mtd: rawnand: Make sure we wait tWB before polling the STATUS reg"). This is one of the "bug for bug compatible with upstream" situations, meaning the upstream build is broken as well.
Details are available at http://kerneltests.org/builders/.
Guenter
Greg Kroah-Hartman
maintainerQuoted 19 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.9 release. There are 72 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 Wed May 16 06:47:58 UTC 2018. Anything received after that time might be too late.
Build results:
total: 143 pass: 142 fail: 1 Failed builds: m68k:allmodconfig Qemu test results: total: 139 pass: 139 fail: 0Building m68k:allmodconfig ... failed:
Quoted 7 lines
ERROR: "
__udivdi3" [drivers/mtd/nand/nand.ko] undefined!
ERROR: "__divdi3" [drivers/mtd/nand/nand.ko] undefined!The problem is caused by upstream commit
3057fcef3853("mtd: rawnand: Make sure we wait tWB before polling the STATUS reg"). This is one of the "bug for bug compatible with upstream" situations, meaning the upstream build is broken as well.
I've dropped the offending patch for now, and pushed out a -rc2.
Thanks for testing all of these and letting me know.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.9 release. There are 72 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 Wed May 16 06:47:58 UTC 2018. 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/v4.x/stable-review/patch-4.16.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Greg Kroah-Hartman
maintainerQuoted 15 lines · Shuah Khan
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.9 release. There are 72 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 Wed May 16 06:47:58 UTC 2018. 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/v4.x/stable-review/patch-4.16.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.
Quoted 6 lines
Quoted 4 lines
thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
Thanks for testing all of these and letting me know.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.9 release. There are 72 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 Wed May 16 06:47:58 UTC 2018. 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/v4.x/stable-review/patch-4.16.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm and x86_64.
Summary
------------------------------------------------------------------------
kernel: 4.16.9-rc2
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.16.y
git commit: 618cea778f02d997c2e7bc0bf800617cf66f571d
git describe: v4.16.8-72-g618cea778f02
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.16-oe/build/v4.16.8-72-g618cea778f02
No regressions (compared to build v4.16.8-73-gdaccae8696e8)
Boards, architectures and test suites:
-------------------------------------
dragonboard-410c - arm64
* boot - fail: 3, pass: 19
* kselftest - fail: 1, skip: 26, pass: 41
* libhugetlbfs - fail: 1, skip: 1, pass: 89
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 6, pass: 57
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - skip: 1, pass: 21
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - pass: 14
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 133, pass: 1017
* ltp-timers-tests - pass: 13
hi6220-hikey - arm64
* boot - pass: 20
* kselftest - skip: 23, pass: 45
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 6, pass: 57
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - skip: 1, pass: 21
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 4, pass: 10
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 134, pass: 1016
* ltp-timers-tests - pass: 13
juno-r2 - arm64
* boot - pass: 20
* kselftest - skip: 24, pass: 44
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 6, pass: 57
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-sched-tests - skip: 4, pass: 10
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 133, pass: 1017
qemu_arm64
* boot - fail: 3, pass: 20
* kselftest - skip: 29, pass: 41
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 6, pass: 57
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 6, pass: 8
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - fail: 2, skip: 155, pass: 993
* ltp-timers-tests - pass: 13
qemu_x86_64
* boot - pass: 19
* kselftest - skip: 30, pass: 50
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 1, pass: 13
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 152, pass: 998
* ltp-timers-tests - pass: 13
x15 - arm
* boot - pass: 21
* kselftest - skip: 28, pass: 37
* libhugetlbfs - skip: 1, pass: 87
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 18, pass: 63
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 5, pass: 58
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - skip: 2, pass: 20
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 1, pass: 13
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 75, pass: 1075
* ltp-timers-tests - pass: 13
x86_64
* boot - pass: 22
* kselftest - skip: 21, pass: 54
* kselftest-vsyscall-mode-native - skip: 21, pass: 54
* kselftest-vsyscall-mode-none - skip: 21, pass: 55
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 5, pass: 58
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 21
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 5, pass: 9
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 116, pass: 1034
* ltp-timers-tests - pass: 13
Signature · 2 lines
Linaro QA (BETA) https://qa-reports.linaro.org
Greg Kroah-Hartman
maintainerQuoted 15 lines · Naresh Kamboju
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.9 release. There are 72 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 Wed May 16 06:47:58 UTC 2018. 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/v4.x/stable-review/patch-4.16.9-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.
Quoted 6 lines
Quoted 3 lines
thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm andx86_64.
Wonderful, thanks for testing all of these and letting me know.
greg k-h