4.14.60-stable review
Subsystems (11)
Greg Kroah-Hartman
maintainercover 4.14.60-stable review
This is the start of the stable review cycle for the 4.14.60 release. There are 246 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri Aug 3 16:49:18 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.14.60-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.14.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.14.60-rc1
Eric Dumazet <[email protected]>
tcp: add one more quick ack after after ECN events
Yousuk Seung <[email protected]>
tcp: refactor tcp_ecn_check_ce to remove sk type cast
Eric Dumazet <[email protected]>
tcp: do not aggressively quick ack after ECN events
Eric Dumazet <[email protected]>
tcp: add max_quickacks param to tcp_incr_quickack and tcp_enter_quickack_mode
Eric Dumazet <[email protected]>
tcp: do not force quickack when receiving out-of-order packets
Dmitry Safonov <[email protected]>
netlink: Don't shift with UB on nlk->ngroups
Dmitry Safonov <[email protected]>
netlink: Do not subscribe to non-existent groups
Xiao Liang <[email protected]>
xen-netfront: wait xenbus state change when load module manually
Neal Cardwell <[email protected]>
tcp_bbr: fix bw probing to raise in-flight data for very small BDPs
Eugeniy Paltsev <[email protected]>
NET: stmmac: align DMA stuff to largest cache line length
Anton Vasilyev <[email protected]>
net: mdio-mux: bcm-iproc: fix wrong getter and setter pair
Stefan Wahren <[email protected]>
net: lan78xx: fix rx handling before first packet is send
tangpengpeng <[email protected]>
net: fix amd-xgbe flow-control issue
Gal Pressman <[email protected]>
net: ena: Fix use of uninitialized DMA address bits field
Lorenzo Bianconi <[email protected]>
ipv4: remove BUG_ON() from fib_compute_spec_dst
Michal Vokáč <[email protected]>
net: dsa: qca8k: Allow overwriting CPU port setting
Michal Vokáč <[email protected]>
net: dsa: qca8k: Add QCA8334 binding documentation
Michal Vokáč <[email protected]>
net: dsa: qca8k: Enable RXMAC when bringing up a port
Michal Vokáč <[email protected]>
net: dsa: qca8k: Force CPU port to its highest bandwidth
Leon Romanovsky <[email protected]>
RDMA/uverbs: Protect from attempts to create flows on unsupported QP
Yoshihiro Shimoda <[email protected]>
usb: gadget: udc: renesas_usb3: should remove debugfs
Chengguang Xu <[email protected]>
ovl: Sync upper dirty data when syncing overlayfs
Lorenzo Pieralisi <[email protected]>
PCI: xgene: Remove leftover pci_scan_child_bus() call
Lukas Wunner <[email protected]>
PCI: pciehp: Assume NoCompl+ for Thunderbolt ports
Theodore Ts'o <[email protected]>
ext4: fix check to prevent initializing reserved inodes
Theodore Ts'o <[email protected]>
ext4: check for allocation block validity with block group locked
Theodore Ts'o <[email protected]>
ext4: fix inline data updates with checksums enabled
Linus Torvalds <[email protected]>
squashfs: be more careful about metadata corruption
Theodore Ts'o <[email protected]>
random: mix rdrand with entropy sent in from userspace
Greg Edwards <[email protected]>
block: reset bi_iter.bi_done after splitting bio
Martin Wilck <[email protected]>
blkdev: __blkdev_direct_IO_simple: fix leak in error case
Martin Wilck <[email protected]>
block: bio_iov_iter_get_pages: fix size of last iovec
Andy Shevchenko <[email protected]>
drm/dp/mst: Fix off-by-one typo when dump payload table
Ville Syrjälä <[email protected]>
drm/atomic-helper: Drop plane->fb references only for drm_atomic_helper_shutdown()
José Roberto de Souza <[email protected]>
drm: Add DP PSR2 sink enable bit
Kirill Marinushkin <[email protected]>
ASoC: topology: Add missing clock gating parameter when parsing hw_configs
Kirill Marinushkin <[email protected]>
ASoC: topology: Fix bclk and fsync inversion in set_link_hw_format()
Mauro Carvalho Chehab <[email protected]>
media: si470x: fix __be16 annotations
Mauro Carvalho Chehab <[email protected]>
media: atomisp: compat32: fix __user annotations
Matthew R. Ochs <[email protected]>
scsi: cxlflash: Avoid clobbering context control register value
Uma Krishnan <[email protected]>
scsi: cxlflash: Synchronize reset and remove ops
Shivasharan S <[email protected]>
scsi: megaraid_sas: Increase timeout by 1 sec for non-RAID fastpath IOs
Xose Vazquez Perez <[email protected]>
scsi: scsi_dh: replace too broad "TP9" string with the exact models
Douglas Anderson <[email protected]>
regulator: Don't return or expect -errno from of_map_mode()
Suman Anna <[email protected]>
media: omap3isp: fix unbalanced dma_iommu_mapping
Tudor-Dan Ambarus <[email protected]>
crypto: authenc - don't leak pointers to authenc keys
Tudor-Dan Ambarus <[email protected]>
crypto: authencesn - don't leak pointers to authenc keys
Dominik Bozek <[email protected]>
usb: hub: Don't wait for connect state at resume for powered-off ports
Michal Simek <[email protected]>
microblaze: Fix simpleImage format generation
Andrey Smirnov <[email protected]>
soc: imx: gpcv2: Do not pass static memory as platform data
Douglas Anderson <[email protected]>
serial: core: Make sure compiler barfs for 16-byte earlycon names
NeilBrown <[email protected]>
staging: lustre: ldlm: free resource when ldlm_lock_create() fails.
James Simmons <[email protected]>
staging: lustre: llite: correct removexattr detection
Stefan Wahren <[email protected]>
staging: vchiq_core: Fix missing semaphore release in error case
Ondrej Mosnáček <[email protected]>
audit: allow not equal op for audit by executable
Siva Rebbagondla <[email protected]>
rsi: fix nommu_map_sg overflow kernel panic
Siva Rebbagondla <[email protected]>
rsi: Fix 'invalid vdd' warning in mmc
Chris Novakovic <[email protected]>
ipconfig: Correctly initialise ic_nameservers
Luc Van Oostenryck <[email protected]>
drm/gma500: fix psb_intel_lvds_mode_valid()'s return type
Vinicius Costa Gomes <[email protected]>
igb: Fix queue selection on MAC filters on i210
Enric Balletbo i Serra <[email protected]>
arm64: defconfig: Enable Rockchip io-domain driver
Wei Xu <[email protected]>
nvme: lightnvm: add granby support
Dmitry Osipenko <[email protected]>
memory: tegra: Apply interrupts mask per SoC
Dmitry Osipenko <[email protected]>
memory: tegra: Do not handle spurious interrupts
Sebastian Andrzej Siewior <[email protected]>
delayacct: Use raw_spinlocks
Thomas Gleixner <[email protected]>
stop_machine: Use raw spinlocks
Wolfram Sang <[email protected]>
backlight: pwm_bl: Don't use GPIOF_* with gpiod_get_direction
Kirill Tkhai <[email protected]>
fasync: Fix deadlock between task-context and interrupt-context kill_fasync()
Yixun Lan <[email protected]>
dt-bindings: net: meson-dwmac: new compatible name for AXG SoC
Huazhong Tan <[email protected]>
net: hns3: Fixes the out of bounds access in hclge_map_tqp
Alexey Khoroshilov <[email protected]>
spi: meson-spicc: Fix error handling in meson_spicc_probe()
Martin Blumenstingl <[email protected]>
dt-bindings: pinctrl: meson: add support for the Meson8m2 SoC
Tobin C. Harding <[email protected]>
mmc: pwrseq: Use kmalloc_array instead of stack VLA
Shawn Lin <[email protected]>
mmc: dw_mmc: update actual clock for mmc debugfs
Takashi Sakamoto <[email protected]>
ALSA: hda/ca0132: fix build failure when a local macro is defined
Satendra Singh Thakur <[email protected]>
drm/atomic: Handling the case when setting old crtc for plane
Mauro Carvalho Chehab <[email protected]>
media: siano: get rid of __le32/__le16 cast warnings
Jaegeuk Kim <[email protected]>
f2fs: avoid fsync() failure caused by EAGAIN in writepage()
Jakub Kicinski <[email protected]>
bpf: fix references to free_bpf_prog_info() in comments
Bartlomiej Zolnierkiewicz <[email protected]>
thermal: exynos: fix setting rising_threshold for Exynos5433
Doug Oucharek <[email protected]>
staging: lustre: o2iblnd: Fix FastReg map/unmap for MLX5
Doug Oucahrek <[email protected]>
staging: lustre: o2iblnd: fix race at kiblnd_connect_peer
Chad Dupuis <[email protected]>
scsi: qedf: Set the UNLOADING flag when removing a vport
Xiang Chen <[email protected]>
scsi: hisi_sas: config ATA de-reset as an constrained command for v3 hw
Dan Carpenter <[email protected]>
scsi: megaraid: silence a static checker bug
Wenwen Wang <[email protected]>
scsi: 3w-xxxx: fix a missing-check bug
Wenwen Wang <[email protected]>
scsi: 3w-9xxx: fix a missing-check bug
Michael Chan <[email protected]>
bnxt_en: Check unsupported speeds in bnxt_update_link() on PF only.
Thomas Richter <[email protected]>
perf: fix invalid bit in diagnostic entry
Thomas Richter <[email protected]>
s390/cpum_sf: Add data entry sizes to sampling trailer entry
Sean Lanigan <[email protected]>
brcmfmac: Add support for bcm43364 wireless chipset
Jane Wan <[email protected]>
mtd: rawnand: fsl_ifc: fix FSL NAND driver to read all ONFI parameter pages
Brad Love <[email protected]>
media: saa7164: Fix driver name in debug output
Sami Tolvanen <[email protected]>
media: media-device: fix ioctl function types
Hans de Goede <[email protected]>
ACPI / LPSS: Only call pwm_add_table() for Bay Trail PWM if PMIC HRV is 2
Damien Le Moal <[email protected]>
libata: Fix command retry decision
Wei Yongjun <[email protected]>
media: rcar_jpu: Add missing clk_disable_unprepare() on error in jpu_open()
Florian Fainelli <[email protected]>
net: phy: phylink: Release link GPIO
Marc Zyngier <[email protected]>
dma-iommu: Fix compilation when !CONFIG_IOMMU_DMA
DaeRyong Jeong <[email protected]>
tty: Fix data race in tty_insert_flip_string_fixed_flag
Jacob Keller <[email protected]>
i40e: free the skb after clearing the bitlock
Mathieu Malaterre <[email protected]>
nvmem: properly handle returned value nvmem_reg_read
Geert Uytterhoeven <[email protected]>
ARM: dts: sh73a0: Add missing interrupt-affinity to PMU node
Geert Uytterhoeven <[email protected]>
ARM: dts: emev2: Add missing interrupt-affinity to PMU node
Patrice Chotard <[email protected]>
ARM: dts: stih407-pinctrl: Fix complain about IRQ_TYPE_NONE usage
Thor Thayer <[email protected]>
EDAC, altera: Fix ARM64 build warning
Dmitry Torokhov <[email protected]>
HID: i2c-hid: check if device is there before really probing
Jonathan Neuschäfer <[email protected]>
powerpc/embedded6xx/hlwd-pic: Prevent interrupts from being handled by Starlet
Samuel Li <[email protected]>
drm/amdgpu: Remove VRAM from shared bo domains.
Luc Van Oostenryck <[email protected]>
drm/radeon: fix mode_valid's return type
Kuninori Morimoto <[email protected]>
arm64: dts: renesas: salvator-common: use audio-graph-card for Sound
Terry Junge <[email protected]>
HID: hid-plantronics: Re-resend Update to map button for PTT products
Will Deacon <[email protected]>
arm64: cmpwait: Clear event register before arming exclusive monitor
Mauro Carvalho Chehab <[email protected]>
media: atomisp: ov2680: don't declare unused vars
Takashi Iwai <[email protected]>
ALSA: usb-audio: Apply rate limit to warning messages in URB complete callback
Grygorii Strashko <[email protected]>
net: ethernet: ti: cpsw-phy-sel: check bus_find_device() ret value
Colin Ian King <[email protected]>
media: smiapp: fix timeout checking in smiapp_read_nvm
Emil Tantilov <[email protected]>
ixgbevf: fix MAC address changes through ixgbevf_set_mac()
Yufen Yu <[email protected]>
md: fix NULL dereference of mddev->pers in remove_and_add_spares()
Gioh Kim <[email protected]>
md/raid1: add error handling of read error from FailFast device
Anson Huang <[email protected]>
regulator: pfuze100: add .is_enable() for pfuze100_swb_regulator_ops
Takashi Iwai <[email protected]>
ALSA: emu10k1: Rate-limit error messages about page errors
Alexandre Belloni <[email protected]>
rtc: tps65910: fix possible race condition
Alexandre Belloni <[email protected]>
rtc: vr41xx: fix possible race condition
Alexandre Belloni <[email protected]>
rtc: tps6586x: fix possible race condition
Vic Wei <[email protected]>
Bluetooth: btusb: add ID for LiteOn 04ca:301a
Ben Skeggs <[email protected]>
drm/nouveau/fifo/gk104-: poll for runlist update completion
Jens Remus <[email protected]>
scsi: zfcp: assert that the ERP lock is held when tracing a recovery trigger
Maya Erez <[email protected]>
scsi: ufs: fix exception event handling
Subhash Jadavani <[email protected]>
scsi: ufs: ufshcd: fix possible unclocked register access
Eric Biggers <[email protected]>
fscrypt: use unbound workqueue for decryption
Xi Wang <[email protected]>
net: hns3: Fix the missing client list node initialization
Tony Lindgren <[email protected]>
spi: Add missing pm_runtime_put_noidle() after failed get
Mark Rutland <[email protected]>
drivers/perf: arm-ccn: don't log to dmesg in event_init
Mimi Zohar <[email protected]>
ima: based on policy verify firmware signatures (pre-allocated buffer)
Xinming Hu <[email protected]>
mwifiex: correct histogram data with appropriate index
Michal Vokáč <[email protected]>
net: dsa: qca8k: Add support for QCA8334 switch
Mika Westerberg <[email protected]>
PCI: pciehp: Request control of native hotplug only if supported
Sandipan Das <[email protected]>
bpf: powerpc64: pad function address loads with NOPs
Julia Lawall <[email protected]>
pinctrl: at91-pio4: add missing of_node_put
Christophe Leroy <[email protected]>
powerpc/8xx: fix invalid register expression in head_8xx.S
Geert Uytterhoeven <[email protected]>
spi: sh-msiof: Fix setting SIRMDR1.SYNCAC to match SITMDR1.SYNCAC
Mathieu Malaterre <[email protected]>
powerpc: Add __printf verification to prom_printf
Mathieu Malaterre <[email protected]>
powerpc/powermac: Mark variable x as unused
Mathieu Malaterre <[email protected]>
powerpc/powermac: Add missing prototype for note_bootable_part()
Mathieu Malaterre <[email protected]>
powerpc/chrp/time: Make some functions static, add missing header include
Mathieu Malaterre <[email protected]>
powerpc/32: Add a missing include header
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for Bahamas
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for Bermuda
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for Serbia
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for Tanzania
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for Uganda
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for APL2_FCCA
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for APL13_WORLD
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for ETSI8_WORLD
Sven Eckelmann <[email protected]>
ath: Add regulatory mapping for FCC3_ETSIC
Keith Busch <[email protected]>
nvme-pci: Fix AER reset handling
Jianchao Wang <[email protected]>
nvme-rdma: stop admin queue before freeing it
Christoph Hellwig <[email protected]>
PCI: Prevent sysfs disable of device while driver is attached
Sebastian Andrzej Siewior <[email protected]>
PM / wakeup: Make s2idle_lock a RAW_SPINLOCK
Scott Wood <[email protected]>
x86/microcode: Make the late update update_lock a raw lock for RT
Qu Wenruo <[email protected]>
btrfs: qgroup: Finish rescan when hit the last leaf of extent tree
David Sterba <[email protected]>
btrfs: add barriers to btrfs_sync_log before log_commit_wait wakeups
Omar Sandoval <[email protected]>
Btrfs: don't BUG_ON() in btrfs_truncate_inode_items()
Omar Sandoval <[email protected]>
Btrfs: don't return ino to ino cache if inode item removal fails
Hans Verkuil <[email protected]>
media: videobuf2-core: don't call memop 'finish' when queueing
Ezequiel Garcia <[email protected]>
media: tw686x: Fix incorrect vb2_mem_ops GFP flags
Fuyun Liang <[email protected]>
net: hns3: Fixes the init of the VALID BD info in the descriptor
Eyal Reizer <[email protected]>
wlcore: sdio: check for valid platform device data before suspend
Ganapathi Bhat <[email protected]>
mwifiex: handle race during mwifiex_usb_disconnect
Vincent Palatin <[email protected]>
mfd: cros_ec: Fail early if we cannot identify the EC
Kai Chieh Chuang <[email protected]>
ASoC: dpcm: fix BE dai not hw_free and shutdown
Jian-Hong Pan <[email protected]>
Bluetooth: btusb: Add a new Realtek 8723DE ID 2ff8:b011
Thierry Escande <[email protected]>
Bluetooth: hci_qca: Fix "Sleep inside atomic section" warning
Shaul Triebitz <[email protected]>
iwlwifi: pcie: fix race in Rx buffer allocator
Ethan Lien <[email protected]>
btrfs: balance dirty metadata pages in btrfs_finish_ordered_io
Jan Kiszka <[email protected]>
PCI: Fix devm_pci_alloc_host_bridge() memory leak
Shuah Khan (Samsung OSG) <[email protected]>
selftests: intel_pstate: return Kselftest Skip code for skipped tests
Shuah Khan (Samsung OSG) <[email protected]>
selftests: memfd: return Kselftest Skip code for skipped tests
Daniel Díaz <[email protected]>
selftests/intel_pstate: Improve test, minor fixes
Kan Liang <[email protected]>
perf/x86/intel/uncore: Correct fixed counter index check for NHM
Kan Liang <[email protected]>
perf/x86/intel/uncore: Correct fixed counter index check in generic code
Michael Grzeschik <[email protected]>
usbip: dynamically allocate idev by nports found in sysfs
Shuah Khan (Samsung OSG) <[email protected]>
usbip: usbip_detach: Fix memory, udev context and udev leak
Filippo Muzzini <[email protected]>
block, bfq: remove wrong lock in bfq_requests_merged
Chao Yu <[email protected]>
f2fs: fix race in between GC and atomic open
Chao Yu <[email protected]>
f2fs: fix to detect failure of dquot_initialize
Sahitya Tummala <[email protected]>
f2fs: Fix deadlock in shutdown ioctl
Chao Yu <[email protected]>
f2fs: fix to wait page writeback during revoking atomic write
Chao Yu <[email protected]>
f2fs: fix to don't trigger writeback during recovery
Chao Yu <[email protected]>
f2fs: fix error path of move_data_page
Anatoly Pugachev <[email protected]>
disable loading f2fs module on PAGE_SIZE > 4KB
Trond Myklebust <[email protected]>
pnfs: Don't release the sequence slot until we've processed layoutget on open
Alexey Kodanev <[email protected]>
netfilter: nf_tables: check msg_type before nft_trans_set(trans)
Javier González <[email protected]>
lightnvm: pblk: warn in case of corrupted write buffer
Leon Romanovsky <[email protected]>
RDMA/mad: Convert BUG_ONs to error flows
Nicholas Piggin <[email protected]>
powerpc/64s: Fix compiler store ordering to SLB shadow area
Stewart Smith <[email protected]>
hvc_opal: don't set tb_ticks_per_usec in udbg_init_opal_common()
Sam Bobroff <[email protected]>
powerpc/eeh: Fix use-after-release of EEH driver
Michal Suchanek <[email protected]>
powerpc/64s: Add barrier_nospec
Christophe Leroy <[email protected]>
powerpc/lib: Adjust .balign inside string functions for PPC32
Cong Wang <[email protected]>
infiniband: fix a possible use-after-free bug
Benjamin Poirier <[email protected]>
e1000e: Ignore TSYNCRXCTL when getting I219 clock attributes
Chengguang Xu <[email protected]>
ceph: fix alignment of rasize
Wang YanQing <[email protected]>
bpf, arm32: fix inconsistent naming about emit_a32_lsr_{r64,i64}Sergey Senozhatsky <[email protected]>
printk: drop in_nmi check from printk_safe_flush_on_panic()
Marco Felsch <[email protected]>
watchdog: da9063: Fix updating timeout value
Laurentiu Tudor <[email protected]>
irqchip/ls-scfg-msi: Map MSIs in the iommu
Jozsef Kadlecsik <[email protected]>
netfilter: ipset: List timing out entries with "timeout 1" instead of zero
Florent Fourcot <[email protected]>
netfilter: ipset: forbid family for hash:mac sets
Jiri Olsa <[email protected]>
perf tools: Fix pmu events parsing rule
Alexandre Belloni <[email protected]>
rtc: ensure rtc_set_alarm fails when alarms are not supported
Mathieu Malaterre <[email protected]>
mm/slub.c: add __printf verification to slab_err()
Chintan Pandya <[email protected]>
mm: vmalloc: avoid racy handling of debugobjects in vunmap
Huang Ying <[email protected]>
mm: /proc/pid/pagemap: hide swap entries from unprivileged users
Tetsuo Handa <[email protected]>
kernel/hung_task.c: show all hung tasks before panic
Alex Williamson <[email protected]>
vfio/type1: Fix task tracking for QEMU vCPU hotplug
Alex Williamson <[email protected]>
vfio/mdev: Check globally for duplicate devices
Geert Uytterhoeven <[email protected]>
vfio: platform: Fix reset module leak in error path
Scott Mayhew <[email protected]>
nfsd: fix potential use-after-free in nfsd4_decode_getdeviceinfo
Trond Myklebust <[email protected]>
NFSv4.1: Fix the client behaviour on NFS4ERR_SEQ_FALSE_RETRY
Zhouyang Jia <[email protected]>
ALSA: fm801: add error handling for snd_ctl_add
Zhouyang Jia <[email protected]>
ALSA: emu10k1: add error handling for snd_ctl_add
Olga Kornievskaia <[email protected]>
skip LAYOUTRETURN if layout is invalid
Stephen Hemminger <[email protected]>
hv_netvsc: fix network namespace issues with VF support
Juergen Gross <[email protected]>
xen/netfront: raise max number of slots in xennet_get_responses()
Mark Rutland <[email protected]>
kcov: ensure irq code sees a valid area
Petr Machata <[email protected]>
mlxsw: spectrum_switchdev: Fix port_vlan refcounting
Johannes Weiner <[email protected]>
arm64: fix vmemmap BUILD_BUG_ON() triggering on !vmemmap setups
Steven Rostedt (VMware) <[email protected]>
tracing: Quiet gcc warning about maybe unused link variable
Artem Savkov <[email protected]>
tracing/kprobes: Fix trace_probe flags on enable_trace_kprobe() failure
Snild Dolkow <[email protected]>
kthread, tracing: Don't expose half-written comm when creating kthreads
Steven Rostedt (VMware) <[email protected]>
tracing: Fix possible double free in event_enable_trigger_func()
Steven Rostedt (VMware) <[email protected]>
tracing: Fix double free of event_trigger_data
Tejun Heo <[email protected]>
delayacct: fix crash in delayacct_blkio_end() after delayacct init failure
Shakeel Butt <[email protected]>
kvm, mm: account shadow page tables to kmemcg
KT Liao <[email protected]>
Input: elan_i2c - add another ACPI ID for Lenovo Ideapad 330-15AST
Chen-Yu Tsai <[email protected]>
Input: i8042 - add Lenovo LaVie Z to the i8042 reset list
Donald Shanty III <[email protected]>
Input: elan_i2c - add ACPI ID for lenovo ideapad 330
Marek Szyprowski <[email protected]>
spi: spi-s3c64xx: Fix system resume support
Andrew Morton <[email protected]>
drivers/infiniband/ulp/srpt/ib_srpt.c: fix build with gcc-4.4.4
Bart Van Assche <[email protected]>
IB/srpt: Fix an out-of-bounds stack access in srpt_zerolength_write()
Andrew Morton <[email protected]>
drivers/infiniband/core/verbs.c: fix build with gcc-4.4.4
Bart Van Assche <[email protected]>
RDMA/core: Avoid that ib_drain_qp() triggers an out-of-bounds stack access
Lixin Wang <[email protected]>
i2c: core: decrease reference count of device node in i2c_unregister_device
Kees Cook <[email protected]>
fork: unconditionally clear stack on fork
-------------
Diffstat:
.../devicetree/bindings/net/dsa/qca8k.txt | 23 ++++- .../devicetree/bindings/net/meson-dwmac.txt | 1 + .../devicetree/bindings/pinctrl/meson,pinctrl.txt | 2 + Documentation/vfio-mediated-device.txt | 5 + Makefile | 4 +- arch/arm/boot/dts/emev2.dtsi | 5 +- arch/arm/boot/dts/sh73a0.dtsi | 5 +- arch/arm/boot/dts/stih407-pinctrl.dtsi | 10 +- arch/arm/net/bpf_jit_32.c | 10 +- arch/arm64/boot/dts/renesas/salvator-common.dtsi | 38 ++++--- arch/arm64/configs/defconfig | 2 + arch/arm64/include/asm/cmpxchg.h | 4 +- arch/arm64/mm/init.c | 4 +- arch/microblaze/boot/Makefile | 10 +- arch/powerpc/include/asm/barrier.h | 15 +++ arch/powerpc/include/asm/cache.h | 3 + arch/powerpc/kernel/eeh_driver.c | 28 ++--- arch/powerpc/kernel/head_8xx.S | 2 +- arch/powerpc/kernel/pci_32.c | 1 + arch/powerpc/kernel/prom_init.c | 114 +++++++++++---------- arch/powerpc/lib/string.S | 7 +- arch/powerpc/mm/slb.c | 8 +- arch/powerpc/net/bpf_jit_comp64.c | 34 ++++-- arch/powerpc/platforms/chrp/time.c | 6 +- arch/powerpc/platforms/embedded6xx/hlwd-pic.c | 5 + arch/powerpc/platforms/powermac/bootx_init.c | 4 +- arch/powerpc/platforms/powermac/setup.c | 1 + arch/s390/include/asm/cpu_mf.h | 6 +- arch/x86/events/intel/uncore.c | 2 +- arch/x86/events/intel/uncore_nhmex.c | 2 +- arch/x86/kernel/cpu/microcode/core.c | 6 +- arch/x86/kvm/mmu.c | 2 +- block/bfq-iosched.c | 2 - block/bio.c | 19 ++-- crypto/authenc.c | 1 + crypto/authencesn.c | 1 + drivers/acpi/acpi_lpss.c | 6 +- drivers/acpi/pci_root.c | 4 +- drivers/ata/libata-eh.c | 12 ++- drivers/bluetooth/btusb.c | 4 + drivers/bluetooth/hci_qca.c | 2 +- drivers/bus/arm-ccn.c | 20 ++-- drivers/char/random.c | 10 +- drivers/edac/altera_edac.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 8 +- drivers/gpu/drm/drm_atomic.c | 4 +- drivers/gpu/drm/drm_atomic_helper.c | 78 +++++++------- drivers/gpu/drm/drm_dp_mst_topology.c | 9 +- drivers/gpu/drm/gma500/psb_intel_drv.h | 2 +- drivers/gpu/drm/gma500/psb_intel_lvds.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 8 +- drivers/gpu/drm/radeon/radeon_connectors.c | 10 +- drivers/hid/hid-plantronics.c | 6 +- drivers/hid/i2c-hid/i2c-hid.c | 8 ++ drivers/i2c/i2c-core-base.c | 5 +- drivers/infiniband/core/mad.c | 11 +- drivers/infiniband/core/ucma.c | 6 +- drivers/infiniband/core/uverbs_cmd.c | 5 + drivers/infiniband/core/verbs.c | 12 ++- drivers/infiniband/ulp/srpt/ib_srpt.c | 16 +-- drivers/input/mouse/elan_i2c_core.c | 2 + drivers/input/serio/i8042-x86ia64io.h | 7 ++ drivers/irqchip/irq-ls-scfg-msi.c | 3 + drivers/lightnvm/pblk-rb.c | 5 +- drivers/md/md.c | 3 + drivers/md/raid1.c | 2 + drivers/media/common/siano/smsendian.c | 14 +-- drivers/media/i2c/smiapp/smiapp-core.c | 11 +- drivers/media/media-device.c | 21 ++-- drivers/media/pci/saa7164/saa7164-fw.c | 3 +- drivers/media/pci/tw686x/tw686x-video.c | 3 +- drivers/media/platform/omap3isp/isp.c | 7 +- drivers/media/platform/rcar_jpu.c | 4 +- drivers/media/radio/si470x/radio-si470x-i2c.c | 6 +- drivers/media/v4l2-core/videobuf2-core.c | 9 +- drivers/memory/tegra/mc.c | 22 +--- drivers/memory/tegra/mc.h | 9 ++ drivers/memory/tegra/tegra114.c | 2 + drivers/memory/tegra/tegra124.c | 6 ++ drivers/memory/tegra/tegra210.c | 3 + drivers/memory/tegra/tegra30.c | 2 + drivers/mfd/cros_ec.c | 6 +- drivers/mmc/core/pwrseq_simple.c | 14 ++- drivers/mmc/host/dw_mmc.c | 4 + drivers/mtd/nand/fsl_ifc_nand.c | 17 +-- drivers/net/dsa/qca8k.c | 52 +++++++++- drivers/net/dsa/qca8k.h | 7 +- drivers/net/ethernet/amazon/ena/ena_com.c | 1 + drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 4 +- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 + .../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 7 +- .../net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c | 4 + drivers/net/ethernet/intel/e1000e/netdev.c | 15 ++- drivers/net/ethernet/intel/i40e/i40e_ptp.c | 7 +- drivers/net/ethernet/intel/igb/igb_main.c | 9 +- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 1 + .../ethernet/mellanox/mlxsw/spectrum_switchdev.c | 4 +- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +- drivers/net/ethernet/ti/cpsw-phy-sel.c | 8 +- drivers/net/hyperv/hyperv_net.h | 2 + drivers/net/hyperv/netvsc_drv.c | 43 ++++---- drivers/net/phy/mdio-mux-bcm-iproc.c | 2 +- drivers/net/phy/phylink.c | 2 + drivers/net/usb/lan78xx.c | 2 + drivers/net/wireless/ath/regd.h | 5 + drivers/net/wireless/ath/regd_common.h | 13 +++ .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 1 + drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 2 + drivers/net/wireless/marvell/mwifiex/usb.c | 3 + drivers/net/wireless/marvell/mwifiex/util.c | 8 +- drivers/net/wireless/rsi/rsi_91x_hal.c | 35 ++++--- drivers/net/wireless/rsi/rsi_91x_sdio.c | 23 +++-- drivers/net/wireless/rsi/rsi_sdio.h | 2 +- drivers/net/wireless/ti/wlcore/sdio.c | 5 + drivers/net/xen-netfront.c | 10 +- drivers/nvme/host/pci.c | 5 + drivers/nvme/host/rdma.c | 10 +- drivers/nvmem/core.c | 7 ++ drivers/pci/host/pci-xgene.c | 1 - drivers/pci/hotplug/pciehp_hpc.c | 7 ++ drivers/pci/pci-sysfs.c | 15 +-- drivers/pci/probe.c | 4 +- drivers/pinctrl/pinctrl-at91-pio4.c | 4 +- drivers/regulator/cpcap-regulator.c | 2 +- drivers/regulator/of_regulator.c | 13 +-- drivers/regulator/pfuze100-regulator.c | 1 + drivers/regulator/twl-regulator.c | 2 +- drivers/rtc/interface.c | 5 + drivers/rtc/rtc-tps6586x.c | 14 ++- drivers/rtc/rtc-tps65910.c | 12 ++- drivers/rtc/rtc-vr41xx.c | 9 +- drivers/s390/scsi/zfcp_dbf.c | 2 + drivers/scsi/3w-9xxx.c | 5 + drivers/scsi/3w-xxxx.c | 3 + drivers/scsi/cxlflash/main.c | 11 +- drivers/scsi/cxlflash/sislite.h | 1 + drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 11 +- drivers/scsi/megaraid.c | 3 + drivers/scsi/megaraid/megaraid_sas_fusion.c | 3 + drivers/scsi/qedf/qedf_main.c | 10 ++ drivers/scsi/scsi_dh.c | 5 +- drivers/scsi/ufs/ufshcd.c | 28 +++-- drivers/soc/imx/gpcv2.c | 22 ++-- drivers/spi/spi-meson-spicc.c | 11 +- drivers/spi/spi-s3c64xx.c | 4 +- drivers/spi/spi-sh-msiof.c | 6 +- drivers/spi/spi.c | 1 + .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 2 +- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c | 30 +++--- drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 6 +- drivers/staging/lustre/lustre/llite/xattr.c | 6 +- drivers/staging/media/atomisp/i2c/ov2680.c | 6 +- .../atomisp/pci/atomisp2/atomisp_compat_ioctl32.c | 49 ++++----- .../vc04_services/interface/vchiq_arm/vchiq_core.c | 1 + drivers/thermal/samsung/exynos_tmu.c | 1 + drivers/tty/hvc/hvc_opal.c | 1 - drivers/tty/pty.c | 3 + drivers/usb/core/hub.c | 4 + drivers/usb/gadget/udc/renesas_usb3.c | 8 +- drivers/vfio/mdev/mdev_core.c | 102 +++++++----------- drivers/vfio/mdev/mdev_private.h | 2 +- drivers/vfio/platform/vfio_platform_common.c | 15 ++- drivers/vfio/vfio_iommu_type1.c | 73 ++++++++----- drivers/video/backlight/pwm_bl.c | 6 +- drivers/watchdog/da9063_wdt.c | 17 ++- fs/block_dev.c | 9 +- fs/btrfs/inode.c | 33 +++--- fs/btrfs/qgroup.c | 19 ++++ fs/btrfs/tree-log.c | 10 +- fs/ceph/super.c | 2 +- fs/crypto/crypto.c | 11 +- fs/ext4/balloc.c | 3 + fs/ext4/ialloc.c | 8 +- fs/ext4/inline.c | 19 ++-- fs/ext4/inode.c | 16 ++- fs/ext4/super.c | 8 +- fs/f2fs/data.c | 8 +- fs/f2fs/file.c | 18 +++- fs/f2fs/gc.c | 11 +- fs/f2fs/segment.c | 5 + fs/f2fs/super.c | 6 ++ fs/fcntl.c | 15 ++- fs/nfs/nfs4proc.c | 14 ++- fs/nfs/pnfs.c | 6 +- fs/nfsd/nfs4xdr.c | 2 + fs/overlayfs/super.c | 19 +++- fs/proc/task_mmu.c | 26 +++-- fs/squashfs/cache.c | 3 + fs/squashfs/file.c | 8 +- fs/squashfs/fragment.c | 4 +- fs/squashfs/squashfs_fs.h | 6 ++ include/drm/drm_dp_helper.h | 1 + include/linux/delayacct.h | 4 +- include/linux/dma-iommu.h | 1 + include/linux/fs.h | 2 +- include/linux/mmc/sdio_ids.h | 1 + include/linux/netfilter/ipset/ip_set_timeout.h | 10 +- include/linux/regulator/consumer.h | 1 + include/linux/serial_core.h | 3 +- include/linux/thread_info.h | 6 +- include/net/tcp.h | 2 +- include/soc/tegra/mc.h | 2 + include/uapi/sound/asoc.h | 23 ++++- kernel/auditfilter.c | 2 +- kernel/auditsc.c | 2 + kernel/bpf/verifier.c | 4 +- kernel/delayacct.c | 17 +-- kernel/fork.c | 3 +- kernel/hung_task.c | 11 +- kernel/kcov.c | 3 +- kernel/kthread.c | 8 +- kernel/power/suspend.c | 14 +-- kernel/printk/printk_safe.c | 2 +- kernel/stop_machine.c | 24 ++--- kernel/trace/trace_events_trigger.c | 18 +++- kernel/trace/trace_kprobe.c | 15 ++- mm/slub.c | 2 +- mm/vmalloc.c | 3 +- net/ipv4/fib_frontend.c | 4 +- net/ipv4/ipconfig.c | 13 +++ net/ipv4/tcp_bbr.c | 4 + net/ipv4/tcp_dctcp.c | 4 +- net/ipv4/tcp_input.c | 48 ++++----- net/netfilter/ipset/ip_set_hash_gen.h | 5 +- net/netfilter/nf_tables_api.c | 11 +- net/netlink/af_netlink.c | 5 + security/integrity/ima/ima_main.c | 1 + sound/pci/emu10k1/emupcm.c | 4 +- sound/pci/emu10k1/memory.c | 6 +- sound/pci/fm801.c | 16 ++- sound/pci/hda/patch_ca0132.c | 8 +- sound/soc/soc-pcm.c | 6 +- sound/soc/soc-topology.c | 19 +++- sound/usb/pcm.c | 2 +- tools/perf/util/parse-events.y | 14 ++- tools/testing/selftests/intel_pstate/run.sh | 29 +++--- tools/testing/selftests/memfd/run_tests.sh | 14 ++- tools/usb/usbip/libsrc/vhci_driver.c | 32 +++--- tools/usb/usbip/libsrc/vhci_driver.h | 3 +- tools/usb/usbip/src/usbip_detach.c | 9 +- 240 files changed, 1573 insertions(+), 835 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/246 fork: unconditionally clear stack on fork
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <[email protected]>
commit e01e80634ecdde1dd113ac43b3adad21b47f3957 upstream.
One of the classes of kernel stack content leaks[1] is exposing the contents of prior heap or stack contents when a new process stack is allocated. Normally, those stacks are not zeroed, and the old contents remain in place. In the face of stack content exposure flaws, those contents can leak to userspace.
Fixing this will make the kernel no longer vulnerable to these flaws, as the stack will be wiped each time a stack is assigned to a new process. There's not a meaningful change in runtime performance; it almost looks like it provides a benefit.
Performing back-to-back kernel builds before:
Run times: 157.86 157.09 158.90 160.94 160.80 Mean: 159.12 Std Dev: 1.54
and after:
Run times: 159.31 157.34 156.71 158.15 160.81 Mean: 158.46 Std Dev: 1.46
Instead of making this a build or runtime config, Andy Lutomirski recommended this just be enabled by default.
[1] A noisy search for many kinds of stack content leaks can be seen here:
https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=linux+kernel+stack+leak
I did some more with perf and cycle counts on running 100,000 execs of /bin/true.
before:
Cycles: 218858861551 218853036130 214727610969 227656844122 224980542841
Mean: 221015379122.60
Std Dev: 4662486552.47
after:
Cycles: 213868945060 213119275204 211820169456 224426673259 225489986348
Mean: 217745009865.40
Std Dev: 5935559279.99
It continues to look like it's faster, though the deviation is rather wide, but I'm not sure what I could do that would be less noisy. I'm open to ideas!
--- include/linux/thread_info.h | 6 +----- kernel/fork.c | 3 +-- 2 files changed, 2 insertions(+), 7 deletions(-)
include/linux/thread_info.h +1 -5
@@ -43,11 +43,7 @@ enum {#define THREAD_ALIGN THREAD_SIZE#endif -#if IS_ENABLED (CONFIG_DEBUG_STACK_USAGE ) ||IS_ENABLED (CONFIG_DEBUG_KMEMLEAK ) -# define THREADINFO_GFP (GFP_KERNEL_ACCOUNT | __GFP_ZERO) -#else -# define THREADINFO_GFP (GFP_KERNEL_ACCOUNT) -#endif +#define THREADINFO_GFP (GFP_KERNEL_ACCOUNT | __GFP_ZERO)/* * flag set/clear/test wrappers
kernel/fork.c +1 -2
@@ -215,10 +215,9 @@ static unsigned long *alloc_thread_stackif (!s)continue ; -#ifdef CONFIG_DEBUG_KMEMLEAK /* Clear stale pointers from reused stack. */ memset (s->addr,0 ,THREAD_SIZE ); -#endif + tsk->stack_vm_area = s;return s->addr; }
Greg Kroah-Hartman
maintainerPATCH 2/246 i2c: core: decrease reference count of device node in i2c_unregister_device
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lixin Wang <[email protected]>
commit e0638fa400eaccf9fa8060f67140264c4e276552 upstream.
Reference count of device node was increased in of_i2c_register_device, but without decreasing it in i2c_unregister_device. Then the added device node will never be released. Fix this by adding the of_node_put.
--- drivers/i2c/i2c-core-base.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/i2c/i2c-core-base.c +4 -1
@@ -808,8 +808,11 @@ EXPORT_SYMBOL_GPL(i2c_new_device);*/ void i2c_unregister_device (struct i2c_client *client) { -if (client->dev.of_node) +if (client->dev.of_node) {of_node_clear_flag (client->dev.of_node,OF_POPULATED ); +of_node_put (client->dev.of_node); + } +if (ACPI_COMPANION (&client->dev))acpi_device_clear_enumerated (ACPI_COMPANION (&client->dev));device_unregister (&client->dev);
Greg Kroah-Hartman
maintainerPATCH 3/246 RDMA/core: Avoid that ib_drain_qp() triggers an out-of-bounds stack access
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bart Van Assche <[email protected]>
commit a1ae7d0345edd593d6725d3218434d903a0af95d upstream.
This patch fixes the following KASAN complaint:
==================================================================
BUG: KASAN: stack-out-of-bounds in rxe_post_send+0x77d/0x9b0 [rdma_rxe]
Read of size 8 at addr ffff880061aef860 by task 01/1080
CPU: 2 PID: 1080 Comm: 01 Not tainted 4.16.0-rc3-dbg+ #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.0.0-prebuilt.qemu-project.org 04/01/2014
Call Trace:
dump_stack+0x85/0xc7
print_address_description+0x65/0x270
kasan_report+0x231/0x350
rxe_post_send+0x77d/0x9b0 [rdma_rxe]
__ib_drain_sq+0x1ad/0x250 [ib_core]
ib_drain_qp+0x9/0x30 [ib_core]
srp_destroy_qp+0x51/0x70 [ib_srp]
srp_free_ch_ib+0xfc/0x380 [ib_srp]
srp_create_target+0x1071/0x19e0 [ib_srp]
kernfs_fop_write+0x180/0x210
__vfs_write+0xb1/0x2e0
vfs_write+0xf6/0x250
SyS_write+0x99/0x110
do_syscall_64+0xee/0x2b0
entry_SYSCALL_64_after_hwframe+0x42/0xb7
The buggy address belongs to the page:
page:ffffea000186bbc0 count:0 mapcount:0 mapping:0000000000000000 index:0x0
flags: 0x4000000000000000()
raw: 4000000000000000 0000000000000000 0000000000000000 00000000ffffffff
raw: 0000000000000000 ffffea000186bbe0 0000000000000000 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff880061aef700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff880061aef780: 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00
>ffff880061aef800: f2 f2 f2 f2 f2 f2 f2 00 00 00 00 00 f2 f2 f2 f2
^
ffff880061aef880: f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 f2 f2
ffff880061aef900: f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00 00
==================================================================--- drivers/infiniband/core/verbs.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
drivers/infiniband/core/verbs.c +8 -3
@@ -2115,10 +2115,15 @@ static void __ib_drain_sq(struct ib_qp *struct ib_cq *cq = qp->send_cq;struct ib_qp_attr attr = { .qp_state =IB_QPS_ERR };struct ib_drain_cqe sdrain; -struct ib_send_wr swr = {}, *bad_swr; +struct ib_send_wr *bad_swr; +struct ib_rdma_wr swr = { + .wr = { + .opcode =IB_WR_RDMA_WRITE , + .wr_cqe = &sdrain.cqe, + }, + };int ret; - swr.wr_cqe = &sdrain.cqe; sdrain.cqe.done = ib_drain_qp_done;init_completion (&sdrain.done);
@@ -2128,7 +2133,7 @@ static void __ib_drain_sq(struct ib_qp *return ; } - ret =ib_post_send (qp, &swr, &bad_swr); + ret =ib_post_send (qp, &swr.wr, &bad_swr);if (ret) {WARN_ONCE (ret,"failed to drain send queue: %d\n" , ret);return ;
Greg Kroah-Hartman
maintainerPATCH 4/246 drivers/infiniband/core/verbs.c: fix build with gcc-4.4.4
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrew Morton <[email protected]>
commit 6ee687735e745eafae9e6b93d1ea70bc52e7ad07 upstream.
gcc-4.4.4 has issues with initialization of anonymous unions.
drivers/infiniband/core/verbs.c: In function '__ib_drain_sq':drivers/infiniband/core/verbs.c:2204: error: unknown field 'wr_cqe' specified in initializer drivers/infiniband/core/verbs.c:2204: warning: initialization makes integer from pointer without a cast
Work around this.
--- drivers/infiniband/core/verbs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/infiniband/core/verbs.c +2 -1
@@ -2118,8 +2118,9 @@ static void __ib_drain_sq(struct ib_qp *struct ib_send_wr *bad_swr;struct ib_rdma_wr swr = { .wr = { + .next =NULL , + { .wr_cqe = &sdrain.cqe, }, .opcode =IB_WR_RDMA_WRITE , - .wr_cqe = &sdrain.cqe, }, };int ret;
Greg Kroah-Hartman
maintainerPATCH 5/246 IB/srpt: Fix an out-of-bounds stack access in srpt_zerolength_write()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bart Van Assche <[email protected]>
commit 2a78cb4db487372152bed2055c038f9634d595e8 upstream.
Avoid triggering an out-of-bounds stack access by changing the type of 'wr' from ib_send_wr into ib_rdma_wr.
This patch fixes the following KASAN bug report:
BUG: KASAN: stack-out-of-bounds in rxe_post_send+0x7a9/0x9a0 [rdma_rxe] Read of size 8 at addr ffff880068197a48 by task kworker/2:1/44 Workqueue: ib_cm cm_work_handler [ib_cm] Call Trace: dump_stack+0x8e/0xcd print_address_description+0x6f/0x280 kasan_report+0x25a/0x380 __asan_load8+0x54/0x90 rxe_post_send+0x7a9/0x9a0 [rdma_rxe] srpt_zerolength_write+0xf0/0x180 [ib_srpt] srpt_cm_rtu_recv+0x68/0x110 [ib_srpt] srpt_rdma_cm_handler+0xbb/0x15b [ib_srpt] cma_ib_handler+0x1aa/0x4a0 [rdma_cm] cm_process_work+0x30/0x100 [ib_cm] cm_work_handler+0xa86/0x351b [ib_cm] process_one_work+0x475/0x9f0 worker_thread+0x69/0x690 kthread+0x1ad/0x1d0 ret_from_fork+0x3a/0x50
--- drivers/infiniband/ulp/srpt/ib_srpt.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/infiniband/ulp/srpt/ib_srpt.c +9 -6
@@ -787,13 +787,16 @@ static int srpt_post_recv(struct srpt_de*/ static int srpt_zerolength_write (struct srpt_rdma_ch *ch) { -struct ib_send_wr wr, *bad_wr; +struct ib_send_wr *bad_wr; +struct ib_rdma_wr wr = { + .wr = { + .opcode =IB_WR_RDMA_WRITE , + .wr_cqe = &ch->zw_cqe, + .send_flags =IB_SEND_SIGNALED , + } + }; -memset (&wr,0 ,sizeof (wr)); - wr.opcode =IB_WR_RDMA_WRITE ; - wr.wr_cqe = &ch->zw_cqe; - wr.send_flags =IB_SEND_SIGNALED ; -return ib_post_send (ch->qp, &wr, &bad_wr); +return ib_post_send (ch->qp, &wr.wr, &bad_wr); }static void srpt_zerolength_write_done (struct ib_cq *cq,struct ib_wc *wc)
Greg Kroah-Hartman
maintainerPATCH 6/246 drivers/infiniband/ulp/srpt/ib_srpt.c: fix build with gcc-4.4.4
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrew Morton <[email protected]>
commit 06892cc190550807d332c95a0114c7e175584012 upstream.
gcc-4.4.4 has issues with initialization of anonymous unions:
drivers/infiniband/ulp/srpt/ib_srpt.c: In function 'srpt_zerolength_write':drivers/infiniband/ulp/srpt/ib_srpt.c:854: error: unknown field 'wr_cqe' specified in initializer drivers/infiniband/ulp/srpt/ib_srpt.c:854: warning: initialization makes integer from pointer without a cast
Work aound this.
--- drivers/infiniband/ulp/srpt/ib_srpt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/infiniband/ulp/srpt/ib_srpt.c +2 -1
@@ -790,8 +790,9 @@ static int srpt_zerolength_write(structstruct ib_send_wr *bad_wr;struct ib_rdma_wr wr = { .wr = { + .next =NULL , + { .wr_cqe = &ch->zw_cqe, }, .opcode =IB_WR_RDMA_WRITE , - .wr_cqe = &ch->zw_cqe, .send_flags =IB_SEND_SIGNALED , } };
Greg Kroah-Hartman
maintainerPATCH 7/246 spi: spi-s3c64xx: Fix system resume support
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Szyprowski <[email protected]>
commit e935dba111621bd6a0c5d48e6511a4d9885103b4 upstream.
Since Linux v4.10 release (commit 1d9174fbc55e "PM / Runtime: Defer resuming of the device in pm_runtime_force_resume()"), pm_runtime_force_resume() function doesn't runtime resume device if it was not runtime active before system suspend. Thus, driver should not do any register access after pm_runtime_force_resume() without checking the runtime status of the device. To fix this issue, simply move s3c64xx_spi_hwinit() call to s3c64xx_spi_runtime_resume() to ensure that hardware is always properly initialized. This fixes Synchronous external abort issue on system suspend/resume cycle on newer Exynos SoCs.
--- drivers/spi/spi-s3c64xx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/spi/spi-s3c64xx.c +2 -2
@@ -1273,8 +1273,6 @@ static int s3c64xx_spi_resume(struct devif (ret <0 )return ret; -s3c64xx_spi_hwinit (sdd, sdd->port_id); - return spi_master_resume(master); }#endif /* CONFIG_PM_SLEEP */
@@ -1312,6 +1310,8 @@ static int s3c64xx_spi_runtime_resume(stif (ret !=0 ) goto err_disable_src_clk; +s3c64xx_spi_hwinit (sdd, sdd->port_id); +return 0 ; err_disable_src_clk:
Greg Kroah-Hartman
maintainerPATCH 8/246 Input: elan_i2c - add ACPI ID for lenovo ideapad 330
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Donald Shanty III <[email protected]>
commit 938f45008d8bc391593c97508bc798cc95a52b9b upstream.
This allows Elan driver to bind to the touchpad found in Lenovo Ideapad 330 series laptops.
--- drivers/input/mouse/elan_i2c_core.c | 1 + 1 file changed, 1 insertion(+)
drivers/input/mouse/elan_i2c_core.c +1 -0
@@ -1262,6 +1262,7 @@ static const struct acpi_device_id elan_ { "ELAN0611", 0 }, { "ELAN0612", 0 }, { "ELAN0618", 0 }, + { "ELAN061D", 0 }, { "ELAN1000", 0 }, { } };
Greg Kroah-Hartman
maintainerPATCH 9/246 Input: i8042 - add Lenovo LaVie Z to the i8042 reset list
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chen-Yu Tsai <[email protected]>
commit 384cf4285b34e08917e3e66603382f2b0c4f6e1b upstream.
The Lenovo LaVie Z laptop requires i8042 to be reset in order to consistently detect its Elantech touchpad. The nomux and kbdreset quirks are not sufficient.
It's possible the other LaVie Z models from NEC require this as well.
--- drivers/input/serio/i8042-x86ia64io.h | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/input/serio/i8042-x86ia64io.h +7 -0
@@ -527,6 +527,13 @@ static const struct dmi_system_id __init DMI_MATCH(DMI_PRODUCT_NAME, "N24_25BU"), }, }, + { + /* Lenovo LaVie Z */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo LaVie Z"), + }, + }, { } };
Greg Kroah-Hartman
maintainerPATCH 10/246 Input: elan_i2c - add another ACPI ID for Lenovo Ideapad 330-15AST
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: KT Liao <[email protected]>
commit 6f88a6439da5d94de334a341503bc2c7f4a7ea7f upstream.
Add ELAN0622 to ACPI mapping table to support Elan touchpad found in Ideapad 330-15AST.
--- drivers/input/mouse/elan_i2c_core.c | 1 + 1 file changed, 1 insertion(+)
drivers/input/mouse/elan_i2c_core.c +1 -0
@@ -1263,6 +1263,7 @@ static const struct acpi_device_id elan_ { "ELAN0612", 0 }, { "ELAN0618", 0 }, { "ELAN061D", 0 }, + { "ELAN0622", 0 }, { "ELAN1000", 0 }, { } };
Greg Kroah-Hartman
maintainerPATCH 12/246 delayacct: fix crash in delayacct_blkio_end() after delayacct init failure
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tejun Heo <[email protected]>
commit b512719f771a82180211c9a315b8a7f628832b3d upstream.
While forking, if delayacct init fails due to memory shortage, it continues expecting all delayacct users to check task->delays pointer against NULL before dereferencing it, which all of them used to do.
Commit c96f5471ce7d ("delayacct: Account blkio completion on the correct task"), while updating delayacct_blkio_end() to take the target task instead of always using %current, made the function test NULL on %current->delays and then continue to operated on @p->delays. If %current succeeded init while @p didn't, it leads to the following crash.
BUG: unable to handle kernel NULL pointer dereference at 0000000000000004 IP: __delayacct_blkio_end+0xc/0x40 PGD 8000001fd07e1067 P4D 8000001fd07e1067 PUD 1fcffbb067 PMD 0 Oops: 0000 [#1] SMP PTI CPU: 4 PID: 25774 Comm: QIOThread0 Not tainted 4.16.0-9_fbk1_rc2_1180_g6b593215b4d7 #9 RIP: 0010:__delayacct_blkio_end+0xc/0x40 Call Trace: try_to_wake_up+0x2c0/0x600 autoremove_wake_function+0xe/0x30 __wake_up_common+0x74/0x120 wake_up_page_bit+0x9c/0xe0 mpage_end_io+0x27/0x70 blk_update_request+0x78/0x2c0 scsi_end_request+0x2c/0x1e0 scsi_io_completion+0x20b/0x5f0 blk_mq_complete_request+0xa2/0x100 ata_scsi_qc_complete+0x79/0x400 ata_qc_complete_multiple+0x86/0xd0 ahci_handle_port_interrupt+0xc9/0x5c0 ahci_handle_port_intr+0x54/0xb0 ahci_single_level_irq_intr+0x3b/0x60 __handle_irq_event_percpu+0x43/0x190 handle_irq_event_percpu+0x20/0x50 handle_irq_event+0x2a/0x50 handle_edge_irq+0x80/0x1c0 handle_irq+0xaf/0x120 do_IRQ+0x41/0xc0 common_interrupt+0xf/0xf
Fix it by updating delayacct_blkio_end() check @p->delays instead.
--- include/linux/delayacct.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/delayacct.h +1 -1
@@ -124,7 +124,7 @@ static inline void delayacct_blkio_startstatic inline void delayacct_blkio_end (struct task_struct *p) { -if (current->delays) +if (p->delays)__delayacct_blkio_end (p);delayacct_clear_flag (DELAYACCT_PF_BLKIO ); }
Greg Kroah-Hartman
maintainerPATCH 13/246 tracing: Fix double free of event_trigger_data
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (VMware) <[email protected]>
commit 1863c387259b629e4ebfb255495f67cd06aa229b upstream.
Running the following:
# cd /sys/kernel/debug/tracing # echo 500000 > buffer_size_kb [ Or some other number that takes up most of memory ] # echo snapshot > events/sched/sched_switch/trigger
Triggers the following bug:
------------[ cut here ]------------ kernel BUG at mm/slub.c:296! invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC PTI CPU: 6 PID: 6878 Comm: bash Not tainted 4.18.0-rc6-test+ #1066 Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v03.03 07/14/2016 RIP: 0010:kfree+0x16c/0x180 Code: 05 41 0f b6 72 51 5b 5d 41 5c 4c 89 d7 e9 ac b3 f8 ff 48 89 d9 48 89 da 41 b8 01 00 00 00 5b 5d 41 5c 4c 89 d6 e9 f4 f3 ff ff <0f> 0b 0f 0b 48 8b 3d d9 d8 f9 00 e9 c1 fe ff ff 0f 1f 40 00 0f 1f RSP: 0018:ffffb654436d3d88 EFLAGS: 00010246 RAX: ffff91a9d50f3d80 RBX: ffff91a9d50f3d80 RCX: ffff91a9d50f3d80 RDX: 00000000000006a4 RSI: ffff91a9de5a60e0 RDI: ffff91a9d9803500 RBP: ffffffff8d267c80 R08: 00000000000260e0 R09: ffffffff8c1a56be R10: fffff0d404543cc0 R11: 0000000000000389 R12: ffffffff8c1a56be R13: ffff91a9d9930e18 R14: ffff91a98c0c2890 R15: ffffffff8d267d00 FS: 00007f363ea64700(0000) GS:ffff91a9de580000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 000055c1cacc8e10 CR3: 00000000d9b46003 CR4: 00000000001606e0 Call Trace: event_trigger_callback+0xee/0x1d0 event_trigger_write+0xfc/0x1a0 __vfs_write+0x33/0x190 ? handle_mm_fault+0x115/0x230 ? _cond_resched+0x16/0x40 vfs_write+0xb0/0x190 ksys_write+0x52/0xc0 do_syscall_64+0x5a/0x160 entry_SYSCALL_64_after_hwframe+0x49/0xbe RIP: 0033:0x7f363e16ab50 Code: 73 01 c3 48 8b 0d 38 83 2c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 0f 1f 44 00 00 83 3d 79 db 2c 00 00 75 10 b8 01 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 1e e3 01 00 48 89 04 24 RSP: 002b:00007fff9a4c6378 EFLAGS: 00000246 ORIG_RAX: 0000000000000001 RAX: ffffffffffffffda RBX: 0000000000000009 RCX: 00007f363e16ab50 RDX: 0000000000000009 RSI: 000055c1cacc8e10 RDI: 0000000000000001 RBP: 000055c1cacc8e10 R08: 00007f363e435740 R09: 00007f363ea64700 R10: 0000000000000073 R11: 0000000000000246 R12: 0000000000000009 R13: 0000000000000001 R14: 00007f363e4345e0 R15: 00007f363e4303c0 Modules linked in: ip6table_filter ip6_tables snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core snd_seq snd_seq_device i915 snd_pcm snd_timer i2c_i801 snd soundcore i2c_algo_bit drm_kms_helper 86_pkg_temp_thermal video kvm_intel kvm irqbypass wmi e1000e ---[ end trace d301afa879ddfa25 ]---
The cause is because the register_snapshot_trigger() call failed to allocate the snapshot buffer, and then called unregister_trigger() which freed the data that was passed to it. Then on return to the function that called register_snapshot_trigger(), as it sees it failed to register, it frees the trigger_data again and causes a double free.
By calling event_trigger_init() on the trigger_data (which only ups the reference counter for it), and then event_trigger_free() afterward, the trigger_data would not get freed by the registering trigger function as it would only up and lower the ref count for it. If the register trigger function fails, then the event_trigger_free() called after it will free the trigger data normally.
--- kernel/trace/trace_events_trigger.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
kernel/trace/trace_events_trigger.c +8 -4
@@ -680,6 +680,8 @@ event_trigger_callback(struct event_comm goto out_free; out_reg: +/* Up the trigger_data count to make sure reg doesn't free it on failure */ +event_trigger_init (trigger_ops, trigger_data); ret = cmd_ops->reg (glob, trigger_ops, trigger_data, file);/* * The above returns on success the # of functions enabled,
@@ -687,11 +689,13 @@ event_trigger_callback(struct event_comm* Consider no functions a failure too. */ if (!ret) { + cmd_ops->unreg (glob, trigger_ops, trigger_data, file); ret = -ENOENT ; - goto out_free; - }else if (ret <0 ) - goto out_free; - ret =0 ; + }else if (ret >0 ) + ret =0 ; + +/* Down the counter of trigger_data or free it if not used anymore */ +event_trigger_free (trigger_ops, trigger_data); out:return ret;
Greg Kroah-Hartman
maintainerPATCH 14/246 tracing: Fix possible double free in event_enable_trigger_func()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (VMware) <[email protected]>
commit 15cc78644d0075e76d59476a4467e7143860f660 upstream.
There was a case that triggered a double free in event_trigger_callback() due to the called reg() function freeing the trigger_data and then it getting freed again by the error return by the caller. The solution there was to up the trigger_data ref count.
Code inspection found that event_enable_trigger_func() has the same issue, but is not as easy to trigger (requires harder to trigger failures). It needs to be solved slightly different as it needs more to clean up when the reg() function fails.
--- kernel/trace/trace_events_trigger.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
kernel/trace/trace_events_trigger.c +5 -1
@@ -1396,6 +1396,9 @@ int event_enable_trigger_func(struct eve goto out; } +/* Up the trigger_data count to make sure nothing frees it on failure */ +event_trigger_init (trigger_ops, trigger_data); +if (trigger) { number =strsep (&trigger,":" );
@@ -1446,6 +1449,7 @@ int event_enable_trigger_func(struct eve goto out_disable;/* Just return zero, not the number of enabled functions */ ret =0 ; +event_trigger_free (trigger_ops, trigger_data); out:return ret;
@@ -1456,7 +1460,7 @@ int event_enable_trigger_func(struct eve out_free:if (cmd_ops->set_filter) cmd_ops->set_filter (NULL , trigger_data,NULL ); -kfree (trigger_data); +event_trigger_free (trigger_ops, trigger_data);kfree (enable_data); goto out; }
Greg Kroah-Hartman
maintainerPATCH 15/246 kthread, tracing: Dont expose half-written comm when creating kthreads
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Snild Dolkow <[email protected]>
commit 3e536e222f2930534c252c1cc7ae799c725c5ff9 upstream.
There is a window for racing when printing directly to task->comm, allowing other threads to see a non-terminated string. The vsnprintf function fills the buffer, counts the truncated chars, then finally writes the \0 at the end.
creator other
vsnprintf:
fill (not terminated)
count the rest trace_sched_waking(p):
... memcpy(comm, p->comm, TASK_COMM_LEN)
write \0
The consequences depend on how 'other' uses the string. In our case, it was copied into the tracing system's saved cmdlines, a buffer of adjacent TASK_COMM_LEN-byte buffers (note the 'n' where 0 should be):
crash-arm64> x/1024s savedcmd->saved_cmdlines | grep 'evenk' 0xffffffd5b3818640: "irq/497-pwr_evenkworker/u16:12"
...and a strcpy out of there would cause stack corruption:
[224761.522292] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: ffffff9bf9783c78
crash-arm64> kbt | grep 'comm\|trace_print_context' #6 0xffffff9bf9783c78 in trace_print_context+0x18c(+396) comm (char [16]) = "irq/497-pwr_even" crash-arm64> rd 0xffffffd4d0e17d14 8 ffffffd4d0e17d14: 2f71726900000000 5f7277702d373934 ....irq/497-pwr_ ffffffd4d0e17d24: 726f776b6e657665 3a3631752f72656b evenkworker/u16: ffffffd4d0e17d34: f9780248ff003231 cede60e0ffffff9b 12..H.x......`.. ffffffd4d0e17d44: cede60c8ffffffd4 00000fffffffffd4 .....`..........
The workaround in e09e28671 (use strlcpy in __trace_find_cmdline) was likely needed because of this same bug.
Solved by vsnprintf:ing to a local buffer, then using set_task_comm(). This way, there won't be a window where comm is not terminated.
--- kernel/kthread.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
kernel/kthread.c +7 -1
@@ -311,8 +311,14 @@ struct task_struct *__kthread_create_on_ task = create->result;if (!IS_ERR (task)) {static const struct sched_param param = { .sched_priority =0 }; +char name[TASK_COMM_LEN ]; -vsnprintf (task->comm,sizeof (task->comm), namefmt, args); +/* +* task is already visible to other tasks, so updating +* COMM must be protected. +*/ +vsnprintf (name,sizeof (name), namefmt, args); +set_task_comm (task, name);/* * root may have changed our (kthreadd's) priority or CPU mask. * The kernel thread should not inherit these properties.
Greg Kroah-Hartman
maintainerPATCH 16/246 tracing/kprobes: Fix trace_probe flags on enable_trace_kprobe() failure
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Artem Savkov <[email protected]>
commit 57ea2a34adf40f3a6e88409aafcf803b8945619a upstream.
If enable_trace_kprobe fails to enable the probe in enable_k(ret)probe it returns an error, but does not unset the tp flags it set previously. This results in a probe being considered enabled and failures like being unable to remove the probe through kprobe_events file since probes_open() expects every probe to be disabled.
--- kernel/trace/trace_kprobe.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
kernel/trace/trace_kprobe.c +11 -2
@@ -376,11 +376,10 @@ static struct trace_kprobe *find_trace_kstatic int enable_trace_kprobe (struct trace_kprobe *tk,struct trace_event_file *file) { +struct event_file_link *link;int ret =0 ;if (file) { -struct event_file_link *link; - link =kmalloc (sizeof (*link),GFP_KERNEL );if (!link) { ret = -ENOMEM ;
@@ -400,6 +399,16 @@ enable_trace_kprobe(struct trace_kprobeelse ret =enable_kprobe (&tk->rp.kp); } + +if (ret) { +if (file) { +list_del_rcu (&link->list); +kfree (link); + tk->tp.flags &= ~TP_FLAG_TRACE ; + }else { + tk->tp.flags &= ~TP_FLAG_PROFILE ; + } + } out:return ret; }
Greg Kroah-Hartman
maintainerPATCH 17/246 tracing: Quiet gcc warning about maybe unused link variable
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (VMware) <[email protected]>
commit 2519c1bbe38d7acacc9aacba303ca6f97482ed53 upstream.
Commit 57ea2a34adf4 ("tracing/kprobes: Fix trace_probe flags on enable_trace_kprobe() failure") added an if statement that depends on another if statement that gcc doesn't see will initialize the "link" variable and gives the warning:
"warning: 'link' may be used uninitialized in this function"
It is really a false positive, but to quiet the warning, and also to make sure that it never actually is used uninitialized, initialize the "link" variable to NULL and add an if (!WARN_ON_ONCE(!link)) where the compiler thinks it could be used uninitialized.
--- kernel/trace/trace_kprobe.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
kernel/trace/trace_kprobe.c +4 -2
@@ -376,7 +376,7 @@ static struct trace_kprobe *find_trace_kstatic int enable_trace_kprobe (struct trace_kprobe *tk,struct trace_event_file *file) { -struct event_file_link *link; +struct event_file_link *link =NULL ;int ret =0 ;if (file) {
@@ -402,7 +402,9 @@ enable_trace_kprobe(struct trace_kprobeif (ret) {if (file) { -list_del_rcu (&link->list); +/* Notice the if is true on not WARN() */ +if (!WARN_ON_ONCE (!link)) +list_del_rcu (&link->list);kfree (link); tk->tp.flags &= ~TP_FLAG_TRACE ; }else {
Greg Kroah-Hartman
maintainerPATCH 18/246 arm64: fix vmemmap BUILD_BUG_ON() triggering on !vmemmap setups
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Weiner <[email protected]>
commit 7b0eb6b41a08fa1fa0d04b1c53becd62b5fbfaee upstream.
Arnd reports the following arm64 randconfig build error with the PSI patches that add another page flag:
/git/arm-soc/arch/arm64/mm/init.c: In function 'mem_init':
/git/arm-soc/include/linux/compiler.h:357:38: error: call to '__compiletime_assert_618' declared with attribute error: BUILD_BUG_ON
failed: sizeof(struct page) > (1 << STRUCT_PAGE_MAX_SHIFT)
The additional page flag causes other information stored in page->flags to get bumped into their own struct page member:
#if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT+LAST_CPUPID_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS #define LAST_CPUPID_WIDTH LAST_CPUPID_SHIFT #else #define LAST_CPUPID_WIDTH 0 #endif #if defined(CONFIG_NUMA_BALANCING) && LAST_CPUPID_WIDTH == 0 #define LAST_CPUPID_NOT_IN_PAGE_FLAGS #endif
which in turn causes the struct page size to exceed the size set in STRUCT_PAGE_MAX_SHIFT. This value is an an estimate used to size the VMEMMAP page array according to address space and struct page size.
However, the check is performed - and triggers here - on a !VMEMMAP config, which consumes an additional 22 page bits for the sparse section id. When VMEMMAP is enabled, those bits are returned, cpupid doesn't need its own member, and the page passes the VMEMMAP check.
Restrict that check to the situation it was meant to check: that we are sizing the VMEMMAP page array correctly.
Says Arnd:
Further experiments show that the build error already existed before, but was only triggered with larger values of CONFIG_NR_CPU and/or CONFIG_NODES_SHIFT that might be used in actual configurations but not in randconfig builds.
With longer CPU and node masks, I could recreate the problem with kernels as old as linux-4.7 when arm64 NUMA support got added.
--- arch/arm64/mm/init.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/arm64/mm/init.c +3 -1
@@ -651,11 +651,13 @@ void __init mem_init(void)BUILD_BUG_ON (TASK_SIZE_32 >TASK_SIZE_64 );#endif +#ifdef CONFIG_SPARSEMEM_VMEMMAP /* * Make sure we chose the upper bound of sizeof(struct page) -* correctly. +* correctly when sizing the VMEMMAP array. */ BUILD_BUG_ON (sizeof (struct page ) > (1 <<STRUCT_PAGE_MAX_SHIFT )); +#endif if (PAGE_SIZE >=16384 &&get_num_physpages () <=128 ) {extern int sysctl_overcommit_memory;
Greg Kroah-Hartman
maintainerPATCH 19/246 mlxsw: spectrum_switchdev: Fix port_vlan refcounting
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Petr Machata <[email protected]>
[ Upstream commit 9e25826ffc942e985b8595b2f1cf2065d3880514 ]
Switchdev notifications for addition of SWITCHDEV_OBJ_ID_PORT_VLAN are distributed not only on clean addition, but also when flags on an existing VLAN are changed. mlxsw_sp_bridge_port_vlan_add() calls mlxsw_sp_port_vlan_get() to get at the port_vlan in question, which implicitly references the object. This then leads to discrepancies in reference counting when the VLAN is removed. spectrum.c warns about the problem when the module is removed:
[13578.493090] WARNING: CPU: 0 PID: 2454 at drivers/net/ethernet/mellanox/mlxsw/spectrum.c:2973 mlxsw_sp_port_remove+0xfd/0x110 [mlxsw_spectrum] [...] [13578.627106] Call Trace: [13578.629617] mlxsw_sp_fini+0x2a/0xe0 [mlxsw_spectrum] [13578.634748] mlxsw_core_bus_device_unregister+0x3e/0x130 [mlxsw_core] [13578.641290] mlxsw_pci_remove+0x13/0x40 [mlxsw_pci] [13578.646238] pci_device_remove+0x31/0xb0 [13578.650244] device_release_driver_internal+0x14f/0x220 [13578.655562] driver_detach+0x32/0x70 [13578.659183] bus_remove_driver+0x47/0xa0 [13578.663134] pci_unregister_driver+0x1e/0x80 [13578.667486] mlxsw_sp_module_exit+0xc/0x3fa [mlxsw_spectrum] [13578.673207] __x64_sys_delete_module+0x13b/0x1e0 [13578.677888] ? exit_to_usermode_loop+0x78/0x80 [13578.682374] do_syscall_64+0x39/0xe0 [13578.685976] entry_SYSCALL_64_after_hwframe+0x44/0xa9
Fix by putting the port_vlan when mlxsw_sp_port_vlan_bridge_join() determines it's a flag-only change.
--- drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +3 -1
@@ -912,8 +912,10 @@ mlxsw_sp_port_vlan_bridge_join(struct mlint err;/* No need to continue if only VLAN flags were changed */ -if (mlxsw_sp_port_vlan->bridge_port) +if (mlxsw_sp_port_vlan->bridge_port) { +mlxsw_sp_port_vlan_put (mlxsw_sp_port_vlan);return 0 ; + } err =mlxsw_sp_port_vlan_fid_join (mlxsw_sp_port_vlan, bridge_port);if (err)
Greg Kroah-Hartman
maintainerPATCH 20/246 kcov: ensure irq code sees a valid area
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Rutland <[email protected]>
[ Upstream commit c9484b986ef03492357fddd50afbdd02929cfa72 ]
Patch series "kcov: fix unexpected faults".
These patches fix a few issues where KCOV code could trigger recursive faults, discovered while debugging a patch enabling KCOV for arch/arm:
* On CONFIG_PREEMPT kernels, there's a small race window where __sanitizer_cov_trace_pc() can see a bogus kcov_area.
* Lazy faulting of the vmalloc area can cause mutual recursion between fault handling code and __sanitizer_cov_trace_pc().
* During the context switch, switching the mm can cause the kcov_area to be transiently unmapped.
These are prerequisites for enabling KCOV on arm, but the issues themsevles are generic -- we just happen to avoid them by chance rather than design on x86-64 and arm64.
This patch (of 3):
For kernels built with CONFIG_PREEMPT, some C code may execute before or after the interrupt handler, while the hardirq count is zero. In these cases, in_task() can return true.
A task can be interrupted in the middle of a KCOV_DISABLE ioctl while it resets the task's kcov data via kcov_task_init(). Instrumented code executed during this period will call __sanitizer_cov_trace_pc(), and as in_task() returns true, will inspect t->kcov_mode before trying to write to t->kcov_area.
In kcov_init_task() we update t->kcov_{mode,area,size} with plain stores, which may be re-ordered, torn, etc. Thus __sanitizer_cov_trace_pc() may see bogus values for any of these fields, and may attempt to write to memory which is not mapped.
Let's avoid this by using WRITE_ONCE() to set t->kcov_mode, with a barrier() to ensure this is ordered before we clear t->kov_{area,size}. This ensures that any code execute while kcov_init_task() is preempted will either see valid values for t->kcov_{area,size}, or will see that t->kcov_mode is KCOV_MODE_DISABLED, and bail out without touching t->kcov_area.
--- kernel/kcov.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/kcov.c +2 -1
@@ -108,7 +108,8 @@ static void kcov_put(struct kcov *kcov)void kcov_task_init (struct task_struct *t) { - t->kcov_mode =KCOV_MODE_DISABLED ; +WRITE_ONCE (t->kcov_mode,KCOV_MODE_DISABLED ); +barrier (); t->kcov_size =0 ; t->kcov_area =NULL ; t->kcov =NULL ;
Greg Kroah-Hartman
maintainerPATCH 21/246 xen/netfront: raise max number of slots in xennet_get_responses()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juergen Gross <[email protected]>
[ Upstream commit 57f230ab04d2910a06d17d988f1c4d7586a59113 ]
The max number of slots used in xennet_get_responses() is set to MAX_SKB_FRAGS + (rx->status <= RX_COPY_THRESHOLD).
In old kernel-xen MAX_SKB_FRAGS was 18, while nowadays it is 17. This difference is resulting in frequent messages "too many slots" and a reduced network throughput for some workloads (factor 10 below that of a kernel-xen based guest).
Replacing MAX_SKB_FRAGS by XEN_NETIF_NR_SLOTS_MIN for calculation of the max number of slots to use solves that problem (tests showed no more messages "too many slots" and throughput was as high as with the kernel-xen based guest system).
Replace MAX_SKB_FRAGS-2 by XEN_NETIF_NR_SLOTS_MIN-1 in netfront_tx_slot_available() for making it clearer what is really being tested without actually modifying the tested value.
--- drivers/net/xen-netfront.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/xen-netfront.c +2 -2
@@ -239,7 +239,7 @@ static void rx_refill_timeout(unsigned lstatic int netfront_tx_slot_available (struct netfront_queue *queue) {return (queue->tx.req_prod_pvt - queue->tx.rsp_cons) < - (NET_TX_RING_SIZE -MAX_SKB_FRAGS -2 ); + (NET_TX_RING_SIZE -XEN_NETIF_NR_SLOTS_MIN -1 ); }static void xennet_maybe_wake_tx (struct netfront_queue *queue)
@@ -790,7 +790,7 @@ static int xennet_get_responses(struct nRING_IDX cons = queue->rx.rsp_cons;struct sk_buff *skb =xennet_get_rx_skb (queue, cons);grant_ref_t ref =xennet_get_rx_ref (queue, cons); -int max =MAX_SKB_FRAGS + (rx->status <=RX_COPY_THRESHOLD ); +int max =XEN_NETIF_NR_SLOTS_MIN + (rx->status <=RX_COPY_THRESHOLD );int slots =1 ;int err =0 ;unsigned long ret;
Greg Kroah-Hartman
maintainerPATCH 22/246 hv_netvsc: fix network namespace issues with VF support
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stephen Hemminger <[email protected]>
[ Upstream commit 7bf7bb37f16a80465ee3bd7c6c966f96f5a075a6 ]
When finding the parent netvsc device, the search needs to be across all netvsc device instances (independent of network namespace).
Find parent device of VF using upper_dev_get routine which searches only adjacent list.
netns aware byref
--- drivers/net/hyperv/hyperv_net.h | 2 + drivers/net/hyperv/netvsc_drv.c | 45 ++++++++++++++++++---------------------- 2 files changed, 23 insertions(+), 24 deletions(-)
drivers/net/hyperv/hyperv_net.h +2 -0
@@ -724,6 +724,8 @@ struct net_device_context {struct hv_device *device_ctx;/* netvsc_device */ struct netvsc_device __rcu *nvdev; +/* list of netvsc net_devices */ +struct list_head list;/* reconfigure work */ struct delayed_work dwork;/* last reconfig time */
drivers/net/hyperv/netvsc_drv.c +21 -24
86 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 23/246 skip LAYOUTRETURN if layout is invalid
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Olga Kornievskaia <[email protected]>
[ Upstream commit 93b7f7ad2018d2037559b1d0892417864c78b371 ]
Currently, when IO to DS fails, client returns the layout and retries against the MDS. However, then on umounting (inode eviction) it returns the layout again.
This is because pnfs_return_layout() was changed in
commit d78471d32bb6 ("pnfs/blocklayout: set PNFS_LAYOUTRETURN_ON_ERROR") to always set NFS_LAYOUT_RETURN_REQUESTED so even if we returned the layout, it will be returned again. Instead, let's also check if we have already marked the layout invalid.
--- fs/nfs/pnfs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
fs/nfs/pnfs.c +4 -2
@@ -1126,7 +1126,7 @@ _pnfs_return_layout(struct inode *ino)LIST_HEAD (tmp_list);nfs4_stateid stateid;int status =0 ; -bool send; +bool send, valid_layout;dprintk ("NFS: %s for inode %lu\n" , __func__, ino->i_ino);
@@ -1147,6 +1147,7 @@ _pnfs_return_layout(struct inode *ino) goto out_put_layout_hdr;spin_lock (&ino->i_lock); } + valid_layout =pnfs_layout_is_valid (lo);pnfs_clear_layoutcommit (ino, &tmp_list);pnfs_mark_matching_lsegs_invalid (lo, &tmp_list,NULL ,0 );
@@ -1160,7 +1161,8 @@ _pnfs_return_layout(struct inode *ino) }/* Don't send a LAYOUTRETURN if list was initially empty */ -if (!test_bit (NFS_LAYOUT_RETURN_REQUESTED , &lo->plh_flags)) { +if (!test_bit (NFS_LAYOUT_RETURN_REQUESTED , &lo->plh_flags) || + !valid_layout) {spin_unlock (&ino->i_lock);dprintk ("NFS: %s no layout segments to return\n" , __func__); goto out_put_layout_hdr;
Greg Kroah-Hartman
maintainerPATCH 24/246 ALSA: emu10k1: add error handling for snd_ctl_add
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhouyang Jia <[email protected]>
[ Upstream commit 6d531e7b972cb62ded011c2dfcc2d9f72ea6c421 ]
When snd_ctl_add fails, the lack of error-handling code may cause unexpected results.
This patch adds error-handling code after calling snd_ctl_add.
--- sound/pci/emu10k1/emupcm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
sound/pci/emu10k1/emupcm.c +3 -1
@@ -1850,7 +1850,9 @@ int snd_emu10k1_pcm_efx(struct snd_emu10if (!kctl)return -ENOMEM ; kctl->id.device = device; -snd_ctl_add (emu->card, kctl); + err =snd_ctl_add (emu->card, kctl); +if (err <0 ) +return err;snd_pcm_lib_preallocate_pages_for_all (pcm,SNDRV_DMA_TYPE_DEV ,snd_dma_pci_data (emu->pci),64 *1024 ,64 *1024 );
Greg Kroah-Hartman
maintainerPATCH 25/246 ALSA: fm801: add error handling for snd_ctl_add
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhouyang Jia <[email protected]>
[ Upstream commit ef1ffbe7889e99f5b5cccb41c89e5c94f50f3218 ]
When snd_ctl_add fails, the lack of error-handling code may cause unexpected results.
This patch adds error-handling code after calling snd_ctl_add.
--- sound/pci/fm801.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
sound/pci/fm801.c +12 -4
@@ -1068,11 +1068,19 @@ static int snd_fm801_mixer(struct fm801if ((err =snd_ac97_mixer (chip->ac97_bus, &ac97, &chip->ac97_sec)) <0 )return err; } -for (i =0 ; i <FM801_CONTROLS ; i++) -snd_ctl_add (chip->card,snd_ctl_new1 (&snd_fm801_controls[i], chip)); +for (i =0 ; i <FM801_CONTROLS ; i++) { + err =snd_ctl_add (chip->card, +snd_ctl_new1 (&snd_fm801_controls[i], chip)); +if (err <0 ) +return err; + }if (chip->multichannel) { -for (i =0 ; i <FM801_CONTROLS_MULTI ; i++) -snd_ctl_add (chip->card,snd_ctl_new1 (&snd_fm801_controls_multi[i], chip)); +for (i =0 ; i <FM801_CONTROLS_MULTI ; i++) { + err =snd_ctl_add (chip->card, +snd_ctl_new1 (&snd_fm801_controls_multi[i], chip)); +if (err <0 ) +return err; + } }return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 26/246 NFSv4.1: Fix the client behaviour on NFS4ERR_SEQ_FALSE_RETRY
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Trond Myklebust <[email protected]>
[ Upstream commit f9312a541050007ec59eb0106273a0a10718cd83 ]
If the server returns NFS4ERR_SEQ_FALSE_RETRY or NFS4ERR_RETRY_UNCACHED_REP, then it thinks we're trying to replay an existing request. If so, then let's just bump the sequence ID and retry the operation.
--- fs/nfs/nfs4proc.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
fs/nfs/nfs4proc.c +7 -4
@@ -745,6 +745,13 @@ static int nfs41_sequence_process(struct slot->slot_nr, slot->seq_nr); goto out_retry; +case -NFS4ERR_RETRY_UNCACHED_REP : +case -NFS4ERR_SEQ_FALSE_RETRY : +/* +* The server thinks we tried to replay a request. +* Retry the call after bumping the sequence ID. +*/ + goto retry_new_seq;case -NFS4ERR_BADSLOT :/* * The slot id we used was probably retired. Try again
@@ -769,10 +776,6 @@ static int nfs41_sequence_process(struct goto retry_nowait; } goto session_recover; -case -NFS4ERR_SEQ_FALSE_RETRY : -if (interrupted) - goto retry_new_seq; - goto session_recover;default :/* Just update the slot sequence no. */ slot->seq_done =1 ;
Greg Kroah-Hartman
maintainerPATCH 27/246 nfsd: fix potential use-after-free in nfsd4_decode_getdeviceinfo
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Scott Mayhew <[email protected]>
[ Upstream commit 3171822fdcdd6e6d536047c425af6dc7a92dc585 ]
When running a fuzz tester against a KASAN-enabled kernel, the following splat periodically occurs.
The problem occurs when the test sends a GETDEVICEINFO request with a malformed xdr array (size but no data) for gdia_notify_types and the array size is > 0x3fffffff, which results in an overflow in the value of nbytes which is passed to read_buf().
If the array size is 0x40000000, 0x80000000, or 0xc0000000, then after the overflow occurs, the value of nbytes 0, and when that happens the pointer returned by read_buf() points to the end of the xdr data (i.e. argp->end) when really it should be returning NULL.
Fix this by returning NFS4ERR_BAD_XDR if the array size is > 1000 (this value is arbitrary, but it's the same threshold used by nfsd4_decode_bitmap()... in could really be any value >= 1 since it's expected to get at most a single bitmap in gdia_notify_types).
[ 119.256854] ================================================================== [ 119.257611] BUG: KASAN: use-after-free in nfsd4_decode_getdeviceinfo+0x5a4/0x5b0 [nfsd] [ 119.258422] Read of size 4 at addr ffff880113ada000 by task nfsd/538
[ 119.259146] CPU: 0 PID: 538 Comm: nfsd Not tainted 4.17.0+ #1 [ 119.259662] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.3-1.fc25 04/01/2014 [ 119.261202] Call Trace: [ 119.262265] dump_stack+0x71/0xab [ 119.263371] print_address_description+0x6a/0x270 [ 119.264609] kasan_report+0x258/0x380 [ 119.265854] ? nfsd4_decode_getdeviceinfo+0x5a4/0x5b0 [nfsd] [ 119.267291] nfsd4_decode_getdeviceinfo+0x5a4/0x5b0 [nfsd] [ 119.268549] ? nfs4svc_decode_compoundargs+0xa5b/0x13c0 [nfsd] [ 119.269873] ? nfsd4_decode_sequence+0x490/0x490 [nfsd] [ 119.271095] nfs4svc_decode_compoundargs+0xa5b/0x13c0 [nfsd] [ 119.272393] ? nfsd4_release_compoundargs+0x1b0/0x1b0 [nfsd] [ 119.273658] nfsd_dispatch+0x183/0x850 [nfsd] [ 119.274918] svc_process+0x161c/0x31a0 [sunrpc] [ 119.276172] ? svc_printk+0x190/0x190 [sunrpc] [ 119.277386] ? svc_xprt_release+0x451/0x680 [sunrpc] [ 119.278622] nfsd+0x2b9/0x430 [nfsd] [ 119.279771] ? nfsd_destroy+0x1c0/0x1c0 [nfsd] [ 119.281157] kthread+0x2db/0x390 [ 119.282347] ? kthread_create_worker_on_cpu+0xc0/0xc0 [ 119.283756] ret_from_fork+0x35/0x40
[ 119.286041] Allocated by task 436: [ 119.287525] kasan_kmalloc+0xa0/0xd0 [ 119.288685] kmem_cache_alloc+0xe9/0x1f0 [ 119.289900] get_empty_filp+0x7b/0x410 [ 119.291037] path_openat+0xca/0x4220 [ 119.292242] do_filp_open+0x182/0x280 [ 119.293411] do_sys_open+0x216/0x360 [ 119.294555] do_syscall_64+0xa0/0x2f0 [ 119.295721] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[ 119.298068] Freed by task 436: [ 119.299271] __kasan_slab_free+0x130/0x180 [ 119.300557] kmem_cache_free+0x78/0x210 [ 119.301823] rcu_process_callbacks+0x35b/0xbd0 [ 119.303162] __do_softirq+0x192/0x5ea
[ 119.305443] The buggy address belongs to the object at ffff880113ada000
which belongs to the cache filp of size 256
[ 119.308556] The buggy address is located 0 bytes inside of
256-byte region [ffff880113ada000, ffff880113ada100)
[ 119.311376] The buggy address belongs to the page:
[ 119.312728] page:ffffea00044eb680 count:1 mapcount:0 mapping:0000000000000000 index:0xffff880113ada780
[ 119.314428] flags: 0x17ffe000000100(slab)
[ 119.315740] raw: 0017ffe000000100 0000000000000000 ffff880113ada780 00000001000c0001
[ 119.317379] raw: ffffea0004553c60 ffffea00045c11e0 ffff88011b167e00 0000000000000000
[ 119.319050] page dumped because: kasan: bad access detected[ 119.321652] Memory state around the buggy address: [ 119.322993] ffff880113ad9f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 119.324515] ffff880113ad9f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 119.326087] >ffff880113ada000: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb [ 119.327547] ^ [ 119.328730] ffff880113ada080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb [ 119.330218] ffff880113ada100: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb [ 119.331740] ==================================================================
--- fs/nfsd/nfs4xdr.c | 2 ++ 1 file changed, 2 insertions(+)
fs/nfsd/nfs4xdr.c +2 -0
@@ -1586,6 +1586,8 @@ nfsd4_decode_getdeviceinfo(struct nfsd4_ gdev->gd_maxcount =be32_to_cpup (p++); num =be32_to_cpup (p++);if (num) { +if (num >1000 ) + goto xdr_error;READ_BUF (4 * num); gdev->gd_notify_types =be32_to_cpup (p++);for (i =1 ; i < num; i++) {
Greg Kroah-Hartman
maintainerPATCH 28/246 vfio: platform: Fix reset module leak in error path
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geert Uytterhoeven <[email protected]>
[ Upstream commit 28a68387888997e8a7fa57940ea5d55f2e16b594 ]
If the IOMMU group setup fails, the reset module is not released.
--- drivers/vfio/platform/vfio_platform_common.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
drivers/vfio/platform/vfio_platform_common.c +10 -5
@@ -681,18 +681,23 @@ int vfio_platform_probe_common(struct vf group =vfio_iommu_group_get (dev);if (!group) {pr_err ("VFIO: No IOMMU group for device %s\n" , vdev->name); -return -EINVAL ; + ret = -EINVAL ; + goto put_reset; } ret =vfio_add_group_dev (dev, &vfio_platform_ops, vdev); -if (ret) { -vfio_iommu_group_put (group, dev); -return ret; - } +if (ret) + goto put_iommu;mutex_init (&vdev->igate);return 0 ; + +put_iommu: +vfio_iommu_group_put (group, dev); +put_reset: +vfio_platform_put_reset (vdev); +return ret; }EXPORT_SYMBOL_GPL (vfio_platform_probe_common);
Greg Kroah-Hartman
maintainerPATCH 29/246 vfio/mdev: Check globally for duplicate devices
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Williamson <[email protected]>
[ Upstream commit 002fe996f67f4f46d8917b14cfb6e4313c20685a ]
When we create an mdev device, we check for duplicates against the parent device and return -EEXIST if found, but the mdev device namespace is global since we'll link all devices from the bus. We do catch this later in sysfs_do_create_link_sd() to return -EEXIST, but with it comes a kernel warning and stack trace for trying to create duplicate sysfs links, which makes it an undesirable response.
Therefore we should really be looking for duplicates across all mdev parent devices, or as implemented here, against our mdev device list. Using mdev_list to prevent duplicates means that we can remove mdev_parent.lock, but in order not to serialize mdev device creation and removal globally, we add mdev_device.active which allows UUIDs to be reserved such that we can drop the mdev_list_lock before the mdev device is fully in place.
Two behavioral notes; first, mdev_parent.lock had the side-effect of serializing mdev create and remove ops per parent device. This was an implementation detail, not an intentional guarantee provided to the mdev vendor drivers. Vendor drivers can trivially provide this serialization internally if necessary. Second, review comments note the new -EAGAIN behavior when the device, and in particular the remove attribute, becomes visible in sysfs. If a remove is triggered prior to completion of mdev_device_create() the user will see a -EAGAIN error. While the errno is different, receiving an error during this period is not, the previous implementation returned -ENODEV for the same condition. Furthermore, the consistency to the user is improved in the case where mdev_device_remove_ops() returns error. Previously concurrent calls to mdev_device_remove() could see the device disappear with -ENODEV and return in the case of error. Now a user would see -EAGAIN while the device is in this transitory state.
--- Documentation/vfio-mediated-device.txt | 5 + drivers/vfio/mdev/mdev_core.c | 102 +++++++++++---------------------- drivers/vfio/mdev/mdev_private.h | 2 3 files changed, 42 insertions(+), 67 deletions(-)
Documentation/vfio-mediated-device.txt +5 -0
@@ -145,6 +145,11 @@ The functions in the mdev_parent_ops str * create: allocate basic resources in a driver for a mediated device * remove: free resources in a driver when a mediated device is destroyed +(Note that mdev-core provides no implicit serialization of create/remove +callbacks per mdev parent device, per mdev type, or any other categorization. +Vendor drivers are expected to be fully asynchronous in this respect or +provide their own internal resource protection.) + The callbacks in the mdev_parent_ops structure are as follows: * open: open callback of mediated device
drivers/vfio/mdev/mdev_core.c +36 -66
190 lines not on this page · raw message
drivers/vfio/mdev/mdev_private.h +1 -1
@@ -20,7 +20,6 @@ struct mdev_parent {struct device *dev;const struct mdev_parent_ops *ops;struct kref ref; -struct mutex lock;struct list_head next;struct kset *mdev_types_kset;struct list_head type_list;
@@ -34,6 +33,7 @@ struct mdev_device {struct kref ref;struct list_head next;struct kobject *type_kobj; +bool active; };#define to_mdev_device (dev) container_of(dev, struct mdev_device, dev)
Greg Kroah-Hartman
maintainerPATCH 30/246 vfio/type1: Fix task tracking for QEMU vCPU hotplug
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Williamson <[email protected]>
[ Upstream commit 48d8476b41eed63567dd2f0ad125c895b9ac648a ]
MAP_DMA ioctls might be called from various threads within a process, for example when using QEMU, the vCPU threads are often generating these calls and we therefore take a reference to that vCPU task. However, QEMU also supports vCPU hotplug on some machines and the task that called MAP_DMA may have exited by the time UNMAP_DMA is called, resulting in the mm_struct pointer being NULL and thus a failure to match against the existing mapping.
To resolve this, we instead take a reference to the thread group_leader, which has the same mm_struct and resource limits, but is less likely exit, at least in the QEMU case. A difficulty here is guaranteeing that the capabilities of the group_leader match that of the calling thread, which we resolve by tracking CAP_IPC_LOCK at the time of calling rather than at an indeterminate time in the future. Potentially this also results in better efficiency as this is now recorded once per MAP_DMA ioctl.
--- drivers/vfio/vfio_iommu_type1.c | 73 +++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 26 deletions(-)
drivers/vfio/vfio_iommu_type1.c +47 -26
@@ -83,6 +83,7 @@ struct vfio_dma {size_t size;/* Map size (bytes) */ int prot;/* IOMMU_READ/WRITE */ bool iommu_mapped; +bool lock_cap;/* capable(CAP_IPC_LOCK) */ struct task_struct *task;struct rb_root pfn_list;/* Ex-user pinned pfn list */ };
@@ -246,29 +247,25 @@ static int vfio_iova_put_vfio_pfn(structreturn ret; } -static int vfio_lock_acct (struct task_struct *task,long npage,bool *lock_cap) +static int vfio_lock_acct (struct vfio_dma *dma,long npage,bool async) {struct mm_struct *mm; -bool is_current;int ret;if (!npage)return 0 ; - is_current = (task->mm == current->mm); - - mm = is_current ? task->mm :get_task_mm (task); + mm = async ?get_task_mm (dma->task) : dma->task->mm;if (!mm)return -ESRCH ;/* process exited */ ret =down_write_killable (&mm->mmap_sem);if (!ret) {if (npage >0 ) { -if (lock_cap ? !*lock_cap : - !has_capability (task,CAP_IPC_LOCK )) { +if (!dma->lock_cap) {unsigned long limit; - limit =task_rlimit (task, + limit =task_rlimit (dma->task,RLIMIT_MEMLOCK ) >>PAGE_SHIFT ;if (mm->locked_vm + npage > limit)
@@ -282,7 +279,7 @@ static int vfio_lock_acct(struct task_stup_write (&mm->mmap_sem); } -if (!is_current) +if (async)mmput (mm);return ret;
@@ -391,7 +388,7 @@ static int vaddr_get_pfn(struct mm_struc*/ static long vfio_pin_pages_remote (struct vfio_dma *dma,unsigned long vaddr,long npage,unsigned long *pfn_base, -bool lock_cap,unsigned long limit) +unsigned long limit) {unsigned long pfn =0 ;long ret, pinned =0 , lock_acct =0 ;
@@ -414,7 +411,7 @@ static long vfio_pin_pages_remote(struct* pages are already counted against the user. */ if (!rsvd && !vfio_find_vpfn (dma, iova)) { -if (!lock_cap && current->mm->locked_vm +1 > limit) { +if (!dma->lock_cap && current->mm->locked_vm +1 > limit) {put_pfn (*pfn_base, dma->prot);pr_warn ("%s: RLIMIT_MEMLOCK (%ld) exceeded\n" , __func__, limit <<PAGE_SHIFT );
@@ -440,7 +437,7 @@ static long vfio_pin_pages_remote(struct }if (!rsvd && !vfio_find_vpfn (dma, iova)) { -if (!lock_cap && +if (!dma->lock_cap && current->mm->locked_vm + lock_acct +1 > limit) {put_pfn (pfn, dma->prot); pr_warn("%s: RLIMIT_MEMLOCK (%ld) exceeded\n",
@@ -453,7 +450,7 @@ static long vfio_pin_pages_remote(struct } out: - ret =vfio_lock_acct (current, lock_acct, &lock_cap); + ret =vfio_lock_acct (dma, lock_acct, false); unpin_out:if (ret) {
@@ -484,7 +481,7 @@ static long vfio_unpin_pages_remote(stru }if (do_accounting) -vfio_lock_acct (dma->task, locked - unlocked,NULL ); +vfio_lock_acct (dma, locked - unlocked, true);return unlocked; }
@@ -501,7 +498,7 @@ static int vfio_pin_page_external(struct ret =vaddr_get_pfn (mm, vaddr, dma->prot, pfn_base);if (!ret && do_accounting && !is_invalid_reserved_pfn (*pfn_base)) { - ret =vfio_lock_acct (dma->task,1 ,NULL ); + ret =vfio_lock_acct (dma,1 , true);if (ret) {put_pfn (*pfn_base, dma->prot);if (ret == -ENOMEM )
@@ -528,7 +525,7 @@ static int vfio_unpin_page_external(stru unlocked =vfio_iova_put_vfio_pfn (dma, vpfn);if (do_accounting) -vfio_lock_acct (dma->task, -unlocked,NULL ); +vfio_lock_acct (dma, -unlocked, true);return unlocked; }
@@ -723,7 +720,7 @@ static long vfio_unmap_unpin(struct vfio dma->iommu_mapped = false;if (do_accounting) { -vfio_lock_acct (dma->task, -unlocked,NULL ); +vfio_lock_acct (dma, -unlocked, true);return 0 ; }return unlocked;
@@ -935,14 +932,12 @@ static int vfio_pin_map_dma(struct vfio_size_t size = map_size;long npage;unsigned long pfn, limit =rlimit (RLIMIT_MEMLOCK ) >>PAGE_SHIFT ; -bool lock_cap =capable (CAP_IPC_LOCK );int ret =0 ;while (size) {/* Pin a contiguous chunk of memory */ npage =vfio_pin_pages_remote (dma, vaddr + dma->size, - size >>PAGE_SHIFT , &pfn, - lock_cap, limit); + size >>PAGE_SHIFT , &pfn, limit);if (npage <=0 ) {WARN_ON (!npage); ret = (int )npage;
@@ -1017,8 +1012,36 @@ static int vfio_dma_do_map(struct vfio_i dma->iova = iova; dma->vaddr = vaddr; dma->prot = prot; -get_task_struct (current); - dma->task = current; + +/* +* We need to be able to both add to a task's locked memory and test +* against the locked memory limit and we need to be able to do both +* outside of this call path as pinning can be asynchronous via the +* external interfaces for mdev devices. RLIMIT_MEMLOCK requires a +* task_struct and VM locked pages requires an mm_struct, however +* holding an indefinite mm reference is not recommended, therefore we +* only hold a reference to a task. We could hold a reference to +* current, however QEMU uses this call path through vCPU threads, +* which can be killed resulting in a NULL mm and failure in the unmap +* path when called via a different thread. Avoid this problem by +* using the group_leader as threads within the same group require +* both CLONE_THREAD and CLONE_VM and will therefore use the same +* mm_struct. +* +* Previously we also used the task for testing CAP_IPC_LOCK at the +* time of pinning and accounting, however has_capability() makes use +* of real_cred, a copy-on-write field, so we can't guarantee that it +* matches group_leader, or in fact that it might not change by the +* time it's evaluated. If a process were to call MAP_DMA with +* CAP_IPC_LOCK but later drop it, it doesn't make sense that they +* possibly see different results for an iommu_mapped vfio_dma vs +* externally mapped. Therefore track CAP_IPC_LOCK in vfio_dma at the +* time of calling MAP_DMA. +*/ +get_task_struct (current->group_leader); + dma->task = current->group_leader; + dma->lock_cap =capable (CAP_IPC_LOCK ); + dma->pfn_list =RB_ROOT ;/* Insert zero-sized and grow as we map chunks of it */
@@ -1053,7 +1076,6 @@ static int vfio_iommu_replay(struct vfiostruct vfio_domain *d;struct rb_node *n;unsigned long limit =rlimit (RLIMIT_MEMLOCK ) >>PAGE_SHIFT ; -bool lock_cap =capable (CAP_IPC_LOCK );int ret;/* Arbitrarily pick the first domain in the list for lookups */
@@ -1100,8 +1122,7 @@ static int vfio_iommu_replay(struct vfio npage =vfio_pin_pages_remote (dma, vaddr, n >>PAGE_SHIFT , - &pfn, lock_cap, - limit); + &pfn, limit);if (npage <=0 ) {WARN_ON (!npage); ret = (int )npage;
@@ -1378,7 +1399,7 @@ static void vfio_iommu_unmap_unpin_reaccif (!is_invalid_reserved_pfn (vpfn->pfn)) locked++; } -vfio_lock_acct (dma->task, locked - unlocked,NULL ); +vfio_lock_acct (dma, locked - unlocked, true); } }
Greg Kroah-Hartman
maintainerPATCH 31/246 kernel/hung_task.c: show all hung tasks before panic
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tetsuo Handa <[email protected]>
[ Upstream commit 401c636a0eeb0d51862fce222da1bf08e3a0ffd0 ]
When we get a hung task it can often be valuable to see _all_ the hung tasks on the system before calling panic().
Quoting from https://syzkaller.appspot.com/text?tag=CrashReport&id=5316056503549952
----------------------------------------
INFO: task syz-executor0:6540 blocked for more than 120 seconds.
Not tainted 4.16.0+ #13
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
syz-executor0 D23560 6540 4521 0x80000004
Call Trace:
context_switch kernel/sched/core.c:2848 [inline]
__schedule+0x8fb/0x1ef0 kernel/sched/core.c:3490
schedule+0xf5/0x430 kernel/sched/core.c:3549
schedule_preempt_disabled+0x10/0x20 kernel/sched/core.c:3607
__mutex_lock_common kernel/locking/mutex.c:833 [inline]
__mutex_lock+0xb7f/0x1810 kernel/locking/mutex.c:893
mutex_lock_nested+0x16/0x20 kernel/locking/mutex.c:908
lo_ioctl+0x8b/0x1b70 drivers/block/loop.c:1355
__blkdev_driver_ioctl block/ioctl.c:303 [inline]
blkdev_ioctl+0x1759/0x1e00 block/ioctl.c:601
ioctl_by_bdev+0xa5/0x110 fs/block_dev.c:2060
isofs_get_last_session fs/isofs/inode.c:567 [inline]
isofs_fill_super+0x2ba9/0x3bc0 fs/isofs/inode.c:660
mount_bdev+0x2b7/0x370 fs/super.c:1119
isofs_mount+0x34/0x40 fs/isofs/inode.c:1560
mount_fs+0x66/0x2d0 fs/super.c:1222
vfs_kern_mount.part.26+0xc6/0x4a0 fs/namespace.c:1037
vfs_kern_mount fs/namespace.c:2514 [inline]
do_new_mount fs/namespace.c:2517 [inline]
do_mount+0xea4/0x2b90 fs/namespace.c:2847
ksys_mount+0xab/0x120 fs/namespace.c:3063
SYSC_mount fs/namespace.c:3077 [inline]
SyS_mount+0x39/0x50 fs/namespace.c:3074
do_syscall_64+0x281/0x940 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x42/0xb7
(...snipped...)
Showing all locks held in the system:(...snipped...)
2 locks held by syz-executor0/6540:
#0: 00000000566d4c39 (&type->s_umount_key#49/1){+.+.}, at: alloc_super fs/super.c:211 [inline]
#0: 00000000566d4c39 (&type->s_umount_key#49/1){+.+.}, at: sget_userns+0x3b2/0xe60 fs/super.c:502 /* down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING); */ #1: 0000000043ca8836 (&lo->lo_ctl_mutex/1){+.+.}, at: lo_ioctl+0x8b/0x1b70 drivers/block/loop.c:1355 /* mutex_lock_nested(&lo->lo_ctl_mutex, 1); */
(...snipped...)
3 locks held by syz-executor7/6541:
#0: 0000000043ca8836 (&lo->lo_ctl_mutex/1){+.+.}, at: lo_ioctl+0x8b/0x1b70 drivers/block/loop.c:1355 /* mutex_lock_nested(&lo->lo_ctl_mutex, 1); */ #1: 000000007bf3d3f9 (&bdev->bd_mutex){+.+.}, at: blkdev_reread_part+0x1e/0x40 block/ioctl.c:192
#2: 00000000566d4c39 (&type->s_umount_key#50){.+.+}, at: __get_super.part.10+0x1d3/0x280 fs/super.c:663 /* down_read(&sb->s_umount); */
----------------------------------------
When reporting an AB-BA deadlock like shown above, it would be nice if trace of PID=6541 is printed as well as trace of PID=6540 before calling panic().
Showing hung tasks up to /proc/sys/kernel/hung_task_warnings could delay calling panic() but normally there should not be so many hung tasks.
--- kernel/hung_task.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
kernel/hung_task.c +7 -4
@@ -44,6 +44,7 @@ int __read_mostly sysctl_hung_task_warnistatic int __read_mostly did_panic;static bool hung_task_show_lock; +static bool hung_task_call_panic;static struct task_struct *watchdog_task;
@@ -127,10 +128,8 @@ static void check_hung_task(struct task_touch_nmi_watchdog ();if (sysctl_hung_task_panic) { -if (hung_task_show_lock) -debug_show_all_locks (); -trigger_all_cpu_backtrace (); -panic ("hung_task: blocked tasks" ); + hung_task_show_lock = true; + hung_task_call_panic = true; } }
@@ -193,6 +192,10 @@ static void check_hung_uninterruptible_trcu_read_unlock ();if (hung_task_show_lock)debug_show_all_locks (); +if (hung_task_call_panic) { +trigger_all_cpu_backtrace (); +panic ("hung_task: blocked tasks" ); + } } static long hung_timeout_jiffies(unsigned long last_checked,
Greg Kroah-Hartman
maintainerPATCH 32/246 mm: /proc/pid/pagemap: hide swap entries from unprivileged users
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Huang Ying <[email protected]>
[ Upstream commit ab6ecf247a9321e3180e021a6a60164dee53ab2e ]
In commit ab676b7d6fbf ("pagemap: do not leak physical addresses to non-privileged userspace"), the /proc/PID/pagemap is restricted to be readable only by CAP_SYS_ADMIN to address some security issue.
In commit 1c90308e7a77 ("pagemap: hide physical addresses from non-privileged users"), the restriction is relieved to make /proc/PID/pagemap readable, but hide the physical addresses for non-privileged users.
But the swap entries are readable for non-privileged users too. This has some security issues. For example, for page under migrating, the swap entry has physical address information. So, in this patch, the swap entries are hided for non-privileged users too.
--- fs/proc/task_mmu.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-)
fs/proc/task_mmu.c +16 -10
@@ -1275,8 +1275,9 @@ static pagemap_entry_t pte_to_pagemap_enif (pte_swp_soft_dirty (pte)) flags |=PM_SOFT_DIRTY ; entry =pte_to_swp_entry (pte); - frame =swp_type (entry) | - (swp_offset (entry) <<MAX_SWAPFILES_SHIFT ); +if (pm->show_pfn) + frame =swp_type (entry) | + (swp_offset (entry) <<MAX_SWAPFILES_SHIFT ); flags |=PM_SWAP ;if (is_migration_entry (entry)) page =migration_entry_to_page (entry);
@@ -1327,11 +1328,14 @@ static int pagemap_pmd_range(pmd_t *pmdp#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION else if (is_swap_pmd(pmd)) {swp_entry_t entry =pmd_to_swp_entry (pmd); -unsigned long offset =swp_offset (entry); +unsigned long offset; - offset += (addr & ~PMD_MASK ) >>PAGE_SHIFT ; - frame =swp_type (entry) | - (offset <<MAX_SWAPFILES_SHIFT ); +if (pm->show_pfn) { + offset =swp_offset (entry) + + ((addr & ~PMD_MASK ) >>PAGE_SHIFT ); + frame =swp_type (entry) | + (offset <<MAX_SWAPFILES_SHIFT ); + } flags |=PM_SWAP ;if (pmd_swp_soft_dirty (pmd)) flags |=PM_SOFT_DIRTY ;
@@ -1349,10 +1353,12 @@ static int pagemap_pmd_range(pmd_t *pmdp err =add_to_pagemap (addr, &pme, pm);if (err)break ; -if (pm->show_pfn && (flags &PM_PRESENT )) - frame++; -else if (flags &PM_SWAP ) - frame += (1 <<MAX_SWAPFILES_SHIFT ); +if (pm->show_pfn) { +if (flags &PM_PRESENT ) + frame++; +else if (flags &PM_SWAP ) + frame += (1 <<MAX_SWAPFILES_SHIFT ); + } }spin_unlock (ptl);return err;
Greg Kroah-Hartman
maintainerPATCH 33/246 mm: vmalloc: avoid racy handling of debugobjects in vunmap
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chintan Pandya <[email protected]>
[ Upstream commit f3c01d2f3ade6790db67f80fef60df84424f8964 ]
Currently, __vunmap flow is,
1) Release the VM area
2) Free the debug objects corresponding to that vm area.
This leave some race window open.
1) Release the VM area
1.5) Some other client gets the same vm area 1.6) This client allocates new debug objects on the same
vm area
2) Free the debug objects corresponding to this vm area.
Here, we actually free 'other' client's debug objects.
Fix this by freeing the debug objects first and then releasing the VM area.
--- mm/vmalloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
mm/vmalloc.c +2 -1
@@ -1519,7 +1519,7 @@ static void __vunmap(const void *addr, i addr))return ; - area =remove_vm_area (addr); + area =find_vmap_area ((unsigned long )addr)->vm;if (unlikely (!area)) {WARN (1 ,KERN_ERR "Trying to vfree() nonexistent vm area (%p)\n" , addr);
@@ -1529,6 +1529,7 @@ static void __vunmap(const void *addr, idebug_check_no_locks_freed (addr,get_vm_area_size (area));debug_check_no_obj_freed (addr,get_vm_area_size (area)); +remove_vm_area (addr);if (deallocate_pages) {int i;
Greg Kroah-Hartman
maintainerPATCH 34/246 mm/slub.c: add __printf verification to slab_err()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathieu Malaterre <[email protected]>
[ Upstream commit a38965bf941b7c2af50de09c96bc5f03e136caef ]
__printf is useful to verify format and arguments. Remove the following warning (with W=1):
mm/slub.c:721:2: warning: function might be possible candidate for `gnu_printf' format attribute [-Wsuggest-attribute=format]
--- mm/slub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/slub.c +1 -1
@@ -708,7 +708,7 @@ void object_err(struct kmem_cache *s, stprint_trailer (s, page, object); } -static void slab_err (struct kmem_cache *s,struct page *page, +static __printf(3, 4) void slab_err(struct kmem_cache *s, struct page *page,const char *fmt, ...) {va_list args;
Greg Kroah-Hartman
maintainerPATCH 35/246 rtc: ensure rtc_set_alarm fails when alarms are not supported
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexandre Belloni <[email protected]>
[ Upstream commit abfdff44bc38e9e2ef7929f633fb8462632299d4 ]
When using RTC_ALM_SET or RTC_WKALM_SET with rtc_wkalrm.enabled not set, rtc_timer_enqueue() is not called and rtc_set_alarm() may succeed but the subsequent RTC_AIE_ON ioctl will fail. RTC_ALM_READ would also fail in that case.
Ensure rtc_set_alarm() fails when alarms are not supported to avoid letting programs think the alarms are working for a particular RTC when they are not.
--- drivers/rtc/interface.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/rtc/interface.c +5 -0
@@ -359,6 +359,11 @@ int rtc_set_alarm(struct rtc_device *rtc {int err; +if (!rtc->ops) +return -ENODEV ; +else if (!rtc->ops->set_alarm) +return -EINVAL ; + err =rtc_valid_tm (&alarm->time);if (err !=0 )return err;
Greg Kroah-Hartman
maintainerPATCH 36/246 perf tools: Fix pmu events parsing rule
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Olsa <[email protected]>
[ Upstream commit ceac7b79df7bd67ef9aaf464b0179a2686aff4ee ]
Currently all the event parsing fails end up
in the event_pmu rule, and display misleading
help like:
$ perf stat -e inst kill
event syntax error: 'inst'
\___ Cannot find PMU `inst'. Missing kernel support?
...The reason is that the event_pmu is too strong
and match also single string. Changing it to
force the '/' separators to be part of the rule,
and getting the proper error now:
$ perf stat -e inst kill
event syntax error: 'inst'
\___ parser error
Run 'perf list' for a list of valid events
...--- tools/perf/util/parse-events.y | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
tools/perf/util/parse-events.y +13 -1
@@ -72,6 +72,7 @@ static void inc_group_count(struct list_ %type <num> value_sym %type <head> event_config %type <head> opt_event_config +%type <head> opt_pmu_config %type <term> event_term %type <head> event_pmu %type <head> event_legacy_symbol
@@ -223,7 +224,7 @@ event_def: event_pmu | event_bpf_file event_pmu: -PE_NAME opt_event_config +PE_NAME opt_pmu_config { struct list_head *list, *orig_terms, *terms;
@@ -485,6 +486,17 @@ opt_event_config: { $$ = NULL; } + +opt_pmu_config: +'/' event_config '/' +{ + $$ = $2; +} +| +'/' '/' +{ + $$ = NULL; +} start_terms: event_config {
Greg Kroah-Hartman
maintainerPATCH 37/246 netfilter: ipset: forbid family for hash:mac sets
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florent Fourcot <[email protected]>
[ Upstream commit cbdebe481a14b42c45aa9f4ceb5ff19b55de2c57 ]
Userspace ipset command forbids family option for hash:mac type:
ipset create test hash:mac family inet4
ipset v6.30: Unknown argument: `family'
However, this check is not done in kernel itself. When someone use external netlink applications (pyroute2 python library for example), one can create hash:mac with invalid family and inconsistant results from userspace (ipset command cannot read set content anymore).
This patch enforce the logic in kernel, and forbids insertion of hash:mac with a family set.
Since IP_SET_PROTO_UNDEF is defined only for hash:mac, this patch has no impact on other hash:* sets
--- net/netfilter/ipset/ip_set_hash_gen.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
net/netfilter/ipset/ip_set_hash_gen.h +4 -1
@@ -1241,7 +1241,10 @@ IPSET_TOKEN(HTYPE, _create)(struct net *pr_debug ("Create set %s with family %s\n" , set->name, set->family ==NFPROTO_IPV4 ?"inet" :"inet6" ); -#ifndef IP_SET_PROTO_UNDEF +#ifdef IP_SET_PROTO_UNDEF +if (set->family !=NFPROTO_UNSPEC ) +return -IPSET_ERR_INVALID_FAMILY ; +#else if (!(set->family ==NFPROTO_IPV4 || set->family ==NFPROTO_IPV6 ))return -IPSET_ERR_INVALID_FAMILY ;#endif
Greg Kroah-Hartman
maintainerPATCH 38/246 netfilter: ipset: List timing out entries with "timeout 1" instead of zero
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jozsef Kadlecsik <[email protected]>
[ Upstream commit bd975e691486ba52790ba23cc9b4fecab7bc0d31 ]
When listing sets with timeout support, there's a probability that just timing out entries with "0" timeout value is listed/saved. However when restoring the saved list, the zero timeout value means permanent elelements.
The new behaviour is that timing out entries are listed with "timeout 1" instead of zero.
Fixes netfilter bugzilla #1258.
--- include/linux/netfilter/ipset/ip_set_timeout.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
include/linux/netfilter/ipset/ip_set_timeout.h +8 -2
@@ -65,8 +65,14 @@ ip_set_timeout_set(unsigned long *timeoustatic inline u32 ip_set_timeout_get (const unsigned long *timeout) { -return *timeout ==IPSET_ELEM_PERMANENT ?0 : -jiffies_to_msecs (*timeout - jiffies)/MSEC_PER_SEC ; +u32 t; + +if (*timeout ==IPSET_ELEM_PERMANENT ) +return 0 ; + + t =jiffies_to_msecs (*timeout - jiffies)/MSEC_PER_SEC ; +/* Zero value in userspace means no timeout */ +return t ==0 ?1 : t; }#endif /* __KERNEL__ */
Greg Kroah-Hartman
maintainerPATCH 39/246 irqchip/ls-scfg-msi: Map MSIs in the iommu
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Laurentiu Tudor <[email protected]>
[ Upstream commit 0cdd431c337e99177e68597f3de34bedd3a20a74 ]
Add the required iommu_dma_map_msi_msg() when composing the MSI message, otherwise the interrupts will not work.
--- drivers/irqchip/irq-ls-scfg-msi.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/irqchip/irq-ls-scfg-msi.c +3 -0
@@ -21,6 +21,7 @@#include <linux/of_pci.h> #include <linux/of_platform.h> #include <linux/spinlock.h> +#include <linux/dma-iommu.h> #define MSI_IRQS_PER_MSIR 32#define MSI_MSIR_OFFSET 4
@@ -94,6 +95,8 @@ static void ls_scfg_msi_compose_msg(struif (msi_affinity_flag) msg->data |=cpumask_first (data->common->affinity); + +iommu_dma_map_msi_msg (data->irq, msg); } static int ls_scfg_msi_set_affinity(struct irq_data *irq_data,
Greg Kroah-Hartman
maintainerPATCH 40/246 watchdog: da9063: Fix updating timeout value
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marco Felsch <[email protected]>
[ Upstream commit 44ee54aabfdb3b35866ed909bde3ab01e9679385 ]
The DA9063 watchdog has only one register field to store the timeout value and to enable the watchdog. The watchdog gets enabled if the value is not zero. There is no issue if the watchdog is already running but it leads into problems if the watchdog is disabled.
If the watchdog is disabled and only the timeout value should be prepared the watchdog gets enabled too. Add a check to get the current watchdog state and update the watchdog timeout value on hw-side only if the watchdog is already active.
--- drivers/watchdog/da9063_wdt.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)
drivers/watchdog/da9063_wdt.c +15 -2
@@ -102,10 +102,23 @@ static int da9063_wdt_set_timeout(struct {struct da9063 *da9063 =watchdog_get_drvdata (wdd);unsigned int selector; -int ret; +int ret =0 ; selector =da9063_wdt_timeout_to_sel (timeout); - ret =_da9063_wdt_set_timeout (da9063, selector); + +/* +* There are two cases when a set_timeout() will be called: +* 1. The watchdog is off and someone wants to set the timeout for the +* further use. +* 2. The watchdog is already running and a new timeout value should be +* set. +* +* The watchdog can't store a timeout value not equal zero without +* enabling the watchdog, so the timeout must be buffered by the driver. +*/ +if (watchdog_active (wdd)) + ret =_da9063_wdt_set_timeout (da9063, selector); +if (ret)dev_err (da9063->dev,"Failed to set watchdog timeout (err = %d)\n" , ret);
Greg Kroah-Hartman
maintainerPATCH 41/246 printk: drop in_nmi check from printk_safe_flush_on_panic()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sergey Senozhatsky <[email protected]>
[ Upstream commit 554755be08fba31c74f66b82a485e5513205af84 ]
Drop the in_nmi() check from printk_safe_flush_on_panic() and attempt to re-init (IOW unlock) locked logbuf spinlock from panic CPU regardless of its context.
Otherwise, theoretically, we can deadlock on logbuf trying to flush per-CPU buffers:
a) Panic CPU is running in non-NMI context
b) Panic CPU sends out shutdown IPI via reboot vector
c) Panic CPU fails to stop all remote CPUs
d) Panic CPU sends out shutdown IPI via NMI vector One of the CPUs that we bring down via NMI vector can hold logbuf spin lock (theoretically).
To: Steven Rostedt <[email protected]>
--- kernel/printk/printk_safe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/printk/printk_safe.c +1 -1
@@ -284,7 +284,7 @@ void printk_safe_flush_on_panic(void)* Make sure that we could access the main ring buffer. * Do not risk a double release when more CPUs are up. */ -if (in_nmi () &&raw_spin_is_locked (&logbuf_lock)) { +if (raw_spin_is_locked (&logbuf_lock)) {if (num_online_cpus () >1 )return ;
Greg Kroah-Hartman
maintainerPATCH 42/246 bpf, arm32: fix inconsistent naming about emit_a32_lsr_{r64,i64}
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wang YanQing <[email protected]>
[ Upstream commit 68565a1af9f7012e6f2fe2bdd612f67d2d830c28 ]
The names for BPF_ALU64 | BPF_ARSH are emit_a32_arsh_*, the names for BPF_ALU64 | BPF_LSH are emit_a32_lsh_*, but the names for BPF_ALU64 | BPF_RSH are emit_a32_lsr_*.
For consistence reason, let's rename emit_a32_lsr_* to emit_a32_rsh_*.
This patch also corrects a wrong comment.
--- arch/arm/net/bpf_jit_32.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
arch/arm/net/bpf_jit_32.c +5 -5
@@ -718,7 +718,7 @@ static inline void emit_a32_arsh_r64(con }/* dst = dst >> src */ -static inline void emit_a32_lsr_r64 (const u8 dst[],const u8 src[],bool dstk, +static inline void emit_a32_rsh_r64 (const u8 dst[],const u8 src[],bool dstk,bool sstk,struct jit_ctx *ctx) {const u8 *tmp = bpf2a32[TMP_REG_1 ];const u8 *tmp2 = bpf2a32[TMP_REG_2 ];
@@ -734,7 +734,7 @@ static inline void emit_a32_lsr_r64(consemit (ARM_LDR_I (rm,ARM_SP ,STACK_VAR (dst_hi)), ctx); } -/* Do LSH operation */ +/* Do RSH operation */ emit (ARM_RSB_I (ARM_IP , rt,32 ), ctx);emit (ARM_SUBS_I (tmp2[0 ], rt,32 ), ctx);emit (ARM_MOV_SR (ARM_LR , rd,SRTYPE_LSR , rt), ctx);
@@ -784,7 +784,7 @@ static inline void emit_a32_lsh_i64(cons }/* dst = dst >> val */ -static inline void emit_a32_lsr_i64 (const u8 dst[],bool dstk, +static inline void emit_a32_rsh_i64 (const u8 dst[],bool dstk,const u32 val,struct jit_ctx *ctx) {const u8 *tmp = bpf2a32[TMP_REG_1 ];const u8 *tmp2 = bpf2a32[TMP_REG_2 ];
@@ -1340,7 +1340,7 @@ static int build_insn(const struct bpf_icase BPF_ALU64 |BPF_RSH |BPF_K :if (unlikely (imm >63 ))return -EINVAL ; -emit_a32_lsr_i64 (dst, dstk, imm, ctx); +emit_a32_rsh_i64 (dst, dstk, imm, ctx);break ;/* dst = dst << src */ case BPF_ALU64 |BPF_LSH |BPF_X :
@@ -1348,7 +1348,7 @@ static int build_insn(const struct bpf_ibreak ;/* dst = dst >> src */ case BPF_ALU64 |BPF_RSH |BPF_X : -emit_a32_lsr_r64 (dst, src, dstk, sstk, ctx); +emit_a32_rsh_r64 (dst, src, dstk, sstk, ctx);break ;/* dst = dst >> src (signed) */ case BPF_ALU64 |BPF_ARSH |BPF_X :
Greg Kroah-Hartman
maintainerPATCH 43/246 ceph: fix alignment of rasize
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chengguang Xu <[email protected]>
[ Upstream commit c36ed50de2ad1649ce0369a4a6fc2cc11b20dfb7 ]
On currently logic:
when I specify rasize=0~1 then it will be 4096. when I specify rasize=2~4097 then it will be 8192.
Make it the same as rsize & wsize.
--- fs/ceph/super.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/ceph/super.c +1 -1
@@ -254,7 +254,7 @@ static int parse_fsopt_token(char *c, vocase Opt_rasize:if (intval <0 )return -EINVAL ; - fsopt->rasize =ALIGN (intval +PAGE_SIZE -1 ,PAGE_SIZE ); + fsopt->rasize =ALIGN (intval,PAGE_SIZE );break ;case Opt_caps_wanted_delay_min:if (intval <1 )
Greg Kroah-Hartman
maintainerPATCH 44/246 e1000e: Ignore TSYNCRXCTL when getting I219 clock attributes
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Poirier <[email protected]>
[ Upstream commit fff200caf6f9179dd9a7fc67acd659e614c3f72f ]
There have been multiple reports of crashes that look like
kernel: RIP: 0010:[<ffffffff8110303f>] timecounter_read+0xf/0x50 [...]
kernel: Call Trace: kernel: [<ffffffffa0806b0f>] e1000e_phc_gettime+0x2f/0x60 [e1000e] kernel: [<ffffffffa0806c5d>] e1000e_systim_overflow_work+0x1d/0x80 [e1000e] kernel: [<ffffffff810992c5>] process_one_work+0x155/0x440 kernel: [<ffffffff81099e16>] worker_thread+0x116/0x4b0 kernel: [<ffffffff8109f422>] kthread+0xd2/0xf0 kernel: [<ffffffff8163184f>] ret_from_fork+0x3f/0x70
These can be traced back to the fact that e1000e_systim_reset() skips the timecounter_init() call if e1000e_get_base_timinca() returns -EINVAL, which leads to a null deref in timecounter_read().
Commit 83129b37ef35 ("e1000e: fix systim issues", v4.2-rc1) reworked e1000e_get_base_timinca() in such a way that it can return -EINVAL for e1000_pch_spt if the SYSCFI bit is not set in TSYNCRXCTL.
Some experimentation has shown that on I219 (e1000_pch_spt, "MAC: 12") adapters, the E1000_TSYNCRXCTL_SYSCFI flag is unstable; TSYNCRXCTL reads sometimes don't have the SYSCFI bit set. Retrying the read shortly after finds the bit to be set. This was observed at boot (probe) but also link up and link down.
Moreover, the phc (PTP Hardware Clock) seems to operate normally even after reads where SYSCFI=0. Therefore, remove this register read and unconditionally set the clock parameters.
Message-Id: <20180425065243.g5mqewg5irkwgwgv@f2>
Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=1075876
--- drivers/net/ethernet/intel/e1000e/netdev.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-)
drivers/net/ethernet/intel/e1000e/netdev.c +6 -9
@@ -3558,15 +3558,12 @@ s32 e1000e_get_base_timinca(struct e1000 }break ;case e1000_pch_spt: -if (er32 (TSYNCRXCTL ) &E1000_TSYNCRXCTL_SYSCFI ) { -/* Stable 24MHz frequency */ - incperiod =INCPERIOD_24MHZ ; - incvalue =INCVALUE_24MHZ ; - shift =INCVALUE_SHIFT_24MHZ ; - adapter->cc.shift = shift; -break ; - } -return -EINVAL ; +/* Stable 24MHz frequency */ + incperiod =INCPERIOD_24MHZ ; + incvalue =INCVALUE_24MHZ ; + shift =INCVALUE_SHIFT_24MHZ ; + adapter->cc.shift = shift; +break ;case e1000_pch_cnp:if (er32 (TSYNCRXCTL ) &E1000_TSYNCRXCTL_SYSCFI ) {/* Stable 24MHz frequency */
Greg Kroah-Hartman
maintainerPATCH 45/246 infiniband: fix a possible use-after-free bug
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cong Wang <[email protected]>
[ Upstream commit cb2595c1393b4a5211534e6f0a0fbad369e21ad8 ]
ucma_process_join() will free the new allocated "mc" struct, if there is any error after that, especially the copy_to_user().
But in parallel, ucma_leave_multicast() could find this "mc" through idr_find() before ucma_process_join() frees it, since it is already published.
So "mc" could be used in ucma_leave_multicast() after it is been allocated and freed in ucma_process_join(), since we don't refcnt it.
Fix this by separating "publish" from ID allocation, so that we can get an ID first and publish it later after copy_to_user().
--- drivers/infiniband/core/ucma.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/infiniband/core/ucma.c +5 -1
@@ -218,7 +218,7 @@ static struct ucma_multicast* ucma_allocreturn NULL ;mutex_lock (&mut); - mc->id =idr_alloc (&multicast_idr, mc,0 ,0 ,GFP_KERNEL ); + mc->id =idr_alloc (&multicast_idr,NULL ,0 ,0 ,GFP_KERNEL );mutex_unlock (&mut);if (mc->id <0 ) goto error;
@@ -1404,6 +1404,10 @@ static ssize_t ucma_process_join(struct goto err3; } +mutex_lock (&mut); +idr_replace (&multicast_idr, mc, mc->id); +mutex_unlock (&mut); +mutex_unlock (&file->mut);ucma_put_ctx (ctx);return 0 ;
Greg Kroah-Hartman
maintainerPATCH 46/246 powerpc/lib: Adjust .balign inside string functions for PPC32
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe Leroy <[email protected]>
[ Upstream commit 1128bb7813a896bd608fb622eee3c26aaf33b473 ]
commit 87a156fb18fe1 ("Align hot loops of some string functions") degraded the performance of string functions by adding useless nops
A simple benchmark on an 8xx calling 100000x a memchr() that matches the first byte runs in 41668 TB ticks before this patch and in 35986 TB ticks after this patch. So this gives an improvement of approx 10%
Another benchmark doing the same with a memchr() matching the 128th byte runs in 1011365 TB ticks before this patch and 1005682 TB ticks after this patch, so regardless on the number of loops, removing those useless nops improves the test by 5683 TB ticks.
--- arch/powerpc/include/asm/cache.h | 3 +++ arch/powerpc/lib/string.S | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-)
arch/powerpc/include/asm/cache.h +3 -0
@@ -9,11 +9,14 @@#if defined(CONFIG_PPC_8xx) || defined(CONFIG_403GCX )#define L1_CACHE_SHIFT 4#define MAX_COPY_PREFETCH 1 +#define IFETCH_ALIGN_SHIFT 2#elif defined(CONFIG_PPC_E500MC )#define L1_CACHE_SHIFT 6#define MAX_COPY_PREFETCH 4 +#define IFETCH_ALIGN_SHIFT 3#elif defined(CONFIG_PPC32 )#define MAX_COPY_PREFETCH 4 +#define IFETCH_ALIGN_SHIFT 3/* 603 fetches 2 insn at a time */ #if defined(CONFIG_PPC_47x)#define L1_CACHE_SHIFT 7#else
arch/powerpc/lib/string.S +4 -3
@@ -12,6 +12,7 @@ #include <asm/errno.h> #include <asm/ppc_asm.h> #include <asm/export.h> +#include <asm/cache.h> .text
@@ -23,7 +24,7 @@ _GLOBAL(strncpy) mtctr r5 addi r6,r3,-1 addi r4,r4,-1 - .balign 16 + .balign IFETCH_ALIGN_BYTES 1: lbzu r0,1(r4) cmpwi 0,r0,0 stbu r0,1(r6)
@@ -43,7 +44,7 @@ _GLOBAL(strncmp) mtctr r5 addi r5,r3,-1 addi r4,r4,-1 - .balign 16 + .balign IFETCH_ALIGN_BYTES 1: lbzu r3,1(r5) cmpwi 1,r3,0 lbzu r0,1(r4)
@@ -77,7 +78,7 @@ _GLOBAL(memchr) beq- 2f mtctr r5 addi r3,r3,-1 - .balign 16 + .balign IFETCH_ALIGN_BYTES 1: lbzu r0,1(r3) cmpw 0,r0,r4 bdnzf 2,1b
Greg Kroah-Hartman
maintainerPATCH 47/246 powerpc/64s: Add barrier_nospec
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michal Suchanek <[email protected]>
[ Upstream commit a6b3964ad71a61bb7c61d80a60bea7d42187b2eb ]
A no-op form of ori (or immediate of 0 into r31 and the result stored in r31) has been re-tasked as a speculation barrier. The instruction only acts as a barrier on newer machines with appropriate firmware support. On older CPUs it remains a harmless no-op.
Implement barrier_nospec using this instruction.
mpe: The semantics of the instruction are believed to be that it prevents execution of subsequent instructions until preceding branches have been fully resolved and are no longer executing speculatively. There is no further documentation available at this time.
--- arch/powerpc/include/asm/barrier.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
arch/powerpc/include/asm/barrier.h +15 -0
@@ -76,6 +76,21 @@ do { \ ___p1; \ }) +#ifdef CONFIG_PPC_BOOK3S_64 +/* +* Prevent execution of subsequent instructions until preceding branches have +* been fully resolved and are no longer executing speculatively. +*/ +#define barrier_nospec_asm ori 31,31,0 + +// This also acts as a compiler barrier due to the memory clobber. +#define barrier_nospec () asm (stringify_in_c(barrier_nospec_asm) ::: "memory") + +#else /* !CONFIG_PPC_BOOK3S_64 */ +#define barrier_nospec_asm +#define barrier_nospec () +#endif +#include <asm-generic/barrier.h> #endif /* _ASM_POWERPC_BARRIER_H */
Greg Kroah-Hartman
maintainerPATCH 48/246 powerpc/eeh: Fix use-after-release of EEH driver
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sam Bobroff <[email protected]>
[ Upstream commit 46d4be41b987a6b2d25a2ebdd94cafb44e21d6c5 ]
Correct two cases where eeh_pcid_get() is used to reference the driver's module but the reference is dropped before the driver pointer is used.
In eeh_rmv_device() also refactor a little so that only two calls to eeh_pcid_put() are needed, rather than three and the reference isn't taken at all if it wasn't needed.
--- arch/powerpc/kernel/eeh_driver.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-)
arch/powerpc/kernel/eeh_driver.c +16 -12
@@ -450,9 +450,11 @@ static void *eeh_add_virt_device(void *d driver =eeh_pcid_get (dev);if (driver) { -eeh_pcid_put (dev); -if (driver->err_handler) +if (driver->err_handler) { +eeh_pcid_put (dev);return NULL ; + } +eeh_pcid_put (dev); }#ifdef CONFIG_PPC_POWERNV
@@ -489,17 +491,19 @@ static void *eeh_rmv_device(void *data,if (eeh_dev_removed (edev))return NULL ; - driver =eeh_pcid_get (dev); -if (driver) { -eeh_pcid_put (dev); -if (removed && -eeh_pe_passed (edev->pe)) -return NULL ; -if (removed && - driver->err_handler && - driver->err_handler->error_detected && - driver->err_handler->slot_reset) +if (removed) { +if (eeh_pe_passed (edev->pe))return NULL ; + driver =eeh_pcid_get (dev); +if (driver) { +if (driver->err_handler && + driver->err_handler->error_detected && + driver->err_handler->slot_reset) { +eeh_pcid_put (dev); +return NULL ; + } +eeh_pcid_put (dev); + } }/* Remove it from PCI subsystem */
Greg Kroah-Hartman
maintainerPATCH 49/246 hvc_opal: dont set tb_ticks_per_usec in udbg_init_opal_common()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stewart Smith <[email protected]>
[ Upstream commit 447808bf500a7cc92173266a59f8a494e132b122 ]
time_init() will set up tb_ticks_per_usec based on reality. time_init() is called *after* udbg_init_opal_common() during boot.
from arch/powerpc/kernel/time.c:
unsigned long tb_ticks_per_usec = 100; /* sane default */
Currently, all powernv systems have a timebase frequency of 512mhz (512000000/1000000 == 0x200) - although there's nothing written down anywhere that I can find saying that we couldn't make that different based on the requirements in the ISA.
So, we've been (accidentally) thwacking the (currently) correct (for powernv at least) value for tb_ticks_per_usec earlier than we otherwise would have.
The "sane default" seems to be adequate for our purposes between udbg_init_opal_common() and time_init() being called, and if it isn't, then we should probably be setting it somewhere that isn't hvc_opal.c!
--- drivers/tty/hvc/hvc_opal.c | 1 - 1 file changed, 1 deletion(-)
drivers/tty/hvc/hvc_opal.c +0 -1
@@ -332,7 +332,6 @@ static void udbg_init_opal_common(void) udbg_putc = udbg_opal_putc; udbg_getc = udbg_opal_getc; udbg_getc_poll = udbg_opal_getc_poll; - tb_ticks_per_usec =0x200 ;/* Make udelay not suck */ }void __init hvc_opal_init_early (void )
Greg Kroah-Hartman
maintainerPATCH 50/246 powerpc/64s: Fix compiler store ordering to SLB shadow area
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Piggin <[email protected]>
[ Upstream commit 926bc2f100c24d4842b3064b5af44ae964c1d81c ]
The stores to update the SLB shadow area must be made as they appear in the C code, so that the hypervisor does not see an entry with mismatched vsid and esid. Use WRITE_ONCE for this.
GCC has been observed to elide the first store to esid in the update, which means that if the hypervisor interrupts the guest after storing to vsid, it could see an entry with old esid and new vsid, which may possibly result in memory corruption.
--- arch/powerpc/mm/slb.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
arch/powerpc/mm/slb.c +4 -4
@@ -62,14 +62,14 @@ static inline void slb_shadow_update(uns* updating it. No write barriers are needed here, provided * we only update the current CPU's SLB shadow buffer. */ - p->save_area[index].esid =0 ; - p->save_area[index].vsid =cpu_to_be64 (mk_vsid_data (ea, ssize, flags)); - p->save_area[index].esid =cpu_to_be64 (mk_esid_data (ea, ssize, index)); +WRITE_ONCE (p->save_area[index].esid,0 ); +WRITE_ONCE (p->save_area[index].vsid,cpu_to_be64 (mk_vsid_data (ea, ssize, flags))); +WRITE_ONCE (p->save_area[index].esid,cpu_to_be64 (mk_esid_data (ea, ssize, index))); }static inline void slb_shadow_clear (enum slb_index index) { -get_slb_shadow ()->save_area[index].esid =0 ; +WRITE_ONCE (get_slb_shadow ()->save_area[index].esid,0 ); } static inline void create_shadowed_slbe(unsigned long ea, int ssize,
Greg Kroah-Hartman
maintainerPATCH 51/246 RDMA/mad: Convert BUG_ONs to error flows
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <[email protected]>
[ Upstream commit 2468b82d69e3a53d024f28d79ba0fdb8bf43dfbf ]
Let's perform checks in-place instead of BUG_ONs.
--- drivers/infiniband/core/mad.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
drivers/infiniband/core/mad.c +7 -4
@@ -1558,7 +1558,8 @@ static int add_oui_reg_req(struct ib_mad mad_reg_req->oui, 3)) { method = &(*vendor_table)->vendor_class[ vclass]->method_table[i]; -BUG_ON (!*method); +if (!*method) + goto error3; goto check_in_use; } }
@@ -1568,10 +1569,12 @@ static int add_oui_reg_req(struct ib_mad vclass]->oui[i])) { method = &(*vendor_table)->vendor_class[ vclass]->method_table[i]; -BUG_ON (*method);/* Allocate method table for this OUI */ -if ((ret =allocate_method_table (method))) - goto error3; +if (!*method) { + ret =allocate_method_table (method); +if (ret) + goto error3; + }memcpy ((*vendor_table)->vendor_class[vclass]->oui[i], mad_reg_req->oui,3 ); goto check_in_use;
Greg Kroah-Hartman
maintainerPATCH 53/246 netfilter: nf_tables: check msg_type before nft_trans_set(trans)
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexey Kodanev <[email protected]>
[ Upstream commit 9c7f96fd77b0dbe1fe7ed1f9c462c45dc48a1076 ]
The patch moves the "trans->msg_type == NFT_MSG_NEWSET" check before using nft_trans_set(trans). Otherwise we can get out of bounds read.
For example, KASAN reported the one when running 0001_cache_handling_0 nft test. In this case "trans->msg_type" was NFT_MSG_NEWTABLE:
[75517.177808] BUG: KASAN: slab-out-of-bounds in nft_set_lookup_global+0x22f/0x270 [nf_tables] [75517.279094] Read of size 8 at addr ffff881bdb643fc8 by task nft/7356 ... [75517.375605] CPU: 26 PID: 7356 Comm: nft Tainted: G E 4.17.0-rc7.1.x86_64 #1 [75517.489587] Hardware name: Oracle Corporation SUN SERVER X4-2 [75517.618129] Call Trace: [75517.648821] dump_stack+0xd1/0x13b [75517.691040] ? show_regs_print_info+0x5/0x5 [75517.742519] ? kmsg_dump_rewind_nolock+0xf5/0xf5 [75517.799300] ? lock_acquire+0x143/0x310 [75517.846738] print_address_description+0x85/0x3a0 [75517.904547] kasan_report+0x18d/0x4b0 [75517.949892] ? nft_set_lookup_global+0x22f/0x270 [nf_tables] [75518.019153] ? nft_set_lookup_global+0x22f/0x270 [nf_tables] [75518.088420] ? nft_set_lookup_global+0x22f/0x270 [nf_tables] [75518.157689] nft_set_lookup_global+0x22f/0x270 [nf_tables] [75518.224869] nf_tables_newsetelem+0x1a5/0x5d0 [nf_tables] [75518.291024] ? nft_add_set_elem+0x2280/0x2280 [nf_tables] [75518.357154] ? nla_parse+0x1a5/0x300 [75518.401455] ? kasan_kmalloc+0xa6/0xd0 [75518.447842] nfnetlink_rcv+0xc43/0x1bdf [nfnetlink] [75518.507743] ? nfnetlink_rcv+0x7a5/0x1bdf [nfnetlink] [75518.569745] ? nfnl_err_reset+0x3c0/0x3c0 [nfnetlink] [75518.631711] ? lock_acquire+0x143/0x310 [75518.679133] ? netlink_deliver_tap+0x9b/0x1070 [75518.733840] ? kasan_unpoison_shadow+0x31/0x40 [75518.788542] netlink_unicast+0x45d/0x680 [75518.837111] ? __isolate_free_page+0x890/0x890 [75518.891913] ? netlink_attachskb+0x6b0/0x6b0 [75518.944542] netlink_sendmsg+0x6fa/0xd30 [75518.993107] ? netlink_unicast+0x680/0x680 [75519.043758] ? netlink_unicast+0x680/0x680 [75519.094402] sock_sendmsg+0xd9/0x160 [75519.138810] ___sys_sendmsg+0x64d/0x980 [75519.186234] ? copy_msghdr_from_user+0x350/0x350 [75519.243118] ? lock_downgrade+0x650/0x650 [75519.292738] ? do_raw_spin_unlock+0x5d/0x250 [75519.345456] ? _raw_spin_unlock+0x24/0x30 [75519.395065] ? __handle_mm_fault+0xbde/0x3410 [75519.448830] ? sock_setsockopt+0x3d2/0x1940 [75519.500516] ? __lock_acquire.isra.25+0xdc/0x19d0 [75519.558448] ? lock_downgrade+0x650/0x650 [75519.608057] ? __audit_syscall_entry+0x317/0x720 [75519.664960] ? __fget_light+0x58/0x250 [75519.711325] ? __sys_sendmsg+0xde/0x170 [75519.758850] __sys_sendmsg+0xde/0x170 [75519.804193] ? __ia32_sys_shutdown+0x90/0x90 [75519.856725] ? syscall_trace_enter+0x897/0x10e0 [75519.912354] ? trace_event_raw_event_sys_enter+0x920/0x920 [75519.979432] ? __audit_syscall_entry+0x720/0x720 [75520.036118] do_syscall_64+0xa3/0x3d0 [75520.081248] ? prepare_exit_to_usermode+0x47/0x1d0 [75520.139904] entry_SYSCALL_64_after_hwframe+0x44/0xa9 [75520.201680] RIP: 0033:0x7fc153320ba0 [75520.245772] RSP: 002b:00007ffe294c3638 EFLAGS: 00000246 ORIG_RAX: 000000000000002e [75520.337708] RAX: ffffffffffffffda RBX: 00007ffe294c4820 RCX: 00007fc153320ba0 [75520.424547] RDX: 0000000000000000 RSI: 00007ffe294c46b0 RDI: 0000000000000003 [75520.511386] RBP: 00007ffe294c47b0 R08: 0000000000000004 R09: 0000000002114090 [75520.598225] R10: 00007ffe294c30a0 R11: 0000000000000246 R12: 00007ffe294c3660 [75520.684961] R13: 0000000000000001 R14: 00007ffe294c3650 R15: 0000000000000001
[75520.790946] Allocated by task 7356: [75520.833994] kasan_kmalloc+0xa6/0xd0 [75520.878088] __kmalloc+0x189/0x450 [75520.920107] nft_trans_alloc_gfp+0x20/0x190 [nf_tables] [75520.983961] nf_tables_newtable+0xcd0/0x1bd0 [nf_tables] [75521.048857] nfnetlink_rcv+0xc43/0x1bdf [nfnetlink] [75521.108655] netlink_unicast+0x45d/0x680 [75521.157013] netlink_sendmsg+0x6fa/0xd30 [75521.205271] sock_sendmsg+0xd9/0x160 [75521.249365] ___sys_sendmsg+0x64d/0x980 [75521.296686] __sys_sendmsg+0xde/0x170 [75521.341822] do_syscall_64+0xa3/0x3d0 [75521.386957] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[75521.467867] Freed by task 23454: [75521.507804] __kasan_slab_free+0x132/0x180 [75521.558137] kfree+0x14d/0x4d0 [75521.596005] free_rt_sched_group+0x153/0x280 [75521.648410] sched_autogroup_create_attach+0x19a/0x520 [75521.711330] ksys_setsid+0x2ba/0x400 [75521.755529] __ia32_sys_setsid+0xa/0x10 [75521.802850] do_syscall_64+0xa3/0x3d0 [75521.848090] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[75521.929000] The buggy address belongs to the object at ffff881bdb643f80 which belongs to the cache kmalloc-96 of size 96 [75522.079797] The buggy address is located 72 bytes inside of 96-byte region [ffff881bdb643f80, ffff881bdb643fe0) [75522.221234] The buggy address belongs to the page: [75522.280100] page:ffffea006f6d90c0 count:1 mapcount:0 mapping:0000000000000000 index:0x0 [75522.377443] flags: 0x2fffff80000100(slab) [75522.426956] raw: 002fffff80000100 0000000000000000 0000000000000000 0000000180200020 [75522.521275] raw: ffffea006e6fafc0 0000000c0000000c ffff881bf180f400 0000000000000000 [75522.615601] page dumped because: kasan: bad access detected
--- net/netfilter/nf_tables_api.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
net/netfilter/nf_tables_api.c +6 -5
@@ -2710,12 +2710,13 @@ static struct nft_set *nf_tables_set_loou32 id =ntohl (nla_get_be32 (nla));list_for_each_entry (trans, &net->nft.commit_list, list) { -struct nft_set *set =nft_trans_set (trans); +if (trans->msg_type ==NFT_MSG_NEWSET ) { +struct nft_set *set =nft_trans_set (trans); -if (trans->msg_type ==NFT_MSG_NEWSET && - id ==nft_trans_set_id (trans) && -nft_active_genmask (set, genmask)) -return set; +if (id ==nft_trans_set_id (trans) && +nft_active_genmask (set, genmask)) +return set; + } }return ERR_PTR (-ENOENT ); }
Greg Kroah-Hartman
maintainerPATCH 54/246 pnfs: Dont release the sequence slot until weve processed layoutget on open
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Trond Myklebust <[email protected]>
[ Upstream commit ae55e59da0e401893b3c52b575fc18a00623d0a1 ]
If the server recalls the layout that was just handed out, we risk hitting a race as described in RFC5661 Section 2.10.6.3 unless we ensure that we release the sequence slot after processing the LAYOUTGET operation that was sent as part of the OPEN compound.
--- fs/nfs/nfs4proc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/nfs/nfs4proc.c +2 -1
@@ -2695,7 +2695,7 @@ static int _nfs4_open_and_get_state(struif (ret !=0 ) goto out; - state =nfs4_opendata_to_nfs4_state (opendata); + state =_nfs4_opendata_to_nfs4_state (opendata); ret =PTR_ERR (state);if (IS_ERR (state)) goto out;
@@ -2731,6 +2731,7 @@ static int _nfs4_open_and_get_state(strunfs4_schedule_stateid_recovery (server, state); } out: +nfs4_sequence_free_slot (&opendata->o_res.seq_res);return ret; }
Greg Kroah-Hartman
maintainerPATCH 55/246 disable loading f2fs module on PAGE_SIZE > 4KB
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anatoly Pugachev <[email protected]>
[ Upstream commit 4071e67cffcc5c2a007116a02437471351f550eb ]
The following patch disables loading of f2fs module on architectures which have PAGE_SIZE > 4096 , since it is impossible to mount f2fs on such architectures , log messages are:
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/vdiskb1, missing codepage or helper program, or other error. /dev/vdiskb1: F2FS filesystem, UUID=1d8b9ca4-2389-4910-af3b-10998969f09c, volume name ""
May 15 18:03:13 ttip kernel: F2FS-fs (vdiskb1): Invalid page_cache_size (8192), supports only 4KB May 15 18:03:13 ttip kernel: F2FS-fs (vdiskb1): Can't find valid F2FS filesystem in 1th superblock May 15 18:03:13 ttip kernel: F2FS-fs (vdiskb1): Invalid page_cache_size (8192), supports only 4KB May 15 18:03:13 ttip kernel: F2FS-fs (vdiskb1): Can't find valid F2FS filesystem in 2th superblock May 15 18:03:13 ttip kernel: F2FS-fs (vdiskb1): Invalid
page_cache_size (8192), supports only 4KB
which was introduced by git commit 5c9b469295fb6b10d98923eab5e79c4edb80ed20
tested on git kernel 4.17.0-rc6-00309-gec30dcf7f425
with patch applied:
modprobe: ERROR: could not insert 'f2fs': Invalid argument
May 28 01:40:28 v215 kernel: F2FS not supported on PAGE_SIZE(8192) != 4096
--- fs/f2fs/super.c | 6 ++++++ 1 file changed, 6 insertions(+)
fs/f2fs/super.c +6 -0
@@ -2663,6 +2663,12 @@ static int __init init_f2fs_fs(void) {int err; +if (PAGE_SIZE !=F2FS_BLKSIZE ) { +printk ("F2FS not supported on PAGE_SIZE(%lu) != %d\n" , +PAGE_SIZE ,F2FS_BLKSIZE ); +return -EINVAL ; + } +f2fs_build_trace_ios (); err =init_inodecache ();
Greg Kroah-Hartman
maintainerPATCH 56/246 f2fs: fix error path of move_data_page
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 14a28559f43ac7c0b98dd1b0e73ec9ec8ab4fc45 ]
This patch fixes error path of move_data_page:
- clear cold data flag if it fails to write page.
- redirty page for non-ENOMEM case.
--- fs/f2fs/gc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
fs/f2fs/gc.c +8 -3
@@ -768,9 +768,14 @@ retry:set_cold_data (page); err =do_write_data_page (&fio); -if (err == -ENOMEM && is_dirty) { -congestion_wait (BLK_RW_ASYNC ,HZ /50 ); - goto retry; +if (err) { +clear_cold_data (page); +if (err == -ENOMEM ) { +congestion_wait (BLK_RW_ASYNC ,HZ /50 ); + goto retry; + } +if (is_dirty) +set_page_dirty (page); } } out:
Greg Kroah-Hartman
maintainerPATCH 57/246 f2fs: fix to dont trigger writeback during recovery
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 64c74a7ab505ea40d1b3e5d02735ecab08ae1b14 ]
- f2fs_fill_super
- recover_fsync_data
- recover_data
- del_fsync_inode
- iput
- iput_final
- write_inode_now
- f2fs_write_inode
- f2fs_balance_fs
- f2fs_balance_fs_bg
- sync_dirty_inodes
With data_flush mount option, during recovery, in order to avoid entering above writeback flow, let's detect recovery status and do skip in f2fs_balance_fs_bg.
--- fs/f2fs/segment.c | 3 +++ 1 file changed, 3 insertions(+)
fs/f2fs/segment.c +3 -0
@@ -435,6 +435,9 @@ void f2fs_balance_fs(struct f2fs_sb_infovoid f2fs_balance_fs_bg (struct f2fs_sb_info *sbi) { +if (unlikely (is_sbi_flag_set (sbi,SBI_POR_DOING ))) +return ; +/* try to shrink extent cache when there is no enough memory */ if (!available_free_memory (sbi,EXTENT_CACHE ))f2fs_shrink_extent_tree (sbi,EXTENT_CACHE_SHRINK_NUMBER );
Greg Kroah-Hartman
maintainerPATCH 58/246 f2fs: fix to wait page writeback during revoking atomic write
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit e5e5732d8120654159254c16834bc8663d8be124 ]
After revoking atomic write, related LBA can be reused by others, so we need to wait page writeback before reusing the LBA, in order to avoid interference between old atomic written in-flight IO and new IO.
--- fs/f2fs/segment.c | 2 ++ 1 file changed, 2 insertions(+)
fs/f2fs/segment.c +2 -0
@@ -225,6 +225,8 @@ static int __revoke_inmem_pages(struct ilock_page (page); +f2fs_wait_on_page_writeback (page,DATA , true); +if (recover) {struct dnode_of_data dn;struct node_info ni;
Greg Kroah-Hartman
maintainerPATCH 59/246 f2fs: Fix deadlock in shutdown ioctl
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sahitya Tummala <[email protected]>
[ Upstream commit 60b2b4ee2bc01dd052f99fa9d65da2232102ef8e ]
f2fs_ioc_shutdown() ioctl gets stuck in the below path when issued with F2FS_GOING_DOWN_FULLSYNC option.
__switch_to+0x90/0xc4 percpu_down_write+0x8c/0xc0 freeze_super+0xec/0x1e4 freeze_bdev+0xc4/0xcc f2fs_ioctl+0xc0c/0x1ce0 f2fs_compat_ioctl+0x98/0x1f0
--- fs/f2fs/file.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
fs/f2fs/file.c +7 -4
@@ -1808,9 +1808,11 @@ static int f2fs_ioc_shutdown(struct fileif (get_user (in, (__u32 __user *)arg))return -EFAULT ; - ret =mnt_want_write_file (filp); -if (ret) -return ret; +if (in !=F2FS_GOING_DOWN_FULLSYNC ) { + ret =mnt_want_write_file (filp); +if (ret) +return ret; + }switch (in) {case F2FS_GOING_DOWN_FULLSYNC :
@@ -1838,7 +1840,8 @@ static int f2fs_ioc_shutdown(struct file }f2fs_update_time (sbi,REQ_TIME ); out: -mnt_drop_write_file (filp); +if (in !=F2FS_GOING_DOWN_FULLSYNC ) +mnt_drop_write_file (filp);return ret; }
Greg Kroah-Hartman
maintainerPATCH 60/246 f2fs: fix to detect failure of dquot_initialize
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit c22aecd75919511abea872b201751e0be1add898 ]
dquot_initialize() can fail due to any exception inside quota subsystem, f2fs needs to be aware of it, and return correct return value to caller.
--- fs/f2fs/file.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/f2fs/file.c +3 -1
@@ -2493,7 +2493,9 @@ static int f2fs_ioc_setproject(struct fi }f2fs_put_page (ipage,1 ); -dquot_initialize (inode); + err =dquot_initialize (inode); +if (err) + goto out_unlock; transfer_to[PRJQUOTA ] =dqget (sb,make_kqid_projid (kprojid));if (!IS_ERR (transfer_to[PRJQUOTA ])) {
Greg Kroah-Hartman
maintainerPATCH 61/246 f2fs: fix race in between GC and atomic open
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 27319ba4044c0c67d62ae39e53c0118c89f0a029 ]
Thread GC thread
- f2fs_ioc_start_atomic_write
- get_dirty_pages
- filemap_write_and_wait_range
- f2fs_gc
- do_garbage_collect
- gc_data_segment
- move_data_page
- f2fs_is_atomic_file
- set_page_dirty
- set_inode_flag(, FI_ATOMIC_FILE)
Dirty data page can still be generated by GC in race condition as above call stack.
This patch adds fi->dio_rwsem[WRITE] in f2fs_ioc_start_atomic_write to avoid such race.
--- fs/f2fs/file.c | 3 +++ 1 file changed, 3 insertions(+)
fs/f2fs/file.c +3 -0
@@ -1630,6 +1630,8 @@ static int f2fs_ioc_start_atomic_write(sinode_lock (inode); +down_write (&F2FS_I (inode)->dio_rwsem[WRITE ]); +if (f2fs_is_atomic_file (inode)) goto out;
@@ -1659,6 +1661,7 @@ inc_stat:stat_inc_atomic_write (inode);stat_update_max_atomic_write (inode); out: +up_write (&F2FS_I (inode)->dio_rwsem[WRITE ]);inode_unlock (inode);mnt_drop_write_file (filp);return ret;
Greg Kroah-Hartman
maintainerPATCH 62/246 block, bfq: remove wrong lock in bfq_requests_merged
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filippo Muzzini <[email protected]>
[ Upstream commit a12bffebc0c9d6a5851f062aaea3aa7c4adc6042 ]
In bfq_requests_merged(), there is a deadlock because the lock on bfqq->bfqd->lock is held by the calling function, but the code of this function tries to grab the lock again.
This deadlock is currently hidden by another bug (fixed by next commit for this source file), which causes the body of bfq_requests_merged() to be never executed.
This commit removes the deadlock by removing the lock/unlock pair.
--- block/bfq-iosched.c | 2 -- 1 file changed, 2 deletions(-)
block/bfq-iosched.c +0 -2
@@ -1678,7 +1678,6 @@ static void bfq_requests_merged(struct rif (!RB_EMPTY_NODE (&rq->rb_node)) goto end; -spin_lock_irq (&bfqq->bfqd->lock);/* * If next and rq belong to the same bfq_queue and next is older
@@ -1702,7 +1701,6 @@ static void bfq_requests_merged(struct rbfq_remove_request (q, next); -spin_unlock_irq (&bfqq->bfqd->lock); end:bfqg_stats_update_io_merged (bfqq_group (bfqq), next->cmd_flags); }
Greg Kroah-Hartman
maintainerPATCH 63/246 usbip: usbip_detach: Fix memory, udev context and udev leak
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Shuah Khan (Samsung OSG)" <[email protected]>
[ Upstream commit d179f99a651685b19333360e6558110da2fe9bd7 ]
detach_port() fails to call usbip_vhci_driver_close() from its error path after usbip_vhci_detach_device() returns failure, leaking memory allocated in usbip_vhci_driver_open() and holding udev_context and udev references. Fix it to call usbip_vhci_driver_close().
--- tools/usb/usbip/src/usbip_detach.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
tools/usb/usbip/src/usbip_detach.c +6 -3
@@ -43,7 +43,7 @@ void usbip_detach_usage(void)static int detach_port (char *port) { -int ret; +int ret =0 ;uint8_t portnum;char path[PATH_MAX +1 ];
@@ -73,9 +73,12 @@ static int detach_port(char *port) } ret =usbip_vhci_detach_device (portnum); -if (ret <0 ) -return -1 ; +if (ret <0 ) { + ret =-1 ; + goto call_driver_close; + } +call_driver_close:usbip_vhci_driver_close ();return ret;
Greg Kroah-Hartman
maintainerPATCH 64/246 usbip: dynamically allocate idev by nports found in sysfs
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Grzeschik <[email protected]>
[ Upstream commit de19ca6fd72c7dd45ad82403e7b3fe9c74ef6767 ]
As the amount of available ports varies by the kernels build configuration. To remove the limitation of the fixed 128 ports we allocate the amount of idevs by using the number we get from the kernel.
--- tools/usb/usbip/libsrc/vhci_driver.c | 32 +++++++++++++++++++------------- tools/usb/usbip/libsrc/vhci_driver.h | 3 +-- 2 files changed, 20 insertions(+), 15 deletions(-)
tools/usb/usbip/libsrc/vhci_driver.c +19 -13
@@ -135,11 +135,11 @@ static int refresh_imported_device_list(return 0 ; } -static int get_nports (void ) +static int get_nports (struct udev_device *hc_device) {const char *attr_nports; - attr_nports =udev_device_get_sysattr_value (vhci_driver->hc_device,"nports" ); + attr_nports =udev_device_get_sysattr_value (hc_device,"nports" );if (!attr_nports) {err ("udev_device_get_sysattr_value nports failed" );return -1 ;
@@ -242,35 +242,41 @@ static int read_record(int rhport, charint usbip_vhci_driver_open (void ) { +int nports; +struct udev_device *hc_device; + udev_context =udev_new ();if (!udev_context) {err ("udev_new failed" );return -1 ; } - vhci_driver =calloc (1 ,sizeof (struct usbip_vhci_driver )); -/* will be freed in usbip_driver_close() */ - vhci_driver->hc_device = + hc_device =udev_device_new_from_subsystem_sysname (udev_context,USBIP_VHCI_BUS_TYPE ,USBIP_VHCI_DEVICE_NAME ); -if (!vhci_driver->hc_device) { +if (!hc_device) {err ("udev_device_new_from_subsystem_sysname failed" ); goto err; } - vhci_driver->nports =get_nports (); -dbg ("available ports: %d" , vhci_driver->nports); - -if (vhci_driver->nports <=0 ) { + nports =get_nports (hc_device); +if (nports <=0 ) {err ("no available ports" ); goto err; - }else if (vhci_driver->nports >MAXNPORT ) { -err ("port number exceeds %d" ,MAXNPORT ); + } +dbg ("available ports: %d" , nports); + + vhci_driver =calloc (1 ,sizeof (struct usbip_vhci_driver ) + + nports *sizeof (struct usbip_imported_device )); +if (!vhci_driver) { +err ("vhci_driver allocation failed" ); goto err; } + vhci_driver->nports = nports; + vhci_driver->hc_device = hc_device; vhci_driver->ncontrollers =get_ncontrollers ();dbg ("available controllers: %d" , vhci_driver->ncontrollers);
@@ -285,7 +291,7 @@ int usbip_vhci_driver_open(void)return 0 ; err: -udev_device_unref (vhci_driver->hc_device); +udev_device_unref (hc_device);if (vhci_driver)free (vhci_driver);
tools/usb/usbip/libsrc/vhci_driver.h +1 -2
@@ -13,7 +13,6 @@#define USBIP_VHCI_BUS_TYPE "platform"#define USBIP_VHCI_DEVICE_NAME "vhci_hcd.0" -#define MAXNPORT 128enum hub_speed {HUB_SPEED_HIGH =0 ,
@@ -41,7 +40,7 @@ struct usbip_vhci_driver {int ncontrollers;int nports; -struct usbip_imported_device idev[MAXNPORT ]; +struct usbip_imported_device idev[]; };
Greg Kroah-Hartman
maintainerPATCH 65/246 perf/x86/intel/uncore: Correct fixed counter index check in generic code
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kan Liang <[email protected]>
[ Upstream commit 4749f8196452eeb73cf2086a6a9705bae479d33d ]
There is no index which is bigger than UNCORE_PMC_IDX_FIXED. The only exception is client IMC uncore, which has been specially handled. For generic code, it is not correct to use >= to check fixed counter. The code quality issue will bring problem when a new counter index is introduced.
--- arch/x86/events/intel/uncore.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/events/intel/uncore.c +1 -1
@@ -218,7 +218,7 @@ void uncore_perf_event_update(struct intu64 prev_count, new_count, delta;int shift; -if (event->hw.idx >=UNCORE_PMC_IDX_FIXED ) +if (event->hw.idx ==UNCORE_PMC_IDX_FIXED ) shift =64 -uncore_fixed_ctr_bits (box);else shift =64 -uncore_perf_ctr_bits (box);
Greg Kroah-Hartman
maintainerPATCH 66/246 perf/x86/intel/uncore: Correct fixed counter index check for NHM
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kan Liang <[email protected]>
[ Upstream commit d71f11c076c420c4e2fceb4faefa144e055e0935 ]
For Nehalem and Westmere, there is only one fixed counter for W-Box. There is no index which is bigger than UNCORE_PMC_IDX_FIXED. It is not correct to use >= to check fixed counter.
The code quality issue will bring problem when new counter index is introduced.
--- arch/x86/events/intel/uncore_nhmex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/events/intel/uncore_nhmex.c +1 -1
@@ -246,7 +246,7 @@ static void nhmex_uncore_msr_enable_even {struct hw_perf_event *hwc = &event->hw; -if (hwc->idx >=UNCORE_PMC_IDX_FIXED ) +if (hwc->idx ==UNCORE_PMC_IDX_FIXED )wrmsrl (hwc->config_base,NHMEX_PMON_CTL_EN_BIT0 );else if (box->pmu->type->event_mask &NHMEX_PMON_CTL_EN_BIT0 )wrmsrl (hwc->config_base, hwc->config |NHMEX_PMON_CTL_EN_BIT22 );
Greg Kroah-Hartman
maintainerPATCH 68/246 selftests: memfd: return Kselftest Skip code for skipped tests
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Shuah Khan (Samsung OSG)" <[email protected]>
[ Upstream commit b27f0259e8cea74c627327c063742a83613dd460 ]
When memfd test is skipped because of unmet dependencies and/or unsupported configuration, it returns non-zero value which is treated as a fail by the Kselftest framework. This leads to false negative result even when the test could not be run.
Change it to return kselftest skip code when a test gets skipped to clearly report that the test could not be run.
Added an explicit check for root user at the start of memfd hugetlbfs test and return skip code if a non-root user attempts to run it.
In addition, return skip code when not enough huge pages are available to run the test.
Kselftest framework SKIP code is 4 and the framework prints appropriate messages to indicate that the test is skipped.
--- tools/testing/selftests/memfd/run_tests.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
tools/testing/selftests/memfd/run_tests.sh +9 -5
@@ -1,6 +1,9 @@ #!/bin/bash # please run as root +# Kselftest framework requirement - SKIP code is 4. +ksft_skip=4 + # # Normal tests requiring no special resources #
@@ -29,12 +32,13 @@ if [ -n "$freepgs" ] && [ $freepgs -lt $ nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` hpages_needed=`expr $hpages_test - $freepgs` + if [ $UID != 0 ]; then + echo "Please run memfd with hugetlbfs test as root" + exit $ksft_skip + fi + echo 3 > /proc/sys/vm/drop_caches echo $(( $hpages_needed + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages - if [ $? -ne 0 ]; then - echo "Please run this test as root" - exit 1 - fi while read name size unit; do if [ "$name" = "HugePages_Free:" ]; then freepgs=$size
@@ -53,7 +57,7 @@ if [ $freepgs -lt $hpages_test ]; then fi printf "Not enough huge pages available (%d < %d)\n" \ $freepgs $needpgs - exit 1 + exit $ksft_skip fi #
Greg Kroah-Hartman
maintainerPATCH 69/246 selftests: intel_pstate: return Kselftest Skip code for skipped tests
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Shuah Khan (Samsung OSG)" <[email protected]>
[ Upstream commit 5c30a038fb8ec8cdff011e6b5d5d51eb415381d4 ]
When intel_pstate test is skipped because of unmet dependencies and/or unsupported configuration, it returns 0 which is treated as a pass by the Kselftest framework. This leads to false positive result even when the test could not be run.
Change it to return kselftest skip code when a test gets skipped to clearly report that the test could not be run.
Kselftest framework SKIP code is 4 and the framework prints appropriate messages to indicate that the test is skipped.
--- tools/testing/selftests/intel_pstate/run.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
tools/testing/selftests/intel_pstate/run.sh +4 -1
@@ -30,9 +30,12 @@ EVALUATE_ONLY=0 +# Kselftest framework requirement - SKIP code is 4. +ksft_skip=4 + if ! uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ | grep -q x86; then echo "$0 # Skipped: Test can only run on x86 architectures." - exit 0 + exit $ksft_skip fi max_cpus=$(($(nproc)-1))
Greg Kroah-Hartman
maintainerPATCH 70/246 PCI: Fix devm_pci_alloc_host_bridge() memory leak
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kiszka <[email protected]>
[ Upstream commit 3bbce531788719749520f28052cabdef16af6b16 ]
Fix a memory leak by freeing the PCI resource list in devm_pci_release_host_bridge_dev().
--- drivers/pci/probe.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/pci/probe.c +3 -1
@@ -516,12 +516,14 @@ static void devm_pci_release_host_bridgeif (bridge->release_fn) bridge->release_fn (bridge); + +pci_free_resource_list (&bridge->windows); }static void pci_release_host_bridge_dev (struct device *dev) {devm_pci_release_host_bridge_dev (dev); -pci_free_host_bridge (to_pci_host_bridge (dev)); +kfree (to_pci_host_bridge (dev)); }struct pci_host_bridge *pci_alloc_host_bridge (size_t priv)
Greg Kroah-Hartman
maintainerPATCH 71/246 btrfs: balance dirty metadata pages in btrfs_finish_ordered_io
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ethan Lien <[email protected]>
[ Upstream commit e73e81b6d0114d4a303205a952ab2e87c44bd279 ]
[Problem description and how we fix it]
We should balance dirty metadata pages at the end of btrfs_finish_ordered_io, since a small, unmergeable random write can potentially produce dirty metadata which is multiple times larger than the data itself. For example, a small, unmergeable 4KiB write may produce:
16KiB dirty leaf (and possibly 16KiB dirty node) in subvolume tree 16KiB dirty leaf (and possibly 16KiB dirty node) in checksum tree 16KiB dirty leaf (and possibly 16KiB dirty node) in extent tree
Although we do call balance dirty pages in write side, but in the buffered write path, most metadata are dirtied only after we reach the dirty background limit (which by far only counts dirty data pages) and wakeup the flusher thread. If there are many small, unmergeable random writes spread in a large btree, we'll find a burst of dirty pages exceeds the dirty_bytes limit after we wakeup the flusher thread - which is not what we expect. In our machine, it caused out-of-memory problem since a page cannot be dropped if it is marked dirty.
Someone may worry about we may sleep in btrfs_btree_balance_dirty_nodelay, but since we do btrfs_finish_ordered_io in a separate worker, it will not stop the flusher consuming dirty pages. Also, we use different worker for metadata writeback endio, sleep in btrfs_finish_ordered_io help us throttle the size of dirty metadata pages.
[Reproduce steps]
To reproduce the problem, we need to do 4KiB write randomly spread in a large btree. In our 2GiB RAM machine:
1) Create 4 subvolumes.
2) Run fio on each subvolume:
[global]
direct=0
rw=randwrite
ioengine=libaio
bs=4k
iodepth=16
numjobs=1
group_reporting
size=128G
runtime=1800
norandommap
time_based
randrepeat=0
3) Take snapshot on each subvolume and repeat fio on existing files.
4) Repeat step (3) until we get large btrees.
In our case, by observing btrfs_root_item->bytes_used, we have 2GiB of metadata in each subvolume tree and 12GiB of metadata in extent tree.
5) Stop all fio, take snapshot again, and wait until all delayed work is completed.
6) Start all fio. Few seconds later we hit OOM when the flusher starts to work.
It can be reproduced even when using nocow write.
--- fs/btrfs/inode.c | 3 +++ 1 file changed, 3 insertions(+)
fs/btrfs/inode.c +3 -0
@@ -3162,6 +3162,9 @@ out:/* once for the tree */ btrfs_put_ordered_extent (ordered_extent); +/* Try to release some metadata so we don't get an OOM but don't wait */ +btrfs_btree_balance_dirty_nodelay (fs_info); +return ret; }
Greg Kroah-Hartman
maintainerPATCH 72/246 iwlwifi: pcie: fix race in Rx buffer allocator
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shaul Triebitz <[email protected]>
[ Upstream commit 0f22e40053bd5378ad1e3250e65c574fd61c0cd6 ]
Make sure the rx_allocator worker is canceled before running the rx_init routine. rx_init frees and re-allocates all rxb's pages. The rx_allocator worker also allocates pages for the used rxb's. Running rx_init and rx_allocator simultaniously causes a kernel panic. Fix that by canceling the work in rx_init.
--- drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/intel/iwlwifi/pcie/rx.c +2 -0
@@ -901,6 +901,8 @@ static int _iwl_pcie_rx_init(struct iwl_ } def_rxq = trans_pcie->rxq; +cancel_work_sync (&rba->rx_alloc); +spin_lock (&rba->lock);atomic_set (&rba->req_pending,0 );atomic_set (&rba->req_ready,0 );
Greg Kroah-Hartman
maintainerPATCH 73/246 Bluetooth: hci_qca: Fix "Sleep inside atomic section" warning
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thierry Escande <[email protected]>
[ Upstream commit 9960521c44a5d828f29636ceac0600603ecbddbf ]
This patch fixes the following warning during boot:
do not call blocking ops when !TASK_RUNNING; state=1 set at
[<(ptrval)>] qca_setup+0x194/0x750 [hci_uart] WARNING: CPU: 2 PID: 1878 at kernel/sched/core.c:6135 __might_sleep+0x7c/0x88
In qca_set_baudrate(), the current task state is set to TASK_UNINTERRUPTIBLE before going to sleep for 300ms. It was then restored to TASK_INTERRUPTIBLE. This patch sets the current task state back to TASK_RUNNING instead.
--- drivers/bluetooth/hci_qca.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/bluetooth/hci_qca.c +1 -1
@@ -881,7 +881,7 @@ static int qca_set_baudrate(struct hci_d*/ set_current_state (TASK_UNINTERRUPTIBLE );schedule_timeout (msecs_to_jiffies (BAUDRATE_SETTLE_TIMEOUT_MS )); -set_current_state (TASK_INTERRUPTIBLE ); +set_current_state (TASK_RUNNING );return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 74/246 Bluetooth: btusb: Add a new Realtek 8723DE ID 2ff8:b011
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jian-Hong Pan <[email protected]>
[ Upstream commit 66d9975c5a7c40aa7e4bb0ec0b0c37ba1f190923 ]
Without this patch we cannot turn on the Bluethooth adapter on ASUS E406MA.
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=2ff8 ProdID=b011 Rev= 2.00 S: Manufacturer=Realtek S: Product=802.11n WLAN Adapter S: SerialNumber=00e04c000001 C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
--- drivers/bluetooth/btusb.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/bluetooth/btusb.c +3 -0
@@ -373,6 +373,9 @@ static const struct usb_device_id blackl/* Additional Realtek 8723BU Bluetooth devices */ { USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK }, + /* Additional Realtek 8723DE Bluetooth devices */ + { USB_DEVICE(0x2ff8, 0xb011), .driver_info = BTUSB_REALTEK }, + /* Additional Realtek 8821AE Bluetooth devices */ { USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK }, { USB_DEVICE(0x13d3, 0x3414), .driver_info = BTUSB_REALTEK },
Greg Kroah-Hartman
maintainerPATCH 75/246 ASoC: dpcm: fix BE dai not hw_free and shutdown
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kai Chieh Chuang <[email protected]>
[ Upstream commit 9c0ac70ad24d76b873c1551e27790c7f6a815d5c ]
In case, one BE is used by two FE1/FE2
FE1--->BE-->
|
FE2----]
when FE1/FE2 call dpcm_be_dai_hw_free() together the BE users will be 2 (> 1), hence cannot be hw_free the be state will leave at, ex. SND_SOC_DPCM_STATE_STOP
later FE1/FE2 call dpcm_be_dai_shutdown(),
will be skip due to wrong state.
leaving the BE not being hw_free and shutdown.
The BE dai will be hw_free later when callingdpcm_be_dai_shutdown() if still in invalid state.
--- sound/soc/soc-pcm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
sound/soc/soc-pcm.c +4 -2
@@ -1779,8 +1779,10 @@ int dpcm_be_dai_shutdown(struct snd_soc_continue ;if ((be->dpcm[stream].state !=SND_SOC_DPCM_STATE_HW_FREE ) && - (be->dpcm[stream].state !=SND_SOC_DPCM_STATE_OPEN )) -continue ; + (be->dpcm[stream].state !=SND_SOC_DPCM_STATE_OPEN )) { +soc_pcm_hw_free (be_substream); + be->dpcm[stream].state =SND_SOC_DPCM_STATE_HW_FREE ; + }dev_dbg (be->dev,"ASoC: close BE %s\n" , be->dai_link->name);
Greg Kroah-Hartman
maintainerPATCH 76/246 mfd: cros_ec: Fail early if we cannot identify the EC
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vincent Palatin <[email protected]>
[ Upstream commit 0dbbf25561b29ffab5ba6277429760abdf49ceff ]
If we cannot communicate with the EC chip to detect the protocol version and its features, it's very likely useless to continue. Else we will commit all kind of uninformed mistakes (using the wrong protocol, the wrong buffer size, mixing the EC with other chips).
--- drivers/mfd/cros_ec.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/mfd/cros_ec.c +5 -1
@@ -112,7 +112,11 @@ int cros_ec_register(struct cros_ec_devimutex_init (&ec_dev->lock); -cros_ec_query_all (ec_dev); + err =cros_ec_query_all (ec_dev); +if (err) { +dev_err (dev,"Cannot identify the EC: error %d\n" , err); +return err; + }if (ec_dev->irq) { err = request_threaded_irq(ec_dev->irq, NULL, ec_irq_thread,
Greg Kroah-Hartman
maintainerPATCH 77/246 mwifiex: handle race during mwifiex_usb_disconnect
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ganapathi Bhat <[email protected]>
[ Upstream commit b817047ae70c0bd67b677b65d0d69d72cd6e9728 ]
Race condition is observed during rmmod of mwifiex_usb:
1. The rmmod thread will call mwifiex_usb_disconnect(), download SHUTDOWN command and do wait_event_interruptible_timeout(), waiting for response.
2. The main thread will handle the response and will do a wake_up_interruptible(), unblocking rmmod thread.
3. On getting unblocked, rmmod thread will make rx_cmd.urb = NULL in mwifiex_usb_free().
4. The main thread will try to resubmit rx_cmd.urb in mwifiex_usb_submit_rx_urb(), which is NULL.
To fix, wait for main thread to complete before calling mwifiex_usb_free().
--- drivers/net/wireless/marvell/mwifiex/usb.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/net/wireless/marvell/mwifiex/usb.c +3 -0
@@ -644,6 +644,9 @@ static void mwifiex_usb_disconnect(struc MWIFIEX_FUNC_SHUTDOWN); } +if (adapter->workqueue) +flush_workqueue (adapter->workqueue); +mwifiex_usb_free (card); mwifiex_dbg(adapter, FATAL,
Greg Kroah-Hartman
maintainerPATCH 78/246 wlcore: sdio: check for valid platform device data before suspend
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eyal Reizer <[email protected]>
[ Upstream commit 6e91d48371e79862ea2c05867aaebe4afe55a865 ]
the wl pointer can be null In case only wlcore_sdio is probed while no WiLink module is successfully probed, as in the case of mounting a wl12xx module while using a device tree file configured with wl18xx related settings.
In this case the system was crashing in wl1271_suspend() as platform device data is not set.
Make sure wl the pointer is valid before using it.
--- drivers/net/wireless/ti/wlcore/sdio.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/net/wireless/ti/wlcore/sdio.c +5 -0
@@ -406,6 +406,11 @@ static int wl1271_suspend(struct devicemmc_pm_flag_t sdio_flags;int ret =0 ; +if (!wl) { +dev_err (dev,"no wilink module was probed\n" ); + goto out; + } +dev_dbg (dev,"wl1271 suspend. wow_enabled: %d\n" , wl->wow_enabled);
Greg Kroah-Hartman
maintainerPATCH 79/246 net: hns3: Fixes the init of the VALID BD info in the descriptor
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fuyun Liang <[email protected]>
[ Upstream commit 7d0b130cbbfa4651cc1ab9268a2956c1b9d82ff9 ]
RX Buffer Descriptor contains a VALID bit which indicates if the BD is valid and has some data. This field is set by HNS3 hardware to intimate the driver of some valid data present in the BD. nd should be reset by the driver when BD is being used again. In the existing code this bit was not being (re-)initialized properly and hence was causing problems.
--- drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c +2 -0
@@ -1598,6 +1598,7 @@ static void hns3_replace_buffer(struct hhns3_unmap_buffer (ring, &ring->desc_cb[i]); ring->desc_cb[i] = *res_cb; ring->desc[i].addr =cpu_to_le64 (ring->desc_cb[i].dma); + ring->desc[i].rx.bd_base_info =0 ; }static void hns3_reuse_buffer (struct hns3_enet_ring *ring,int i)
@@ -1605,6 +1606,7 @@ static void hns3_reuse_buffer(struct hns ring->desc_cb[i].reuse_flag =0 ; ring->desc[i].addr =cpu_to_le64 (ring->desc_cb[i].dma + ring->desc_cb[i].page_offset); + ring->desc[i].rx.bd_base_info =0 ; } static void hns3_nic_reclaim_one_desc(struct hns3_enet_ring *ring, int *bytes,
Greg Kroah-Hartman
maintainerPATCH 80/246 media: tw686x: Fix incorrect vb2_mem_ops GFP flags
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ezequiel Garcia <[email protected]>
[ Upstream commit 636757ab6c93e19e2f58d3b3af1312e34eaffbab ]
When the driver is configured in the "memcpy" dma-mode, it uses vb2_vmalloc_memops, which is backed by a SLAB allocator and so shouldn't be using GFP_DMA32.
Fix it.
--- drivers/media/pci/tw686x/tw686x-video.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/media/pci/tw686x/tw686x-video.c +2 -1
@@ -1228,7 +1228,8 @@ int tw686x_video_init(struct tw686x_dev vc->vidq.timestamp_flags =V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC ; vc->vidq.min_buffers_needed =2 ; vc->vidq.lock = &vc->vb_mutex; - vc->vidq.gfp_flags =GFP_DMA32 ; + vc->vidq.gfp_flags = dev->dma_mode !=TW686X_DMA_MODE_MEMCPY ? +GFP_DMA32 :0 ; vc->vidq.dev = &dev->pci_dev->dev; err =vb2_queue_init (&vc->vidq);
Greg Kroah-Hartman
maintainerPATCH 81/246 media: videobuf2-core: dont call memop finish when queueing
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans Verkuil <[email protected]>
[ Upstream commit 90b2da89a083e1395cb322521a42397c49ae4500 ]
When a buffer is queued or requeued in vb2_buffer_done, then don't call the finish memop. In this case the buffer is only returned to vb2, not to userspace.
Calling 'finish' here will cause an unbalance when the queue is canceled, since the core will call the same memop again.
--- drivers/media/v4l2-core/videobuf2-core.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/media/v4l2-core/videobuf2-core.c +6 -3
@@ -912,9 +912,12 @@ void vb2_buffer_done(struct vb2_buffer *dprintk (4 ,"done processing on buffer %d, state: %d\n" , vb->index, state); -/* sync buffers */ -for (plane =0 ; plane < vb->num_planes; ++plane) -call_void_memop (vb, finish, vb->planes[plane].mem_priv); +if (state !=VB2_BUF_STATE_QUEUED && + state !=VB2_BUF_STATE_REQUEUEING ) { +/* sync buffers */ +for (plane =0 ; plane < vb->num_planes; ++plane) +call_void_memop (vb, finish, vb->planes[plane].mem_priv); + }spin_lock_irqsave (&q->done_lock, flags); if (state == VB2_BUF_STATE_QUEUED ||
Greg Kroah-Hartman
maintainerPATCH 82/246 Btrfs: dont return ino to ino cache if inode item removal fails
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Omar Sandoval <[email protected]>
[ Upstream commit c08db7d8d295a4f3a10faaca376de011afff7950 ]
In btrfs_evict_inode(), if btrfs_truncate_inode_items() fails, the inode item will still be in the tree but we still return the ino to the ino cache. That will blow up later when someone tries to allocate that ino, so don't return it to the cache.
--- fs/btrfs/inode.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-)
fs/btrfs/inode.c +13 -12
@@ -5499,13 +5499,18 @@ void btrfs_evict_inode(struct inode *ino trans->block_rsv = rsv; ret =btrfs_truncate_inode_items (trans, root, inode,0 ,0 ); -if (ret != -ENOSPC && ret != -EAGAIN ) +if (ret) { + trans->block_rsv = &fs_info->trans_block_rsv; +btrfs_end_transaction (trans); +btrfs_btree_balance_dirty (fs_info); +if (ret != -ENOSPC && ret != -EAGAIN ) { +btrfs_orphan_del (NULL ,BTRFS_I (inode)); +btrfs_free_block_rsv (fs_info, rsv); + goto no_delete; + } + }else {break ; - - trans->block_rsv = &fs_info->trans_block_rsv; -btrfs_end_transaction (trans); - trans =NULL ; -btrfs_btree_balance_dirty (fs_info); + } }btrfs_free_block_rsv (fs_info, rsv);
@@ -5514,12 +5519,8 @@ void btrfs_evict_inode(struct inode *ino* Errors here aren't a big deal, it just means we leave orphan items * in the tree. They will be cleaned up on the next mount. */ -if (ret ==0 ) { - trans->block_rsv = root->orphan_block_rsv; -btrfs_orphan_del (trans,BTRFS_I (inode)); - }else { -btrfs_orphan_del (NULL ,BTRFS_I (inode)); - } + trans->block_rsv = root->orphan_block_rsv; +btrfs_orphan_del (trans,BTRFS_I (inode)); trans->block_rsv = &fs_info->trans_block_rsv; if (!(root == fs_info->tree_root ||
Greg Kroah-Hartman
maintainerPATCH 83/246 Btrfs: dont BUG_ON() in btrfs_truncate_inode_items()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Omar Sandoval <[email protected]>
[ Upstream commit 0552210997badb6a60740a26ff9d976a416510f0 ]
btrfs_free_extent() can fail because of ENOMEM. There's no reason to panic here, we can just abort the transaction.
--- fs/btrfs/inode.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
fs/btrfs/inode.c +4 -1
@@ -4740,7 +4740,10 @@ delete: extent_num_bytes,0 ,btrfs_header_owner (leaf), ino, extent_offset); -BUG_ON (ret); +if (ret) { +btrfs_abort_transaction (trans, ret); +break ; + }if (btrfs_should_throttle_delayed_refs (trans, fs_info)) btrfs_async_run_delayed_refs(fs_info, trans->delayed_ref_updates * 2,
Greg Kroah-Hartman
maintainerPATCH 84/246 btrfs: add barriers to btrfs_sync_log before log_commit_wait wakeups
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Sterba <[email protected]>
[ Upstream commit 3d3a2e610ea5e7c6d4f9481ecce5d8e2d8317843 ]
Currently the code assumes that there's an implied barrier by the sequence of code preceding the wakeup, namely the mutex unlock.
As Nikolay pointed out:
I think this is wrong (not your code) but the original assumption that the RELEASE semantics provided by mutex_unlock is sufficient. According to memory-barriers.txt:
Section 'LOCK ACQUISITION FUNCTIONS' states:
(2) RELEASE operation implication:
Memory operations issued before the RELEASE will be completed before the RELEASE operation has completed.
Memory operations issued after the RELEASE *may* be completed before the RELEASE operation has completed.
(I've bolded the may portion)
The example given there:
As an example, consider the following:
*A = a;
*B = b;
ACQUIRE
*C = c;
*D = d;
RELEASE
*E = e;
*F = f;The following sequence of events is acceptable:
ACQUIRE, {*F,*A}, *E, {*C,*D}, *B, RELEASESo if we assume that *C is modifying the flag which the waitqueue is checking, and *E is the actual wakeup, then those accesses can be re-ordered...
IMHO this code should be considered broken...
---
To be on the safe side, add the barriers. The synchronization logic around log using the mutexes and several other threads does not make it easy to reason for/against the barrier.
--- fs/btrfs/tree-log.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
fs/btrfs/tree-log.c +8 -2
@@ -3041,8 +3041,11 @@ out_wake_log_root:mutex_unlock (&log_root_tree->log_mutex);/* -* The barrier before waitqueue_active is implied by mutex_unlock +* The barrier before waitqueue_active is needed so all the updates +* above are seen by the woken threads. It might not be necessary, but +* proving that seems to be hard. */ +smp_mb ();if (waitqueue_active (&log_root_tree->log_commit_wait[index2]))wake_up (&log_root_tree->log_commit_wait[index2]); out:
@@ -3053,8 +3056,11 @@ out:mutex_unlock (&root->log_mutex);/* -* The barrier before waitqueue_active is implied by mutex_unlock +* The barrier before waitqueue_active is needed so all the updates +* above are seen by the woken threads. It might not be necessary, but +* proving that seems to be hard. */ +smp_mb ();if (waitqueue_active (&root->log_commit_wait[index1]))wake_up (&root->log_commit_wait[index1]);return ret;
Greg Kroah-Hartman
maintainerPATCH 85/246 btrfs: qgroup: Finish rescan when hit the last leaf of extent tree
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
[ Upstream commit ff3d27a048d926b3920ccdb75d98788c567cae0d ]
Under the following case, qgroup rescan can double account cowed tree blocks:
In this case, extent tree only has one tree block.
-
| transid=5 last committed=4 | btrfs_qgroup_rescan_worker() | |- btrfs_start_transaction() | | transid = 5 | |- qgroup_rescan_leaf() | |- btrfs_search_slot_for_read() on extent tree | Get the only extent tree block from commit root (transid = 4). | Scan it, set qgroup_rescan_progress to the last | EXTENT/META_ITEM + 1 | now qgroup_rescan_progress = A + 1. | | fs tree get CoWed, new tree block is at A + 16K | transid 5 get committed - | transid=6 last committed=5 | btrfs_qgroup_rescan_worker() | btrfs_qgroup_rescan_worker() | |- btrfs_start_transaction() | | transid = 5 | |- qgroup_rescan_leaf() | |- btrfs_search_slot_for_read() on extent tree | Get the only extent tree block from commit root (transid = 5). | scan it using qgroup_rescan_progress (A + 1). | found new tree block beyong A, and it's fs tree block, | account it to increase qgroup numbers.
-
In above case, tree block A, and tree block A + 16K get accounted twice, while qgroup rescan should stop when it already reach the last leaf, other than continue using its qgroup_rescan_progress.
Such case could happen by just looping btrfs/017 and with some possibility it can hit such double qgroup accounting problem.
Fix it by checking the path to determine if we should finish qgroup rescan, other than relying on next loop to exit.
--- fs/btrfs/qgroup.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
fs/btrfs/qgroup.c +19 -0
@@ -2500,6 +2500,21 @@ out: }/* +* Check if the leaf is the last leaf. Which means all node pointers +* are at their last position. +*/ +static bool is_last_leaf (struct btrfs_path *path) +{ +int i; + +for (i =1 ; i <BTRFS_MAX_LEVEL && path->nodes[i]; i++) { +if (path->slots[i] !=btrfs_header_nritems (path->nodes[i]) -1 ) +return false; + } +return true; +} + +/* * returns < 0 on error, 0 when more leafs are to be scanned. * returns 1 when done. */
@@ -2512,6 +2527,7 @@ qgroup_rescan_leaf(struct btrfs_fs_infostruct ulist *roots =NULL ;struct seq_list tree_mod_seq_elem =SEQ_LIST_INIT (tree_mod_seq_elem);u64 num_bytes; +bool done;int slot;int ret;
@@ -2540,6 +2556,7 @@ qgroup_rescan_leaf(struct btrfs_fs_infomutex_unlock (&fs_info->qgroup_rescan_lock);return ret; } + done =is_last_leaf (path);btrfs_item_key_to_cpu (path->nodes[0 ], &found,btrfs_header_nritems (path->nodes[0 ]) -1 );
@@ -2586,6 +2603,8 @@ out: }btrfs_put_tree_mod_seq (fs_info, &tree_mod_seq_elem); +if (done && !ret) + ret =1 ;return ret; }
Greg Kroah-Hartman
maintainerPATCH 86/246 x86/microcode: Make the late update update_lock a raw lock for RT
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Scott Wood <[email protected]>
[ Upstream commit ff987fcf011d20c53b3a613edf6e2055ea48e26e ]
__reload_late() is called from stop_machine context and thus cannot acquire a non-raw spinlock on PREEMPT_RT.
--- arch/x86/kernel/cpu/microcode/core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/x86/kernel/cpu/microcode/core.c +3 -3
@@ -70,7 +70,7 @@ static DEFINE_MUTEX(microcode_mutex);/* * Serialize late loading so that CPUs get updated one-by-one. */ -static DEFINE_SPINLOCK (update_lock); +static DEFINE_RAW_SPINLOCK (update_lock);struct ucode_cpu_info ucode_cpu_info[NR_CPUS ];
@@ -560,9 +560,9 @@ static int __reload_late(void *info)if (__wait_for_cpus (&late_cpus_in,NSEC_PER_SEC ))return -1 ; -spin_lock (&update_lock); +raw_spin_lock (&update_lock);apply_microcode_local (&err); -spin_unlock (&update_lock); +raw_spin_unlock (&update_lock);/* siblings return UCODE_OK because their engine got updated already */ if (err >UCODE_NFOUND ) {
Greg Kroah-Hartman
maintainerPATCH 87/246 PM / wakeup: Make s2idle_lock a RAW_SPINLOCK
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <[email protected]>
[ Upstream commit 62fc00a6611a0014c85763f9def1fc07c15d1302 ]
The `s2idle_lock' is acquired during suspend while interrupts are disabled even on RT. The lock is acquired for short sections only. Make it a RAW lock which avoids "sleeping while atomic" warnings on RT.
--- kernel/power/suspend.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
kernel/power/suspend.c +7 -7
@@ -60,7 +60,7 @@ static const struct platform_s2idle_opsstatic DECLARE_WAIT_QUEUE_HEAD (s2idle_wait_head);enum s2idle_states __read_mostly s2idle_state; -static DEFINE_SPINLOCK (s2idle_lock); +static DEFINE_RAW_SPINLOCK (s2idle_lock);void s2idle_set_ops (const struct platform_s2idle_ops *ops) {
@@ -78,12 +78,12 @@ static void s2idle_enter(void) {trace_suspend_resume (TPS ("machine_suspend" ),PM_SUSPEND_TO_IDLE , true); -spin_lock_irq (&s2idle_lock); +raw_spin_lock_irq (&s2idle_lock);if (pm_wakeup_pending ()) goto out; s2idle_state =S2IDLE_STATE_ENTER ; -spin_unlock_irq (&s2idle_lock); +raw_spin_unlock_irq (&s2idle_lock);get_online_cpus ();cpuidle_resume ();
@@ -97,11 +97,11 @@ static void s2idle_enter(void)cpuidle_pause ();put_online_cpus (); -spin_lock_irq (&s2idle_lock); +raw_spin_lock_irq (&s2idle_lock); out: s2idle_state =S2IDLE_STATE_NONE ; -spin_unlock_irq (&s2idle_lock); +raw_spin_unlock_irq (&s2idle_lock);trace_suspend_resume (TPS ("machine_suspend" ),PM_SUSPEND_TO_IDLE , false); }
@@ -156,12 +156,12 @@ void s2idle_wake(void) {unsigned long flags; -spin_lock_irqsave (&s2idle_lock, flags); +raw_spin_lock_irqsave (&s2idle_lock, flags);if (s2idle_state >S2IDLE_STATE_NONE ) { s2idle_state =S2IDLE_STATE_WAKE ;wake_up (&s2idle_wait_head); } -spin_unlock_irqrestore (&s2idle_lock, flags); +raw_spin_unlock_irqrestore (&s2idle_lock, flags); }EXPORT_SYMBOL_GPL (s2idle_wake);
Greg Kroah-Hartman
maintainerPATCH 88/246 PCI: Prevent sysfs disable of device while driver is attached
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit 6f5cdfa802733dcb561bf664cc89d203f2fd958f ]
Manipulating the enable_cnt behind the back of the driver will wreak complete havoc with the kernel state, so disallow it.
--- drivers/pci/pci-sysfs.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/pci/pci-sysfs.c +9 -6
@@ -305,13 +305,16 @@ static ssize_t enable_store(struct devicif (!capable (CAP_SYS_ADMIN ))return -EPERM ; -if (!val) { -if (pci_is_enabled (pdev)) -pci_disable_device (pdev); -else - result = -EIO ; - }else +device_lock (dev); +if (dev->driver) + result = -EBUSY ; +else if (val) result =pci_enable_device (pdev); +else if (pci_is_enabled (pdev)) +pci_disable_device (pdev); +else + result = -EIO ; +device_unlock (dev);return result <0 ? result : count; }
Greg Kroah-Hartman
maintainerPATCH 89/246 nvme-rdma: stop admin queue before freeing it
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jianchao Wang <[email protected]>
[ Upstream commit 2e050f00a0f0e07467050cb4afae0234941e5bf3 ]
For any failure after nvme_rdma_start_queue in nvme_rdma_configure_admin_queue, the admin queue will be freed with the NVME_RDMA_Q_LIVE flag still set. Once nvme_rdma_stop_queue is invoked, that will cause a use-after-free.
BUG: KASAN: use-after-free in rdma_disconnect+0x1f/0xe0 [rdma_cm]
To fix it, call nvme_rdma_stop_queue for all the failed cases after nvme_rdma_start_queue.
--- drivers/nvme/host/rdma.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/nvme/host/rdma.c +6 -4
@@ -796,7 +796,7 @@ static int nvme_rdma_configure_admin_queif (error) {dev_err (ctrl->ctrl.device,"prop_get NVME_REG_CAP failed\n" ); - goto out_cleanup_queue; + goto out_stop_queue; } ctrl->ctrl.sqsize =
@@ -804,23 +804,25 @@ static int nvme_rdma_configure_admin_que error =nvme_enable_ctrl (&ctrl->ctrl, ctrl->ctrl.cap);if (error) - goto out_cleanup_queue; + goto out_stop_queue; ctrl->ctrl.max_hw_sectors = (ctrl->max_fr_pages -1 ) << (ilog2 (SZ_4K ) -9 ); error =nvme_init_identify (&ctrl->ctrl);if (error) - goto out_cleanup_queue; + goto out_stop_queue; error =nvme_rdma_alloc_qe (ctrl->queues[0 ].device->dev, &ctrl->async_event_sqe,sizeof (struct nvme_command ),DMA_TO_DEVICE );if (error) - goto out_cleanup_queue; + goto out_stop_queue;return 0 ; +out_stop_queue: +nvme_rdma_stop_queue (&ctrl->queues[0 ]); out_cleanup_queue:if (new)blk_cleanup_queue (ctrl->ctrl.admin_q);
Greg Kroah-Hartman
maintainerPATCH 90/246 nvme-pci: Fix AER reset handling
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Keith Busch <[email protected]>
[ Upstream commit 72cd4cc28e234ed7189ee508ed65ab60c80a97c8 ]
The nvme timeout handling doesn't do anything if the pci channel is offline, which is the case when recovering from PCI error event, so it was a bad idea to sync the controller reset in this state. This patch flushes the reset work in the error_resume callback instead when the channel is back to online. This keeps AER handling serialized and can recover from timeouts.
--- drivers/nvme/host/pci.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/nvme/host/pci.c +3 -0
@@ -2519,6 +2519,9 @@ static pci_ers_result_t nvme_slot_reset(static void nvme_error_resume (struct pci_dev *pdev) { +struct nvme_dev *dev =pci_get_drvdata (pdev); + +flush_work (&dev->ctrl.reset_work);pci_cleanup_aer_uncorrect_error_status (pdev); }
Greg Kroah-Hartman
maintainerPATCH 91/246 ath: Add regulatory mapping for FCC3_ETSIC
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 01fb2994a98dc72c8818c274f7b5983d5dd885c7 ]
The regdomain code is used to select the correct the correct conformance test limits (CTL) for a country. If the regdomain code isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this regdomain code are:
* 2.4GHz: ETSI
* 5GHz: FCC
--- drivers/net/wireless/ath/regd_common.h | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/ath/regd_common.h +2 -0
@@ -35,6 +35,7 @@ enum EnumRd {FRANCE_RES =0x31 ,FCC3_FCCA =0x3A ,FCC3_WORLD =0x3B , +FCC3_ETSIC =0x3F ,ETSI1_WORLD =0x37 , ETSI3_ETSIA = 0x32,
@@ -168,6 +169,7 @@ static struct reg_dmn_pair_mapping regDo {FCC2_ETSIC, CTL_FCC, CTL_ETSI}, {FCC3_FCCA, CTL_FCC, CTL_FCC}, {FCC3_WORLD, CTL_FCC, CTL_ETSI}, + {FCC3_ETSIC, CTL_FCC, CTL_ETSI}, {FCC4_FCCA, CTL_FCC, CTL_FCC}, {FCC5_FCCA, CTL_FCC, CTL_FCC}, {FCC6_FCCA, CTL_FCC, CTL_FCC},
Greg Kroah-Hartman
maintainerPATCH 92/246 ath: Add regulatory mapping for ETSI8_WORLD
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 45faf6e096da8bb80e1ddf8c08a26a9601d9469e ]
The regdomain code is used to select the correct the correct conformance test limits (CTL) for a country. If the regdomain code isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this regdomain code are:
* 2.4GHz: ETSI
* 5GHz: ETSI
--- drivers/net/wireless/ath/regd_common.h | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/ath/regd_common.h +2 -0
@@ -45,6 +45,7 @@ enum EnumRd {ETSI4_ETSIC =0x38 ,ETSI5_WORLD =0x39 ,ETSI6_WORLD =0x34 , +ETSI8_WORLD =0x3D ,ETSI_RESERVED =0x33 , MKK1_MKKA = 0x40,
@@ -181,6 +182,7 @@ static struct reg_dmn_pair_mapping regDo {ETSI4_WORLD, CTL_ETSI, CTL_ETSI}, {ETSI5_WORLD, CTL_ETSI, CTL_ETSI}, {ETSI6_WORLD, CTL_ETSI, CTL_ETSI}, + {ETSI8_WORLD, CTL_ETSI, CTL_ETSI},/* XXX: For ETSI3_ETSIA, Was NO_CTL meant for the 2 GHz band ? */ {ETSI3_ETSIA, CTL_ETSI, CTL_ETSI},
Greg Kroah-Hartman
maintainerPATCH 93/246 ath: Add regulatory mapping for APL13_WORLD
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 9ba8df0c52b3e6baa436374b429d3d73bd09a320 ]
The regdomain code is used to select the correct the correct conformance test limits (CTL) for a country. If the regdomain code isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this regdomain code are:
* 2.4GHz: ETSI
* 5GHz: ETSI
--- drivers/net/wireless/ath/regd_common.h | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/ath/regd_common.h +2 -0
@@ -69,6 +69,7 @@ enum EnumRd {APL1_ETSIC =0x55 ,APL2_ETSIC =0x56 ,APL5_WORLD =0x58 , +APL13_WORLD =0x5A ,APL6_WORLD =0x5B ,APL7_FCCA =0x5C , APL8_WORLD = 0x5D,
@@ -195,6 +196,7 @@ static struct reg_dmn_pair_mapping regDo {APL3_WORLD, CTL_FCC, CTL_ETSI}, {APL4_WORLD, CTL_FCC, CTL_ETSI}, {APL5_WORLD, CTL_FCC, CTL_ETSI}, + {APL13_WORLD, CTL_ETSI, CTL_ETSI}, {APL6_WORLD, CTL_ETSI, CTL_ETSI}, {APL8_WORLD, CTL_ETSI, CTL_ETSI}, {APL9_WORLD, CTL_ETSI, CTL_ETSI},
Greg Kroah-Hartman
maintainerPATCH 94/246 ath: Add regulatory mapping for APL2_FCCA
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 4f183687e3fad3ce0e06e38976cad81bc4541990 ]
The regdomain code is used to select the correct the correct conformance test limits (CTL) for a country. If the regdomain code isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this regdomain code are:
* 2.4GHz: FCC
* 5GHz: FCC
--- drivers/net/wireless/ath/regd_common.h | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/ath/regd_common.h +2 -0
@@ -61,6 +61,7 @@ enum EnumRd {MKK1_MKKA1 =0x4A ,MKK1_MKKA2 =0x4B ,MKK1_MKKC =0x4C , +APL2_FCCA =0x4D ,APL3_FCCA =0x50 , APL1_WORLD = 0x52,
@@ -193,6 +194,7 @@ static struct reg_dmn_pair_mapping regDo {FCC1_FCCA, CTL_FCC, CTL_FCC}, {APL1_WORLD, CTL_FCC, CTL_ETSI}, {APL2_WORLD, CTL_FCC, CTL_ETSI}, + {APL2_FCCA, CTL_FCC, CTL_FCC}, {APL3_WORLD, CTL_FCC, CTL_ETSI}, {APL4_WORLD, CTL_FCC, CTL_ETSI}, {APL5_WORLD, CTL_FCC, CTL_ETSI},
Greg Kroah-Hartman
maintainerPATCH 95/246 ath: Add regulatory mapping for Uganda
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 1ea3986ad2bc72081c69f3fbc1e5e0eeb3c44f17 ]
The country code is used by the ath to detect the ISO 3166-1 alpha-2 name and to select the correct conformance test limits (CTL) for a country. If the country isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this country are:
* 2.4GHz: ETSI
* 5GHz: FCC
--- drivers/net/wireless/ath/regd.h | 1 + drivers/net/wireless/ath/regd_common.h | 1 + 2 files changed, 2 insertions(+)
drivers/net/wireless/ath/regd.h +1 -0
@@ -175,6 +175,7 @@ enum CountryCode {CTRY_TUNISIA =788 ,CTRY_TURKEY =792 ,CTRY_UAE =784 , +CTRY_UGANDA =800 ,CTRY_UKRAINE =804 ,CTRY_UNITED_KINGDOM =826 , CTRY_UNITED_STATES = 840,
drivers/net/wireless/ath/regd_common.h +1 -0
@@ -467,6 +467,7 @@ static struct country_code_to_enum_rd al {CTRY_TRINIDAD_Y_TOBAGO, FCC3_WORLD, "TT"}, {CTRY_TUNISIA, ETSI3_WORLD, "TN"}, {CTRY_TURKEY, ETSI3_WORLD, "TR"}, + {CTRY_UGANDA, FCC3_WORLD, "UG"}, {CTRY_UKRAINE, NULL1_WORLD, "UA"}, {CTRY_UAE, NULL1_WORLD, "AE"}, {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB"},
Greg Kroah-Hartman
maintainerPATCH 96/246 ath: Add regulatory mapping for Tanzania
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 667ddac5745fb9fddfe8f7fd2523070f50bd4442 ]
The country code is used by the ath to detect the ISO 3166-1 alpha-2 name and to select the correct conformance test limits (CTL) for a country. If the country isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this country are:
* 2.4GHz: ETSI
* 5GHz: FCC
--- drivers/net/wireless/ath/regd.h | 1 + drivers/net/wireless/ath/regd_common.h | 1 + 2 files changed, 2 insertions(+)
drivers/net/wireless/ath/regd.h +1 -0
@@ -170,6 +170,7 @@ enum CountryCode {CTRY_SWITZERLAND =756 ,CTRY_SYRIA =760 ,CTRY_TAIWAN =158 , +CTRY_TANZANIA =834 ,CTRY_THAILAND =764 ,CTRY_TRINIDAD_Y_TOBAGO =780 , CTRY_TUNISIA = 788,
drivers/net/wireless/ath/regd_common.h +1 -0
@@ -463,6 +463,7 @@ static struct country_code_to_enum_rd al {CTRY_SWITZERLAND, ETSI1_WORLD, "CH"}, {CTRY_SYRIA, NULL1_WORLD, "SY"}, {CTRY_TAIWAN, APL3_FCCA, "TW"}, + {CTRY_TANZANIA, APL1_WORLD, "TZ"}, {CTRY_THAILAND, FCC3_WORLD, "TH"}, {CTRY_TRINIDAD_Y_TOBAGO, FCC3_WORLD, "TT"}, {CTRY_TUNISIA, ETSI3_WORLD, "TN"},
Greg Kroah-Hartman
maintainerPATCH 97/246 ath: Add regulatory mapping for Serbia
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 2a3169a54bb53717928392a04fb84deb765b51f1 ]
The country code is used by the ath to detect the ISO 3166-1 alpha-2 name and to select the correct conformance test limits (CTL) for a country. If the country isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this country are:
* 2.4GHz: ETSI
* 5GHz: ETSI
--- drivers/net/wireless/ath/regd.h | 1 + drivers/net/wireless/ath/regd_common.h | 1 + 2 files changed, 2 insertions(+)
drivers/net/wireless/ath/regd.h +1 -0
@@ -159,6 +159,7 @@ enum CountryCode {CTRY_ROMANIA =642 ,CTRY_RUSSIA =643 ,CTRY_SAUDI_ARABIA =682 , +CTRY_SERBIA =688 ,CTRY_SERBIA_MONTENEGRO =891 ,CTRY_SINGAPORE =702 , CTRY_SLOVAKIA = 703,
drivers/net/wireless/ath/regd_common.h +1 -0
@@ -452,6 +452,7 @@ static struct country_code_to_enum_rd al {CTRY_ROMANIA, NULL1_WORLD, "RO"}, {CTRY_RUSSIA, NULL1_WORLD, "RU"}, {CTRY_SAUDI_ARABIA, NULL1_WORLD, "SA"}, + {CTRY_SERBIA, ETSI1_WORLD, "RS"}, {CTRY_SERBIA_MONTENEGRO, ETSI1_WORLD, "CS"}, {CTRY_SINGAPORE, APL6_WORLD, "SG"}, {CTRY_SLOVAKIA, ETSI1_WORLD, "SK"},
Greg Kroah-Hartman
maintainerPATCH 98/246 ath: Add regulatory mapping for Bermuda
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 9c790f2d234f65697e3b0948adbfdf36dbe63dd7 ]
The country code is used by the ath to detect the ISO 3166-1 alpha-2 name and to select the correct conformance test limits (CTL) for a country. If the country isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this country are:
* 2.4GHz: FCC
* 5GHz: FCC
--- drivers/net/wireless/ath/regd.h | 1 + drivers/net/wireless/ath/regd_common.h | 1 + 2 files changed, 2 insertions(+)
drivers/net/wireless/ath/regd.h +1 -0
@@ -74,6 +74,7 @@ enum CountryCode {CTRY_BELARUS =112 ,CTRY_BELGIUM =56 ,CTRY_BELIZE =84 , +CTRY_BERMUDA =60 ,CTRY_BOLIVIA =68 ,CTRY_BOSNIA_HERZ =70 , CTRY_BRAZIL = 76,
drivers/net/wireless/ath/regd_common.h +1 -0
@@ -313,6 +313,7 @@ static struct country_code_to_enum_rd al {CTRY_BELGIUM, ETSI1_WORLD, "BE"}, {CTRY_BELGIUM2, ETSI4_WORLD, "BL"}, {CTRY_BELIZE, APL1_ETSIC, "BZ"}, + {CTRY_BERMUDA, FCC3_FCCA, "BM"}, {CTRY_BOLIVIA, APL1_ETSIC, "BO"}, {CTRY_BOSNIA_HERZ, ETSI1_WORLD, "BA"}, {CTRY_BRAZIL, FCC3_WORLD, "BR"},
Greg Kroah-Hartman
maintainerPATCH 99/246 ath: Add regulatory mapping for Bahamas
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
[ Upstream commit 699e2302c286a14afe7b7394151ce6c4e1790cc1 ]
The country code is used by the ath to detect the ISO 3166-1 alpha-2 name and to select the correct conformance test limits (CTL) for a country. If the country isn't available and it is still programmed in the EEPROM then it will cause an error and stop the initialization with:
Invalid EEPROM contents
The current CTL mappings for this country are:
* 2.4GHz: ETSI
* 5GHz: FCC
--- drivers/net/wireless/ath/regd.h | 1 + drivers/net/wireless/ath/regd_common.h | 1 + 2 files changed, 2 insertions(+)
drivers/net/wireless/ath/regd.h +1 -0
@@ -68,6 +68,7 @@ enum CountryCode {CTRY_AUSTRALIA =36 ,CTRY_AUSTRIA =40 ,CTRY_AZERBAIJAN =31 , +CTRY_BAHAMAS =44 ,CTRY_BAHRAIN =48 ,CTRY_BANGLADESH =50 , CTRY_BARBADOS = 52,
drivers/net/wireless/ath/regd_common.h +1 -0
@@ -306,6 +306,7 @@ static struct country_code_to_enum_rd al {CTRY_AUSTRALIA2, FCC6_WORLD, "AU"}, {CTRY_AUSTRIA, ETSI1_WORLD, "AT"}, {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ"}, + {CTRY_BAHAMAS, FCC3_WORLD, "BS"}, {CTRY_BAHRAIN, APL6_WORLD, "BH"}, {CTRY_BANGLADESH, NULL1_WORLD, "BD"}, {CTRY_BARBADOS, FCC2_WORLD, "BB"},
Greg Kroah-Hartman
maintainerPATCH 105/246 spi: sh-msiof: Fix setting SIRMDR1.SYNCAC to match SITMDR1.SYNCAC
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geert Uytterhoeven <[email protected]>
[ Upstream commit 0921e11e1e12802ae0a3c19cb02e33354ca51967 ]
According to section 59.2.4 MSIOF Receive Mode Register 1 (SIRMDR1) in the R-Car Gen3 datasheet Rev.1.00, the value of the SIRMDR1.SYNCAC bit must match the value of the SITMDR1.SYNCAC bit. However, sh_msiof_spi_setup() changes only the latter.
Fix this by updating the SIRMDR1 register like the SITMDR1 register, taking into account register bits that exist in SITMDR1 only.
--- drivers/spi/spi-sh-msiof.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/spi/spi-sh-msiof.c +4 -2
@@ -555,14 +555,16 @@ static int sh_msiof_spi_setup(struct spi/* Configure native chip select mode/polarity early */ clr =MDR1_SYNCMD_MASK ; - set =MDR1_TRMD |TMDR1_PCON |MDR1_SYNCMD_SPI ; + set =MDR1_SYNCMD_SPI ;if (spi->mode &SPI_CS_HIGH ) clr |=BIT (MDR1_SYNCAC_SHIFT );else set |=BIT (MDR1_SYNCAC_SHIFT );pm_runtime_get_sync (&p->pdev->dev); tmp =sh_msiof_read (p,TMDR1 ) & ~clr; -sh_msiof_write (p,TMDR1 , tmp | set); +sh_msiof_write (p,TMDR1 , tmp | set |MDR1_TRMD |TMDR1_PCON ); + tmp =sh_msiof_read (p,RMDR1 ) & ~clr; +sh_msiof_write (p,RMDR1 , tmp | set);pm_runtime_put (&p->pdev->dev); p->native_cs_high = spi->mode &SPI_CS_HIGH ; p->native_cs_inited = true;
Greg Kroah-Hartman
maintainerPATCH 106/246 powerpc/8xx: fix invalid register expression in head_8xx.S
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe Leroy <[email protected]>
[ Upstream commit e4ccb1dae6bdef228d729c076c38161ef6e7ca34 ]
New binutils generate the following warning
AS arch/powerpc/kernel/head_8xx.oarch/powerpc/kernel/head_8xx.S: Assembler messages:arch/powerpc/kernel/head_8xx.S:916: Warning: invalid register expression
This patch fixes it.
--- arch/powerpc/kernel/head_8xx.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/kernel/head_8xx.S +1 -1
@@ -958,7 +958,7 @@ start_here: tovirt(r6,r6) lis r5, abatron_pteptrs@h ori r5, r5, abatron_pteptrs@l - stw r5, 0xf0(r0) /* Must match your Abatron config file */ + stw r5, 0xf0(0) /* Must match your Abatron config file */ tophys(r5,r5) stw r6, 0(r5)
Greg Kroah-Hartman
maintainerPATCH 107/246 pinctrl: at91-pio4: add missing of_node_put
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Julia Lawall <[email protected]>
[ Upstream commit 21816364715f508c10da1e087e352bc1e326614f ]
The device node iterators perform an of_node_get on each iteration, so a jump out of the loop requires an of_node_put.
The semantic patch that fixes this problem is as follows
(http://coccinelle.lip6.fr):
// <smpl>
@@
expression root,e;
local idexpression child;
iterator name for_each_child_of_node;
@@
for_each_child_of_node(root, child) {
... when != of_node_put(child)
when != e = child
+ of_node_put(child);
? break;
...
}
... when != child
// </smpl>
--- drivers/pinctrl/pinctrl-at91-pio4.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/pinctrl/pinctrl-at91-pio4.c +3 -1
@@ -576,8 +576,10 @@ static int atmel_pctl_dt_node_to_map(strfor_each_child_of_node (np_config, np) { ret =atmel_pctl_dt_subnode_to_map (pctldev, np, map, &reserved_maps, num_maps); -if (ret <0 ) +if (ret <0 ) { +of_node_put (np);break ; + } } }
Greg Kroah-Hartman
maintainerPATCH 108/246 bpf: powerpc64: pad function address loads with NOPs
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sandipan Das <[email protected]>
[ Upstream commit 4ea69b2fd623dee2bbc77d3b6b7d8c0924e2026a ]
For multi-function programs, loading the address of a callee function to a register requires emitting instructions whose count varies from one to five depending on the nature of the address.
Since we come to know of the callee's address only before the extra pass, the number of instructions required to load this address may vary from what was previously generated. This can make the JITed image grow or shrink.
To avoid this, we should generate a constant five-instruction when loading function addresses by padding the optimized load sequence with NOPs.
--- arch/powerpc/net/bpf_jit_comp64.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-)
arch/powerpc/net/bpf_jit_comp64.c +23 -11
@@ -203,25 +203,37 @@ static void bpf_jit_build_epilogue(u32 *static void bpf_jit_emit_func_call (u32 *image,struct codegen_context *ctx,u64 func) { +unsigned int i, ctx_idx = ctx->idx; + +/* Load function address into r12 */ +PPC_LI64 (12 , func); + +/* For bpf-to-bpf function calls, the callee's address is unknown +* until the last extra pass. As seen above, we use PPC_LI64() to +* load the callee's address, but this may optimize the number of +* instructions required based on the nature of the address. +* +* Since we don't want the number of instructions emitted to change, +* we pad the optimized PPC_LI64() call with NOPs to guarantee that +* we always have a five-instruction sequence, which is the maximum +* that PPC_LI64() can emit. +*/ +for (i = ctx->idx - ctx_idx; i <5 ; i++) +PPC_NOP (); +#ifdef PPC64_ELF_ABI_v1 -/* func points to the function descriptor */ -PPC_LI64 (b2p[TMP_REG_2 ], func); -/* Load actual entry point from function descriptor */ -PPC_BPF_LL (b2p[TMP_REG_1 ], b2p[TMP_REG_2 ],0 ); -/* ... and move it to LR */ -PPC_MTLR (b2p[TMP_REG_1 ]);/* * Load TOC from function descriptor at offset 8. * We can clobber r2 since we get called through a * function pointer (so caller will save/restore r2) * and since we don't use a TOC ourself. */ -PPC_BPF_LL (2 , b2p[TMP_REG_2 ],8 ); -#else -/* We can clobber r12 */ -PPC_FUNC_ADDR (12 , func); -PPC_MTLR (12 ); +PPC_BPF_LL (2 ,12 ,8 ); +/* Load actual entry point from function descriptor */ +PPC_BPF_LL (12 ,12 ,0 );#endif + +PPC_MTLR (12 );PPC_BLRL (); }
Greg Kroah-Hartman
maintainerPATCH 109/246 PCI: pciehp: Request control of native hotplug only if supported
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mika Westerberg <[email protected]>
[ Upstream commit 408fec36a1ab3d14273c2116b449ef1e9be3cb8b ]
Currently we request control of native PCIe hotplug unconditionally. Native PCIe hotplug events are handled by the pciehp driver, and if it is not enabled those events will be lost.
Request control of native PCIe hotplug only if the pciehp driver is enabled, so we will actually handle native PCIe hotplug events.
--- drivers/acpi/pci_root.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/acpi/pci_root.c +3 -1
@@ -472,9 +472,11 @@ static void negotiate_os_control(struct } control =OSC_PCI_EXPRESS_CAPABILITY_CONTROL - |OSC_PCI_EXPRESS_NATIVE_HP_CONTROL |OSC_PCI_EXPRESS_PME_CONTROL ; +if (IS_ENABLED (CONFIG_HOTPLUG_PCI_PCIE )) + control |=OSC_PCI_EXPRESS_NATIVE_HP_CONTROL ; +if (pci_aer_available ()) {if (aer_acpi_firmware_first ()) dev_info(&device->dev,
Greg Kroah-Hartman
maintainerPATCH 111/246 mwifiex: correct histogram data with appropriate index
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xinming Hu <[email protected]>
[ Upstream commit 30bfce0b63fa68c14ae1613eb9d259fa18644074 ]
Correct snr/nr/rssi data index to avoid possible buffer underflow.
--- drivers/net/wireless/marvell/mwifiex/util.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/net/wireless/marvell/mwifiex/util.c +5 -3
@@ -708,12 +708,14 @@ void mwifiex_hist_data_set(struct mwifie s8 nflr) {struct mwifiex_histogram_data *phist_data = priv->hist_data; +s8 nf = -nflr; +s8 rssi = snr - nflr;atomic_inc (&phist_data->num_samples);atomic_inc (&phist_data->rx_rate[rx_rate]); -atomic_inc (&phist_data->snr[snr]); -atomic_inc (&phist_data->noise_flr[128 + nflr]); -atomic_inc (&phist_data->sig_str[nflr - snr]); +atomic_inc (&phist_data->snr[snr +128 ]); +atomic_inc (&phist_data->noise_flr[nf +128 ]); +atomic_inc (&phist_data->sig_str[rssi +128 ]); }/* function to reset histogram data during init/reset */
Greg Kroah-Hartman
maintainerPATCH 112/246 ima: based on policy verify firmware signatures (pre-allocated buffer)
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mimi Zohar <[email protected]>
[ Upstream commit fd90bc559bfba743ae8de87ff23b92a5e4668062 ]
Don't differentiate, for now, between kernel_read_file_id READING_FIRMWARE and READING_FIRMWARE_PREALLOC_BUFFER enumerations.
--- security/integrity/ima/ima_main.c | 1 + 1 file changed, 1 insertion(+)
security/integrity/ima/ima_main.c +1 -0
@@ -379,6 +379,7 @@ int ima_read_file(struct file *file, enustatic int read_idmap[READING_MAX_ID ] = { [READING_FIRMWARE ] =FIRMWARE_CHECK , + [READING_FIRMWARE_PREALLOC_BUFFER ] =FIRMWARE_CHECK , [READING_MODULE ] =MODULE_CHECK , [READING_KEXEC_IMAGE ] =KEXEC_KERNEL_CHECK , [READING_KEXEC_INITRAMFS ] =KEXEC_INITRAMFS_CHECK ,
Greg Kroah-Hartman
maintainerPATCH 113/246 drivers/perf: arm-ccn: dont log to dmesg in event_init
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Rutland <[email protected]>
[ Upstream commit 1898eb61fbc9703efee886d3abec27a388cf28c3 ]
The ARM CCN PMU driver uses dev_warn() to complain about parameters in the user-provided perf_event_attr. This means that under normal operation (e.g. a single invocation of the perf tool), a number of messages warnings may be logged to dmesg.
Tools may issue multiple syscalls to probe for feature support, and multiple applications (from multiple users) can attempt to open events simultaneously, so this is not very helpful, even if a user happens to have access to dmesg. Worse, this can push important information out of the dmesg ring buffer, and can significantly slow down syscall fuzzers, vastly increasing the time it takes to find critical bugs.
Demote the dev_warn() instances to dev_dbg(), as is the case for all other PMU drivers under drivers/perf/. Users who wish to debug PMU event initialisation can enable dynamic debug to receive these messages.
--- drivers/bus/arm-ccn.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
drivers/bus/arm-ccn.c +10 -10
@@ -736,7 +736,7 @@ static int arm_ccn_pmu_event_init(struct ccn =pmu_to_arm_ccn (event->pmu);if (hw->sample_period) { -dev_warn (ccn->dev,"Sampling not supported!\n" ); +dev_dbg (ccn->dev,"Sampling not supported!\n" );return -EOPNOTSUPP ; }
@@ -744,12 +744,12 @@ static int arm_ccn_pmu_event_init(struct event->attr.exclude_kernel || event->attr.exclude_hv || event->attr.exclude_idle || event->attr.exclude_host || event->attr.exclude_guest) { -dev_warn (ccn->dev,"Can't exclude execution levels!\n" ); +dev_dbg (ccn->dev,"Can't exclude execution levels!\n" );return -EINVAL ; }if (event->cpu <0 ) { -dev_warn (ccn->dev,"Can't provide per-task data!\n" ); +dev_dbg (ccn->dev,"Can't provide per-task data!\n" );return -EOPNOTSUPP ; }/*
@@ -771,13 +771,13 @@ static int arm_ccn_pmu_event_init(structswitch (type) {case CCN_TYPE_MN :if (node_xp != ccn->mn_id) { -dev_warn (ccn->dev,"Invalid MN ID %d!\n" , node_xp); +dev_dbg (ccn->dev,"Invalid MN ID %d!\n" , node_xp);return -EINVAL ; }break ;case CCN_TYPE_XP :if (node_xp >= ccn->num_xps) { -dev_warn (ccn->dev,"Invalid XP ID %d!\n" , node_xp); +dev_dbg (ccn->dev,"Invalid XP ID %d!\n" , node_xp);return -EINVAL ; }break ;
@@ -785,11 +785,11 @@ static int arm_ccn_pmu_event_init(structbreak ;default :if (node_xp >= ccn->num_nodes) { -dev_warn (ccn->dev,"Invalid node ID %d!\n" , node_xp); +dev_dbg (ccn->dev,"Invalid node ID %d!\n" , node_xp);return -EINVAL ; }if (!arm_ccn_pmu_type_eq (type, ccn->node[node_xp].type)) { -dev_warn (ccn->dev,"Invalid type 0x%x for node %d!\n" , +dev_dbg (ccn->dev,"Invalid type 0x%x for node %d!\n" , type, node_xp);return -EINVAL ; }
@@ -808,19 +808,19 @@ static int arm_ccn_pmu_event_init(structif (event_id != e->event)continue ;if (e->num_ports && port >= e->num_ports) { -dev_warn (ccn->dev,"Invalid port %d for node/XP %d!\n" , +dev_dbg (ccn->dev,"Invalid port %d for node/XP %d!\n" , port, node_xp);return -EINVAL ; }if (e->num_vcs && vc >= e->num_vcs) { -dev_warn (ccn->dev,"Invalid vc %d for node/XP %d!\n" , +dev_dbg (ccn->dev,"Invalid vc %d for node/XP %d!\n" , vc, node_xp);return -EINVAL ; } valid =1 ; }if (!valid) { -dev_warn (ccn->dev,"Invalid event 0x%x for node/XP %d!\n" , +dev_dbg (ccn->dev,"Invalid event 0x%x for node/XP %d!\n" , event_id, node_xp);return -EINVAL ; }
Greg Kroah-Hartman
maintainerPATCH 114/246 spi: Add missing pm_runtime_put_noidle() after failed get
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tony Lindgren <[email protected]>
[ Upstream commit 7e48e23a1f4a50f93ac1073f1326e0a73829b631 ]
If pm_runtime_get_sync() fails we should call pm_runtime_put_noidle(). This is probably not a critical fix as we should only hit this when things are broken elsewhere.
--- drivers/spi/spi.c | 1 + 1 file changed, 1 insertion(+)
drivers/spi/spi.c +1 -0
@@ -1222,6 +1222,7 @@ static void __spi_pump_messages(struct sif (!was_busy && ctlr->auto_runtime_pm) { ret =pm_runtime_get_sync (ctlr->dev.parent);if (ret <0 ) { +pm_runtime_put_noidle (ctlr->dev.parent);dev_err (&ctlr->dev,"Failed to power device: %d\n" , ret);mutex_unlock (&ctlr->io_mutex);
Greg Kroah-Hartman
maintainerPATCH 115/246 net: hns3: Fix the missing client list node initialization
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xi Wang <[email protected]>
[ Upstream commit 13562d1f5e2fbe2cf33b23a00abca3f71264c4ac ]
This patch fixes the missing initialization of the client list node in the hnae3_register_client() function.
--- drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c +2 -0
@@ -2883,6 +2883,8 @@ static int __init hns3_init_module(void) client.ops = &client_ops; +INIT_LIST_HEAD (&client.node); + ret =hnae3_register_client (&client);if (ret)return ret;
Greg Kroah-Hartman
maintainerPATCH 116/246 fscrypt: use unbound workqueue for decryption
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
[ Upstream commit 36dd26e0c8d42699eeba87431246c07c28075bae ]
Improve fscrypt read performance by switching the decryption workqueue from bound to unbound. With the bound workqueue, when multiple bios completed on the same CPU, they were decrypted on that same CPU. But with the unbound queue, they are now decrypted in parallel on any CPU.
Although fscrypt read performance can be tough to measure due to the many sources of variation, this change is most beneficial when decryption is slow, e.g. on CPUs without AES instructions. For example, I timed tarring up encrypted directories on f2fs. On x86 with AES-NI instructions disabled, the unbound workqueue improved performance by about 25-35%, using 1 to NUM_CPUs jobs with 4 or 8 CPUs available. But with AES-NI enabled, performance was unchanged to within ~2%.
I also did the same test on a quad-core ARM CPU using xts-speck128-neon encryption. There performance was usually about 10% better with the unbound workqueue, bringing it closer to the unencrypted speed.
The unbound workqueue may be worse in some cases due to worse locality, but I think it's still the better default. dm-crypt uses an unbound workqueue by default too, so this change makes fscrypt match.
--- fs/crypto/crypto.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
fs/crypto/crypto.c +10 -1
@@ -446,8 +446,17 @@ fail:*/ static int __init fscrypt_init (void ) { +/* +* Use an unbound workqueue to allow bios to be decrypted in parallel +* even when they happen to complete on the same CPU. This sacrifices +* locality, but it's worthwhile since decryption is CPU-intensive. +* +* Also use a high-priority workqueue to prioritize decryption work, +* which blocks reads from completing, over regular application tasks. +*/ fscrypt_read_workqueue =alloc_workqueue ("fscrypt_read_queue" , -WQ_HIGHPRI ,0 ); +WQ_UNBOUND |WQ_HIGHPRI , +num_online_cpus ());if (!fscrypt_read_workqueue) goto fail;
Greg Kroah-Hartman
maintainerPATCH 117/246 scsi: ufs: ufshcd: fix possible unclocked register access
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Subhash Jadavani <[email protected]>
[ Upstream commit b334456ec2021b1addc19806990115e69ec4ac32 ]
Vendor specific setup_clocks ops may depend on clocks managed by ufshcd driver so if the vendor specific setup_clocks callback is called when the required clocks are turned off, it results into unclocked register access.
This change make sure that required clocks are enabled before vendor specific setup_clocks callback is called.
--- drivers/scsi/ufs/ufshcd.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-)
drivers/scsi/ufs/ufshcd.c +20 -6
@@ -6761,9 +6761,16 @@ static int __ufshcd_setup_clocks(structif (list_empty (head)) goto out; - ret =ufshcd_vops_setup_clocks (hba, on,PRE_CHANGE ); -if (ret) -return ret; +/* +* vendor specific setup_clocks ops may depend on clocks managed by +* this standard driver hence call the vendor specific setup_clocks +* before disabling the clocks managed here. +*/ +if (!on) { + ret =ufshcd_vops_setup_clocks (hba, on,PRE_CHANGE ); +if (ret) +return ret; + }list_for_each_entry (clki, head, list) {if (!IS_ERR_OR_NULL (clki->clk)) {
@@ -6787,9 +6794,16 @@ static int __ufshcd_setup_clocks(struct } } - ret =ufshcd_vops_setup_clocks (hba, on,POST_CHANGE ); -if (ret) -return ret; +/* +* vendor specific setup_clocks ops may depend on clocks managed by +* this standard driver hence call the vendor specific setup_clocks +* after enabling the clocks managed here. +*/ +if (on) { + ret =ufshcd_vops_setup_clocks (hba, on,POST_CHANGE ); +if (ret) +return ret; + } out:if (ret) {
Greg Kroah-Hartman
maintainerPATCH 118/246 scsi: ufs: fix exception event handling
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maya Erez <[email protected]>
[ Upstream commit 2e3611e9546c2ed4def152a51dfd34e8dddae7a5 ]
The device can set the exception event bit in one of the response UPIU, for example to notify the need for urgent BKOPs operation. In such a case, the host driver calls ufshcd_exception_event_handler to handle this notification. When trying to check the exception event status (for finding the cause for the exception event), the device may be busy with additional SCSI commands handling and may not respond within the 100ms timeout.
To prevent that, we need to block SCSI commands during handling of exception events and allow retransmissions of the query requests, in case of timeout.
--- drivers/scsi/ufs/ufshcd.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/scsi/ufs/ufshcd.c +2 -0
@@ -4947,6 +4947,7 @@ static void ufshcd_exception_event_handl hba = container_of(work, struct ufs_hba, eeh_work);pm_runtime_get_sync (hba->dev); +scsi_block_requests (hba->host); err =ufshcd_get_ee_status (hba, &status);if (err) { dev_err(hba->dev, "%s: failed to get exception status %d\n",
@@ -4960,6 +4961,7 @@ static void ufshcd_exception_event_handlufshcd_bkops_exception_event_handler (hba); out: +scsi_unblock_requests (hba->host);pm_runtime_put_sync (hba->dev);return ; }
Greg Kroah-Hartman
maintainerPATCH 119/246 scsi: zfcp: assert that the ERP lock is held when tracing a recovery trigger
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Remus <[email protected]>
[ Upstream commit 9e156c54ace310ce7fb1cd960e62416947f3d47c ]
Otherwise iterating with list_for_each() over the adapter->erp_ready_head and adapter->erp_running_head lists can lead to an infinite loop. See commit "zfcp: fix infinite iteration on erp_ready_head list".
The run-time check is only performed for debug kernels which have the kernel lock validator enabled. Following is an example of the warning that is reported, if the ERP lock is not held when calling zfcp_dbf_rec_trig():
WARNING: CPU: 0 PID: 604 at drivers/s390/scsi/zfcp_dbf.c:288 zfcp_dbf_rec_trig+0x172/0x188
Modules linked in: ...
CPU: 0 PID: 604 Comm: kworker/u128:3 Not tainted 4.16.0-... #1
Hardware name: IBM 2964 N96 702 (z/VM 6.4.0)
Workqueue: zfcp_q_0.0.1906 zfcp_scsi_rport_work
Krnl PSW : 00000000330fdbf9 00000000367e9728 (zfcp_dbf_rec_trig+0x172/0x188)
R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:3 PM:0 RI:0 EA:3
Krnl GPRS: 00000000c57a5d99 3288200000000000 0000000000000000 000000006cc82740
00000000009d09d6 0000000000000000 00000000000000ff 0000000000000000
0000000000000000 0000000000e1b5fe 000000006de01d38 0000000076130958
000000006cc82548 000000006de01a98 00000000009d09d6 000000006a6d3c80
Krnl Code: 00000000009d0ad2: eb7ff0b80004 lmg %r7,%r15,184(%r15)
00000000009d0ad8: c0f4000d7dd0 brcl 15,b80678
#00000000009d0ade: a7f40001 brc 15,9d0ae0
>00000000009d0ae2: a7f4ff7d brc 15,9d09dc
00000000009d0ae6: e340f0f00004 lg %r4,240(%r15)
00000000009d0aec: eb7ff0b80004 lmg %r7,%r15,184(%r15)
00000000009d0af2: 07f4 bcr 15,%r4
00000000009d0af4: 0707 bcr 0,%r7
Call Trace:
([<00000000009d09d6>] zfcp_dbf_rec_trig+0x66/0x188)
[<00000000009dd740>] zfcp_scsi_rport_work+0x98/0x190
[<0000000000169b34>] process_one_work+0x3d4/0x6f8
[<000000000016a08a>] worker_thread+0x232/0x418
[<000000000017219e>] kthread+0x166/0x178
[<0000000000b815ea>] kernel_thread_starter+0x6/0xc
[<0000000000b815e4>] kernel_thread_starter+0x0/0xc
2 locks held by kworker/u128:3/604:
#0: ((wq_completion)name){+.+.}, at: [<0000000082af1024>] process_one_work+0x1dc/0x6f8
#1: ((work_completion)(&port->rport_work)){+.+.}, at: [<0000000082af1024>] process_one_work+0x1dc/0x6f8
Last Breaking-Event-Address:
[<00000000009d0ade>] zfcp_dbf_rec_trig+0x16e/0x188
---[ end trace b2f4020572e2c124 ]------ drivers/s390/scsi/zfcp_dbf.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/s390/scsi/zfcp_dbf.c +2 -0
@@ -285,6 +285,8 @@ void zfcp_dbf_rec_trig(char *tag, structstruct list_head *entry;unsigned long flags; +lockdep_assert_held (&adapter->erp_lock); +if (unlikely (!debug_level_enabled (dbf->rec, level)))return ;
Greg Kroah-Hartman
maintainerPATCH 120/246 drm/nouveau/fifo/gk104-: poll for runlist update completion
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ben Skeggs <[email protected]>
[ Upstream commit 4f2fc25c0f8bcc8db1b8a7b21e88c3d7f35c5acb ]
Newer HW doesn't appear to send this event, which will cause long delays in runlist updates if they don't complete immediately.
RM doesn't use these events anywhere, and an NVGPU commit message notes that polling is the preferred method even on HW that supports the event.
--- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +4 -4
@@ -155,10 +155,10 @@ gk104_fifo_runlist_commit(struct gk104_f (target << 28));nvkm_wr32 (device,0x002274 , (runl <<20 ) | nr); -if (wait_event_timeout (fifo->runlist[runl].wait, - !(nvkm_rd32 (device,0x002284 + (runl *0x08 )) - &0x00100000 ), -msecs_to_jiffies (2000 )) ==0 ) +if (nvkm_msec (device,2000 , + if (!(nvkm_rd32(device, 0x002284 + (runl * 0x08)) & 0x00100000)) + break; + ) <0 )nvkm_error (subdev,"runlist %d update timeout\n" , runl); unlock:mutex_unlock (&subdev->mutex);
Greg Kroah-Hartman
maintainerPATCH 121/246 Bluetooth: btusb: add ID for LiteOn 04ca:301a
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vic Wei <[email protected]>
[ Upstream commit d666fc5479ad76a1bcbe6476d4997cea714bab2d ]
Contains a QCA6174A chipset, with USB BT. Let's support loading firmware on it.
Quoted 1 line
From usb-devices:
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=04ca ProdID=301a Rev= 0.01
C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
--- drivers/bluetooth/btusb.c | 1 + 1 file changed, 1 insertion(+)
drivers/bluetooth/btusb.c +1 -0
@@ -279,6 +279,7 @@ static const struct usb_device_id blackl { USB_DEVICE(0x04ca, 0x3011), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x04ca, 0x3015), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x04ca, 0x3016), .driver_info = BTUSB_QCA_ROME }, + { USB_DEVICE(0x04ca, 0x301a), .driver_info = BTUSB_QCA_ROME }, /* Broadcom BCM2035 */ { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
Greg Kroah-Hartman
maintainerPATCH 122/246 rtc: tps6586x: fix possible race condition
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexandre Belloni <[email protected]>
[ Upstream commit 63d22063073b0ab46d1e06fe633fb5de8f5c58e1 ]
The probe function is not allowed to fail after the RTC is registered because the following may happen:
CPU0: CPU1:sys_load_module()
do_init_module()
do_one_initcall()
cmos_do_probe()
rtc_device_register()
__register_chrdev()
cdev->owner = struct module*
open("/dev/rtc0")
rtc_device_unregister()
module_put()
free_module()
module_free(mod->module_core)
/* struct module *module is now
freed */
chrdev_open()
spin_lock(cdev_lock)
cdev_get()
try_module_get()
module_is_live()
/* dereferences already
freed struct module* */--- drivers/rtc/rtc-tps6586x.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
drivers/rtc/rtc-tps6586x.c +11 -3
@@ -276,14 +276,15 @@ static int tps6586x_rtc_probe(struct pladevice_init_wakeup (&pdev->dev,1 );platform_set_drvdata (pdev, rtc); - rtc->rtc =devm_rtc_device_register (&pdev->dev,dev_name (&pdev->dev), - &tps6586x_rtc_ops,THIS_MODULE ); + rtc->rtc =devm_rtc_allocate_device (&pdev->dev);if (IS_ERR (rtc->rtc)) { ret =PTR_ERR (rtc->rtc); -dev_err (&pdev->dev,"RTC device register: ret %d\n" , ret); +dev_err (&pdev->dev,"RTC allocate device: ret %d\n" , ret); goto fail_rtc_register; } + rtc->rtc->ops = &tps6586x_rtc_ops; + ret = devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL, tps6586x_rtc_irq, IRQF_ONESHOT,
@@ -294,6 +295,13 @@ static int tps6586x_rtc_probe(struct pla goto fail_rtc_register; }disable_irq (rtc->irq); + + ret =rtc_register_device (rtc->rtc); +if (ret) { +dev_err (&pdev->dev,"RTC device register: ret %d\n" , ret); + goto fail_rtc_register; + } +return 0 ; fail_rtc_register:
Greg Kroah-Hartman
maintainerPATCH 123/246 rtc: vr41xx: fix possible race condition
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexandre Belloni <[email protected]>
[ Upstream commit 9a99247c9c1d1c95c6e8153d013979aac6111c6e ]
The probe function is not allowed to fail after the RTC is registered because the following may happen:
CPU0: CPU1:sys_load_module()
do_init_module()
do_one_initcall()
cmos_do_probe()
rtc_device_register()
__register_chrdev()
cdev->owner = struct module*
open("/dev/rtc0")
rtc_device_unregister()
module_put()
free_module()
module_free(mod->module_core)
/* struct module *module is now
freed */
chrdev_open()
spin_lock(cdev_lock)
cdev_get()
try_module_get()
module_is_live()
/* dereferences already
freed struct module* */--- drivers/rtc/rtc-vr41xx.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/rtc/rtc-vr41xx.c +7 -2
@@ -292,13 +292,14 @@ static int rtc_probe(struct platform_dev goto err_rtc1_iounmap; } - rtc =devm_rtc_device_register (&pdev->dev, rtc_name, &vr41xx_rtc_ops, -THIS_MODULE ); + rtc =devm_rtc_allocate_device (&pdev->dev);if (IS_ERR (rtc)) { retval =PTR_ERR (rtc); goto err_iounmap_all; } + rtc->ops = &vr41xx_rtc_ops; + rtc->max_user_freq =MAX_PERIODIC_RATE ;spin_lock_irq (&rtc_lock);
@@ -340,6 +341,10 @@ static int rtc_probe(struct platform_devdev_info (&pdev->dev,"Real Time Clock of NEC VR4100 series\n" ); + retval =rtc_register_device (rtc); +if (retval) + goto err_iounmap_all; +return 0 ; err_iounmap_all:
Greg Kroah-Hartman
maintainerPATCH 124/246 rtc: tps65910: fix possible race condition
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexandre Belloni <[email protected]>
[ Upstream commit e6000a438e534ee0afd9e83b67f4e23a26dd1067 ]
The IRQ is requested before the struct rtc is allocated and registered, but this struct is used in the IRQ handler. This may lead to a NULL pointer dereference.
Switch to devm_rtc_allocate_device/rtc_register_device to allocate the rtc before requesting the IRQ.
--- drivers/rtc/rtc-tps65910.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/rtc/rtc-tps65910.c +8 -4
@@ -380,6 +380,10 @@ static int tps65910_rtc_probe(struct plaif (!tps_rtc)return -ENOMEM ; + tps_rtc->rtc =devm_rtc_allocate_device (&pdev->dev); +if (IS_ERR (tps_rtc->rtc)) +return PTR_ERR (tps_rtc->rtc); +/* Clear pending interrupts */ ret =regmap_read (tps65910->regmap,TPS65910_RTC_STATUS , &rtc_reg);if (ret <0 )
@@ -421,10 +425,10 @@ static int tps65910_rtc_probe(struct pla tps_rtc->irq = irq;device_set_wakeup_capable (&pdev->dev,1 ); - tps_rtc->rtc =devm_rtc_device_register (&pdev->dev, pdev->name, - &tps65910_rtc_ops,THIS_MODULE ); -if (IS_ERR (tps_rtc->rtc)) { - ret =PTR_ERR (tps_rtc->rtc); + tps_rtc->rtc->ops = &tps65910_rtc_ops; + + ret =rtc_register_device (tps_rtc->rtc); +if (ret) {dev_err (&pdev->dev,"RTC device register: err %d\n" , ret);return ret; }
Greg Kroah-Hartman
maintainerPATCH 125/246 ALSA: emu10k1: Rate-limit error messages about page errors
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
[ Upstream commit 11d42c81036324697d367600bfc16f6dd37636fd ]
The error messages at sanity checks of memory pages tend to repeat too many times once when it hits, and without the rate limit, it may flood and become unreadable. Replace such messages with the *_ratelimited() variant.
Bugzilla: http://bugzilla.opensuse.org/show_bug.cgi?id=1093027
--- sound/pci/emu10k1/memory.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
sound/pci/emu10k1/memory.c +3 -3
@@ -237,13 +237,13 @@ __found_pages:static int is_valid_page (struct snd_emu10k1 *emu,dma_addr_t addr) {if (addr & ~emu->dma_mask) { -dev_err (emu->card->dev, +dev_err_ratelimited (emu->card->dev,"max memory size is 0x%lx (addr = 0x%lx)!!\n" , emu->dma_mask, (unsigned long )addr);return 0 ; }if (addr & (EMUPAGESIZE -1 )) { -dev_err (emu->card->dev,"page is not aligned\n" ); +dev_err_ratelimited (emu->card->dev,"page is not aligned\n" );return 0 ; }return 1 ;
@@ -334,7 +334,7 @@ snd_emu10k1_alloc_pages(struct snd_emu10else addr =snd_pcm_sgbuf_get_addr (substream, ofs);if (!is_valid_page (emu, addr)) { -dev_err (emu->card->dev, +dev_err_ratelimited (emu->card->dev,"emu: failure page = %d\n" , idx);mutex_unlock (&hdr->block_mutex);return NULL ;
Greg Kroah-Hartman
maintainerPATCH 126/246 regulator: pfuze100: add .is_enable() for pfuze100_swb_regulator_ops
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anson Huang <[email protected]>
[ Upstream commit 0b01fd3d40fe6402e5fa3b491ef23109feb1aaa5 ]
If is_enabled() is not defined, regulator core will assume this regulator is already enabled, then it can NOT be really enabled after disabled.
Based on Li Jun's patch from the NXP kernel tree.
--- drivers/regulator/pfuze100-regulator.c | 1 + 1 file changed, 1 insertion(+)
drivers/regulator/pfuze100-regulator.c +1 -0
@@ -158,6 +158,7 @@ static const struct regulator_ops pfuze1static const struct regulator_ops pfuze100_swb_regulator_ops = { .enable = regulator_enable_regmap, .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, .list_voltage = regulator_list_voltage_table, .map_voltage = regulator_map_voltage_ascend, .set_voltage_sel = regulator_set_voltage_sel_regmap,
Greg Kroah-Hartman
maintainerPATCH 127/246 md/raid1: add error handling of read error from FailFast device
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gioh Kim <[email protected]>
[ Upstream commit b33d10624fdc15cdf1495f3f00481afccec76783 ]
Current handle_read_error() function calls fix_read_error() only if md device is RW and rdev does not include FailFast flag. It does not handle a read error from a RW device including FailFast flag.
I am not sure it is intended. But I found that write IO error sets rdev faulty. The md module should handle the read IO error and write IO error equally. So I think read IO error should set rdev faulty.
--- drivers/md/raid1.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/md/raid1.c +2 -0
@@ -2462,6 +2462,8 @@ static void handle_read_error(struct r1cfix_read_error (conf, r1_bio->read_disk, r1_bio->sector, r1_bio->sectors);unfreeze_array (conf); + }else if (mddev->ro ==0 &&test_bit (FailFast, &rdev->flags)) { +md_error (mddev, rdev); }else { r1_bio->bios[r1_bio->read_disk] =IO_BLOCKED ; }
Greg Kroah-Hartman
maintainerPATCH 128/246 md: fix NULL dereference of mddev->pers in remove_and_add_spares()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yufen Yu <[email protected]>
[ Upstream commit c42a0e2675721e1444f56e6132a07b7b1ec169ac ]
We met NULL pointer BUG as follow:
[ 151.760358] BUG: unable to handle kernel NULL pointer dereference at 0000000000000060 [ 151.761340] PGD 80000001011eb067 P4D 80000001011eb067 PUD 1011ea067 PMD 0 [ 151.762039] Oops: 0000 [#1] SMP PTI [ 151.762406] Modules linked in: [ 151.762723] CPU: 2 PID: 3561 Comm: mdadm-test Kdump: loaded Not tainted 4.17.0-rc1+ #238 [ 151.763542] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1.fc26 04/01/2014 [ 151.764432] RIP: 0010:remove_and_add_spares.part.56+0x13c/0x3a0 [ 151.765061] RSP: 0018:ffffc90001d7fcd8 EFLAGS: 00010246 [ 151.765590] RAX: 0000000000000000 RBX: ffff88013601d600 RCX: 0000000000000000 [ 151.766306] RDX: 0000000000000000 RSI: ffff88013601d600 RDI: ffff880136187000 [ 151.767014] RBP: ffff880136187018 R08: 0000000000000003 R09: 0000000000000051 [ 151.767728] R10: ffffc90001d7fed8 R11: 0000000000000000 R12: ffff88013601d600 [ 151.768447] R13: ffff8801298b1300 R14: ffff880136187000 R15: 0000000000000000 [ 151.769160] FS: 00007f2624276700(0000) GS:ffff88013ae80000(0000) knlGS:0000000000000000 [ 151.769971] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 151.770554] CR2: 0000000000000060 CR3: 0000000111aac000 CR4: 00000000000006e0 [ 151.771272] Call Trace: [ 151.771542] md_ioctl+0x1df2/0x1e10 [ 151.771906] ? __switch_to+0x129/0x440 [ 151.772295] ? __schedule+0x244/0x850 [ 151.772672] blkdev_ioctl+0x4bd/0x970 [ 151.773048] block_ioctl+0x39/0x40 [ 151.773402] do_vfs_ioctl+0xa4/0x610 [ 151.773770] ? dput.part.23+0x87/0x100 [ 151.774151] ksys_ioctl+0x70/0x80 [ 151.774493] __x64_sys_ioctl+0x16/0x20 [ 151.774877] do_syscall_64+0x5b/0x180 [ 151.775258] entry_SYSCALL_64_after_hwframe+0x44/0xa9
For raid6, when two disk of the array are offline, two spare disks can be added into the array. Before spare disks recovery completing, system reboot and mdadm thinks it is ok to restart the degraded array by md_ioctl(). Since disks in raid6 is not only_parity(), raid5_run() will abort, when there is no PPL feature or not setting 'start_dirty_degraded' parameter. Therefore, mddev->pers is NULL.
But, mddev->raid_disks has been set and it will not be cleared when raid5_run abort. md_ioctl() can execute cmd 'HOT_REMOVE_DISK' to remove a disk by mdadm, which will cause NULL pointer dereference in remove_and_add_spares() finally.
--- drivers/md/md.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/md/md.c +3 -0
@@ -6498,6 +6498,9 @@ static int hot_remove_disk(struct mddevchar b[BDEVNAME_SIZE ];struct md_rdev *rdev; +if (!mddev->pers) +return -ENODEV ; + rdev =find_rdev (mddev, dev);if (!rdev)return -ENXIO ;
Greg Kroah-Hartman
maintainerPATCH 129/246 ixgbevf: fix MAC address changes through ixgbevf_set_mac()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Emil Tantilov <[email protected]>
[ Upstream commit 6e7d0ba1e59b1a306761a731e67634c0f2efea2a ]
Set hw->mac.perm_addr in ixgbevf_set_mac() in order to avoid losing the custom MAC on reset. This can happen in the following case:
Quoted 2 lines
ip link set $vf address $mac
ethtool -r $vf
--- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +1 -0
@@ -3737,6 +3737,7 @@ static int ixgbevf_set_mac(struct net_dereturn -EPERM ;ether_addr_copy (hw->mac.addr, addr->sa_data); +ether_addr_copy (hw->mac.perm_addr, addr->sa_data);ether_addr_copy (netdev->dev_addr, addr->sa_data);return 0 ;
Greg Kroah-Hartman
maintainerPATCH 130/246 media: smiapp: fix timeout checking in smiapp_read_nvm
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
[ Upstream commit 7a2148dfda8001c983f0effd9afd8a7fa58e99c4 ]
The current code decrements the timeout counter i and the end of each loop i is incremented, so the check for timeout will always be false and hence the timeout mechanism is just a dead code path. Potentially, if the RD_READY bit is not set, we could end up in an infinite loop.
Fix this so the timeout starts from 1000 and decrements to zero, if at the end of the loop i is zero we have a timeout condition.
Detected by CoverityScan, CID#1324008 ("Logically dead code")
--- drivers/media/i2c/smiapp/smiapp-core.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
drivers/media/i2c/smiapp/smiapp-core.c +5 -6
@@ -1001,7 +1001,7 @@ static int smiapp_read_nvm(struct smiappif (rval) goto out; -for (i =0 ; i <1000 ; i++) { +for (i =1000 ; i >0 ; i--) { rval =smiapp_read ( sensor,SMIAPP_REG_U8_DATA_TRANSFER_IF_1_STATUS , &s);
@@ -1012,11 +1012,10 @@ static int smiapp_read_nvm(struct smiappif (s &SMIAPP_DATA_TRANSFER_IF_1_STATUS_RD_READY )break ; -if (--i ==0 ) { - rval = -ETIMEDOUT ; - goto out; - } - + } +if (!i) { + rval = -ETIMEDOUT ; + goto out; }for (i =0 ; i <SMIAPP_NVM_PAGE_SIZE ; i++) {
Greg Kroah-Hartman
maintainerPATCH 131/246 net: ethernet: ti: cpsw-phy-sel: check bus_find_device() ret value
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Grygorii Strashko <[email protected]>
[ Upstream commit c6213eb1aee308e67377fd1890d84f7284caf531 ]
This fixes klockworks warnings: Pointer 'dev' returned from call to function 'bus_find_device' at line 179 may be NULL and will be dereferenced at line 181.
cpsw-phy-sel.c:179: 'dev' is assigned the return value from function 'bus_find_device'. bus.c:342: 'bus_find_device' explicitly returns a NULL value. cpsw-phy-sel.c:181: 'dev' is dereferenced by passing argument 1 to function 'dev_get_drvdata'. device.h:1024: 'dev' is passed to function 'dev_get_drvdata'.
device.h:1026: 'dev' is explicitly dereferenced.
--- drivers/net/ethernet/ti/cpsw-phy-sel.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/net/ethernet/ti/cpsw-phy-sel.c +7 -1
@@ -177,12 +177,18 @@ void cpsw_phy_sel(struct device *dev, ph } dev =bus_find_device (&platform_bus_type,NULL , node, match); -of_node_put (node); +if (!dev) { +dev_err (dev,"unable to find platform device for %pOF\n" , node); + goto out; + } + priv =dev_get_drvdata (dev); priv->cpsw_phy_sel (priv, phy_mode, slave);put_device (dev); +out: +of_node_put (node); }EXPORT_SYMBOL_GPL (cpsw_phy_sel);
Greg Kroah-Hartman
maintainerPATCH 132/246 ALSA: usb-audio: Apply rate limit to warning messages in URB complete callback
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
[ Upstream commit 377a879d9832f4ba69bd6a1fc996bb4181b1e504 ]
retire_capture_urb() may print warning messages when the given URB doesn't align, and this may flood the system log easily. Put the rate limit to the message for avoiding it.
Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=1093485
--- sound/usb/pcm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/usb/pcm.c +1 -1
@@ -1311,7 +1311,7 @@ static void retire_capture_urb(struct snif (bytes % (runtime->sample_bits >>3 ) !=0 ) {int oldbytes = bytes; bytes = frames * stride; -dev_warn (&subs->dev->dev, +dev_warn_ratelimited (&subs->dev->dev,"Corrected urb data len. %d->%d\n" , oldbytes, bytes); }
Greg Kroah-Hartman
maintainerPATCH 134/246 arm64: cmpwait: Clear event register before arming exclusive monitor
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Will Deacon <[email protected]>
[ Upstream commit 1cfc63b5ae60fe7e01773f38132f98d8b13a99a0 ]
When waiting for a cacheline to change state in cmpwait, we may immediately wake-up the first time around the outer loop if the event register was already set (for example, because of the event stream).
Avoid these spurious wakeups by explicitly clearing the event register before loading the cacheline and setting the exclusive monitor.
--- arch/arm64/include/asm/cmpxchg.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/arm64/include/asm/cmpxchg.h +3 -1
@@ -229,7 +229,9 @@ static inline void __cmpwait_case_##nameunsigned long tmp; \ \ asm volatile( \ - " ldxr" #sz "\t%" #w "[tmp], %[v]\n" \ + " sevl\n" \ + " wfe\n" \ + " ldxr" #sz "\t%" #w "[tmp], %[v]\n" \ " eor %" #w "[tmp], %" #w "[tmp], %" #w "[val]\n" \ " cbnz %" #w "[tmp], 1f\n" \ " wfe\n" \
Greg Kroah-Hartman
maintainerPATCH 135/246 HID: hid-plantronics: Re-resend Update to map button for PTT products
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Terry Junge <[email protected]>
[ Upstream commit 37e376df5f4993677c33968a0c19b0c5acbf1108 ]
Add a mapping for Push-To-Talk joystick trigger button.
Tested on ChromeBox/ChromeBook with various Plantronics devices.
--- drivers/hid/hid-plantronics.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/hid/hid-plantronics.c +5 -1
@@ -2,7 +2,7 @@* Plantronics USB HID Driver * * Copyright (c) 2014 JD Cole <[email protected]> -* Copyright (c) 2015 Terry Junge <[email protected]> +* Copyright (c) 2015-2018 Terry Junge <[email protected]> */ /*
@@ -48,6 +48,10 @@ static int plantronics_input_mapping(strunsigned short mapped_key;unsigned long plt_type = (unsigned long )hid_get_drvdata (hdev); +/* special case for PTT products */ +if (field->application ==HID_GD_JOYSTICK ) + goto defaulted; +/* handle volume up/down mapping */ /* non-standard types or multi-HID interfaces - plt_type is PID */ if (!(plt_type &HID_USAGE_PAGE )) {
Greg Kroah-Hartman
maintainerPATCH 136/246 arm64: dts: renesas: salvator-common: use audio-graph-card for Sound
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuninori Morimoto <[email protected]>
[ Upstream commit 06a574c7ef69bd0bd26ed08e35967acb76622ab3 ]
Current Sound is using simple-audio-card which can't support HDMI. To use HDMI sound, we need to use audio-graph-card. But, one note is that r8a7795 has 2 HDMI ports, but r8a7796 has 1. Because of this mismatch, supporting HDMI on salvator-common is impossible.
Thus, this patch exchange sound card to audio-graph-card and keep supporting ak4613 as 1st sound node.
r8a7795/r8a7796 salvator-x{s} need to add HDMI sound individually.
--- arch/arm64/boot/dts/renesas/salvator-common.dtsi | 38 +++++++++++++---------- 1 file changed, 22 insertions(+), 16 deletions(-)
arch/arm64/boot/dts/renesas/salvator-common.dtsi +22 -16
@@ -93,20 +93,12 @@ regulator-always-on; }; - rsnd_ak4613: sound { - compatible = "simple-audio-card"; + sound_card: sound { + compatible = "audio-graph-card"; - simple-audio-card,format = "left_j"; - simple-audio-card,bitclock-master = <&sndcpu>; - simple-audio-card,frame-master = <&sndcpu>; + label = "rcar-sound"; - sndcpu: simple-audio-card,cpu { - sound-dai = <&rcar_sound>; - }; - - sndcodec: simple-audio-card,codec { - sound-dai = <&ak4613>; - }; + dais = <&rsnd_port0>; }; vbus0_usb2: regulator-vbus0-usb2 {
@@ -320,6 +312,12 @@ asahi-kasei,out4-single-end; asahi-kasei,out5-single-end; asahi-kasei,out6-single-end; + + port { + ak4613_endpoint: endpoint { + remote-endpoint = <&rsnd_endpoint0>; + }; + }; }; cs2000: clk_multiplier@4f {
@@ -538,10 +536,18 @@ <&audio_clk_c>, <&cpg CPG_CORE CPG_AUDIO_CLK_I>; - rcar_sound,dai { - dai0 { - playback = <&ssi0 &src0 &dvc0>; - capture = <&ssi1 &src1 &dvc1>; + ports { + rsnd_port0: port@0 { + rsnd_endpoint0: endpoint { + remote-endpoint = <&ak4613_endpoint>; + + dai-format = "left_j"; + bitclock-master = <&rsnd_endpoint0>; + frame-master = <&rsnd_endpoint0>; + + playback = <&ssi0 &src0 &dvc0>; + capture = <&ssi1 &src1 &dvc1>; + }; }; }; };
Greg Kroah-Hartman
maintainerPATCH 137/246 drm/radeon: fix mode_valids return type
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luc Van Oostenryck <[email protected]>
[ Upstream commit 7a47f20eb1fb8fa8d7a8fe3a4fd8c721f04c2174 ]
The method struct drm_connector_helper_funcs::mode_valid is defined as returning an 'enum drm_mode_status' but the driver implementation for this method uses an 'int' for it.
Fix this by using 'enum drm_mode_status' in the driver too.
--- drivers/gpu/drm/radeon/radeon_connectors.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/gpu/drm/radeon/radeon_connectors.c +5 -5
@@ -853,7 +853,7 @@ static int radeon_lvds_get_modes(structreturn ret; } -static int radeon_lvds_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_lvds_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_encoder *encoder =radeon_best_single_encoder (connector);
@@ -1013,7 +1013,7 @@ static int radeon_vga_get_modes(struct dreturn ret; } -static int radeon_vga_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_vga_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_device *dev = connector->dev;
@@ -1157,7 +1157,7 @@ static int radeon_tv_get_modes(struct drreturn 1 ; } -static int radeon_tv_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_tv_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {if ((mode->hdisplay >1024 ) || (mode->vdisplay >768 ))
@@ -1499,7 +1499,7 @@ static void radeon_dvi_force(struct drm_ radeon_connector->use_digital = true; } -static int radeon_dvi_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_dvi_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_device *dev = connector->dev;
@@ -1801,7 +1801,7 @@ out:return ret; } -static int radeon_dp_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_dp_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_device *dev = connector->dev;
Greg Kroah-Hartman
maintainerPATCH 140/246 HID: i2c-hid: check if device is there before really probing
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Torokhov <[email protected]>
[ Upstream commit b3a81b6c4fc6730ac49e20d789a93c0faabafc98 ]
On many Chromebooks touch devices are multi-sourced; the components are electrically compatible and one can be freely swapped for another without changing the OS image or firmware.
To avoid bunch of scary messages when device is not actually present in the system let's try testing basic communication with it and if there is no response terminate probe early with -ENXIO.
--- drivers/hid/i2c-hid/i2c-hid.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/hid/i2c-hid/i2c-hid.c +8 -0
@@ -1036,6 +1036,14 @@ static int i2c_hid_probe(struct i2c_cliepm_runtime_enable (&client->dev);device_enable_async_suspend (&client->dev); +/* Make sure there is something at this address */ + ret =i2c_smbus_read_byte (client); +if (ret <0 ) { +dev_dbg (&client->dev,"nothing at this address: %d\n" , ret); + ret = -ENXIO ; + goto err_pm; + } + ret =i2c_hid_fetch_hid_descriptor (ihid);if (ret <0 ) goto err_pm;
Greg Kroah-Hartman
maintainerPATCH 141/246 EDAC, altera: Fix ARM64 build warning
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thor Thayer <[email protected]>
[ Upstream commit 9ef20753e044f7468c4113e5aecd785419b0b3cc ]
The kbuild test robot reported the following warning:
drivers/edac/altera_edac.c: In function 'ocram_free_mem':
drivers/edac/altera_edac.c:1410:42: warning: cast from pointer to integer
of different size [-Wpointer-to-int-cast]
gen_pool_free((struct gen_pool *)other, (u32)p, size);
^After adding support for ARM64 architectures, the unsigned long parameter is 64 bits and causes a build warning on 64-bit configs. Fix by casting to the correct size (unsigned long) instead of u32.
--- drivers/edac/altera_edac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/edac/altera_edac.c +1 -1
@@ -1106,7 +1106,7 @@ static void *ocram_alloc_mem(size_t sizestatic void ocram_free_mem (void *p,size_t size,void *other) { -gen_pool_free ((struct gen_pool *)other, (u32 )p, size); +gen_pool_free ((struct gen_pool *)other, (unsigned long )p, size); }static const struct edac_device_prv_data ocramecc_data = {
Greg Kroah-Hartman
maintainerPATCH 142/246 ARM: dts: stih407-pinctrl: Fix complain about IRQ_TYPE_NONE usage
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Patrice Chotard <[email protected]>
[ Upstream commit e95b8e718f9bd2386a29639dd21c633b4951dc21 ]
Since commit 83a86fbb5b56 ("irqchip/gic: Loudly complain about the use of IRQ_TYPE_NONE") kernel is complaining about the IRQ_TYPE_NONE usage which shouldn't
be used.
Use IRQ_TYPE_LEVEL_HIGH instead.
--- arch/arm/boot/dts/stih407-pinctrl.dtsi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
arch/arm/boot/dts/stih407-pinctrl.dtsi +5 -5
@@ -52,7 +52,7 @@ st,syscfg = <&syscfg_sbc>; reg = <0x0961f080 0x4>; reg-names = "irqmux"; - interrupts = <GIC_SPI 188 IRQ_TYPE_NONE>; + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "irqmux"; ranges = <0 0x09610000 0x6000>;
@@ -376,7 +376,7 @@ st,syscfg = <&syscfg_front>; reg = <0x0920f080 0x4>; reg-names = "irqmux"; - interrupts = <GIC_SPI 189 IRQ_TYPE_NONE>; + interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "irqmux"; ranges = <0 0x09200000 0x10000>;
@@ -936,7 +936,7 @@ st,syscfg = <&syscfg_front>; reg = <0x0921f080 0x4>; reg-names = "irqmux"; - interrupts = <GIC_SPI 190 IRQ_TYPE_NONE>; + interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "irqmux"; ranges = <0 0x09210000 0x10000>;
@@ -969,7 +969,7 @@ st,syscfg = <&syscfg_rear>; reg = <0x0922f080 0x4>; reg-names = "irqmux"; - interrupts = <GIC_SPI 191 IRQ_TYPE_NONE>; + interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "irqmux"; ranges = <0 0x09220000 0x6000>;
@@ -1164,7 +1164,7 @@ st,syscfg = <&syscfg_flash>; reg = <0x0923f080 0x4>; reg-names = "irqmux"; - interrupts = <GIC_SPI 192 IRQ_TYPE_NONE>; + interrupts = <GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "irqmux"; ranges = <0 0x09230000 0x3000>;
Greg Kroah-Hartman
maintainerPATCH 143/246 ARM: dts: emev2: Add missing interrupt-affinity to PMU node
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geert Uytterhoeven <[email protected]>
[ Upstream commit 7207b94754b6f503b278b5b200faaf662ffa1da8 ]
The PMU node references two interrupts, but lacks the interrupt-affinity property, which is required in that case:
hw perfevents: no interrupt-affinity property for /pmu, guessing.
Add the missing property to fix this.
--- arch/arm/boot/dts/emev2.dtsi | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
arch/arm/boot/dts/emev2.dtsi +3 -2
@@ -31,13 +31,13 @@ #address-cells = <1>; #size-cells = <0>; - cpu@0 { + cpu0: cpu@0 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0>; clock-frequency = <533000000>; }; - cpu@1 { + cpu1: cpu@1 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <1>;
@@ -57,6 +57,7 @@ compatible = "arm,cortex-a9-pmu"; interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; + interrupt-affinity = <&cpu0>, <&cpu1>; }; clocks@e0110000 {
Greg Kroah-Hartman
maintainerPATCH 144/246 ARM: dts: sh73a0: Add missing interrupt-affinity to PMU node
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geert Uytterhoeven <[email protected]>
[ Upstream commit 57a66497e1b7486609250a482f05935eae5035e9 ]
The PMU node references two interrupts, but lacks the interrupt-affinity property, which is required in that case:
hw perfevents: no interrupt-affinity property for /pmu, guessing.
Add the missing property to fix this.
--- arch/arm/boot/dts/sh73a0.dtsi | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
arch/arm/boot/dts/sh73a0.dtsi +3 -2
@@ -22,7 +22,7 @@ #address-cells = <1>; #size-cells = <0>; - cpu@0 { + cpu0: cpu@0 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0>;
@@ -30,7 +30,7 @@ power-domains = <&pd_a2sl>; next-level-cache = <&L2>; }; - cpu@1 { + cpu1: cpu@1 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <1>;
@@ -89,6 +89,7 @@ compatible = "arm,cortex-a9-pmu"; interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; + interrupt-affinity = <&cpu0>, <&cpu1>; }; cmt1: timer@e6138000 {
Greg Kroah-Hartman
maintainerPATCH 145/246 nvmem: properly handle returned value nvmem_reg_read
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathieu Malaterre <[email protected]>
[ Upstream commit 50808bfcc14b854775a9f1d0abe3dac2babcf5c3 ]
Function nvmem_reg_read can return a non zero value indicating an error. This returned value must be read and error propagated to nvmem_cell_prepare_write_buffer. Silence the following gcc warning (W=1):
drivers/nvmem/core.c:1093:9: warning: variable 'rc' set but
not used [-Wunused-but-set-variable]
--- drivers/nvmem/core.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/nvmem/core.c +7 -0
@@ -1049,6 +1049,8 @@ static inline void *nvmem_cell_prepare_w/* setup the first byte with lsb bits from nvmem */ rc =nvmem_reg_read (nvmem, cell->offset, &v,1 ); +if (rc) + goto err; *b++ |=GENMASK (bit_offset -1 ,0 ) & v;/* setup rest of the byte if any */
@@ -1067,11 +1069,16 @@ static inline void *nvmem_cell_prepare_w/* setup the last byte with msb bits from nvmem */ rc =nvmem_reg_read (nvmem, cell->offset + cell->bytes -1 , &v,1 ); +if (rc) + goto err; *p |=GENMASK (7 , (nbits + bit_offset) %BITS_PER_BYTE ) & v; }return buf; +err: +kfree (buf); +return ERR_PTR (rc); }/**
Greg Kroah-Hartman
maintainerPATCH 146/246 i40e: free the skb after clearing the bitlock
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jacob Keller <[email protected]>
[ Upstream commit c79756cb5f084736b138da9319a02f7c72644548 ]
In commit bbc4e7d273b5 ("i40e: fix race condition with PTP_TX_IN_PROGRESS bits") we modified the code which handles Tx timestamps so that we would clear the progress bit as soon as possible.
A later commit 0bc0706b46cd ("i40e: check for Tx timestamp timeouts during watchdog") introduced similar code for detecting and handling cleanup of a blocked Tx timestamp. This code did not use the same pattern for cleaning up the skb.
Update this code to wait to free the skb until after the bit lock is free, by first setting the ptp_tx_skb to NULL and clearing the lock.
--- drivers/net/ethernet/intel/i40e/i40e_ptp.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/net/ethernet/intel/i40e/i40e_ptp.c +6 -1
@@ -337,6 +337,8 @@ void i40e_ptp_rx_hang(struct i40e_pf *pf**/ void i40e_ptp_tx_hang (struct i40e_pf *pf) { +struct sk_buff *skb; +if (!(pf->flags &I40E_FLAG_PTP ) || !pf->ptp_tx)return ;
@@ -349,9 +351,12 @@ void i40e_ptp_tx_hang(struct i40e_pf *pf* within a second it is reasonable to assume that we never will. */ if (time_is_before_jiffies (pf->ptp_tx_start +HZ )) { -dev_kfree_skb_any (pf->ptp_tx_skb); + skb = pf->ptp_tx_skb; pf->ptp_tx_skb =NULL ;clear_bit_unlock (__I40E_PTP_TX_IN_PROGRESS, pf->state); + +/* Free the skb after we clear the bitlock */ +dev_kfree_skb_any (skb); pf->tx_hwtstamp_timeouts++; } }
Greg Kroah-Hartman
maintainerPATCH 147/246 tty: Fix data race in tty_insert_flip_string_fixed_flag
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: DaeRyong Jeong <[email protected]>
[ Upstream commit b6da31b2c07c46f2dcad1d86caa835227a16d9ff ]
Unlike normal serials, in pty layer, there is no guarantee that multiple threads don't insert input characters at the same time. If it is happened, tty_insert_flip_string_fixed_flag can be executed concurrently. This can lead slab out-of-bounds write in tty_insert_flip_string_fixed_flag.
Call sequences are as follows.
CPU0 CPU1 n_tty_ioctl_helper n_tty_ioctl_helper __start_tty tty_send_xchar tty_wakeup pty_write n_hdlc_tty_wakeup tty_insert_flip_string n_hdlc_send_frames tty_insert_flip_string_fixed_flag
pty_writetty_insert_flip_stringtty_insert_flip_string_fixed_flag
To fix the race, acquire port->lock in pty_write() before it inserts input characters to tty buffer. It prevents multiple threads from inserting input characters concurrently.
The crash log is as follows:
BUG: KASAN: slab-out-of-bounds in tty_insert_flip_string_fixed_flag+0xb5/ 0x130 drivers/tty/tty_buffer.c:316 at addr ffff880114fcc121 Write of size 1792 by task syz-executor0/30017 CPU: 1 PID: 30017 Comm: syz-executor0 Not tainted 4.8.0 #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
BIOS rel-1.8.2-0-g33fbe13 by qemu-project.org 04/01/2014
0000000000000000 ffff88011638f888 ffffffff81694cc3 ffff88007d802140 ffff880114fcb300 ffff880114fcc300 ffff880114fcb300 ffff88011638f8b0 ffffffff8130075c ffff88011638f940 ffff88007d802140 ffff880194fcc121
Call Trace: __dump_stack lib/dump_stack.c:15 [inline] dump_stack+0xb3/0x110 lib/dump_stack.c:51 kasan_object_err+0x1c/0x70 mm/kasan/report.c:156 print_address_description mm/kasan/report.c:194 [inline] kasan_report_error+0x1f7/0x4e0 mm/kasan/report.c:283 kasan_report+0x36/0x40 mm/kasan/report.c:303 check_memory_region_inline mm/kasan/kasan.c:292 [inline] check_memory_region+0x13e/0x1a0 mm/kasan/kasan.c:299 memcpy+0x37/0x50 mm/kasan/kasan.c:335 tty_insert_flip_string_fixed_flag+0xb5/0x130 drivers/tty/tty_buffer.c:316 tty_insert_flip_string include/linux/tty_flip.h:35 [inline] pty_write+0x7f/0xc0 drivers/tty/pty.c:115 n_hdlc_send_frames+0x1d4/0x3b0 drivers/tty/n_hdlc.c:419 n_hdlc_tty_wakeup+0x73/0xa0 drivers/tty/n_hdlc.c:496 tty_wakeup+0x92/0xb0 drivers/tty/tty_io.c:601 __start_tty.part.26+0x66/0x70 drivers/tty/tty_io.c:1018 __start_tty+0x34/0x40 drivers/tty/tty_io.c:1013 n_tty_ioctl_helper+0x146/0x1e0 drivers/tty/tty_ioctl.c:1138 n_hdlc_tty_ioctl+0xb3/0x2b0 drivers/tty/n_hdlc.c:794 tty_ioctl+0xa85/0x16d0 drivers/tty/tty_io.c:2992 vfs_ioctl fs/ioctl.c:43 [inline] do_vfs_ioctl+0x13e/0xba0 fs/ioctl.c:679 SYSC_ioctl fs/ioctl.c:694 [inline] SyS_ioctl+0x8f/0xc0 fs/ioctl.c:685 entry_SYSCALL_64_fastpath+0x1f/0xbd
--- drivers/tty/pty.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/tty/pty.c +3 -0
@@ -110,16 +110,19 @@ static void pty_unthrottle(struct tty_ststatic int pty_write (struct tty_struct *tty,const unsigned char *buf,int c) {struct tty_struct *to = tty->link; +unsigned long flags;if (tty->stopped)return 0 ;if (c >0 ) { +spin_lock_irqsave (&to->port->lock, flags);/* Stuff the data into the input queue of the other end */ c =tty_insert_flip_string (to->port, buf, c);/* And shovel */ if (c)tty_flip_buffer_push (to->port); +spin_unlock_irqrestore (&to->port->lock, flags); }return c; }
Greg Kroah-Hartman
maintainerPATCH 149/246 net: phy: phylink: Release link GPIO
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Fainelli <[email protected]>
[ Upstream commit daab3349ad1a69663ccad278ed71d55974d104b4 ]
We are not releasing the link GPIO descriptor with gpiod_put() which results in subsequent probing to get -EBUSY when calling fwnode_get_named_gpiod(). Fix this by doing the release in phylink_destroy().
--- drivers/net/phy/phylink.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/phy/phylink.c +2 -0
@@ -561,6 +561,8 @@ void phylink_destroy(struct phylink *pl) {if (pl->sfp_bus)sfp_unregister_upstream (pl->sfp_bus); +if (!IS_ERR (pl->link_gpio)) +gpiod_put (pl->link_gpio);cancel_work_sync (&pl->resolve);kfree (pl);
Greg Kroah-Hartman
maintainerPATCH 150/246 media: rcar_jpu: Add missing clk_disable_unprepare() on error in jpu_open()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wei Yongjun <[email protected]>
[ Upstream commit 43d0d3c52787df0221d1c52494daabd824fe84f1 ]
Add the missing clk_disable_unprepare() before return from jpu_open() in the software reset error handling case.
--- drivers/media/platform/rcar_jpu.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/media/platform/rcar_jpu.c +3 -1
@@ -1280,7 +1280,7 @@ static int jpu_open(struct file *file)/* ...issue software reset */ ret =jpu_reset (jpu);if (ret) - goto device_prepare_rollback; + goto jpu_reset_rollback; } jpu->ref_count++;
@@ -1288,6 +1288,8 @@ static int jpu_open(struct file *file)mutex_unlock (&jpu->mutex);return 0 ; +jpu_reset_rollback: +clk_disable_unprepare (jpu->clk); device_prepare_rollback:mutex_unlock (&jpu->mutex); v4l_prepare_rollback:
Greg Kroah-Hartman
maintainerPATCH 151/246 libata: Fix command retry decision
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Damien Le Moal <[email protected]>
[ Upstream commit 804689ad2d9b66d0d3920b48cf05881049d44589 ]
For failed commands with valid sense data (e.g. NCQ commands), scsi_check_sense() is used in ata_analyze_tf() to determine if the command can be retried. In such case, rely on this decision and ignore the command error mask based decision done in ata_worth_retry().
This fixes useless retries of commands such as unaligned writes on zoned disks (TYPE_ZAC).
--- drivers/ata/libata-eh.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/ata/libata-eh.c +8 -4
@@ -2217,12 +2217,16 @@ static void ata_eh_link_autopsy(struct aif (qc->err_mask & ~AC_ERR_OTHER ) qc->err_mask &= ~AC_ERR_OTHER ; -/* SENSE_VALID trumps dev/unknown error and revalidation */ +/* +* SENSE_VALID trumps dev/unknown error and revalidation. Upper +* layers will determine whether the command is worth retrying +* based on the sense data and device class/type. Otherwise, +* determine directly if the command is worth retrying using its +* error mask and flags. +*/ if (qc->flags &ATA_QCFLAG_SENSE_VALID ) qc->err_mask &= ~(AC_ERR_DEV |AC_ERR_OTHER ); - -/* determine whether the command is worth retrying */ -if (ata_eh_worth_retry (qc)) +else if (ata_eh_worth_retry (qc)) qc->flags |=ATA_QCFLAG_RETRY ;/* accumulate error info */
Greg Kroah-Hartman
maintainerPATCH 152/246 ACPI / LPSS: Only call pwm_add_table() for Bay Trail PWM if PMIC HRV is 2
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit c975e472ec12392a0c34de1350e634310f8a1dea ]
The Point of View mobii wintab p800w Bay Trail tablet comes with a Crystal Cove PMIC, yet uses the LPSS PWM for backlight control, rather then the Crystal Cove's PWM, so we need to call pwm_add_table() to add a pwm_backlight mapping for the LPSS pwm despite there being an INT33FD ACPI device present.
On all Bay Trail devices the _HRV object of the INT33FD ACPI device will normally return 2, to indicate the Bay Trail variant of the CRC PMIC is present, except on this tablet where _HRV is 0xffff. I guess this is a hack to make the windows Crystal Cove PWM driver not bind.
Out of the 44 DSTDs with an INT33FD device in there which I have (from different model devices) only the pov mobii wintab p800w uses 0xffff for the HRV.
The byt_pwm_setup code calls acpi_dev_present to check for the presence of a INT33FD ACPI device which indicates that a CRC PMIC is present and if the INT33FD ACPI device is present then byt_pwm_setup will not add a pwm_backlight mapping for the LPSS pwm, so that the CRC PWM will get used instead.
acpi_dev_present has a hrv parameter, this commit make us pass 2 instead of -1, so that things still match on normal tablets, but on this special case with its _HRV of 0xffff, the check will now fail so that the pwm_backlight mapping for the LPSS pwm gets added fixing backlight brightness control on this device.
--- drivers/acpi/acpi_lpss.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/acpi/acpi_lpss.c +5 -1
@@ -69,6 +69,10 @@ ACPI_MODULE_NAME("acpi_lpss");#define LPSS_SAVE_CTX BIT(4)#define LPSS_NO_D3_DELAY BIT(5) +/* Crystal Cove PMIC shares same ACPI ID between different platforms */ +#define BYT_CRC_HRV 2 +#define CHT_CRC_HRV 3 +struct lpss_private_data ;struct lpss_device_desc {
@@ -162,7 +166,7 @@ static void byt_pwm_setup(struct lpss_prif (!adev->pnp.unique_id ||strcmp (adev->pnp.unique_id,"1" ))return ; -if (!acpi_dev_present ("INT33FD" ,NULL ,-1 )) +if (!acpi_dev_present ("INT33FD" ,NULL ,BYT_CRC_HRV ))pwm_add_table (byt_pwm_lookup,ARRAY_SIZE (byt_pwm_lookup)); }
Greg Kroah-Hartman
maintainerPATCH 153/246 media: media-device: fix ioctl function types
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sami Tolvanen <[email protected]>
[ Upstream commit daa36370b62428cca6d48d1b2530a8419f631c8c ]
This change fixes function types for media device ioctls to avoid indirect call mismatches with Control-Flow Integrity checking.
--- drivers/media/media-device.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)
drivers/media/media-device.c +11 -10
@@ -54,9 +54,10 @@ static int media_device_close(struct filreturn 0 ; } -static int media_device_get_info (struct media_device *dev, -struct media_device_info *info) +static long media_device_get_info (struct media_device *dev,void *arg) { +struct media_device_info *info = arg; +memset (info,0 ,sizeof (*info));if (dev->driver_name[0 ])
@@ -93,9 +94,9 @@ static struct media_entity *find_entity(return NULL ; } -static long media_device_enum_entities (struct media_device *mdev, -struct media_entity_desc *entd) +static long media_device_enum_entities (struct media_device *mdev,void *arg) { +struct media_entity_desc *entd = arg;struct media_entity *ent; ent =find_entity (mdev, entd->id);
@@ -146,9 +147,9 @@ static void media_device_kpad_to_upad(co upad->flags = kpad->flags; } -static long media_device_enum_links (struct media_device *mdev, -struct media_links_enum *links) +static long media_device_enum_links (struct media_device *mdev,void *arg) { +struct media_links_enum *links = arg;struct media_entity *entity; entity =find_entity (mdev, links->entity);
@@ -194,9 +195,9 @@ static long media_device_enum_links(strureturn 0 ; } -static long media_device_setup_link (struct media_device *mdev, -struct media_link_desc *linkd) +static long media_device_setup_link (struct media_device *mdev,void *arg) { +struct media_link_desc *linkd = arg;struct media_link *link =NULL ;struct media_entity *source;struct media_entity *sink;
@@ -222,9 +223,9 @@ static long media_device_setup_link(strureturn __media_entity_setup_link (link, linkd->flags); } -static long media_device_get_topology (struct media_device *mdev, -struct media_v2_topology *topo) +static long media_device_get_topology (struct media_device *mdev,void *arg) { +struct media_v2_topology *topo = arg;struct media_entity *entity;struct media_interface *intf;struct media_pad *pad;
Greg Kroah-Hartman
maintainerPATCH 154/246 media: saa7164: Fix driver name in debug output
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Brad Love <[email protected]>
[ Upstream commit 0cc4655cb57af0b7e105d075c4f83f8046efafe7 ]
This issue was reported by a user who downloaded a corrupt saa7164 firmware, then went looking for a valid xc5000 firmware to fix the error displayed...but the device in question has no xc5000, thus after much effort, the wild goose chase eventually led to a support call.
The xc5000 has nothing to do with saa7164 (as far as I can tell), so replace the string with saa7164 as well as give a meaningful hint on the firmware mismatch.
--- drivers/media/pci/saa7164/saa7164-fw.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/media/pci/saa7164/saa7164-fw.c +2 -1
@@ -426,7 +426,8 @@ int saa7164_downloadfirmware(struct saa7 __func__, fw->size);if (fw->size != fwlength) { -printk (KERN_ERR "xc5000: firmware incorrect size\n" ); +printk (KERN_ERR "saa7164: firmware incorrect size %zu != %u\n" , + fw->size, fwlength); ret = -ENOMEM ; goto out; }
Greg Kroah-Hartman
maintainerPATCH 155/246 mtd: rawnand: fsl_ifc: fix FSL NAND driver to read all ONFI parameter pages
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jane Wan <[email protected]>
[ Upstream commit a75bbe71a27875fdc61cde1af6d799037cef6bed ]
Per ONFI specification (Rev. 4.0), if the CRC of the first parameter page read is not valid, the host should read redundant parameter page copies. Fix FSL NAND driver to read the two redundant copies which are mandatory in the specification.
--- drivers/mtd/nand/fsl_ifc_nand.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
drivers/mtd/nand/fsl_ifc_nand.c +10 -7
@@ -342,9 +342,16 @@ static void fsl_ifc_cmdfunc(struct mtd_icase NAND_CMD_READID :case NAND_CMD_PARAM : { +/* +* For READID, read 8 bytes that are currently used. +* For PARAM, read all 3 copies of 256-bytes pages. +*/ +int len =8 ;int timing =IFC_FIR_OP_RB ; -if (command ==NAND_CMD_PARAM ) +if (command ==NAND_CMD_PARAM ) { timing =IFC_FIR_OP_RBCD ; + len =256 *3 ; + } ifc_out32((IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) | (IFC_FIR_OP_UA << IFC_NAND_FIR0_OP1_SHIFT) |
@@ -354,12 +361,8 @@ static void fsl_ifc_cmdfunc(struct mtd_i &ifc->ifc_nand.nand_fcr0);ifc_out32 (column, &ifc->ifc_nand.row3); -/* -* although currently it's 8 bytes for READID, we always read -* the maximum 256 bytes(for PARAM) -*/ -ifc_out32 (256 , &ifc->ifc_nand.nand_fbcr); - ifc_nand_ctrl->read_bytes =256 ; +ifc_out32 (len, &ifc->ifc_nand.nand_fbcr); + ifc_nand_ctrl->read_bytes = len;set_addr (mtd,0 ,0 ,0 );fsl_ifc_run_command (mtd);
Greg Kroah-Hartman
maintainerPATCH 156/246 brcmfmac: Add support for bcm43364 wireless chipset
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sean Lanigan <[email protected]>
[ Upstream commit 9c4a121e82634aa000a702c98cd6f05b27d6e186 ]
Add support for the BCM43364 chipset via an SDIO interface, as used in e.g. the Murata 1FX module.
The BCM43364 uses the same firmware as the BCM43430 (which is already included), the only difference is the omission of Bluetooth.
However, the SDIO_ID for the BCM43364 is 02D0:A9A4, giving it a MODALIAS of sdio:c00v02D0dA9A4, which doesn't get recognised and hence doesn't load the brcmfmac module. Adding the 'A9A4' ID in the appropriate place triggers the brcmfmac driver to load, and then correctly use the firmware file 'brcmfmac43430-sdio.bin'.
--- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 1 + include/linux/mmc/sdio_ids.h | 1 + 2 files changed, 2 insertions(+)
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +1 -0
@@ -1098,6 +1098,7 @@ static const struct sdio_device_id brcmfBRCMF_SDIO_DEVICE (SDIO_DEVICE_ID_BROADCOM_43340 ),BRCMF_SDIO_DEVICE (SDIO_DEVICE_ID_BROADCOM_43341 ),BRCMF_SDIO_DEVICE (SDIO_DEVICE_ID_BROADCOM_43362 ), +BRCMF_SDIO_DEVICE (SDIO_DEVICE_ID_BROADCOM_43364 ),BRCMF_SDIO_DEVICE (SDIO_DEVICE_ID_BROADCOM_4335_4339 ),BRCMF_SDIO_DEVICE (SDIO_DEVICE_ID_BROADCOM_4339 ), BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430),
include/linux/mmc/sdio_ids.h +1 -0
@@ -35,6 +35,7 @@#define SDIO_DEVICE_ID_BROADCOM_4335_4339 0x4335#define SDIO_DEVICE_ID_BROADCOM_4339 0x4339#define SDIO_DEVICE_ID_BROADCOM_43362 0xa962 +#define SDIO_DEVICE_ID_BROADCOM_43364 0xa9a4#define SDIO_DEVICE_ID_BROADCOM_43430 0xa9a6#define SDIO_DEVICE_ID_BROADCOM_4345 0x4345#define SDIO_DEVICE_ID_BROADCOM_43455 0xa9bf
Greg Kroah-Hartman
maintainerPATCH 157/246 s390/cpum_sf: Add data entry sizes to sampling trailer entry
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Richter <[email protected]>
[ Upstream commit 77715b7ddb446bd39a06f3376e85f4bb95b29bb8 ]
The CPU Measurement sampling facility creates a trailer entry for each Sample-Data-Block of stored samples. The trailer entry contains the sizes (in bytes) of the stored sampling types:
- basic-sampling data entry size
- diagnostic-sampling data entry size
Both sizes are 2 bytes long.
This patch changes the trailer entry definition to reflect this.
--- arch/s390/include/asm/cpu_mf.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/s390/include/asm/cpu_mf.h +3 -1
@@ -132,7 +132,9 @@ struct hws_trailer_entry { unsigned int f:1; /* 0 - Block Full Indicator */ unsigned int a:1; /* 1 - Alert request control */ unsigned int t:1; /* 2 - Timestamp format */ - unsigned long long:61; /* 3 - 63: Reserved */ + unsigned int :29; /* 3 - 31: Reserved */ + unsigned int bsdes:16; /* 32-47: size of basic SDE */ + unsigned int dsdes:16; /* 48-63: size of diagnostic SDE */ };unsigned long long flags;/* 0 - 63: All indicators */ };
Greg Kroah-Hartman
maintainerPATCH 158/246 perf: fix invalid bit in diagnostic entry
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Richter <[email protected]>
[ Upstream commit 3c0a83b14ea71fef5ccc93a3bd2de5f892be3194 ]
The s390 CPU measurement facility sampling mode supports basic entries and diagnostic entries. Each entry has a valid bit to indicate the status of the entry as valid or invalid.
This bit is bit 31 in the diagnostic entry, but the bit mask definition refers to bit 30.
Fix this by making the reserved field one bit larger.
--- arch/s390/include/asm/cpu_mf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/s390/include/asm/cpu_mf.h +1 -1
@@ -116,7 +116,7 @@ struct hws_basic_entry {struct hws_diag_entry {unsigned int def:16 ;/* 0-15 Data Entry Format */ -unsigned int R:14 ;/* 16-19 and 20-30 reserved */ +unsigned int R:15 ;/* 16-19 and 20-30 reserved */ unsigned int I:1 ;/* 31 entry valid or invalid */ u8 data[];/* Machine-dependent sample data */ } __packed;
Greg Kroah-Hartman
maintainerPATCH 159/246 bnxt_en: Check unsupported speeds in bnxt_update_link() on PF only.
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Chan <[email protected]>
[ Upstream commit dac0490718bd17df5e3995ffca14255e5f9ed22d ]
Only non-NPAR PFs need to actively check and manage unsupported link speeds. NPAR functions and VFs do not control the link speed and should skip the unsupported speed detection logic, to avoid warning messages from firmware rejecting the unsupported firmware calls.
--- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/net/ethernet/broadcom/bnxt/bnxt.c +3 -0
@@ -5927,6 +5927,9 @@ static int bnxt_update_link(struct bnxt }mutex_unlock (&bp->hwrm_cmd_lock); +if (!BNXT_SINGLE_PF (bp)) +return 0 ; + diff = link_info->support_auto_speeds ^ link_info->advertising;if ((link_info->support_auto_speeds | diff) != link_info->support_auto_speeds) {
Greg Kroah-Hartman
maintainerPATCH 160/246 scsi: 3w-9xxx: fix a missing-check bug
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wenwen Wang <[email protected]>
[ Upstream commit c9318a3e0218bc9dacc25be46b9eec363259536f ]
In twa_chrdev_ioctl(), the ioctl driver command is firstly copied from the userspace pointer 'argp' and saved to the kernel object 'driver_command'. Then a security check is performed on the data buffer size indicated by 'driver_command', which is 'driver_command.buffer_length'. If the security check is passed, the entire ioctl command is copied again from the 'argp' pointer and saved to the kernel object 'tw_ioctl'. Then, various operations are performed on 'tw_ioctl' according to the 'cmd'. Given that the 'argp' pointer resides in userspace, a malicious userspace process can race to change the buffer size between the two copies. This way, the user can bypass the security check and inject invalid data buffer size. This can cause potential security issues in the following execution.
This patch checks for capable(CAP_SYS_ADMIN) in twa_chrdev_open()t o avoid the above issues.
--- drivers/scsi/3w-9xxx.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/scsi/3w-9xxx.c +5 -0
@@ -886,6 +886,11 @@ static int twa_chrdev_open(struct inodeunsigned int minor_number;int retval =TW_IOCTL_ERROR_OS_ENODEV ; +if (!capable (CAP_SYS_ADMIN )) { + retval = -EACCES ; + goto out; + } + minor_number =iminor (inode);if (minor_number >= twa_device_extension_count) goto out;
Greg Kroah-Hartman
maintainerPATCH 161/246 scsi: 3w-xxxx: fix a missing-check bug
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wenwen Wang <[email protected]>
[ Upstream commit 9899e4d3523faaef17c67141aa80ff2088f17871 ]
In tw_chrdev_ioctl(), the length of the data buffer is firstly copied from the userspace pointer 'argp' and saved to the kernel object 'data_buffer_length'. Then a security check is performed on it to make sure that the length is not more than 'TW_MAX_IOCTL_SECTORS * 512'. Otherwise, an error code -EINVAL is returned. If the security check is passed, the entire ioctl command is copied again from the 'argp' pointer and saved to the kernel object 'tw_ioctl'. Then, various operations are performed on 'tw_ioctl' according to the 'cmd'. Given that the 'argp' pointer resides in userspace, a malicious userspace process can race to change the buffer length between the two copies. This way, the user can bypass the security check and inject invalid data buffer length. This can cause potential security issues in the following execution.
This patch checks for capable(CAP_SYS_ADMIN) in tw_chrdev_open() to avoid the above issues.
--- drivers/scsi/3w-xxxx.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/scsi/3w-xxxx.c +3 -0
@@ -1033,6 +1033,9 @@ static int tw_chrdev_open(struct inode *dprintk (KERN_WARNING "3w-xxxx: tw_ioctl_open()\n" ); +if (!capable (CAP_SYS_ADMIN )) +return -EACCES ; + minor_number =iminor (inode);if (minor_number >= tw_device_extension_count)return -ENODEV ;
Greg Kroah-Hartman
maintainerPATCH 162/246 scsi: megaraid: silence a static checker bug
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit 27e833dabab74ee665e487e291c9afc6d71effba ]
If we had more than 32 megaraid cards then it would cause memory corruption. That's not likely, of course, but it's handy to enforce it and make the static checker happy.
--- drivers/scsi/megaraid.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/scsi/megaraid.c +3 -0
@@ -4199,6 +4199,9 @@ megaraid_probe_one(struct pci_dev *pdev,int irq, i, j;int error = -ENODEV ; +if (hba_count >=MAX_CONTROLLERS ) + goto out; +if (pci_enable_device (pdev)) goto out;pci_set_master (pdev);
Greg Kroah-Hartman
maintainerPATCH 163/246 scsi: hisi_sas: config ATA de-reset as an constrained command for v3 hw
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiang Chen <[email protected]>
[ Upstream commit 9413532788df7470297dd0475995c5dc5b07f362 ]
As a unconstrained command, a command can be sent to SATA disk even if SATA disk status is BUSY, ERR or DRQ.
If an ATA reset assert is successful but ATA reset de-assert fails, then it will retry the reset de-assert. If reset de- assert retry is successful, we think it is okay to probe the device but actually it still has Err status.
Apparently we need to retry the ATA reset assertion and de- assertion instead for this mentioned scenario.
As such, we config ATA reset assert as a constrained command, if ATA reset de-assert fails, then ATA reset de-assert retry will also fail. Then we will retry the proper process of ATA reset assert and de-assert again.
--- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +6 -5
@@ -328,10 +328,11 @@ enum {#define DIR_TO_DEVICE 2#define DIR_RESERVED 3 -#define CMD_IS_UNCONSTRAINT (cmd) \ - ((cmd == ATA_CMD_READ_LOG_EXT) || \ - (cmd == ATA_CMD_READ_LOG_DMA_EXT) || \ - (cmd == ATA_CMD_DEV_RESET)) +#define FIS_CMD_IS_UNCONSTRAINED (fis) \ + ((fis.command == ATA_CMD_READ_LOG_EXT) || \ + (fis.command == ATA_CMD_READ_LOG_DMA_EXT) || \ + ((fis.command == ATA_CMD_DEV_RESET) && \ + ((fis.control & ATA_SRST) != 0)))static u32 hisi_sas_read32 (struct hisi_hba *hisi_hba,u32 off) {
@@ -1044,7 +1045,7 @@ static int prep_ata_v3_hw(struct hisi_hb << CMD_HDR_FRAME_TYPE_OFF; dw1 |= sas_dev->device_id <<CMD_HDR_DEV_ID_OFF ; -if (CMD_IS_UNCONSTRAINT (task->ata_task.fis.command)) +if (FIS_CMD_IS_UNCONSTRAINED (task->ata_task.fis)) dw1 |=1 <<CMD_HDR_UNCON_CMD_OFF ; hdr->dw1 =cpu_to_le32 (dw1);
Greg Kroah-Hartman
maintainerPATCH 164/246 scsi: qedf: Set the UNLOADING flag when removing a vport
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chad Dupuis <[email protected]>
[ Upstream commit 4f4616ceebaf045c59e8a6aa01f08826d18d5c63 ]
Similar to what we do when we remove a PCI function, set the QEDF_UNLOADING flag to prevent any requests from being queued while a vport is being deleted. This prevents any requests from getting stuck in limbo when the vport is unloaded or deleted.
Fixes the crash:
PID: 106676 TASK: ffff9a436aa90000 CPU: 12 COMMAND: "multipathd"
#0 [ffff9a43567d3550] machine_kexec+522 at ffffffffaca60b2a #1 [ffff9a43567d35b0] __crash_kexec+114 at ffffffffacb13512 #2 [ffff9a43567d3680] crash_kexec+48 at ffffffffacb13600 #3 [ffff9a43567d3698] oops_end+168 at ffffffffad117768
#4 [ffff9a43567d36c0] no_context+645 at ffffffffad106f52 #5 [ffff9a43567d3710] __bad_area_nosemaphore+116 at ffffffffad106fe9 #6 [ffff9a43567d3760] bad_area+70 at ffffffffad107379
#7 [ffff9a43567d3788] __do_page_fault+1247 at ffffffffad11a8cf #8 [ffff9a43567d37f0] do_page_fault+53 at ffffffffad11a915 #9 [ffff9a43567d3820] page_fault+40 at ffffffffad116768
[exception RIP: qedf_init_task+61]
RIP: ffffffffc0e13c2d RSP: ffff9a43567d38d0 RFLAGS: 00010046
RAX: 0000000000000000 RBX: ffffbe920472c738 RCX: ffff9a434fa0e3e8
RDX: ffff9a434f695280 RSI: ffffbe920472c738 RDI: ffff9a43aa359c80
RBP: ffff9a43567d3950 R8: 0000000000000c15 R9: ffff9a3fb09b9880
R10: ffff9a434fa0e3e8 R11: ffff9a43567d35ce R12: 0000000000000000
R13: ffff9a434f695280 R14: ffff9a43aa359c80 R15: ffff9a3fb9e005c0
ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018--- drivers/scsi/qedf/qedf_main.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/scsi/qedf/qedf_main.c +10 -0
@@ -1649,6 +1649,15 @@ static int qedf_vport_destroy(struct fc_struct Scsi_Host *shost =vport_to_shost (vport);struct fc_lport *n_port =shost_priv (shost);struct fc_lport *vn_port = vport->dd_data; +struct qedf_ctx *qedf =lport_priv (vn_port); + +if (!qedf) { +QEDF_ERR (NULL ,"qedf is NULL.\n" ); + goto out; + } + +/* Set unloading bit on vport qedf_ctx to prevent more I/O */ +set_bit (QEDF_UNLOADING , &qedf->flags);mutex_lock (&n_port->lp_mutex);list_del (&vn_port->list);
@@ -1675,6 +1684,7 @@ static int qedf_vport_destroy(struct fc_if (vn_port->host)scsi_host_put (vn_port->host); +out:return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 165/246 staging: lustre: o2iblnd: fix race at kiblnd_connect_peer
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Doug Oucahrek <[email protected]>
[ Upstream commit cf04968efe341b9b1c30a527e5dd61b2af9c43d2 ]
cmid will be destroyed at OFED if kiblnd_cm_callback return error. if error happen before the end of kiblnd_connect_peer, it will touch destroyed cmid and fail as (o2iblnd_cb.c:1315:kiblnd_connect_peer())
ASSERTION( cmid->device != ((void *)0) ) failed:
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-10015
--- drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c | 18 +++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c +12 -6
@@ -1289,11 +1289,6 @@ kiblnd_connect_peer(struct kib_peer *pee goto failed2; } -LASSERT (cmid->device); -CDEBUG (D_NET ,"%s: connection bound to %s:%pI4h:%s\n" , -libcfs_nid2str (peer->ibp_nid), dev->ibd_ifname, - &dev->ibd_ifip, cmid->device->name); -return ; failed2:
@@ -2995,8 +2990,19 @@ kiblnd_cm_callback(struct rdma_cm_id *cm }else { rc =rdma_resolve_route ( cmid, *kiblnd_tunables.kib_timeout *1000 ); -if (!rc) +if (!rc) { +struct kib_net *net = peer->ibp_ni->ni_data; +struct kib_dev *dev = net->ibn_dev; + +CDEBUG (D_NET ,"%s: connection bound to " \ +"%s:%pI4h:%s\n" , +libcfs_nid2str (peer->ibp_nid), + dev->ibd_ifname, + &dev->ibd_ifip, cmid->device->name); +return 0 ; + } +/* Can't initiate route resolution */ CERROR ("Can't resolve route for %s: %d\n" ,libcfs_nid2str (peer->ibp_nid), rc);
Greg Kroah-Hartman
maintainerPATCH 166/246 staging: lustre: o2iblnd: Fix FastReg map/unmap for MLX5
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Doug Oucharek <[email protected]>
[ Upstream commit 24d4b7c8de007cff9c7d83c06ae76099fdcce008 ]
The FastReg support in ko2iblnd was not unmapping pool items causing the items to leak. In addition, the mapping code is not growing the pool like we do with FMR.
This patch makes sure we are unmapping FastReg pool elements when we are done with them. It also makes sure the pool will grow when we depleat the pool.
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-9472
Reviewed-on: https://review.whamcloud.com/27015
--- drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 2 +- drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-)
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +1 -1
@@ -1710,7 +1710,7 @@ int kiblnd_fmr_pool_map(struct kib_fmr_preturn 0 ; }spin_unlock (&fps->fps_lock); - rc = -EBUSY ; + rc = -EAGAIN ; }spin_lock (&fps->fps_lock);
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c +4 -8
@@ -47,7 +47,7 @@ static int kiblnd_init_rdma(struct kib_c __u64 dstcookie);static void kiblnd_queue_tx_locked (struct kib_tx *tx,struct kib_conn *conn);static void kiblnd_queue_tx (struct kib_tx *tx,struct kib_conn *conn); -static void kiblnd_unmap_tx (struct lnet_ni *ni,struct kib_tx *tx); +static void kiblnd_unmap_tx (struct kib_tx *tx);static void kiblnd_check_sends_locked (struct kib_conn *conn); static void
@@ -65,7 +65,7 @@ kiblnd_tx_done(struct lnet_ni *ni, strucLASSERT (!tx->tx_waiting);/* mustn't be awaiting peer response */ LASSERT (tx->tx_pool); -kiblnd_unmap_tx (ni, tx); +kiblnd_unmap_tx (tx);/* tx may have up to 2 lnet msgs to finalise */ lntmsg[0 ] = tx->tx_lntmsg[0 ]; tx->tx_lntmsg[0 ] =NULL ;
@@ -590,13 +590,9 @@ kiblnd_fmr_map_tx(struct kib_net *net, sreturn 0 ; } -static void kiblnd_unmap_tx (struct lnet_ni *ni,struct kib_tx *tx) +static void kiblnd_unmap_tx (struct kib_tx *tx) { -struct kib_net *net = ni->ni_data; - -LASSERT (net); - -if (net->ibn_fmr_ps) +if (tx->fmr.fmr_pfmr || tx->fmr.fmr_frd)kiblnd_fmr_pool_unmap (&tx->fmr, tx->tx_status);if (tx->tx_nfrags) {
Greg Kroah-Hartman
maintainerPATCH 167/246 thermal: exynos: fix setting rising_threshold for Exynos5433
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bartlomiej Zolnierkiewicz <[email protected]>
[ Upstream commit 8bfc218d0ebbabcba8ed2b8ec1831e0cf1f71629 ]
Add missing clearing of the previous value when setting rising temperature threshold.
--- drivers/thermal/samsung/exynos_tmu.c | 1 + 1 file changed, 1 insertion(+)
drivers/thermal/samsung/exynos_tmu.c +1 -0
@@ -598,6 +598,7 @@ static int exynos5433_tmu_initialize(str threshold_code =temp_to_code (data, temp); rising_threshold =readl (data->base + rising_reg_offset); + rising_threshold &= ~(0xff << j *8 ); rising_threshold |= (threshold_code << j *8 );writel (rising_threshold, data->base + rising_reg_offset);
Greg Kroah-Hartman
maintainerPATCH 168/246 bpf: fix references to free_bpf_prog_info() in comments
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jakub Kicinski <[email protected]>
[ Upstream commit ab7f5bf0928be2f148d000a6eaa6c0a36e74750e ]
Comments in the verifier refer to free_bpf_prog_info() which seems to have never existed in tree. Replace it with free_used_maps().
--- kernel/bpf/verifier.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
kernel/bpf/verifier.c +2 -2
@@ -4110,7 +4110,7 @@ static int replace_map_fd_with_map_ptr(s/* hold the map. If the program is rejected by verifier, * the map will be released by release_maps() or it * will be used by the valid program until it's unloaded -* and all maps are released in free_bpf_prog_info() +* and all maps are released in free_used_maps() */ map =bpf_map_inc (map, false);if (IS_ERR (map)) {
@@ -4623,7 +4623,7 @@ free_log_buf:vfree (log_buf);if (!env->prog->aux->used_maps)/* if we didn't copy map pointers into bpf_prog_info, release -* them now. Otherwise free_bpf_prog_info() will release them. +* them now. Otherwise free_used_maps() will release them. */ release_maps (env); *prog = env->prog;
Greg Kroah-Hartman
maintainerPATCH 169/246 f2fs: avoid fsync() failure caused by EAGAIN in writepage()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jaegeuk Kim <[email protected]>
[ Upstream commit 5b19d284f5195a925dd015a6397bfce184097378 ]
pageout() in MM traslates EAGAIN, so calls handle_write_error()
-> mapping_set_error() -> set_bit(AS_EIO, ...). file_write_and_wait_range() will see EIO error, which is critical to return value of fsync() followed by atomic_write failure to user.
--- fs/f2fs/data.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
fs/f2fs/data.c +7 -1
@@ -1601,7 +1601,13 @@ out: redirty_out:redirty_page_for_writepage (wbc, page); -if (!err) +/* +* pageout() in MM traslates EAGAIN, so calls handle_write_error() +* -> mapping_set_error() -> set_bit(AS_EIO, ...). +* file_write_and_wait_range() will see EIO error, which is critical +* to return value of fsync() followed by atomic_write failure to user. +*/ +if (!err || wbc->for_reclaim)return AOP_WRITEPAGE_ACTIVATE ;unlock_page (page);return err;
Greg Kroah-Hartman
maintainerPATCH 170/246 media: siano: get rid of __le32/__le16 cast warnings
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mauro Carvalho Chehab <[email protected]>
[ Upstream commit e1b7f11b37def5f3021c06e8c2b4953e099357aa ]
Those are all false-positives that appear with smatch when building for arm:
drivers/media/common/siano/smsendian.c:38:36: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:38:36: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:38:36: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:38:36: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:38:36: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:38:36: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:47:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:47:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:47:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:47:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:47:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:47:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:67:35: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:67:35: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:67:35: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:67:35: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:84:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:84:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:84:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:84:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:84:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:84:44: warning: cast to restricted __le32 drivers/media/common/siano/smsendian.c:98:26: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:98:26: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:98:26: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:98:26: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:99:28: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:99:28: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:99:28: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:99:28: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:100:27: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:100:27: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:100:27: warning: cast to restricted __le16 drivers/media/common/siano/smsendian.c:100:27: warning: cast to restricted __le16
Get rid of them by adding explicit forced casts.
--- drivers/media/common/siano/smsendian.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/media/common/siano/smsendian.c +7 -7
@@ -35,7 +35,7 @@ void smsendian_handle_tx_message(void *bswitch (msg->x_msg_header.msg_type) {case MSG_SMS_DATA_DOWNLOAD_REQ : { - msg->msg_data[0 ] =le32_to_cpu (msg->msg_data[0 ]); + msg->msg_data[0 ] =le32_to_cpu ((__force __le32)(msg->msg_data[0 ]));break ; }
@@ -44,7 +44,7 @@ void smsendian_handle_tx_message(void *b sizeof(struct sms_msg_hdr))/4;for (i =0 ; i < msg_words; i++) - msg->msg_data[i] =le32_to_cpu (msg->msg_data[i]); + msg->msg_data[i] =le32_to_cpu ((__force __le32 )msg->msg_data[i]);break ; }
@@ -64,7 +64,7 @@ void smsendian_handle_rx_message(void *b {struct sms_version_res *ver = (struct sms_version_res *) msg; - ver->chip_model =le16_to_cpu (ver->chip_model); + ver->chip_model =le16_to_cpu ((__force __le16 )ver->chip_model);break ; }
@@ -81,7 +81,7 @@ void smsendian_handle_rx_message(void *b sizeof(struct sms_msg_hdr))/4;for (i =0 ; i < msg_words; i++) - msg->msg_data[i] =le32_to_cpu (msg->msg_data[i]); + msg->msg_data[i] =le32_to_cpu ((__force __le32 )msg->msg_data[i]);break ; }
@@ -95,9 +95,9 @@ void smsendian_handle_message_header(voi#ifdef __BIG_ENDIANstruct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg; - phdr->msg_type =le16_to_cpu (phdr->msg_type); - phdr->msg_length =le16_to_cpu (phdr->msg_length); - phdr->msg_flags =le16_to_cpu (phdr->msg_flags); + phdr->msg_type =le16_to_cpu ((__force __le16 )phdr->msg_type); + phdr->msg_length =le16_to_cpu ((__force __le16 )phdr->msg_length); + phdr->msg_flags =le16_to_cpu ((__force __le16 )phdr->msg_flags);#endif /* __BIG_ENDIAN */ }EXPORT_SYMBOL_GPL (smsendian_handle_message_header);
Greg Kroah-Hartman
maintainerPATCH 171/246 drm/atomic: Handling the case when setting old crtc for plane
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Satendra Singh Thakur <[email protected]>
[ Upstream commit fc2a69f3903dfd97cd47f593e642b47918c949df ]
In the func drm_atomic_set_crtc_for_plane, with the current code, if crtc of the plane_state and crtc passed as argument to the func are same, entire func will executed in vein.
It will get state of crtc and clear and set the bits in plane_mask. All these steps are not required for same old crtc.
Ideally, we should do nothing in this case, this patch handles the same, and causes the program to return without doing anything in such scenario.
--- drivers/gpu/drm/drm_atomic.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/drm_atomic.c +3 -1
@@ -1355,7 +1355,9 @@ drm_atomic_set_crtc_for_plane(struct drm {struct drm_plane *plane = plane_state->plane;struct drm_crtc_state *crtc_state; - +/* Nothing to do for same crtc*/ +if (plane_state->crtc == crtc) +return 0 ;if (plane_state->crtc) { crtc_state =drm_atomic_get_crtc_state (plane_state->state, plane_state->crtc);
Greg Kroah-Hartman
maintainerPATCH 172/246 ALSA: hda/ca0132: fix build failure when a local macro is defined
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
[ Upstream commit 8e142e9e628975b0dddd05cf1b095331dff6e2de ]
DECLARE_TLV_DB_SCALE (alias of SNDRV_CTL_TLVD_DECLARE_DB_SCALE) is used but tlv.h is not included. This causes build failure when local macro is defined by comment-out.
This commit fixes the bug. At the same time, the alias macro is replaced with a destination macro added at a commit 46e860f76804 ("ALSA: rename TLV-related macros so that they're friendly to user applications")
--- sound/pci/hda/patch_ca0132.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
sound/pci/hda/patch_ca0132.c +6 -2
@@ -38,6 +38,10 @@/* Enable this to see controls for tuning purpose. */ /*#define ENABLE_TUNING_CONTROLS*/ +#ifdef ENABLE_TUNING_CONTROLS +#include <sound/tlv.h> +#endif +#define FLOAT_ZERO 0x00000000#define FLOAT_ONE 0x3f800000#define FLOAT_TWO 0x40000000
@@ -3067,8 +3071,8 @@ static int equalizer_ctl_put(struct snd_return 1 ; } -static const DECLARE_TLV_DB_SCALE(voice_focus_db_scale, 2000, 100, 0); -static const DECLARE_TLV_DB_SCALE(eq_db_scale, -2400, 100, 0); +static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(voice_focus_db_scale, 2000, 100, 0); +static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(eq_db_scale, -2400, 100, 0); static int add_tuning_control(struct hda_codec *codec, hda_nid_t pnid, hda_nid_t nid,
Greg Kroah-Hartman
maintainerPATCH 173/246 mmc: dw_mmc: update actual clock for mmc debugfs
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shawn Lin <[email protected]>
[ Upstream commit ff178981bd5fd1667f373098740cb1c6d6efa1ba ]
Respect the actual clock for mmc debugfs to help better debug the hardware.
mmc_host mmc0: Bus speed (slot 0) = 135475200Hz (slot req 150000000Hz, actual 135475200HZ div = 0)
cat /sys/kernel/debug/mmc0/ios
clock: 150000000 Hz actual clock: 135475200 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 3 (8 bits) timing spec: 9 (mmc HS200) signal voltage: 0 (1.80 V) driver type: 0 (driver type B)
--- drivers/mmc/host/dw_mmc.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/mmc/host/dw_mmc.c +4 -0
@@ -1255,6 +1255,8 @@ static void dw_mci_setup_bus(struct dw_mif (host->state ==STATE_WAITING_CMD11_DONE ) sdmmc_cmd_bits |=SDMMC_CMD_VOLT_SWITCH ; + slot->mmc->actual_clock =0 ; +if (!clock) {mci_writel (host,CLKENA ,0 );mci_send_cmd (slot, sdmmc_cmd_bits,0 );
@@ -1313,6 +1315,8 @@ static void dw_mci_setup_bus(struct dw_m/* keep the last clock value that was requested from core */ slot->__clk_old = clock; + slot->mmc->actual_clock = div ? ((host->bus_hz / div) >>1 ) : + host->bus_hz; } host->current_speed = clock;
Greg Kroah-Hartman
maintainerPATCH 174/246 mmc: pwrseq: Use kmalloc_array instead of stack VLA
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Tobin C. Harding" <[email protected]>
[ Upstream commit 486e6661367b40f927aadbed73237693396cbf94 ]
The use of stack Variable Length Arrays needs to be avoided, as they can be a vector for stack exhaustion, which can be both a runtime bug (kernel Oops) or a security flaw (overwriting memory beyond the stack). Also, in general, as code evolves it is easy to lose track of how big a VLA can get. Thus, we can end up having runtime failures that are hard to debug. As part of the directive[1] to remove all VLAs from the kernel, and build with -Wvla.
Currently driver is using a VLA declared using the number of descriptors. This array is used to store integer values and is later used as an argument to gpiod_set_array_value_cansleep() This can be avoided by using kmalloc_array() to allocate memory for the array of integer values. Memory is free'd before return from function.
Quoted 1 line
From the code it appears that it is safe to sleep so we can use
GFP_KERNEL
(based _cansleep() suffix of function gpiod_set_array_value_cansleep().
It can be expected that this patch will result in a small increase in overhead due to the use of kmalloc_array()
[1] https://lkml.org/lkml/2018/3/7/621
--- drivers/mmc/core/pwrseq_simple.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/mmc/core/pwrseq_simple.c +9 -5
@@ -40,14 +40,18 @@ static void mmc_pwrseq_simple_set_gpios_struct gpio_descs *reset_gpios = pwrseq->reset_gpios;if (!IS_ERR (reset_gpios)) { -int i; -int values[reset_gpios->ndescs]; +int i, *values; +int nvalues = reset_gpios->ndescs; -for (i =0 ; i < reset_gpios->ndescs; i++) + values =kmalloc_array (nvalues,sizeof (int ),GFP_KERNEL ); +if (!values) +return ; + +for (i =0 ; i < nvalues; i++) values[i] = value; -gpiod_set_array_value_cansleep ( - reset_gpios->ndescs, reset_gpios->desc, values); +gpiod_set_array_value_cansleep (nvalues, reset_gpios->desc, values); +kfree (values); } }
Greg Kroah-Hartman
maintainerPATCH 175/246 dt-bindings: pinctrl: meson: add support for the Meson8m2 SoC
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Martin Blumenstingl <[email protected]>
[ Upstream commit 03d9fbc39730b3e6b2e7047dc85f0f70de8fb97d ]
The Meson8m2 SoC is a variant of Meson8 with some updates from Meson8b (such as the Gigabit capable DesignWare MAC).
It is mostly pin compatible with Meson8, only 10 (existing) CBUS pins get an additional function (four of these are Ethernet RXD2, RXD3, TXD2 and TXD3 which are required when the board uses an RGMII PHY). The AOBUS pins seem to be identical on Meson8 and Meson8m2.
--- Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt | 2 ++ 1 file changed, 2 insertions(+)
Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt +2 -0
@@ -3,8 +3,10 @@ Required properties for the root node: - compatible: one of "amlogic,meson8-cbus-pinctrl" "amlogic,meson8b-cbus-pinctrl" + "amlogic,meson8m2-cbus-pinctrl" "amlogic,meson8-aobus-pinctrl" "amlogic,meson8b-aobus-pinctrl" + "amlogic,meson8m2-aobus-pinctrl" "amlogic,meson-gxbb-periphs-pinctrl" "amlogic,meson-gxbb-aobus-pinctrl" "amlogic,meson-gxl-periphs-pinctrl"
Greg Kroah-Hartman
maintainerPATCH 176/246 spi: meson-spicc: Fix error handling in meson_spicc_probe()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexey Khoroshilov <[email protected]>
[ Upstream commit ded5fa4e8bac25612caab8f0822691308a28a552 ]
If devm_spi_register_master() fails in meson_spicc_probe(), spicc->core is left undisabled. The patch fixes that.
Found by Linux Driver Verification project (linuxtesting.org).
--- drivers/spi/spi-meson-spicc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
drivers/spi/spi-meson-spicc.c +8 -3
@@ -574,10 +574,15 @@ static int meson_spicc_probe(struct plat master->max_speed_hz = rate >>2 ; ret =devm_spi_register_master (&pdev->dev, master); -if (!ret) -return 0 ; +if (ret) { +dev_err (&pdev->dev,"spi master registration failed\n" ); + goto out_clk; + } -dev_err (&pdev->dev,"spi master registration failed\n" ); +return 0 ; + +out_clk: +clk_disable_unprepare (spicc->core); out_master:spi_master_put (master);
Greg Kroah-Hartman
maintainerPATCH 177/246 net: hns3: Fixes the out of bounds access in hclge_map_tqp
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Huazhong Tan <[email protected]>
[ Upstream commit 38e62046d4c95272e2fb001d2d72baf48fa090e9 ]
This patch fixes the handling of the check when number of vports are detected to be more than available TPQs. Current handling causes an out of bounds access in hclge_map_tqp().
--- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +5 -2
@@ -1272,8 +1272,11 @@ static int hclge_alloc_vport(struct hclg/* We need to alloc a vport for main NIC of PF */ num_vport = hdev->num_vmdq_vport + hdev->num_req_vfs +1 ; -if (hdev->num_tqps < num_vport) - num_vport = hdev->num_tqps; +if (hdev->num_tqps < num_vport) { +dev_err (&hdev->pdev->dev,"tqps(%d) is less than vports(%d)" , + hdev->num_tqps, num_vport); +return -EINVAL ; + }/* Alloc the same number of TQPs for every vport */ tqp_per_vport = hdev->num_tqps / num_vport;
Greg Kroah-Hartman
maintainerPATCH 178/246 dt-bindings: net: meson-dwmac: new compatible name for AXG SoC
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yixun Lan <[email protected]>
[ Upstream commit 7e5d05e18ba1ed491c6f836edee7f0b90f3167bc ]
We need to introduce a new compatible name for the Meson-AXG SoC in order to support the RMII 100M ethernet PHY, since the PRG_ETH0 register of the dwmac glue layer is changed from previous old SoC.
--- Documentation/devicetree/bindings/net/meson-dwmac.txt | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/net/meson-dwmac.txt +1 -0
@@ -10,6 +10,7 @@ Required properties on all platforms: - "amlogic,meson6-dwmac" - "amlogic,meson8b-dwmac" - "amlogic,meson-gxbb-dwmac" + - "amlogic,meson-axg-dwmac" Additionally "snps,dwmac" and any applicable more detailed version number described in net/stmmac.txt should be used.
Greg Kroah-Hartman
maintainerPATCH 179/246 fasync: Fix deadlock between task-context and interrupt-context kill_fasync()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kirill Tkhai <[email protected]>
[ Upstream commit 7a107c0f55a3b4c6f84a4323df5610360bde1684 ]
I observed the following deadlock between them:
[task 1] [task 2] [task 3]
kill_fasync() mm_update_next_owner() copy_process()
spin_lock_irqsave(&fa->fa_lock) read_lock(&tasklist_lock) write_lock_irq(&tasklist_lock)
send_sigio() <IRQ> ...
read_lock(&fown->lock) kill_fasync() ...
read_lock(&tasklist_lock) spin_lock_irqsave(&fa->fa_lock) ...Task 1 can't acquire read locked tasklist_lock, since there is already task 3 expressed its wish to take the lock exclusive. Task 2 holds the read locked lock, but it can't take the spin lock.
Also, there is possible another deadlock (which I haven't observed):
[task 1] [task 2]f_getown() kill_fasync()
read_lock(&f_own->lock) spin_lock_irqsave(&fa->fa_lock,)
<IRQ> send_sigio() write_lock_irq(&f_own->lock) kill_fasync() read_lock(&fown->lock) spin_lock_irqsave(&fa->fa_lock,)
Actually, we do not need exclusive fa->fa_lock in kill_fasync_rcu(), as it guarantees fa->fa_file->f_owner integrity only. It may seem, that it used to give a task a small possibility to receive two sequential signals, if there are two parallel kill_fasync() callers, and task handles the first signal fastly, but the behaviour won't become different, since there is exclusive sighand lock in do_send_sig_info().
The patch converts fa_lock into rwlock_t, and this fixes two above deadlocks, as rwlock is allowed to be taken from interrupt handler by qrwlock design.
--- fs/fcntl.c | 15 +++++++-------- include/linux/fs.h | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-)
fs/fcntl.c +7 -8
@@ -864,9 +864,9 @@ int fasync_remove_entry(struct file *filif (fa->fa_file != filp)continue ; -spin_lock_irq (&fa->fa_lock); +write_lock_irq (&fa->fa_lock); fa->fa_file =NULL ; -spin_unlock_irq (&fa->fa_lock); +write_unlock_irq (&fa->fa_lock); *fp = fa->fa_next;call_rcu (&fa->fa_rcu, fasync_free_rcu);
@@ -911,13 +911,13 @@ struct fasync_struct *fasync_insert_entrif (fa->fa_file != filp)continue ; -spin_lock_irq (&fa->fa_lock); +write_lock_irq (&fa->fa_lock); fa->fa_fd = fd; -spin_unlock_irq (&fa->fa_lock); +write_unlock_irq (&fa->fa_lock); goto out; } -spin_lock_init (&new->fa_lock); +rwlock_init (&new->fa_lock); new->magic =FASYNC_MAGIC ; new->fa_file = filp; new->fa_fd = fd;
@@ -980,14 +980,13 @@ static void kill_fasync_rcu(struct fasyn {while (fa) {struct fown_struct *fown; -unsigned long flags;if (fa->magic !=FASYNC_MAGIC ) {printk (KERN_ERR "kill_fasync: bad magic number in " "fasync_struct!\n" );return ; } -spin_lock_irqsave (&fa->fa_lock, flags); +read_lock (&fa->fa_lock);if (fa->fa_file) { fown = &fa->fa_file->f_owner;/* Don't send SIGURG to processes which have not set a
@@ -996,7 +995,7 @@ static void kill_fasync_rcu(struct fasynif (!(sig ==SIGURG && fown->signum ==0 ))send_sigio (fown, fa->fa_fd, band); } -spin_unlock_irqrestore (&fa->fa_lock, flags); +read_unlock (&fa->fa_lock); fa =rcu_dereference (fa->fa_next); } }
include/linux/fs.h +1 -1
@@ -1245,7 +1245,7 @@ static inline int locks_lock_file_wait(s }struct fasync_struct { -spinlock_t fa_lock; +rwlock_t fa_lock;int magic;int fa_fd;struct fasync_struct *fa_next;/* singly linked list */
Greg Kroah-Hartman
maintainerPATCH 180/246 backlight: pwm_bl: Dont use GPIOF_* with gpiod_get_direction
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wolfram Sang <[email protected]>
[ Upstream commit bb084c0f61d659f0e6d371b096e0e57998f191d6 ]
The documentation was wrong, gpiod_get_direction() returns 0/1 instead of the GPIOF_* flags. The docs were fixed with commit 94fc73094abe47 ("gpio: correct docs about return value of gpiod_get_direction"). Now, fix this user (until a better, system-wide solution is in place).
--- drivers/video/backlight/pwm_bl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/video/backlight/pwm_bl.c +3 -3
@@ -301,14 +301,14 @@ static int pwm_backlight_probe(struct pl/* * If the GPIO is not known to be already configured as output, that -* is, if gpiod_get_direction returns either GPIOF_DIR_IN or -EINVAL, -* change the direction to output and set the GPIO as active. +* is, if gpiod_get_direction returns either 1 or -EINVAL, change the +* direction to output and set the GPIO as active. * Do not force the GPIO to active when it was already output as it * could cause backlight flickering or we would enable the backlight too * early. Leave the decision of the initial backlight state for later. */ if (pb->enable_gpio && -gpiod_get_direction (pb->enable_gpio) !=GPIOF_DIR_OUT ) +gpiod_get_direction (pb->enable_gpio) !=0 )gpiod_direction_output (pb->enable_gpio,1 ); pb->power_supply =devm_regulator_get (&pdev->dev,"power" );
Greg Kroah-Hartman
maintainerPATCH 181/246 stop_machine: Use raw spinlocks
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Gleixner <[email protected]>
[ Upstream commit de5b55c1d4e30740009864eb35ce4ed856aac01d ]
Use raw-locks in stop_machine() to allow locking in irq-off and preempt-disabled regions on -RT. This also documents the possible locking context in general.
--- kernel/stop_machine.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
kernel/stop_machine.c +12 -12
@@ -37,7 +37,7 @@ struct cpu_stop_done {struct cpu_stopper {struct task_struct *thread; -spinlock_t lock; +raw_spinlock_t lock;bool enabled;/* is this stopper enabled? */ struct list_head works;/* list of pending works */
@@ -81,13 +81,13 @@ static bool cpu_stop_queue_work(unsignedunsigned long flags;bool enabled; -spin_lock_irqsave (&stopper->lock, flags); +raw_spin_lock_irqsave (&stopper->lock, flags); enabled = stopper->enabled;if (enabled)__cpu_stop_queue_work (stopper, work, &wakeq);else if (work->done)cpu_stop_signal_done (work->done); -spin_unlock_irqrestore (&stopper->lock, flags); +raw_spin_unlock_irqrestore (&stopper->lock, flags);wake_up_q (&wakeq);
@@ -237,8 +237,8 @@ static int cpu_stop_queue_two_works(intDEFINE_WAKE_Q (wakeq);int err; retry: -spin_lock_irq (&stopper1->lock); -spin_lock_nested (&stopper2->lock,SINGLE_DEPTH_NESTING ); +raw_spin_lock_irq (&stopper1->lock); +raw_spin_lock_nested (&stopper2->lock,SINGLE_DEPTH_NESTING ); err = -ENOENT ;if (!stopper1->enabled || !stopper2->enabled)
@@ -261,8 +261,8 @@ retry:__cpu_stop_queue_work (stopper1, work1, &wakeq);__cpu_stop_queue_work (stopper2, work2, &wakeq); unlock: -spin_unlock (&stopper2->lock); -spin_unlock_irq (&stopper1->lock); +raw_spin_unlock (&stopper2->lock); +raw_spin_unlock_irq (&stopper1->lock);if (unlikely (err == -EDEADLK )) {while (stop_cpus_in_progress)
@@ -461,9 +461,9 @@ static int cpu_stop_should_run(unsignedunsigned long flags;int run; -spin_lock_irqsave (&stopper->lock, flags); +raw_spin_lock_irqsave (&stopper->lock, flags); run = !list_empty (&stopper->works); -spin_unlock_irqrestore (&stopper->lock, flags); +raw_spin_unlock_irqrestore (&stopper->lock, flags);return run; }
@@ -474,13 +474,13 @@ static void cpu_stopper_thread(unsigned repeat: work =NULL ; -spin_lock_irq (&stopper->lock); +raw_spin_lock_irq (&stopper->lock);if (!list_empty (&stopper->works)) { work =list_first_entry (&stopper->works, struct cpu_stop_work, list);list_del_init (&work->list); } -spin_unlock_irq (&stopper->lock); +raw_spin_unlock_irq (&stopper->lock);if (work) {cpu_stop_fn_t fn = work->fn;
@@ -554,7 +554,7 @@ static int __init cpu_stop_init(void)for_each_possible_cpu (cpu) {struct cpu_stopper *stopper = &per_cpu (cpu_stopper, cpu); -spin_lock_init (&stopper->lock); +raw_spin_lock_init (&stopper->lock);INIT_LIST_HEAD (&stopper->works); }
Greg Kroah-Hartman
maintainerPATCH 182/246 delayacct: Use raw_spinlocks
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <[email protected]>
[ Upstream commit 02acc80d19edb0d5684c997b2004ad19f9f5236e ]
try_to_wake_up() might invoke delayacct_blkio_end() while holding the pi_lock (which is a raw_spinlock_t). delayacct_blkio_end() acquires task_delay_info.lock which is a spinlock_t. This causes a might sleep splat on -RT where non raw spinlocks are converted to 'sleeping' spinlocks.
task_delay_info.lock is only held for a short amount of time so it's not a problem latency wise to make convert it to a raw spinlock.
--- include/linux/delayacct.h | 2 +- kernel/delayacct.c | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-)
include/linux/delayacct.h +1 -1
@@ -29,7 +29,7 @@ #ifdef CONFIG_TASK_DELAY_ACCT struct task_delay_info { - spinlock_t lock; + raw_spinlock_t lock; unsigned int flags; /* Private per-task flags */ /* For each stat XXX, add following, aligned appropriately
kernel/delayacct.c +9 -8
@@ -44,23 +44,24 @@ void __delayacct_tsk_init(struct task_st { tsk->delays =kmem_cache_zalloc (delayacct_cache,GFP_KERNEL );if (tsk->delays) -spin_lock_init (&tsk->delays->lock); +raw_spin_lock_init (&tsk->delays->lock); }/* * Finish delay accounting for a statistic using its timestamps (@start), * accumalator (@total) and @count */ -static void delayacct_end (spinlock_t *lock,u64 *start,u64 *total,u32 *count) +static void delayacct_end (raw_spinlock_t *lock,u64 *start,u64 *total, +u32 *count) {s64 ns =ktime_get_ns () - *start;unsigned long flags;if (ns >0 ) { -spin_lock_irqsave (lock, flags); +raw_spin_lock_irqsave (lock, flags); *total += ns; (*count)++; -spin_unlock_irqrestore (lock, flags); +raw_spin_unlock_irqrestore (lock, flags); } }
@@ -127,7 +128,7 @@ int __delayacct_add_tsk(struct taskstats/* zero XXX_total, non-zero XXX_count implies XXX stat overflowed */ -spin_lock_irqsave (&tsk->delays->lock, flags); +raw_spin_lock_irqsave (&tsk->delays->lock, flags); tmp = d->blkio_delay_total + tsk->delays->blkio_delay; d->blkio_delay_total = (tmp < d->blkio_delay_total) ?0 : tmp; tmp = d->swapin_delay_total + tsk->delays->swapin_delay;
@@ -137,7 +138,7 @@ int __delayacct_add_tsk(struct taskstats d->blkio_count += tsk->delays->blkio_count; d->swapin_count += tsk->delays->swapin_count; d->freepages_count += tsk->delays->freepages_count; -spin_unlock_irqrestore (&tsk->delays->lock, flags); +raw_spin_unlock_irqrestore (&tsk->delays->lock, flags);return 0 ; }
@@ -147,10 +148,10 @@ __u64 __delayacct_blkio_ticks(struct tas__u64 ret;unsigned long flags; -spin_lock_irqsave (&tsk->delays->lock, flags); +raw_spin_lock_irqsave (&tsk->delays->lock, flags); ret =nsec_to_clock_t (tsk->delays->blkio_delay + tsk->delays->swapin_delay); -spin_unlock_irqrestore (&tsk->delays->lock, flags); +raw_spin_unlock_irqrestore (&tsk->delays->lock, flags);return ret; }
Greg Kroah-Hartman
maintainerPATCH 183/246 memory: tegra: Do not handle spurious interrupts
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Osipenko <[email protected]>
[ Upstream commit bf3fbdfbec947cdd04b2f2c4bce11534c8786eee ]
The ISR reads interrupts-enable mask, but doesn't utilize it. Apply the mask to the interrupt status and don't handle interrupts that MC driver haven't asked for. Kernel would disable spurious MC IRQ and report the error. This would happen only in a case of a very severe bug.
--- drivers/memory/tegra/mc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/memory/tegra/mc.c +4 -1
@@ -252,8 +252,11 @@ static irqreturn_t tegra_mc_irq(int irq,unsigned int bit;/* mask all interrupts to avoid flooding */ - status =mc_readl (mc,MC_INTSTATUS ); mask =mc_readl (mc,MC_INTMASK ); + status =mc_readl (mc,MC_INTSTATUS ) & mask; + +if (!status) +return IRQ_NONE ;for_each_set_bit (bit, &status,32 ) {const char *error = status_names[bit] ?:"unknown" ;
Greg Kroah-Hartman
maintainerPATCH 184/246 memory: tegra: Apply interrupts mask per SoC
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Osipenko <[email protected]>
[ Upstream commit 1c74d5c0de0c2cc29fef97a19251da2ad6f579bd ]
Currently we are enabling handling of interrupts specific to Tegra124+ which happen to overlap with previous generations. Let's specify interrupts mask per SoC generation for consistency and in a preparation of squashing of Tegra20 driver into the common one that will enable handling of GART faults which may be undesirable by newer generations.
--- drivers/memory/tegra/mc.c | 21 +++------------------ drivers/memory/tegra/mc.h | 9 +++++++++ drivers/memory/tegra/tegra114.c | 2 ++ drivers/memory/tegra/tegra124.c | 6 ++++++ drivers/memory/tegra/tegra210.c | 3 +++ drivers/memory/tegra/tegra30.c | 2 ++ include/soc/tegra/mc.h | 2 ++ 7 files changed, 27 insertions(+), 18 deletions(-)
drivers/memory/tegra/mc.c +3 -18
@@ -20,14 +20,6 @@#include "mc.h" #define MC_INTSTATUS 0x000 -#define MC_INT_DECERR_MTS (1 << 16) -#define MC_INT_SECERR_SEC (1 << 13) -#define MC_INT_DECERR_VPR (1 << 12) -#define MC_INT_INVALID_APB_ASID_UPDATE (1 << 11) -#define MC_INT_INVALID_SMMU_PAGE (1 << 10) -#define MC_INT_ARBITRATION_EMEM (1 << 9) -#define MC_INT_SECURITY_VIOLATION (1 << 8) -#define MC_INT_DECERR_EMEM (1 << 6)#define MC_INTMASK 0x004
@@ -248,13 +240,11 @@ static const char *const error_names[8]static irqreturn_t tegra_mc_irq (int irq,void *data) {struct tegra_mc *mc = data; -unsigned long status, mask; +unsigned long status;unsigned int bit;/* mask all interrupts to avoid flooding */ - mask =mc_readl (mc,MC_INTMASK ); - status =mc_readl (mc,MC_INTSTATUS ) & mask; - + status =mc_readl (mc,MC_INTSTATUS ) & mc->soc->intmask;if (!status)return IRQ_NONE ;
@@ -349,7 +339,6 @@ static int tegra_mc_probe(struct platforconst struct of_device_id *match;struct resource *res;struct tegra_mc *mc; -u32 value;int err; match =of_match_node (tegra_mc_of_match, pdev->dev.of_node);
@@ -417,11 +406,7 @@ static int tegra_mc_probe(struct platforWARN (!mc->soc->client_id_mask,"Missing client ID mask for this SoC\n" ); - value =MC_INT_DECERR_MTS |MC_INT_SECERR_SEC |MC_INT_DECERR_VPR | -MC_INT_INVALID_APB_ASID_UPDATE |MC_INT_INVALID_SMMU_PAGE | -MC_INT_SECURITY_VIOLATION |MC_INT_DECERR_EMEM ; - -mc_writel (mc, value,MC_INTMASK ); +mc_writel (mc, mc->soc->intmask,MC_INTMASK );return 0 ; }
drivers/memory/tegra/mc.h +9 -0
@@ -14,6 +14,15 @@#include <soc/tegra/mc.h> +#define MC_INT_DECERR_MTS (1 << 16) +#define MC_INT_SECERR_SEC (1 << 13) +#define MC_INT_DECERR_VPR (1 << 12) +#define MC_INT_INVALID_APB_ASID_UPDATE (1 << 11) +#define MC_INT_INVALID_SMMU_PAGE (1 << 10) +#define MC_INT_ARBITRATION_EMEM (1 << 9) +#define MC_INT_SECURITY_VIOLATION (1 << 8) +#define MC_INT_DECERR_EMEM (1 << 6) +static inline u32 mc_readl (struct tegra_mc *mc,unsigned long offset) {return readl (mc->regs + offset);
drivers/memory/tegra/tegra114.c +2 -0
@@ -930,4 +930,6 @@ const struct tegra_mc_soc tegra114_mc_so .atom_size = 32, .client_id_mask = 0x7f, .smmu = &tegra114_smmu_soc, + .intmask = MC_INT_INVALID_SMMU_PAGE | MC_INT_SECURITY_VIOLATION | + MC_INT_DECERR_EMEM, };
drivers/memory/tegra/tegra124.c +6 -0
@@ -1020,6 +1020,9 @@ const struct tegra_mc_soc tegra124_mc_so .smmu = &tegra124_smmu_soc, .emem_regs = tegra124_mc_emem_regs, .num_emem_regs = ARRAY_SIZE(tegra124_mc_emem_regs), + .intmask =MC_INT_DECERR_MTS |MC_INT_SECERR_SEC |MC_INT_DECERR_VPR | +MC_INT_INVALID_APB_ASID_UPDATE |MC_INT_INVALID_SMMU_PAGE | + MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM, };#endif /* CONFIG_ARCH_TEGRA_124_SOC */
@@ -1042,5 +1045,8 @@ const struct tegra_mc_soc tegra132_mc_so .atom_size = 32, .client_id_mask = 0x7f, .smmu = &tegra132_smmu_soc, + .intmask =MC_INT_DECERR_MTS |MC_INT_SECERR_SEC |MC_INT_DECERR_VPR | +MC_INT_INVALID_APB_ASID_UPDATE |MC_INT_INVALID_SMMU_PAGE | + MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM, };#endif /* CONFIG_ARCH_TEGRA_132_SOC */
drivers/memory/tegra/tegra210.c +3 -0
@@ -1077,4 +1077,7 @@ const struct tegra_mc_soc tegra210_mc_so .atom_size = 64, .client_id_mask = 0xff, .smmu = &tegra210_smmu_soc, + .intmask =MC_INT_DECERR_MTS |MC_INT_SECERR_SEC |MC_INT_DECERR_VPR | +MC_INT_INVALID_APB_ASID_UPDATE |MC_INT_INVALID_SMMU_PAGE | + MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM, };
drivers/memory/tegra/tegra30.c +2 -0
@@ -952,4 +952,6 @@ const struct tegra_mc_soc tegra30_mc_soc .atom_size = 16, .client_id_mask = 0x7f, .smmu = &tegra30_smmu_soc, + .intmask = MC_INT_INVALID_SMMU_PAGE | MC_INT_SECURITY_VIOLATION | + MC_INT_DECERR_EMEM, };
include/soc/tegra/mc.h +2 -0
@@ -99,6 +99,8 @@ struct tegra_mc_soc {u8 client_id_mask;const struct tegra_smmu_soc *smmu; + +u32 intmask; };struct tegra_mc {
Greg Kroah-Hartman
maintainerPATCH 187/246 igb: Fix queue selection on MAC filters on i210
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vinicius Costa Gomes <[email protected]>
[ Upstream commit 4dc93fcf0b95dc3fda4db917effae31fbb8ad2a8 ]
On the RAH registers there are semantic differences on the meaning of the "queue" parameter for traffic steering depending on the controller
model: there is the 82575 meaning, which "queue" means a RX Hardware Queue, and the i350 meaning, where it is a reception pool.
The previous behaviour was having no effect for i210 based controllers because the QSEL bit of the RAH register wasn't being set.
This patch separates the condition in discrete cases, so the different handling is clearer.
--- drivers/net/ethernet/intel/igb/igb_main.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/net/ethernet/intel/igb/igb_main.c +7 -2
@@ -8376,12 +8376,17 @@ static void igb_rar_set_index(struct igbif (is_valid_ether_addr (addr)) rar_high |=E1000_RAH_AV ; -if (hw->mac.type == e1000_82575) +switch (hw->mac.type) { +case e1000_82575: +case e1000_i210: rar_high |=E1000_RAH_POOL_1 * adapter->mac_table[index].queue; -else +break ; +default : rar_high |=E1000_RAH_POOL_1 << adapter->mac_table[index].queue; +break ; + } }wr32 (E1000_RAL (index), rar_low);
Greg Kroah-Hartman
maintainerPATCH 188/246 drm/gma500: fix psb_intel_lvds_mode_valid()s return type
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luc Van Oostenryck <[email protected]>
[ Upstream commit 2ea009095c6e7396915a1d0dd480c41f02985f79 ]
The method struct drm_connector_helper_funcs::mode_valid is defined as returning an 'enum drm_mode_status' but the driver implementation for this method, psb_intel_lvds_mode_valid(), uses an 'int' for it.
Fix this by using 'enum drm_mode_status' for psb_intel_lvds_mode_valid().
--- drivers/gpu/drm/gma500/psb_intel_drv.h | 2 +- drivers/gpu/drm/gma500/psb_intel_lvds.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/gma500/psb_intel_drv.h +1 -1
@@ -255,7 +255,7 @@ extern int intelfb_remove(struct drm_devextern bool psb_intel_lvds_mode_fixup (struct drm_encoder *encoder,const struct drm_display_mode *mode,struct drm_display_mode *adjusted_mode); -extern int psb_intel_lvds_mode_valid (struct drm_connector *connector, +extern enum drm_mode_status psb_intel_lvds_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode); extern int psb_intel_lvds_set_property(struct drm_connector *connector, struct drm_property *property,
drivers/gpu/drm/gma500/psb_intel_lvds.c +1 -1
@@ -343,7 +343,7 @@ static void psb_intel_lvds_restore(struc } } -int psb_intel_lvds_mode_valid (struct drm_connector *connector, +enum drm_mode_status psb_intel_lvds_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_psb_private *dev_priv = connector->dev->dev_private;
Greg Kroah-Hartman
maintainerPATCH 189/246 ipconfig: Correctly initialise ic_nameservers
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Novakovic <[email protected]>
[ Upstream commit 300eec7c0a2495f771709c7642aa15f7cc148b83 ]
ic_nameservers, which stores the list of name servers discovered by ipconfig, is initialised (i.e. has all of its elements set to NONE, or 0xffffffff) by ic_nameservers_predef() in the following scenarios:
- before the "ip=" and "nfsaddrs=" kernel command line parameters are parsed (in ip_auto_config_setup());
- before autoconfiguring via DHCP or BOOTP (in ic_bootp_init()), in order to clear any values that may have been set after parsing "ip=" or "nfsaddrs=" and are no longer needed.
This means that ic_nameservers_predef() is not called when neither "ip=" nor "nfsaddrs=" is specified on the kernel command line. In this scenario, every element in ic_nameservers remains set to 0x00000000, which is indistinguishable from ANY and causes pnp_seq_show() to write the following (bogus) information to /proc/net/pnp:
#MANUAL
nameserver 0.0.0.0
nameserver 0.0.0.0
nameserver 0.0.0.0
This is potentially problematic for systems that blindly link /etc/resolv.conf to /proc/net/pnp.
Ensure that ic_nameservers is also initialised when neither "ip=" nor "nfsaddrs=" are specified by calling ic_nameservers_predef() in ip_auto_config(), but only when ip_auto_config_setup() was not called earlier. This causes the following to be written to /proc/net/pnp, and is consistent with what gets written when ipconfig is configured manually but no name servers are specified on the kernel command line:
#MANUAL
--- net/ipv4/ipconfig.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
net/ipv4/ipconfig.c +13 -0
@@ -781,6 +781,11 @@ static void __init ic_bootp_init_ext(u8*/ static inline void __init ic_bootp_init (void ) { +/* Re-initialise all name servers to NONE, in case any were set via the +* "ip=" or "nfsaddrs=" kernel command line parameters: any IP addresses +* specified there will already have been decoded but are no longer +* needed +*/ ic_nameservers_predef ();dev_add_pack (&bootp_packet_type);
@@ -1402,6 +1407,13 @@ static int __init ip_auto_config(void)int err;unsigned int i; +/* Initialise all name servers to NONE (but only if the "ip=" or +* "nfsaddrs=" kernel command line parameters weren't decoded, otherwise +* we'll overwrite the IP addresses specified there) +*/ +if (ic_set_manually ==0 ) +ic_nameservers_predef (); +#ifdef CONFIG_PROC_FS proc_create ("pnp" ,S_IRUGO , init_net.proc_net, &pnp_seq_fops);#endif /* CONFIG_PROC_FS */
@@ -1622,6 +1634,7 @@ static int __init ip_auto_config_setup(creturn 1 ; } +/* Initialise all name servers to NONE */ ic_nameservers_predef ();/* Parse string for static IP assignment. */
Greg Kroah-Hartman
maintainerPATCH 190/246 rsi: Fix invalid vdd warning in mmc
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Siva Rebbagondla <[email protected]>
[ Upstream commit 78e450719c702784e42af6da912d3692fd3da0cb ]
While performing cleanup, driver is messing with card->ocr value by not masking rocr against ocr_avail. Below panic is observed with some of the SDIO host controllers due to this. Issue is resolved by reverting incorrect modifications to vdd.
[ 927.423821] mmc1: Invalid vdd 0x1f [ 927.423925] Modules linked in: rsi_sdio(+) cmac bnep arc4 rsi_91x mac80211 cfg80211 btrsi rfcomm bluetooth ecdh_generic [ 927.424073] CPU: 0 PID: 1624 Comm: insmod Tainted: G W 4.15.0-1000-caracalla #1 [ 927.424075] Hardware name: Dell Inc. Edge Gateway 3003/ , BIOS 01.00.06 01/22/2018 [ 927.424082] RIP: 0010:sdhci_set_power_noreg+0xdd/0x190[sdhci] [ 927.424085] RSP: 0018:ffffac3fc064b930 EFLAGS: 00010282 [ 927.424107] Call Trace: [ 927.424118] sdhci_set_power+0x5a/0x60 [sdhci] [ 927.424125] sdhci_set_ios+0x360/0x3b0 [sdhci] [ 927.424133] mmc_set_initial_state+0x92/0x120 [ 927.424137] mmc_power_up.part.34+0x33/0x1d0 [ 927.424141] mmc_power_up+0x17/0x20 [ 927.424147] mmc_sdio_runtime_resume+0x2d/0x50 [ 927.424151] mmc_runtime_resume+0x17/0x20 [ 927.424156] __rpm_callback+0xc4/0x200 [ 927.424161] ? idr_alloc_cyclic+0x57/0xd0 [ 927.424165] ? mmc_runtime_suspend+0x20/0x20 [ 927.424169] rpm_callback+0x24/0x80 [ 927.424172] ? mmc_runtime_suspend+0x20/0x20 [ 927.424176] rpm_resume+0x4b3/0x6c0 [ 927.424181] __pm_runtime_resume+0x4e/0x80 [ 927.424188] driver_probe_device+0x41/0x490 [ 927.424192] __driver_attach+0xdf/0xf0 [ 927.424196] ? driver_probe_device+0x490/0x490 [ 927.424201] bus_for_each_dev+0x6c/0xc0 [ 927.424205] driver_attach+0x1e/0x20 [ 927.424209] bus_add_driver+0x1f4/0x270 [ 927.424217] ? rsi_sdio_ack_intr+0x50/0x50 [rsi_sdio] [ 927.424221] driver_register+0x60/0xe0 [ 927.424227] ? rsi_sdio_ack_intr+0x50/0x50 [rsi_sdio] [ 927.424231] sdio_register_driver+0x20/0x30 [ 927.424237] rsi_module_init+0x16/0x40 [rsi_sdio]
--- drivers/net/wireless/rsi/rsi_91x_sdio.c | 2 -- 1 file changed, 2 deletions(-)
drivers/net/wireless/rsi/rsi_91x_sdio.c +0 -2
@@ -161,7 +161,6 @@ static void rsi_reset_card(struct sdio_fint err;struct mmc_card *card = pfunction->card;struct mmc_host *host = card->host; -s32 bit = (fls (host->ocr_avail) -1 );u8 cmd52_resp;u32 clock, resp, i;u16 rca;
@@ -181,7 +180,6 @@ static void rsi_reset_card(struct sdio_fmsleep (20 );/* Initialize the SDIO card */ - host->ios.vdd = bit; host->ios.chip_select =MMC_CS_DONTCARE ; host->ios.bus_mode =MMC_BUSMODE_OPENDRAIN ; host->ios.power_mode =MMC_POWER_UP ;
Greg Kroah-Hartman
maintainerPATCH 191/246 rsi: fix nommu_map_sg overflow kernel panic
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Siva Rebbagondla <[email protected]>
[ Upstream commit f700546682a62a87a9615121a37ee7452dab4b76 ]
Following overflow kernel panic is observed on some platforms while loading the driver. It is fixed if dynamically allocated memory is passed to SDIO instead of static one
[ 927.513963] nommu_map_sg: overflow 17d54064ba7c+20 of device mask ffffffff [ 927.517712] Modules linked in: rsi_sdio(+) cmac bnep arc4 rsi_91x mac80211 cfg80211 btrsi rfcomm bluetooth ecdh_generic snd_soc_sst_bytcr_rt5660 [ 927.517861] CPU: 0 PID: 1624 Comm: insmod Tainted: G W 4.15.0-1000 #1 [ 927.517870] RIP: 0010:sdhci_send_command+0x5f0/0xa90 [sdhci] [ 927.517873] RSP: 0000:ffffac3fc064b6d8 EFLAGS: 00010086 [ 927.517895] Call Trace: [ 927.517908] ? __schedule+0x3cd/0x890 [ 927.517915] ? mod_timer+0x17b/0x3c0 [ 927.517922] sdhci_request+0x7c/0xf0 [sdhci] [ 927.517928] __mmc_start_request+0x5a/0x170 [ 927.517932] mmc_start_request+0x74/0x90 [ 927.517936] mmc_wait_for_req+0x87/0xe0 [ 927.517940] mmc_io_rw_extended+0x2fd/0x330 [ 927.517946] ? mmc_wait_data_done+0x30/0x30 [ 927.517951] sdio_io_rw_ext_helper+0x160/0x210 [ 927.517956] sdio_writesb+0x1d/0x20 [ 927.517966] rsi_sdio_write_register_multiple+0x68/0x110 [rsi_sdio] [ 927.517976] rsi_hal_device_init+0x357/0x910 [rsi_91x] [ 927.517983] ? rsi_hal_device_init+0x357/0x910 [rsi_91x] [ 927.517990] rsi_probe+0x2c6/0x450 [rsi_sdio] [ 927.517995] sdio_bus_probe+0xfc/0x110 [ 927.518000] driver_probe_device+0x2b3/0x490 [ 927.518005] __driver_attach+0xdf/0xf0 [ 927.518008] ? driver_probe_device+0x490/0x490 [ 927.518014] bus_for_each_dev+0x6c/0xc0 [ 927.518018] driver_attach+0x1e/0x20 [ 927.518021] bus_add_driver+0x1f4/0x270 [ 927.518028] ? rsi_sdio_ack_intr+0x50/0x50 [rsi_sdio] [ 927.518031] driver_register+0x60/0xe0 [ 927.518038] ? rsi_sdio_ack_intr+0x50/0x50 [rsi_sdio] [ 927.518041] sdio_register_driver+0x20/0x30 [ 927.518047] rsi_module_init+0x16/0x40 [rsi_sdio]
--- drivers/net/wireless/rsi/rsi_91x_hal.c | 35 +++++++++++++++++++------------- drivers/net/wireless/rsi/rsi_91x_sdio.c | 21 ++++++++++++------- drivers/net/wireless/rsi/rsi_sdio.h | 2 - 3 files changed, 36 insertions(+), 22 deletions(-)
drivers/net/wireless/rsi/rsi_91x_hal.c +21 -14
@@ -557,28 +557,32 @@ static int bl_write_header(struct rsi_hw u32 content_size) {struct rsi_host_intf_ops *hif_ops = adapter->host_intf_ops; -struct bl_header bl_hdr; +struct bl_header *bl_hdr;u32 write_addr, write_len;int status; - bl_hdr.flags =0 ; - bl_hdr.image_no =cpu_to_le32 (adapter->priv->coex_mode); - bl_hdr.check_sum =cpu_to_le32 ( - *(u32 *)&flash_content[CHECK_SUM_OFFSET ]); - bl_hdr.flash_start_address =cpu_to_le32 ( - *(u32 *)&flash_content[ADDR_OFFSET ]); - bl_hdr.flash_len =cpu_to_le32 (*(u32 *)&flash_content[LEN_OFFSET ]); + bl_hdr =kzalloc (sizeof (*bl_hdr),GFP_KERNEL ); +if (!bl_hdr) +return -ENOMEM ; + + bl_hdr->flags =0 ; + bl_hdr->image_no =cpu_to_le32 (adapter->priv->coex_mode); + bl_hdr->check_sum = +cpu_to_le32 (*(u32 *)&flash_content[CHECK_SUM_OFFSET ]); + bl_hdr->flash_start_address = +cpu_to_le32 (*(u32 *)&flash_content[ADDR_OFFSET ]); + bl_hdr->flash_len =cpu_to_le32 (*(u32 *)&flash_content[LEN_OFFSET ]); write_len =sizeof (struct bl_header );if (adapter->rsi_host_intf ==RSI_HOST_INTF_USB ) { write_addr =PING_BUFFER_ADDRESS ; status = hif_ops->write_reg_multiple (adapter, write_addr, - (u8 *)&bl_hdr, write_len); + (u8 *)bl_hdr, write_len);if (status <0 ) {rsi_dbg (ERR_ZONE ,"%s: Failed to load Version/CRC structure\n" , __func__); -return status; + goto fail; } }else { write_addr =PING_BUFFER_ADDRESS >>16 ;
@@ -587,20 +591,23 @@ static int bl_write_header(struct rsi_hwrsi_dbg (ERR_ZONE ,"%s: Unable to set ms word to common reg\n" , __func__); -return status; + goto fail; } write_addr =RSI_SD_REQUEST_MASTER | (PING_BUFFER_ADDRESS &0xFFFF ); status = hif_ops->write_reg_multiple (adapter, write_addr, - (u8 *)&bl_hdr, write_len); + (u8 *)bl_hdr, write_len);if (status <0 ) {rsi_dbg (ERR_ZONE ,"%s: Failed to load Version/CRC structure\n" , __func__); -return status; + goto fail; } } -return 0 ; + status =0 ; +fail: +kfree (bl_hdr); +return status; }static u32 read_flash_capacity (struct rsi_hw *adapter)
drivers/net/wireless/rsi/rsi_91x_sdio.c +14 -7
@@ -968,17 +968,21 @@ static void ulp_read_write(struct rsi_hw/*This function resets and re-initializes the chip.*/ static void rsi_reset_chip (struct rsi_hw *adapter) { -__le32 data; +u8 *data;u8 sdio_interrupt_status =0 ;u8 request =1 ;int ret; + data =kzalloc (sizeof (u32),GFP_KERNEL ); +if (!data) +return ; +rsi_dbg (INFO_ZONE ,"Writing disable to wakeup register\n" ); ret =rsi_sdio_write_register (adapter,0 ,SDIO_WAKEUP_REG , &request);if (ret <0 ) {rsi_dbg (ERR_ZONE ,"%s: Failed to write SDIO wakeup register\n" , __func__); -return ; + goto err; }msleep (20 ); ret = rsi_sdio_read_register(adapter, RSI_FN1_INT_REGISTER,
@@ -986,7 +990,7 @@ static void rsi_reset_chip(struct rsi_hwif (ret <0 ) {rsi_dbg (ERR_ZONE ,"%s: Failed to Read Intr Status Register\n" , __func__); -return ; + goto err; }rsi_dbg (INFO_ZONE ,"%s: Intr Status Register value = %d\n" , __func__, sdio_interrupt_status);
@@ -996,17 +1000,17 @@ static void rsi_reset_chip(struct rsi_hwrsi_dbg (ERR_ZONE ,"%s: Unable to set ms word to common reg\n" , __func__); -return ; + goto err; } - data =TA_HOLD_THREAD_VALUE ; +put_unaligned_le32 (TA_HOLD_THREAD_VALUE , data);if (rsi_sdio_write_register_multiple (adapter,TA_HOLD_THREAD_REG |RSI_SD_REQUEST_MASTER , - (u8 *)&data,4 )) { + data,4 )) {rsi_dbg (ERR_ZONE ,"%s: Unable to hold Thread-Arch processor threads\n" , __func__); -return ; + goto err; }/* This msleep will ensure Thread-Arch processor to go to hold
@@ -1027,6 +1031,9 @@ static void rsi_reset_chip(struct rsi_hw* read write operations to complete for chip reset. */ msleep (500 ); +err: +kfree (data); +return ; }/**
drivers/net/wireless/rsi/rsi_sdio.h +1 -1
@@ -85,7 +85,7 @@ enum sdio_interrupt_type {#define TA_SOFT_RST_CLR 0#define TA_SOFT_RST_SET BIT(0)#define TA_PC_ZERO 0 -#define TA_HOLD_THREAD_VALUE cpu_to_le32(0xF) +#define TA_HOLD_THREAD_VALUE 0xF#define TA_RELEASE_THREAD_VALUE cpu_to_le32(0xF)#define TA_BASE_ADDR 0x2200#define MISC_CFG_BASE_ADDR 0x4105
Greg Kroah-Hartman
maintainerPATCH 193/246 staging: vchiq_core: Fix missing semaphore release in error case
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Wahren <[email protected]>
[ Upstream commit 8113b89fc615cfb531df0334fb3a091cf6a45ce0 ]
The bail out branch in case of a invalid tx_pos missed a semaphore release. Dan Carpenter found this with a static checker.
--- drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c | 1 + 1 file changed, 1 insertion(+)
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c +1 -0
@@ -601,6 +601,7 @@ reserve_space(VCHIQ_STATE_T *state, size }if (tx_pos == (state->slot_queue_available *VCHIQ_SLOT_SIZE )) { +up (&state->slot_available_event);pr_warn ("%s: invalid tx_pos: %d\n" , __func__, tx_pos);return NULL ; }