4.9.137-stable review
Subsystems (6)
Greg Kroah-Hartman
maintainercover 4.9.137-stable review
This is the start of the stable review cycle for the 4.9.137 release. There are 141 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 Tue Nov 13 22:15:38 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.9.137-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.9.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.9.137-rc1
Josef Bacik <[email protected]>
btrfs: set max_extent_size properly
Filipe Manana <[email protected]>
Btrfs: fix null pointer dereference on compressed write path error
Qu Wenruo <[email protected]>
btrfs: qgroup: Dirty all qgroups before rescan
Filipe Manana <[email protected]>
Btrfs: fix wrong dentries after fsync of file that got its parent replaced
Josef Bacik <[email protected]>
btrfs: make sure we create all new block groups
Josef Bacik <[email protected]>
btrfs: reset max_extent_size on clear in a bitmap
Josef Bacik <[email protected]>
btrfs: wait on caching when putting the bg cache
Jeff Mahoney <[email protected]>
btrfs: don't attempt to trim devices that don't support it
Jeff Mahoney <[email protected]>
btrfs: iterate all devices during trim, instead of fs_devices::alloc_list
Jeff Mahoney <[email protected]>
btrfs: fix error handling in free_log_tree
Qu Wenruo <[email protected]>
btrfs: locking: Add extra check in btrfs_init_new_buffer() to avoid deadlock
Qu Wenruo <[email protected]>
btrfs: Handle owner mismatch gracefully when walking up tree
Johan Hovold <[email protected]>
soc/tegra: pmc: Fix child-node lookup
Thor Thayer <[email protected]>
arm64: dts: stratix10: Correct System Manager register size
Nicolas Pitre <[email protected]>
Cramfs: fix abad comparison when wrap-arounds occur
Colin Ian King <[email protected]>
rpmsg: smd: fix memory leak on channel create
Tri Vo <[email protected]>
arm64: lse: remove -fcall-used-x0 flag
Mauro Carvalho Chehab <[email protected]>
media: em28xx: make v4l2-compliance happier by starting sequence on zero
Mauro Carvalho Chehab <[email protected]>
media: em28xx: fix input name for Terratec AV 350
Mauro Carvalho Chehab <[email protected]>
media: tvp5150: avoid going past array on v4l2_querymenu()
Mauro Carvalho Chehab <[email protected]>
media: em28xx: use a default format if TRY_FMT fails
Juergen Gross <[email protected]>
xen: fix xen_qlock_wait()
He Zhe <[email protected]>
kgdboc: Passing ekgdboc to command line causes panic
Hans Verkuil <[email protected]>
media: v4l2-tpg: fix kernel oops when enabling HFLIP and OSD
Maciej W. Rozycki <[email protected]>
TC: Set DMA masks for devices
Aaro Koskinen <[email protected]>
MIPS: OCTEON: fix out of bounds array access on CN68XX
Christophe Leroy <[email protected]>
powerpc/msi: Fix compile error on mpc83xx
Wenwen Wang <[email protected]>
dm ioctl: harden copy_params()'s copy_from_user() from malicious users
Amir Goldstein <[email protected]>
lockd: fix access beyond unterminated strings in prints
Trond Myklebust <[email protected]>
nfsd: Fix an Oops in free_session()
Trond Myklebust <[email protected]>
NFSv4.1: Fix the r/wsize checking
Lukas Wunner <[email protected]>
genirq: Fix race on spurious interrupt detection
He Zhe <[email protected]>
printk: Fix panic caused by passing log_buf_len to command line
Steve French <[email protected]>
smb3: on kerberos mount if server doesn't specify auth type use krb5
Steve French <[email protected]>
smb3: do not attempt cifs operation in smb3 query info error path
Steve French <[email protected]>
smb3: allow stats which track session and share reconnects to be reset
Andreas Kemnade <[email protected]>
w1: omap-hdq: fix missing bus unregister at removal
Eugen Hristev <[email protected]>
iio: adc: at91: fix wrong channel number in triggered buffer mode
Eugen Hristev <[email protected]>
iio: adc: at91: fix acking DRDY irq on simple conversions
Alexey Khoroshilov <[email protected]>
iio: adc: imx25-gcq: Fix leak of device_node in mx25_gcq_setup_cfgs()
Lars-Peter Clausen <[email protected]>
iio: ad5064: Fix regulator handling
Arnd Bergmann <[email protected]>
kbuild: fix kernel/bounds.c 'W=1' warning
Mike Kravetz <[email protected]>
hugetlbfs: dirty pages as they are added to pagecache
Eric Biggers <[email protected]>
ima: fix showing large 'violations' or 'runtime_measurements_count'
Horia Geantă <[email protected]>
crypto: tcrypt - fix ghash-generic speed test
Ondrej Mosnacek <[email protected]>
crypto: lrw - Fix out-of bounds access on counter overflow
Eric W. Biederman <[email protected]>
signal/GenWQE: Fix sending of SIGKILL
Bin Meng <[email protected]>
PCI: Add Device IDs for Intel GPU "spurious interrupt" quirk
Qiuxu Zhuo <[email protected]>
EDAC, skx_edac: Fix logical channel intermediate decoding
Tony Luck <[email protected]>
EDAC, {i7core,sb,skx}_edac: Fix uncorrected error counting
Breno Leitao <[email protected]>
HID: hiddev: fix potential Spectre v1
Wang Shilong <[email protected]>
ext4: propagate error from dquot_initialize() in EXT4_IOC_FSSETXATTR
Lukas Czerner <[email protected]>
ext4: initialize retries variable in ext4_da_write_inline_data_begin()
Al Viro <[email protected]>
gfs2_meta: ->mount() can get NULL dev_name
Jan Kara <[email protected]>
jbd2: fix use after free in jbd2_log_do_checkpoint()
Takashi Iwai <[email protected]>
ASoC: intel: skylake: Add missing break in skl_tplg_get_token()
Alexander Duyck <[email protected]>
libnvdimm: Hold reference on parent while scheduling async init
Stefan Nuernberger <[email protected]>
net/ipv4: defensive cipso option parsing
Luca Coelho <[email protected]>
iwlwifi: mvm: check return value of rs_rate_from_ucode_rate()
Shuah Khan (Samsung OSG) <[email protected]>
usbip:vudc: BUG kmalloc-2048 (Not tainted): Poison overwritten
Lubomir Rintel <[email protected]>
libertas: don't set URB_ZERO_PACKET on IN USB transfer
Juergen Gross <[email protected]>
xen: make xen_qlock_wait() nestable
Juergen Gross <[email protected]>
xen: fix race in xen_qlock_wait()
Vasilis Liaskovitis <[email protected]>
xen/blkfront: avoid NULL blkfront_info dereference on device removal
Dr. Greg Wettstein <[email protected]>
tpm: Restore functionality to xen vtpm driver.
Joe Jin <[email protected]>
xen-swiotlb: use actually allocated size on check physical continuous
Marek Szyprowski <[email protected]>
ARM: dts: exynos: Mark 1 GHz CPU OPP as suspend OPP on Exynos5250
Marek Szyprowski <[email protected]>
ARM: dts: exynos: Convert exynos5250.dtsi to opp-v2 bindings
Viresh Kumar <[email protected]>
arm: dts: exynos: Add missing cooling device properties for CPUs
Viresh Kumar <[email protected]>
ARM: dts: exynos: Remove "cooling-{min|max}-level" for CPU nodes
Takashi Iwai <[email protected]>
ALSA: hda: Check the non-cached stream buffers more explicitly
Paul Cercueil <[email protected]>
dmaengine: dma-jz4780: Return error if not probed from DT
Eric W. Biederman <[email protected]>
signal: Always deliver the kernel's SIGKILL and SIGSTOP to a pid namespace init
James Smart <[email protected]>
scsi: lpfc: Correct soft lockup when running mds diagnostics
Alexandre Belloni <[email protected]>
uio: ensure class is registered before devices
Waiman Long <[email protected]>
driver/dma/ioat: Call del_timer_sync() without holding prep_lock
Loic Poulain <[email protected]>
usb: chipidea: Prevent unbalanced IRQ disable
Horia Geantă <[email protected]>
crypto: caam - fix implicit casts in endianness helpers
Suzuki K Poulose <[email protected]>
coresight: etb10: Fix handling of perf mode
Tonghao Zhang <[email protected]>
PCI/MSI: Warn and return error if driver enables MSI/MSI-X twice
Shaohua Li <[email protected]>
MD: fix invalid stored role for a disk
Theodore Ts'o <[email protected]>
ext4: fix argument checking in EXT4_IOC_MOVE_EXT
Alexandre Belloni <[email protected]>
usb: gadget: udc: atmel: handle at91sam9rl PMC
Jorgen Hansen <[email protected]>
VMCI: Resource wildcard match fixed
Javier Martinez Canillas <[email protected]>
tpm: suppress transmit cmd error logs when TPM 1.2 is disabled/deactivated
Denis Drozdov <[email protected]>
IB/ipoib: Clear IPCB before icmp_send
Parav Pandit <[email protected]>
RDMA/core: Do not expose unsupported counters
Wenwen Wang <[email protected]>
scsi: megaraid_sas: fix a missing-check bug
Finn Thain <[email protected]>
scsi: esp_scsi: Track residual for PIO transfers
Michal Hocko <[email protected]>
cgroup, netclassid: add a preemption point to write_classid
Martin Willi <[email protected]>
ath10k: schedule hardware restart if WMI command times out
Sebastian Basierski <[email protected]>
ixgbevf: VF2VF TCP RSS
Douglas Anderson <[email protected]>
pinctrl: ssbi-gpio: Fix pm8xxx_pin_config_get() to be compliant
Douglas Anderson <[email protected]>
pinctrl: spmi-mpp: Fix pmic_mpp_config_get() to be compliant
Stephen Boyd <[email protected]>
pinctrl: qcom: spmi-mpp: Fix drive strength setting
Hans de Goede <[email protected]>
ACPI / LPSS: Add alternative ACPI HIDs for Cherry Trail DMA controllers
Masami Hiramatsu <[email protected]>
kprobes: Return error if we fail to reuse kprobe instead of BUG_ON()
Arend van Spriel <[email protected]>
brcmfmac: fix for proper support of 160MHz bandwidth
YueHaibing <[email protected]>
pinctrl: qcom: spmi-mpp: Fix err handling of pmic_mpp_set_mux
Ben Hutchings <[email protected]>
x86: boot: Fix EFI stub alignment
Christian Hewitt <[email protected]>
Bluetooth: btbcm: Add entry for BCM4335C0 UART bluetooth
Viresh Kumar <[email protected]>
cpufreq: dt: Try freeing static OPPs only if we have added them
Lubomir Rintel <[email protected]>
x86/olpc: Indicate that legacy PC XO-1 platform should not register RTC
Shaul Triebitz <[email protected]>
iwlwifi: pcie: avoid empty free RB queue
Yu Zhao <[email protected]>
mmc: sdhci-pci-o2micro: Add quirk for O2 Micro dev 0x8620 rev 0x01
Prarit Bhargava <[email protected]>
cpupower: Fix coredump on VMWare
Sanskriti Sharma <[email protected]>
perf strbuf: Match va_{add,copy} with va_end
Sanskriti Sharma <[email protected]>
perf tools: Cleanup trace-event-info 'tdata' leak
Sanskriti Sharma <[email protected]>
perf tools: Free temporary 'sys' string in read_event_files()
Thierry Reding <[email protected]>
hwmon: (pwm-fan) Set fan speed to 0 on suspend
Janosch Frank <[email protected]>
s390/sthyi: Fix machine name validity indication
Serhey Popovych <[email protected]>
tun: Consistently configure generic netdev params via rtnetlink
Omar Sandoval <[email protected]>
swim: fix cleanup on setup error
Omar Sandoval <[email protected]>
ataflop: fix error handling during setup
Waiman Long <[email protected]>
locking/lockdep: Fix debug_locks off performance problem
Wolfram Sang <[email protected]>
i2c: rcar: cleanup DMA for all kinds of failure
Masami Hiramatsu <[email protected]>
selftests: ftrace: Add synthetic event syntax testcase
Nathan Chancellor <[email protected]>
net: qla3xxx: Remove overflowing shift statement
Sebastian Andrzej Siewior <[email protected]>
x86/fpu: Remove second definition of fpu in __fpu__restore_sig()
David Miller <[email protected]>
perf cpu_map: Align cpu map synthesized events properly.
Song Muchun <[email protected]>
sched/fair: Fix the min_vruntime update logic in dequeue_entity()
David S. Miller <[email protected]>
sparc64: Make proc_id signed.
David S. Miller <[email protected]>
sparc: Fix single-pcr perf event counter management.
Florian Westphal <[email protected]>
xfrm: policy: use hlist rcu variants on insert
Jiri Olsa <[email protected]>
Revert "perf tools: Fix PMU term format max value calculation"
Eric Dumazet <[email protected]>
bpf: do not blindly change rlimit in reuseport net selftest
Sai Praneeth <[email protected]>
x86/speculation: Support Enhanced IBRS on future CPUs
He Zhe <[email protected]>
x86/corruption-check: Fix panic in memory_corruption_check() when boot option without value is provided
Jiri Kosina <[email protected]>
x86/speculation: Enable cross-hyperthread spectre v2 STIBP mitigation
Alex Stanoev <[email protected]>
ALSA: ca0106: Disable IZD on SB0570 DAC to fix audio pops
Jeremy Cline <[email protected]>
ALSA: hda - Add mic quirk for the Lenovo G50-30 (17aa:3905)
Takashi Iwai <[email protected]>
ALSA: hda - Fix headphone pin config for ASUS G751
Takashi Iwai <[email protected]>
ALSA: hda - Add quirk for ASUS G751 laptop
Helge Deller <[email protected]>
parisc: Fix map_pages() to not overwrite existing pte entries
John David Anglin <[email protected]>
parisc: Fix address in HPMC IVA
Jan Glauber <[email protected]>
ipmi: Fix timer race with module unload
Erik Schmauss <[email protected]>
ACPICA: AML interpreter: add region addresses in global list during initialization
Maciej S. Szmigiero <[email protected]>
pcmcia: Implement CLKRUN protocol disabling for Ricoh bridges
Hou Tao <[email protected]>
jffs2: free jffs2_sb_info through jffs2_kill_sb()
Dmitry Bazhenov <[email protected]>
hwmon: (pmbus) Fix page count auto-detection.
Tang Junhui <[email protected]>
bcache: fix miss key refill->end in writeback
-------------
Diffstat:
Makefile | 4 +- arch/arm/boot/dts/exynos3250.dtsi | 16 +++ arch/arm/boot/dts/exynos4210.dtsi | 15 ++- arch/arm/boot/dts/exynos4412.dtsi | 2 - arch/arm/boot/dts/exynos5250.dtsi | 116 ++++++++++++++++----- arch/arm/boot/dts/exynos5420-cpus.dtsi | 16 --- arch/arm/boot/dts/exynos5422-cpus.dtsi | 16 --- arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi | 2 +- arch/arm64/lib/Makefile | 2 +- arch/mips/cavium-octeon/executive/cvmx-helper.c | 2 +- arch/parisc/kernel/entry.S | 2 +- arch/parisc/kernel/traps.c | 3 +- arch/parisc/mm/init.c | 8 +- arch/powerpc/include/asm/mpic.h | 7 ++ arch/s390/kvm/sthyi.c | 8 +- arch/sparc/include/asm/cpudata_64.h | 2 +- arch/sparc/kernel/perf_event.c | 17 ++- arch/x86/boot/tools/build.c | 7 ++ arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/nospec-branch.h | 1 + arch/x86/kernel/check.c | 15 +++ arch/x86/kernel/cpu/bugs.c | 77 ++++++++++++-- arch/x86/kernel/cpu/common.c | 3 + arch/x86/kernel/fpu/signal.c | 1 - arch/x86/platform/olpc/olpc-xo1-rtc.c | 3 + arch/x86/xen/spinlock.c | 35 +++---- crypto/lrw.c | 7 +- crypto/tcrypt.c | 3 + drivers/acpi/acpi_lpss.c | 2 + drivers/acpi/acpica/dsopcode.c | 4 + drivers/block/ataflop.c | 25 +++-- drivers/block/swim.c | 13 ++- drivers/block/xen-blkfront.c | 3 + drivers/bluetooth/btbcm.c | 1 + drivers/char/ipmi/ipmi_ssif.c | 10 +- drivers/char/tpm/tpm-interface.c | 3 +- drivers/char/tpm/xen-tpmfront.c | 2 +- drivers/cpufreq/cpufreq-dt.c | 34 +++--- drivers/crypto/caam/regs.h | 28 ++--- drivers/dma/dma-jz4780.c | 5 + drivers/dma/ioat/init.c | 9 +- drivers/edac/i7core_edac.c | 1 + drivers/edac/sb_edac.c | 1 + drivers/edac/skx_edac.c | 3 +- drivers/hid/usbhid/hiddev.c | 18 +++- drivers/hwmon/pmbus/pmbus.c | 2 + drivers/hwmon/pmbus/pmbus_core.c | 5 +- drivers/hwmon/pwm-fan.c | 12 ++- drivers/hwtracing/coresight/coresight-etb10.c | 4 + drivers/i2c/busses/i2c-rcar.c | 6 +- drivers/iio/adc/at91_adc.c | 6 +- drivers/iio/adc/fsl-imx25-gcq.c | 6 ++ drivers/iio/dac/ad5064.c | 53 +++++++--- drivers/infiniband/core/sysfs.c | 19 ++-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 8 +- drivers/md/bcache/btree.c | 2 +- drivers/md/dm-ioctl.c | 18 ++-- drivers/md/md.c | 4 + drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 2 +- drivers/media/i2c/tvp5150.c | 2 +- drivers/media/usb/em28xx/em28xx-cards.c | 4 +- drivers/media/usb/em28xx/em28xx-video.c | 8 +- drivers/misc/genwqe/card_base.h | 2 +- drivers/misc/genwqe/card_dev.c | 9 +- drivers/misc/vmw_vmci/vmci_driver.c | 2 +- drivers/misc/vmw_vmci/vmci_resource.c | 3 +- drivers/mmc/host/sdhci-pci-o2micro.c | 3 + drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 + drivers/net/ethernet/qlogic/qla3xxx.c | 2 - drivers/net/tun.c | 2 + drivers/net/wireless/ath/ath10k/wmi.c | 6 ++ .../net/wireless/broadcom/brcm80211/brcmutil/d11.c | 34 +++++- .../broadcom/brcm80211/include/brcmu_wifi.h | 2 + drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 24 ++++- drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 32 ++++-- drivers/net/wireless/marvell/libertas/if_usb.c | 2 - drivers/nvdimm/bus.c | 4 + drivers/pci/msi.c | 9 +- drivers/pci/quirks.c | 4 + drivers/pcmcia/ricoh.h | 35 +++++++ drivers/pcmcia/yenta_socket.c | 3 +- drivers/pinctrl/qcom/pinctrl-spmi-mpp.c | 27 +++-- drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c | 28 +++-- drivers/rpmsg/qcom_smd.c | 7 +- drivers/scsi/esp_scsi.c | 1 + drivers/scsi/esp_scsi.h | 2 + drivers/scsi/lpfc/lpfc_sli.c | 7 ++ drivers/scsi/mac_esp.c | 2 + drivers/scsi/megaraid/megaraid_sas_base.c | 3 + drivers/soc/tegra/pmc.c | 2 +- drivers/tc/tc.c | 8 +- drivers/tty/serial/kgdboc.c | 5 + drivers/uio/uio.c | 9 ++ drivers/usb/chipidea/otg.h | 3 +- drivers/usb/gadget/udc/atmel_usba_udc.c | 2 + drivers/usb/usbip/vudc_main.c | 10 +- drivers/w1/masters/omap_hdq.c | 2 + drivers/xen/swiotlb-xen.c | 6 ++ fs/btrfs/extent-tree.c | 47 +++++++-- fs/btrfs/free-space-cache.c | 32 ++++-- fs/btrfs/inode.c | 1 + fs/btrfs/qgroup.c | 1 + fs/btrfs/relocation.c | 2 +- fs/btrfs/tree-log.c | 39 +++++-- fs/cifs/cifs_debug.c | 3 + fs/cifs/cifs_spnego.c | 6 +- fs/cifs/inode.c | 10 +- fs/cramfs/inode.c | 3 +- fs/ext4/inline.c | 2 +- fs/ext4/ioctl.c | 4 +- fs/ext4/move_extent.c | 8 +- fs/gfs2/ops_fstype.c | 3 + fs/jbd2/checkpoint.c | 4 +- fs/jffs2/super.c | 4 +- fs/lockd/host.c | 2 +- fs/nfs/nfs4client.c | 16 +-- include/linux/tc.h | 1 + kernel/bounds.c | 4 +- kernel/cpu.c | 11 +- kernel/irq/manage.c | 8 +- kernel/kprobes.c | 27 +++-- kernel/locking/lockdep.c | 4 +- kernel/printk/printk.c | 7 +- kernel/sched/fair.c | 2 +- kernel/signal.c | 2 +- lib/debug_locks.c | 2 +- mm/hugetlb.c | 6 ++ net/core/netclassid_cgroup.c | 1 + net/ipv4/cipso_ipv4.c | 11 +- net/sunrpc/svc_xprt.c | 2 +- net/xfrm/xfrm_policy.c | 8 +- security/integrity/ima/ima_fs.c | 6 +- sound/pci/ca0106/ca0106.h | 2 +- sound/pci/hda/hda_controller.h | 1 + sound/pci/hda/hda_intel.c | 11 +- sound/pci/hda/patch_conexant.c | 1 + sound/pci/hda/patch_realtek.c | 20 ++++ sound/soc/intel/skylake/skl-topology.c | 1 + tools/perf/util/event.c | 1 + tools/perf/util/pmu.c | 13 +-- tools/perf/util/strbuf.c | 10 +- tools/perf/util/trace-event-info.c | 2 + tools/perf/util/trace-event-read.c | 5 +- tools/power/cpupower/utils/cpufreq-info.c | 2 + tools/power/cpupower/utils/helpers/amd.c | 5 + .../inter-event/trigger-synthetic-event-syntax.tc | 80 ++++++++++++++ tools/testing/selftests/net/reuseport_bpf.c | 13 ++- 147 files changed, 1116 insertions(+), 360 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/141 bcache: fix miss key refill->end in writeback
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tang Junhui <[email protected]>
commit 2d6cb6edd2c7fb4f40998895bda45006281b1ac5 upstream.
refill->end record the last key of writeback, for example, at the first time, keys (1,128K) to (1,1024K) are flush to the backend device, but the end key (1,1024K) is not included, since the bellow code:
if (bkey_cmp(k, refill->end) >= 0) {
ret = MAP_DONE;
goto out;
}And in the next time when we refill writeback keybuf again, we searched key start from (1,1024K), and got a key bigger than it, so the key (1,1024K) missed.
This patch modify the above code, and let the end key to be included to the writeback key buffer.
--- drivers/md/bcache/btree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/md/bcache/btree.c +1 -1
@@ -2367,7 +2367,7 @@ static int refill_keybuf_fn(struct btreestruct keybuf *buf = refill->buf;int ret =MAP_CONTINUE ; -if (bkey_cmp (k, refill->end) >=0 ) { +if (bkey_cmp (k, refill->end) >0 ) { ret =MAP_DONE ; goto out; }
Greg Kroah-Hartman
maintainerPATCH 2/141 hwmon: (pmbus) Fix page count auto-detection.
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Bazhenov <[email protected]>
commit e7c6a55606b5c46b449d76588968b4d8caae903f upstream.
Devices with compatible="pmbus" field have zero initial page count, and pmbus_clear_faults() being called before the page count auto- detection does not actually clear faults because it depends on the page count. Non-cleared faults in its turn may fail the subsequent page count auto-detection.
This patch fixes this problem by calling pmbus_clear_fault_page() for currently set page and calling pmbus_clear_faults() after the page count was detected.
--- drivers/hwmon/pmbus/pmbus.c | 2 ++ drivers/hwmon/pmbus/pmbus_core.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-)
drivers/hwmon/pmbus/pmbus.c +2 -0
@@ -118,6 +118,8 @@ static int pmbus_identify(struct i2c_cli }else { info->pages =1 ; } + +pmbus_clear_faults (client); }if (pmbus_check_byte_register (client,0 ,PMBUS_VOUT_MODE )) {
drivers/hwmon/pmbus/pmbus_core.c +4 -1
@@ -1759,7 +1759,10 @@ static int pmbus_init_common(struct i2c_if (ret >=0 && (ret &PB_CAPABILITY_ERROR_CHECK )) client->flags |=I2C_CLIENT_PEC ; -pmbus_clear_faults (client); +if (data->info->pages) +pmbus_clear_faults (client); +else +pmbus_clear_fault_page (client,-1 );if (info->identify) { ret = (*info->identify)(client, info);
Greg Kroah-Hartman
maintainerPATCH 3/141 jffs2: free jffs2_sb_info through jffs2_kill_sb()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hou Tao <[email protected]>
commit 92e2921f7eee63450a5f953f4b15dc6210219430 upstream.
When an invalid mount option is passed to jffs2, jffs2_parse_options() will fail and jffs2_sb_info will be freed, but then jffs2_sb_info will be used (use-after-free) and freeed (double-free) in jffs2_kill_sb().
Fix it by removing the buggy invocation of kfree() when getting invalid mount options.
--- fs/jffs2/super.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
fs/jffs2/super.c +1 -3
@@ -285,10 +285,8 @@ static int jffs2_fill_super(struct super sb->s_fs_info = c; ret =jffs2_parse_options (c, data); -if (ret) { -kfree (c); +if (ret)return -EINVAL ; - }/* Initialize JFFS2 superblock locks, the further initialization will * be done later */
Greg Kroah-Hartman
maintainerPATCH 4/141 pcmcia: Implement CLKRUN protocol disabling for Ricoh bridges
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maciej S. Szmigiero <[email protected]>
commit 95691e3eddc41da2d1cd3cca51fecdfb46bd85bc upstream.
Currently, "disable_clkrun" yenta_socket module parameter is only implemented for TI CardBus bridges.
Add also an implementation for Ricoh bridges that have the necessary setting documented in publicly available datasheets.
Tested on a RL5C476II with a Sunrich C-160 CardBus NIC that doesn't work correctly unless the CLKRUN protocol is disabled.
Let's also make it clear in its description that the "disable_clkrun" module parameter only works on these two previously mentioned brands of CardBus bridges.
--- drivers/pcmcia/ricoh.h | 35 +++++++++++++++++++++++++++++++++++ drivers/pcmcia/yenta_socket.c | 3 ++- 2 files changed, 37 insertions(+), 1 deletion(-)
drivers/pcmcia/ricoh.h +35 -0
@@ -119,6 +119,10 @@#define RL5C4XX_MISC_CONTROL 0x2F/* 8 bit */ #define RL5C4XX_ZV_ENABLE 0x08 +/* Misc Control 3 Register */ +#define RL5C4XX_MISC3 0x00A2/* 16 bit */ +#define RL5C47X_MISC3_CB_CLKRUN_DIS BIT(1) +#ifdef __YENTA_H#define rl_misc (socket) ((socket)->private[0])
@@ -156,6 +160,35 @@ static void ricoh_set_zv(struct yenta_so } } +static void ricoh_set_clkrun (struct yenta_socket *socket,bool quiet) +{ +u16 misc3; + +/* +* RL5C475II likely has this setting, too, however no datasheet +* is publicly available for this chip +*/ +if (socket->dev->device !=PCI_DEVICE_ID_RICOH_RL5C476 && + socket->dev->device !=PCI_DEVICE_ID_RICOH_RL5C478 ) +return ; + +if (socket->dev->revision <0x80 ) +return ; + + misc3 =config_readw (socket,RL5C4XX_MISC3 ); +if (misc3 &RL5C47X_MISC3_CB_CLKRUN_DIS ) { +if (!quiet) +dev_dbg (&socket->dev->dev, +"CLKRUN feature already disabled\n" ); + }else if (disable_clkrun) { +if (!quiet) +dev_info (&socket->dev->dev, +"Disabling CLKRUN feature\n" ); + misc3 |=RL5C47X_MISC3_CB_CLKRUN_DIS ; +config_writew (socket,RL5C4XX_MISC3 , misc3); + } +} +static void ricoh_save_state (struct yenta_socket *socket) {rl_misc (socket) =config_readw (socket,RL5C4XX_MISC );
@@ -172,6 +205,7 @@ static void ricoh_restore_state(struct yconfig_writew (socket,RL5C4XX_16BIT_IO_0 ,rl_io (socket));config_writew (socket,RL5C4XX_16BIT_MEM_0 ,rl_mem (socket));config_writew (socket,RL5C4XX_CONFIG ,rl_config (socket)); +ricoh_set_clkrun (socket, true); }
@@ -197,6 +231,7 @@ static int ricoh_override(struct yenta_sconfig_writew (socket,RL5C4XX_CONFIG , config);ricoh_set_zv (socket); +ricoh_set_clkrun (socket, false);return 0 ; }
drivers/pcmcia/yenta_socket.c +2 -1
@@ -26,7 +26,8 @@static bool disable_clkrun;module_param (disable_clkrun, bool,0444 ); -MODULE_PARM_DESC (disable_clkrun,"If PC card doesn't function properly, please try this option" ); +MODULE_PARM_DESC (disable_clkrun, +"If PC card doesn't function properly, please try this option (TI and Ricoh bridges only)" );static bool isa_probe =1 ;module_param (isa_probe, bool,0444 );
Greg Kroah-Hartman
maintainerPATCH 5/141 ACPICA: AML interpreter: add region addresses in global list during initialization
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Erik Schmauss <[email protected]>
commit 4abb951b73ff0a8a979113ef185651aa3c8da19b upstream.
The table load process omitted adding the operation region address range to the global list. This omission is problematic because the OS queries the global list to check for address range conflicts before deciding which drivers to load. This commit may result in warning messages that look like the following:
[ 7.871761] ACPI Warning: system_IO range 0x00000428-0x0000042F conflicts with op_region 0x00000400-0x0000047F (\PMIO) (20180531/utaddress-213) [ 7.871769] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
However, these messages do not signify regressions. It is a result of properly adding address ranges within the global address list.
--- drivers/acpi/acpica/dsopcode.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/acpi/acpica/dsopcode.c +4 -0
@@ -452,6 +452,10 @@ acpi_ds_eval_region_operands(struct acpiACPI_FORMAT_UINT64 (obj_desc->region.address), obj_desc->region.length)); + status =acpi_ut_add_address_range (obj_desc->region.space_id, + obj_desc->region.address, + obj_desc->region.length, node); +/* Now the address and length are valid for this opregion */ obj_desc->region.flags |=AOPOBJ_DATA_VALID ;
Greg Kroah-Hartman
maintainerPATCH 6/141 ipmi: Fix timer race with module unload
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Glauber <[email protected]>
commit 0711e8c1b4572d076264e71b0002d223f2666ed7 upstream.
Please note that below oops is from an older kernel, but the same race seems to be present in the upstream kernel too.
---8<---
The following panic was encountered during removing the ipmi_ssif module:
[ 526.352555] Unable to handle kernel paging request at virtual address ffff000006923090 [ 526.360464] Mem abort info: [ 526.363257] ESR = 0x86000007 [ 526.366304] Exception class = IABT (current EL), IL = 32 bits [ 526.372221] SET = 0, FnV = 0 [ 526.375269] EA = 0, S1PTW = 0 [ 526.378405] swapper pgtable: 4k pages, 48-bit VAs, pgd = 000000008ae60416 [ 526.385185] [ffff000006923090] *pgd=000000bffcffe803, *pud=000000bffcffd803, *pmd=0000009f4731a003, *pte=0000000000000000 [ 526.396141] Internal error: Oops: 86000007 [#1] SMP [ 526.401008] Modules linked in: nls_iso8859_1 ipmi_devintf joydev input_leds ipmi_msghandler shpchp sch_fq_codel ib_iser rdma_cm iw_cm ib_cm ib_core iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ip_tables x_tables autofs4 btrfs zstd_compress raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear i2c_smbus hid_generic usbhid uas hid usb_storage ast aes_ce_blk i2c_algo_bit aes_ce_cipher qede ttm crc32_ce ptp crct10dif_ce drm_kms_helper ghash_ce syscopyarea sha2_ce sysfillrect sysimgblt pps_core fb_sys_fops sha256_arm64 sha1_ce mpt3sas qed drm raid_class ahci scsi_transport_sas libahci gpio_xlp i2c_xlp9xx aes_neon_bs aes_neon_blk crypto_simd cryptd aes_arm64 [last unloaded: ipmi_ssif] [ 526.468085] CPU: 125 PID: 0 Comm: swapper/125 Not tainted 4.15.0-35-generic #38~lp1775396+build.1 [ 526.476942] Hardware name: To be filled by O.E.M. Saber/Saber, BIOS 0ACKL022 08/14/2018 [ 526.484932] pstate: 00400009 (nzcv daif +PAN -UAO) [ 526.489713] pc : 0xffff000006923090 [ 526.493198] lr : call_timer_fn+0x34/0x178 [ 526.497194] sp : ffff000009b0bdd0 [ 526.500496] x29: ffff000009b0bdd0 x28: 0000000000000082 [ 526.505796] x27: 0000000000000002 x26: ffff000009515188 [ 526.511096] x25: ffff000009515180 x24: ffff0000090f1018 [ 526.516396] x23: ffff000009519660 x22: dead000000000200 [ 526.521696] x21: ffff000006923090 x20: 0000000000000100 [ 526.526995] x19: ffff809eeb466a40 x18: 0000000000000000 [ 526.532295] x17: 000000000000000e x16: 0000000000000007 [ 526.537594] x15: 0000000000000000 x14: 071c71c71c71c71c [ 526.542894] x13: 0000000000000000 x12: 0000000000000000 [ 526.548193] x11: 0000000000000001 x10: ffff000009b0be88 [ 526.553493] x9 : 0000000000000000 x8 : 0000000000000005 [ 526.558793] x7 : ffff80befc1f8528 x6 : 0000000000000020 [ 526.564092] x5 : 0000000000000040 x4 : 0000000020001b20 [ 526.569392] x3 : 0000000000000000 x2 : ffff809eeb466a40 [ 526.574692] x1 : ffff000006923090 x0 : ffff809eeb466a40 [ 526.579992] Process swapper/125 (pid: 0, stack limit = 0x000000002eb50acc) [ 526.586854] Call trace: [ 526.589289] 0xffff000006923090 [ 526.592419] expire_timers+0xc8/0x130 [ 526.596070] run_timer_softirq+0xec/0x1b0 [ 526.600070] __do_softirq+0x134/0x328 [ 526.603726] irq_exit+0xc8/0xe0 [ 526.606857] __handle_domain_irq+0x6c/0xc0 [ 526.610941] gic_handle_irq+0x84/0x188 [ 526.614679] el1_irq+0xe8/0x180 [ 526.617822] cpuidle_enter_state+0xa0/0x328 [ 526.621993] cpuidle_enter+0x34/0x48 [ 526.625564] call_cpuidle+0x44/0x70 [ 526.629040] do_idle+0x1b8/0x1f0 [ 526.632256] cpu_startup_entry+0x2c/0x30 [ 526.636174] secondary_start_kernel+0x11c/0x130 [ 526.640694] Code: bad PC value [ 526.643800] ---[ end trace d020b0b8417c2498 ]--- [ 526.648404] Kernel panic - not syncing: Fatal exception in interrupt [ 526.654778] SMP: stopping secondary CPUs [ 526.658734] Kernel Offset: disabled [ 526.662211] CPU features: 0x5800c38 [ 526.665688] Memory Limit: none [ 526.668768] ---[ end Kernel panic - not syncing: Fatal exception in interrupt
Prevent mod_timer from arming a timer that was already removed by del_timer during module unload.
--- drivers/char/ipmi/ipmi_ssif.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/char/ipmi/ipmi_ssif.c +6 -4
@@ -617,8 +617,9 @@ static void msg_done_handler(struct ssif flags =ipmi_ssif_lock_cond (ssif_info, &oflags); ssif_info->waiting_alert = true; ssif_info->rtc_us_timer =SSIF_MSG_USEC ; -mod_timer (&ssif_info->retry_timer, - jiffies +SSIF_MSG_JIFFIES ); +if (!ssif_info->stopping) +mod_timer (&ssif_info->retry_timer, + jiffies +SSIF_MSG_JIFFIES );ipmi_ssif_unlock_cond (ssif_info, flags);return ; }
@@ -950,8 +951,9 @@ static void msg_written_handler(struct s ssif_info->waiting_alert = true; ssif_info->retries_left =SSIF_RECV_RETRIES ; ssif_info->rtc_us_timer =SSIF_MSG_PART_USEC ; -mod_timer (&ssif_info->retry_timer, - jiffies +SSIF_MSG_PART_JIFFIES ); +if (!ssif_info->stopping) +mod_timer (&ssif_info->retry_timer, + jiffies +SSIF_MSG_PART_JIFFIES );ipmi_ssif_unlock_cond (ssif_info, flags); } }
Greg Kroah-Hartman
maintainerPATCH 7/141 parisc: Fix address in HPMC IVA
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: John David Anglin <[email protected]>
commit 1138b6718ff74d2a934459643e3754423d23b5e2 upstream.
Helge noticed that the address of the os_hpmc handler was not being correctly calculated in the hpmc macro. As a result, PDCE_CHECK would fail to call os_hpmc:
<Cpu2> e800009802e00000 0000000000000000 CC_ERR_CHECK_HPMC <Cpu2> 37000f7302e00000 8040004000000000 CC_ERR_CPU_CHECK_SUMMARY <Cpu2> f600105e02e00000 fffffff0f0c00000 CC_MC_HPMC_MONARCH_SELECTED <Cpu2> 140003b202e00000 000000000000000b CC_ERR_HPMC_STATE_ENTRY <Cpu2> 5600100b02e00000 00000000000001a0 CC_MC_OS_HPMC_LEN_ERR <Cpu2> 5600106402e00000 fffffff0f0438e70 CC_MC_BR_TO_OS_HPMC_FAILED <Cpu2> e800009802e00000 0000000000000000 CC_ERR_CHECK_HPMC <Cpu2> 37000f7302e00000 8040004000000000 CC_ERR_CPU_CHECK_SUMMARY <Cpu2> 4000109f02e00000 0000000000000000 CC_MC_HPMC_INITIATED <Cpu2> 4000101902e00000 0000000000000000 CC_MC_MULTIPLE_HPMCS <Cpu2> 030010d502e00000 0000000000000000 CC_CPU_STOP
The address problem can be seen by dumping the fault vector:
0000000040159000 <fault_vector_20>:
40159000: 63 6f 77 73 stb r15,-2447(dp)
40159004: 20 63 61 6e ldil L%b747000,r3
40159008: 20 66 6c 79 ldil L%-1c3b3000,r3
...
40159020: 08 00 02 40 nop
40159024: 20 6e 60 02 ldil L%15d000,r3
40159028: 34 63 00 00 ldo 0(r3),r3
4015902c: e8 60 c0 02 bv,n r0(r3)
40159030: 08 00 02 40 nop
40159034: 00 00 00 00 break 0,0
40159038: c0 00 70 00 bb,*< r0,sar,40159840 <fault_vector_20+0x840>
4015903c: 00 00 00 00 break 0,0Location 40159038 should contain the physical address of os_hpmc:
000000004015d000 <os_hpmc>:
4015d000: 08 1a 02 43 copy r26,r3
4015d004: 01 c0 08 a4 mfctl iva,r4
4015d008: 48 85 00 68 ldw 34(r4),r5This patch moves the address setup into initialize_ivt to resolve the above problem. I tested the change by dumping the HPMC entry after setup:
0000000040209020: 8000240
0000000040209024: 206a2004
0000000040209028: 34630ac0000000004020902c: e860c002
0000000040209030: 8000240
0000000040209034: 1bdddce6
0000000040209038: 15d000000000004020903c: 1a0
--- arch/parisc/kernel/entry.S | 2 +- arch/parisc/kernel/traps.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-)
arch/parisc/kernel/entry.S +1 -1
@@ -185,7 +185,7 @@ bv,n 0(%r3) nop .word 0 /* checksum (will be patched) */ - .word PA(os_hpmc) /* address of handler */ + .word 0 /* address of handler */ .word 0 /* length of handler */ .endm
arch/parisc/kernel/traps.c +2 -1
@@ -826,7 +826,8 @@ void __init initialize_ivt(const void *ifor (i =0 ; i <8 ; i++) *ivap++ =0 ; -/* Compute Checksum for HPMC handler */ +/* Setup IVA and compute checksum for HPMC handler */ + ivap[6 ] = (u32 )__pa (os_hpmc); length = os_hpmc_size; ivap[7 ] = length;
Greg Kroah-Hartman
maintainerPATCH 8/141 parisc: Fix map_pages() to not overwrite existing pte entries
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <[email protected]>
commit 3c229b3f2dd8133f61bb81d3cb018be92f4bba39 upstream.
Fix a long-existing small nasty bug in the map_pages() implementation which leads to overwriting already written pte entries with zero, *if* map_pages() is called a second time with an end address which isn't aligned on a pmd boundry. This happens for example if we want to remap only the text segment read/write in order to run alternative patching on the code. Exiting the loop when we reach the end address fixes this.
--- arch/parisc/mm/init.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
arch/parisc/mm/init.c +2 -6
@@ -491,12 +491,8 @@ static void __init map_pages(unsigned lo pte =pte_mkhuge (pte); } -if (address >= end_paddr) { -if (force) -break ; -else -pte_val (pte) =0 ; - } +if (address >= end_paddr) +break ;set_pte (pg_table, pte);
Greg Kroah-Hartman
maintainerPATCH 9/141 ALSA: hda - Add quirk for ASUS G751 laptop
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 11ba6111160290ccd35562f4e05cec08942a6c4c upstream.
ASUS G751 requires the extra COEF initialization to make it microphone working properly.
--- sound/pci/hda/patch_realtek.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
sound/pci/hda/patch_realtek.c +10 -0
@@ -6811,6 +6811,7 @@ enum { ALC662_FIXUP_ASUS_Nx50, ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE, ALC668_FIXUP_ASUS_Nx51, +ALC668_FIXUP_ASUS_G751 ,ALC891_FIXUP_HEADSET_MODE ,ALC891_FIXUP_DELL_MIC_NO_PRESENCE , ALC662_FIXUP_ACER_VERITON,
@@ -7077,6 +7078,14 @@ static const struct hda_fixup alc662_fix .chained = true, .chain_id = ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE, }, + [ALC668_FIXUP_ASUS_G751] = { + .type = HDA_FIXUP_VERBS, + .v.verbs = (const struct hda_verb []) { + {0x20 ,AC_VERB_SET_COEF_INDEX ,0xc3 }, + {0x20 ,AC_VERB_SET_PROC_COEF ,0x4000 }, + {} + }, + }, [ALC891_FIXUP_HEADSET_MODE] = { .type = HDA_FIXUP_FUNC, .v.func = alc_fixup_headset_mode,
@@ -7132,6 +7141,7 @@ static const struct snd_pci_quirk alc662SND_PCI_QUIRK (0x1043 ,0x11cd ,"Asus N550" , ALC662_FIXUP_ASUS_Nx50),SND_PCI_QUIRK (0x1043 ,0x13df ,"Asus N550JX" ,ALC662_FIXUP_BASS_1A ),SND_PCI_QUIRK (0x1043 ,0x129d ,"Asus N750" , ALC662_FIXUP_ASUS_Nx50), +SND_PCI_QUIRK (0x1043 ,0x12ff ,"ASUS G751" ,ALC668_FIXUP_ASUS_G751 ),SND_PCI_QUIRK (0x1043 ,0x1477 ,"ASUS N56VZ" ,ALC662_FIXUP_BASS_MODE4_CHMAP ),SND_PCI_QUIRK (0x1043 ,0x15a7 ,"ASUS UX51VZH" ,ALC662_FIXUP_BASS_16 ), SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51),
Greg Kroah-Hartman
maintainerPATCH 10/141 ALSA: hda - Fix headphone pin config for ASUS G751
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 5b7c5e1f4c36b99d0f694f38b9ad910f520cb7ef upstream.
BIOS on ASUS G751 doesn't seem to map the headphone pin (NID 0x16) correctly. Add a quirk to address it, as well as chaining to the previous fix for the microphone.
--- sound/pci/hda/patch_realtek.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
sound/pci/hda/patch_realtek.c +11 -1
@@ -6811,6 +6811,7 @@ enum { ALC662_FIXUP_ASUS_Nx50, ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE, ALC668_FIXUP_ASUS_Nx51, +ALC668_FIXUP_MIC_COEF ,ALC668_FIXUP_ASUS_G751 ,ALC891_FIXUP_HEADSET_MODE , ALC891_FIXUP_DELL_MIC_NO_PRESENCE,
@@ -7078,7 +7079,7 @@ static const struct hda_fixup alc662_fix .chained = true, .chain_id = ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE, }, - [ALC668_FIXUP_ASUS_G751] = { + [ALC668_FIXUP_MIC_COEF] = { .type = HDA_FIXUP_VERBS, .v.verbs = (const struct hda_verb []) { { 0x20, AC_VERB_SET_COEF_INDEX, 0xc3 },
@@ -7086,6 +7087,15 @@ static const struct hda_fixup alc662_fix {} }, }, + [ALC668_FIXUP_ASUS_G751] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl []) { + {0x16 ,0x0421101f },/* HP */ + {} + }, + .chained = true, + .chain_id =ALC668_FIXUP_MIC_COEF + }, [ALC891_FIXUP_HEADSET_MODE] = { .type = HDA_FIXUP_FUNC, .v.func = alc_fixup_headset_mode,
Greg Kroah-Hartman
maintainerPATCH 11/141 ALSA: hda - Add mic quirk for the Lenovo G50-30 (17aa:3905)
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeremy Cline <[email protected]>
commit e7bb6ad5685f05685dd8a6a5eda7bfcd14d5f95b upstream.
The Lenovo G50-30, like other G50 models, has a Conexant codec that requires a quirk for its inverted stereo dmic.
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1249364
--- sound/pci/hda/patch_conexant.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_conexant.c +1 -0
@@ -867,6 +867,7 @@ static const struct snd_pci_quirk cxt506SND_PCI_QUIRK (0x17aa ,0x21da ,"Lenovo X220" ,CXT_PINCFG_LENOVO_TP410 ),SND_PCI_QUIRK (0x17aa ,0x21db ,"Lenovo X220-tablet" ,CXT_PINCFG_LENOVO_TP410 ),SND_PCI_QUIRK (0x17aa ,0x38af ,"Lenovo IdeaPad Z560" ,CXT_FIXUP_MUTE_LED_EAPD ), +SND_PCI_QUIRK (0x17aa ,0x3905 ,"Lenovo G50-30" ,CXT_FIXUP_STEREO_DMIC ),SND_PCI_QUIRK (0x17aa ,0x390b ,"Lenovo G50-80" ,CXT_FIXUP_STEREO_DMIC ),SND_PCI_QUIRK (0x17aa ,0x3975 ,"Lenovo U300s" ,CXT_FIXUP_STEREO_DMIC ), SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", CXT_FIXUP_STEREO_DMIC),
Greg Kroah-Hartman
maintainerPATCH 12/141 ALSA: ca0106: Disable IZD on SB0570 DAC to fix audio pops
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Stanoev <[email protected]>
commit ac237c28d5ac1b241d58b1b7b4b9fa10efb22fb5 upstream.
The Creative Audigy SE (SB0570) card currently exhibits an audible pop whenever playback is stopped or resumed, or during silent periods of an audio stream. Initialise the IZD bit to the 0 to eliminate these pops.
The Infinite Zero Detection (IZD) feature on the DAC causes the output to be shunted to Vcap after 2048 samples of silence. This discharges the AC coupling capacitor through the output and causes the aforementioned pop/click noise.
The behaviour of the IZD bit is described on page 15 of the WM8768GEDS
datasheet: "With IZD=1, applying MUTE for 1024 consecutive input samples will cause all outputs to be connected directly to VCAP. This also happens if 2048 consecutive zero input samples are applied to all 6 channels, and IZD=0. It will be removed as soon as any channel receives a non-zero input". I believe the second sentence might be referring to IZD=1 instead of IZD=0 given the observed behaviour of the card.
This change should make the DAC initialisation consistent with Creative's Windows driver, as this popping persists when initialising the card in Linux and soft rebooting into Windows, but is not present on a cold boot to Windows.
--- sound/pci/ca0106/ca0106.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/pci/ca0106/ca0106.h +1 -1
@@ -582,7 +582,7 @@#define SPI_PL_BIT_R_R (2<<7)/* right channel = right */ #define SPI_PL_BIT_R_C (3<<7)/* right channel = (L+R)/2 */ #define SPI_IZD_REG 2 -#define SPI_IZD_BIT (1<<4)/* infinite zero detect */ +#define SPI_IZD_BIT (0<<4)/* infinite zero detect */ #define SPI_FMT_REG 3#define SPI_FMT_BIT_RJ (0<<0)/* right justified mode */
Greg Kroah-Hartman
maintainerPATCH 13/141 x86/speculation: Enable cross-hyperthread spectre v2 STIBP mitigation
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Kosina <[email protected]>
commit 53c613fe6349994f023245519265999eed75957f upstream.
STIBP is a feature provided by certain Intel ucodes / CPUs. This feature (once enabled) prevents cross-hyperthread control of decisions made by indirect branch predictors.
Enable this feature if
- the CPU is vulnerable to spectre v2
- the CPU supports SMT and has SMT siblings online
- spectre_v2 mitigation autoselection is enabled (default)
After some previous discussion, this leaves STIBP on all the time, as wrmsr on crossing kernel boundary is a no-no. This could perhaps later be a bit more optimized (like disabling it in NOHZ, experiment with disabling it in idle, etc) if needed.
Note that the synchronization of the mask manipulation via newly added spec_ctrl_mutex is currently not strictly needed, as the only updater is already being serialized by cpu_add_remove_lock, but let's make this a little bit more future-proof.
--- arch/x86/kernel/cpu/bugs.c | 57 ++++++++++++++++++++++++++++++++++++++++----- kernel/cpu.c | 11 +++++++- 2 files changed, 61 insertions(+), 7 deletions(-)
arch/x86/kernel/cpu/bugs.c +51 -6
@@ -33,12 +33,10 @@ static void __init spectre_v2_select_mitstatic void __init ssb_select_mitigation (void );static void __init l1tf_select_mitigation (void ); -/* -* Our boot-time value of the SPEC_CTRL MSR. We read it once so that any -* writes to SPEC_CTRL contain whatever reserved bits have been set. -*/ -u64 __ro_after_init x86_spec_ctrl_base; +/* The base value of the SPEC_CTRL MSR that always has to be preserved. */ +u64 x86_spec_ctrl_base;EXPORT_SYMBOL_GPL (x86_spec_ctrl_base); +static DEFINE_MUTEX (spec_ctrl_mutex);/* * The vendor and possibly platform specific bits which can be modified in
@@ -321,6 +319,46 @@ static enum spectre_v2_mitigation_cmd __return cmd; } +static bool stibp_needed (void ) +{ +if (spectre_v2_enabled ==SPECTRE_V2_NONE ) +return false; + +if (!boot_cpu_has (X86_FEATURE_STIBP )) +return false; + +return true; +} + +static void update_stibp_msr (void *info) +{ +wrmsrl (MSR_IA32_SPEC_CTRL , x86_spec_ctrl_base); +} + +void arch_smt_update (void ) +{ +u64 mask; + +if (!stibp_needed ()) +return ; + +mutex_lock (&spec_ctrl_mutex); + mask = x86_spec_ctrl_base; +if (cpu_smt_control ==CPU_SMT_ENABLED ) + mask |=SPEC_CTRL_STIBP ; +else + mask &= ~SPEC_CTRL_STIBP ; + +if (mask != x86_spec_ctrl_base) { +pr_info ("Spectre v2 cross-process SMT mitigation: %s STIBP\n" , + cpu_smt_control ==CPU_SMT_ENABLED ? +"Enabling" :"Disabling" ); + x86_spec_ctrl_base = mask; +on_each_cpu (update_stibp_msr,NULL ,1 ); + } +mutex_unlock (&spec_ctrl_mutex); +} +static void __init spectre_v2_select_mitigation (void ) {enum spectre_v2_mitigation_cmd cmd =spectre_v2_parse_cmdline ();
@@ -405,6 +443,9 @@ retpoline_auto:setup_force_cpu_cap (X86_FEATURE_USE_IBRS_FW );pr_info ("Enabling Restricted Speculation for firmware calls\n" ); } + +/* Enable STIBP if appropriate */ +arch_smt_update (); }#undef pr_fmt
@@ -797,6 +838,8 @@ static ssize_t l1tf_show_state(char *bufstatic ssize_t cpu_show_common (struct device *dev,struct device_attribute *attr,char *buf,unsigned int bug) { +int ret; +if (!boot_cpu_has_bug (bug))return sprintf (buf,"Not affected\n" );
@@ -811,10 +854,12 @@ static ssize_t cpu_show_common(struct dereturn sprintf (buf,"Mitigation: __user pointer sanitization\n" );case X86_BUG_SPECTRE_V2 : -return sprintf (buf,"%s%s%s%s\n" , spectre_v2_strings[spectre_v2_enabled], + ret =sprintf (buf,"%s%s%s%s%s\n" , spectre_v2_strings[spectre_v2_enabled],boot_cpu_has (X86_FEATURE_USE_IBPB ) ?", IBPB" :"" ,boot_cpu_has (X86_FEATURE_USE_IBRS_FW ) ?", IBRS_FW" :"" , + (x86_spec_ctrl_base &SPEC_CTRL_STIBP ) ?", STIBP" :"" ,spectre_v2_module_string ()); +return ret;case X86_BUG_SPEC_STORE_BYPASS :return sprintf (buf,"%s\n" , ssb_strings[ssb_mode]);
kernel/cpu.c +10 -1
@@ -1970,6 +1970,12 @@ static void cpuhp_online_cpu_device(unsikobject_uevent (&dev->kobj,KOBJ_ONLINE ); } +/* +* Architectures that need SMT-specific errata handling during SMT hotplug +* should override this. +*/ +void __weak arch_smt_update (void ) { }; +static int cpuhp_smt_disable (enum cpuhp_smt_control ctrlval) {int cpu, ret =0 ;
@@ -1996,8 +2002,10 @@ static int cpuhp_smt_disable(enum cpuhp_*/ cpuhp_offline_cpu_device (cpu); } -if (!ret) +if (!ret) { cpu_smt_control = ctrlval; +arch_smt_update (); + }cpu_maps_update_done ();return ret; }
@@ -2008,6 +2016,7 @@ static int cpuhp_smt_enable(void)cpu_maps_update_begin (); cpu_smt_control =CPU_SMT_ENABLED ; +arch_smt_update ();for_each_present_cpu (cpu) {/* Skip online CPUs and CPUs on offline nodes */ if (cpu_online (cpu) || !node_online (cpu_to_node (cpu)))
Greg Kroah-Hartman
maintainerPATCH 14/141 x86/corruption-check: Fix panic in memory_corruption_check() when boot option without value is provided
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: He Zhe <[email protected]>
commit ccde460b9ae5c2bd5e4742af0a7f623c2daad566 upstream.
memory_corruption_check[{_period|_size}]()'s handlers do not check input argument before passing it to kstrtoul() or simple_strtoull(). The argument would be a NULL pointer if each of the kernel parameters, without its value, is set in command line and thus cause the following panic.
PANIC: early exception 0xe3 IP 10:ffffffff73587c22 error 0 cr2 0x0
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.18-rc8+ #2 [ 0.000000] RIP: 0010:kstrtoull+0x2/0x10 ... [ 0.000000] Call Trace [ 0.000000] ? set_corruption_check+0x21/0x49 [ 0.000000] ? do_early_param+0x4d/0x82 [ 0.000000] ? parse_args+0x212/0x330 [ 0.000000] ? rdinit_setup+0x26/0x26 [ 0.000000] ? parse_early_options+0x20/0x23 [ 0.000000] ? rdinit_setup+0x26/0x26 [ 0.000000] ? parse_early_param+0x2d/0x39 [ 0.000000] ? setup_arch+0x2f7/0xbf4 [ 0.000000] ? start_kernel+0x5e/0x4c2 [ 0.000000] ? load_ucode_bsp+0x113/0x12f [ 0.000000] ? secondary_startup_64+0xa5/0xb0
This patch adds checks to prevent the panic.
--- arch/x86/kernel/check.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
arch/x86/kernel/check.c +15 -0
@@ -30,6 +30,11 @@ static __init int set_corruption_check(cssize_t ret;unsigned long val; +if (!arg) { +pr_err ("memory_corruption_check config string not provided\n" ); +return -EINVAL ; + } + ret =kstrtoul (arg,10 , &val);if (ret)return ret;
@@ -44,6 +49,11 @@ static __init int set_corruption_check_pssize_t ret;unsigned long val; +if (!arg) { +pr_err ("memory_corruption_check_period config string not provided\n" ); +return -EINVAL ; + } + ret =kstrtoul (arg,10 , &val);if (ret)return ret;
@@ -58,6 +68,11 @@ static __init int set_corruption_check_schar *end;unsigned size; +if (!arg) { +pr_err ("memory_corruption_check_size config string not provided\n" ); +return -EINVAL ; + } + size =memparse (arg, &end);if (*end =='\0' )
Greg Kroah-Hartman
maintainerPATCH 15/141 x86/speculation: Support Enhanced IBRS on future CPUs
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sai Praneeth <[email protected]>
commit 706d51681d636a0c4a5ef53395ec3b803e45ed4d upstream.
Future Intel processors will support "Enhanced IBRS" which is an "always on" mode i.e. IBRS bit in SPEC_CTRL MSR is enabled once and never disabled.
Quoted 1 line
Quoted 1 line
From the specification [1]:
"With enhanced IBRS, the predicted targets of indirect branches
executed cannot be controlled by software that was executed in a less privileged predictor mode or on another logical processor. As a result, software operating on a processor with enhanced IBRS need not use WRMSR to set IA32_SPEC_CTRL.IBRS after every transition to a more privileged predictor mode. Software can isolate predictor modes effectively simply by setting the bit once. Software need not disable enhanced IBRS prior to entering a sleep state such as MWAIT or HLT."
If Enhanced IBRS is supported by the processor then use it as the preferred spectre v2 mitigation mechanism instead of Retpoline. Intel's Retpoline white paper [2] states:
"Retpoline is known to be an effective branch target injection (Spectre
variant 2) mitigation on Intel processors belonging to family 6 (enumerated by the CPUID instruction) that do not have support for enhanced IBRS. On processors that support enhanced IBRS, it should be used for mitigation instead of retpoline."
The reason why Enhanced IBRS is the recommended mitigation on processors which support it is that these processors also support CET which provides a defense against ROP attacks. Retpoline is very similar to ROP techniques and might trigger false positives in the CET defense.
If Enhanced IBRS is selected as the mitigation technique for spectre v2, the IBRS bit in SPEC_CTRL MSR is set once at boot time and never cleared. Kernel also has to make sure that IBRS bit remains set after VMEXIT because the guest might have cleared the bit. This is already covered by the existing x86_spec_ctrl_set_guest() and x86_spec_ctrl_restore_host() speculation control functions.
Enhanced IBRS still requires IBPB for full mitigation.
[1] Speculative-Execution-Side-Channel-Mitigations.pdf
[2] Retpoline-A-Branch-Target-Injection-Mitigation.pdf Both documents are available at:
https://bugzilla.kernel.org/show_bug.cgi?id=199511
--- arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/nospec-branch.h | 1 + arch/x86/kernel/cpu/bugs.c | 20 ++++++++++++++++++-- arch/x86/kernel/cpu/common.c | 3 +++ 4 files changed, 23 insertions(+), 2 deletions(-)
arch/x86/include/asm/cpufeatures.h +1 -0
@@ -213,6 +213,7 @@#define X86_FEATURE_STIBP ( 7*32+27)/* Single Thread Indirect Branch Predictors */ #define X86_FEATURE_ZEN ( 7*32+28)/* "" CPU is AMD family 0x17 (Zen) */ #define X86_FEATURE_L1TF_PTEINV ( 7*32+29)/* "" L1TF workaround PTE inversion */ +#define X86_FEATURE_IBRS_ENHANCED ( 7*32+30)/* Enhanced IBRS */ /* Virtualization flags: Linux defined, word 8 */ #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0)/* Intel TPR Shadow */
arch/x86/include/asm/nospec-branch.h +1 -0
@@ -215,6 +215,7 @@ enum spectre_v2_mitigation {SPECTRE_V2_RETPOLINE_GENERIC ,SPECTRE_V2_RETPOLINE_AMD ,SPECTRE_V2_IBRS , + SPECTRE_V2_IBRS_ENHANCED, };/* The Speculative Store Bypass disable variants */
arch/x86/kernel/cpu/bugs.c +18 -2
@@ -137,6 +137,7 @@ static const char *spectre_v2_strings[] [SPECTRE_V2_RETPOLINE_MINIMAL_AMD] = "Vulnerable: Minimal AMD ASM retpoline", [SPECTRE_V2_RETPOLINE_GENERIC] = "Mitigation: Full generic retpoline", [SPECTRE_V2_RETPOLINE_AMD] = "Mitigation: Full AMD retpoline", + [SPECTRE_V2_IBRS_ENHANCED] = "Mitigation: Enhanced IBRS", };#undef pr_fmt
@@ -378,6 +379,13 @@ static void __init spectre_v2_select_mitcase SPECTRE_V2_CMD_FORCE :case SPECTRE_V2_CMD_AUTO : +if (boot_cpu_has (X86_FEATURE_IBRS_ENHANCED )) { + mode =SPECTRE_V2_IBRS_ENHANCED ; +/* Force it so VMEXIT will restore correctly */ + x86_spec_ctrl_base |=SPEC_CTRL_IBRS ; +wrmsrl (MSR_IA32_SPEC_CTRL , x86_spec_ctrl_base); + goto specv2_set_mode; + }if (IS_ENABLED (CONFIG_RETPOLINE )) goto retpoline_auto;break ;
@@ -415,6 +423,7 @@ retpoline_auto:setup_force_cpu_cap (X86_FEATURE_RETPOLINE ); } +specv2_set_mode: spectre_v2_enabled = mode;pr_info ("%s\n" , spectre_v2_strings[mode]);
@@ -437,9 +446,16 @@ retpoline_auto:/* * Retpoline means the kernel is safe because it has no indirect -* branches. But firmware isn't, so use IBRS to protect that. +* branches. Enhanced IBRS protects firmware too, so, enable restricted +* speculation around firmware calls only when Enhanced IBRS isn't +* supported. +* +* Use "mode" to check Enhanced IBRS instead of boot_cpu_has(), because +* the user might select retpoline on the kernel command line and if +* the CPU supports Enhanced IBRS, kernel might un-intentionally not +* enable IBRS around firmware calls. */ -if (boot_cpu_has (X86_FEATURE_IBRS )) { +if (boot_cpu_has (X86_FEATURE_IBRS ) && mode !=SPECTRE_V2_IBRS_ENHANCED ) {setup_force_cpu_cap (X86_FEATURE_USE_IBRS_FW );pr_info ("Enabling Restricted Speculation for firmware calls\n" ); }
arch/x86/kernel/cpu/common.c +3 -0
@@ -959,6 +959,9 @@ static void __init cpu_set_bug_bits(strusetup_force_cpu_bug (X86_BUG_SPECTRE_V1 );setup_force_cpu_bug (X86_BUG_SPECTRE_V2 ); +if (ia32_cap &ARCH_CAP_IBRS_ALL ) +setup_force_cpu_cap (X86_FEATURE_IBRS_ENHANCED ); +if (x86_match_cpu (cpu_no_meltdown))return ;
Greg Kroah-Hartman
maintainerPATCH 16/141 bpf: do not blindly change rlimit in reuseport net selftest
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
[ Upstream commit 262f9d811c7608f1e74258ceecfe1fa213bdf912 ]
If the current process has unlimited RLIMIT_MEMLOCK, we should should leave it as is.
--- tools/testing/selftests/net/reuseport_bpf.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
tools/testing/selftests/net/reuseport_bpf.c +9 -4
@@ -437,14 +437,19 @@ void enable_fastopen(void) } } -static struct rlimit rlim_old, rlim_new; +static struct rlimit rlim_old;static __attribute__((constructor))void main_ctor (void ) {getrlimit (RLIMIT_MEMLOCK , &rlim_old); - rlim_new.rlim_cur = rlim_old.rlim_cur + (1UL <<20 ); - rlim_new.rlim_max = rlim_old.rlim_max + (1UL <<20 ); -setrlimit (RLIMIT_MEMLOCK , &rlim_new); + +if (rlim_old.rlim_cur !=RLIM_INFINITY ) { +struct rlimit rlim_new; + + rlim_new.rlim_cur = rlim_old.rlim_cur + (1UL <<20 ); + rlim_new.rlim_max = rlim_old.rlim_max + (1UL <<20 ); +setrlimit (RLIMIT_MEMLOCK , &rlim_new); + } }static __attribute__((destructor))void main_dtor (void )
Greg Kroah-Hartman
maintainerPATCH 17/141 Revert "perf tools: Fix PMU term format max value calculation"
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Olsa <[email protected]>
[ Upstream commit 1b9caa10b31dda0866f4028e4bfb923fb6e4072f ]
This reverts commit ac0e2cd555373ae6f8f3a3ad3fbbf5b6d1e7aaaa.
Michael reported an issue with oversized terms values assignment and I noticed there was actually a misunderstanding of the max value check in the past.
The above commit's changelog says:
If bit 21 is set, there is parsing issues as below.
$ perf stat -a -e uncore_qpi_0/event=0x200002,umask=0x8/
event syntax error: '..pi_0/event=0x200002,umask=0x8/'
\___ value too big for format, maximum is 511But there's no issue there, because the event value is distributed along the value defined by the format. Even if the format defines separated bit, the value is treated as a continual number, which should follow the format definition.
In above case it's 9-bit value with last bit separated:
$ cat uncore_qpi_0/format/event config:0-7,21
Hence the value 0x200002 is correctly reported as format violation, because it exceeds 9 bits. It should have been 0x102 instead, which sets the 9th bit - the bit 21 of the format.
$ perf stat -vv -a -e uncore_qpi_0/event=0x102,umask=0x8/
Using CPUID GenuineIntel-6-2D
...
------------------------------------------------------------
perf_event_attr:
type 10
size 112
config 0x200802
sample_type IDENTIFIER
...--- tools/perf/util/pmu.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
tools/perf/util/pmu.c +7 -6
@@ -685,13 +685,14 @@ static void pmu_format_value(unsigned lostatic __u64 pmu_format_max_value (const unsigned long *format) { -__u64 w =0 ; -int fbit; +int w; -for_each_set_bit (fbit, format,PERF_PMU_FORMAT_BITS ) - w |= (1ULL << fbit); - -return w; + w =bitmap_weight (format,PERF_PMU_FORMAT_BITS ); +if (!w) +return 0 ; +if (w <64 ) +return (1ULL << w) -1 ; +return -1 ; }/*
Greg Kroah-Hartman
maintainerPATCH 18/141 xfrm: policy: use hlist rcu variants on insert
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
[ Upstream commit 9dffff200fd178f11dd50eb1fd8ccd0650c9284e ]
bydst table/list lookups use rcu, so insertions must use rcu versions.
--- net/xfrm/xfrm_policy.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
net/xfrm/xfrm_policy.c +4 -4
@@ -659,9 +659,9 @@ static void xfrm_hash_rebuild(struct worbreak ; }if (newpos) -hlist_add_behind (&policy->bydst, newpos); +hlist_add_behind_rcu (&policy->bydst, newpos);else -hlist_add_head (&policy->bydst, chain); +hlist_add_head_rcu (&policy->bydst, chain); }spin_unlock_bh (&net->xfrm.xfrm_policy_lock);
@@ -800,9 +800,9 @@ int xfrm_policy_insert(int dir, struct xbreak ; }if (newpos) -hlist_add_behind (&policy->bydst, newpos); +hlist_add_behind_rcu (&policy->bydst, newpos);else -hlist_add_head (&policy->bydst, chain); +hlist_add_head_rcu (&policy->bydst, chain);__xfrm_policy_link (policy, dir);atomic_inc (&net->xfrm.flow_cache_genid);
Greg Kroah-Hartman
maintainerPATCH 19/141 sparc: Fix single-pcr perf event counter management.
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: "David S. Miller" <[email protected]>
[ Upstream commit cfdc3170d214046b9509183fe9b9544dc644d40b ]
It is important to clear the hw->state value for non-stopped events when they are added into the PMU. Otherwise when the event is scheduled out, we won't read the counter because HES_UPTODATE is still set. This breaks 'perf stat' and similar use cases, causing all the events to show zero.
This worked for multi-pcr because we make explicit sparc_pmu_start() calls in calculate_multiple_pcrs(). calculate_single_pcr() doesn't do this because the idea there is to accumulate all of the counter settings into the single pcr value. So we have to add explicit hw->state handling there.
Like x86, we use the PERF_HES_ARCH bit to track truly stopped events so that we don't accidently start them on a reload.
Related to all of this, sparc_pmu_start() is missing a userpage update so add it.
--- arch/sparc/kernel/perf_event.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
arch/sparc/kernel/perf_event.c +13 -4
@@ -926,6 +926,8 @@ static void read_in_all_counters(structsparc_perf_event_update (cp, &cp->hw, cpuc->current_idx[i]); cpuc->current_idx[i] =PIC_NO_INDEX ; +if (cp->hw.state &PERF_HES_STOPPED ) + cp->hw.state |=PERF_HES_ARCH ; } } }
@@ -958,10 +960,12 @@ static void calculate_single_pcr(struct enc =perf_event_get_enc (cpuc->events[i]); cpuc->pcr[0 ] &= ~mask_for_index (idx); -if (hwc->state &PERF_HES_STOPPED ) +if (hwc->state &PERF_HES_ARCH ) { cpuc->pcr[0 ] |=nop_for_index (idx); -else + }else { cpuc->pcr[0 ] |=event_encoding (enc, idx); + hwc->state =0 ; + } } out: cpuc->pcr[0 ] |= cpuc->event[0 ]->hw.config_base;
@@ -987,6 +991,9 @@ static void calculate_multiple_pcrs(stru cpuc->current_idx[i] = idx; +if (cp->hw.state &PERF_HES_ARCH ) +continue ; +sparc_pmu_start (cp,PERF_EF_RELOAD ); } out:
@@ -1078,6 +1085,8 @@ static void sparc_pmu_start(struct perf_ event->hw.state =0 ;sparc_pmu_enable_event (cpuc, &event->hw, idx); + +perf_event_update_userpage (event); }static void sparc_pmu_stop (struct perf_event *event,int flags)
@@ -1370,9 +1379,9 @@ static int sparc_pmu_add(struct perf_eve cpuc->events[n0] = event->hw.event_base; cpuc->current_idx[n0] =PIC_NO_INDEX ; - event->hw.state =PERF_HES_UPTODATE ; + event->hw.state =PERF_HES_UPTODATE |PERF_HES_STOPPED ;if (!(ef_flags &PERF_EF_START )) - event->hw.state |=PERF_HES_STOPPED ; + event->hw.state |=PERF_HES_ARCH ;/* * If group events scheduling transaction was started,
Greg Kroah-Hartman
maintainerPATCH 20/141 sparc64: Make proc_id signed.
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: "David S. Miller" <[email protected]>
[ Upstream commit b3e1eb8e7ac9aaa283989496651d99267c4cad6c ]
So that when it is unset, ie. '-1', userspace can see it properly.
--- arch/sparc/include/asm/cpudata_64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/sparc/include/asm/cpudata_64.h +1 -1
@@ -27,7 +27,7 @@ typedef struct {unsigned short sock_id;/* physical package */ unsigned short core_id;unsigned short max_cache_id;/* groupings of highest shared cache */ -unsigned short proc_id;/* strand (aka HW thread) id */ +signed short proc_id;/* strand (aka HW thread) id */ } cpuinfo_sparc;DECLARE_PER_CPU (cpuinfo_sparc, __cpu_data);
Greg Kroah-Hartman
maintainerPATCH 21/141 sched/fair: Fix the min_vruntime update logic in dequeue_entity()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Song Muchun <[email protected]>
[ Upstream commit 9845c49cc9bbb317a0bc9e9cf78d8e09d54c9af0 ]
The comment and the code around the update_min_vruntime() call in dequeue_entity() are not in agreement.
Quoted 1 line
Quoted 1 line
From commit:
b60205c7c558 ("sched/fair: Fix min_vruntime tracking")
I think that we want to update min_vruntime when a task is sleeping/migrating. So, the check is inverted there - fix it.
--- kernel/sched/fair.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/sched/fair.c +1 -1
@@ -3502,7 +3502,7 @@ dequeue_entity(struct cfs_rq *cfs_rq, st* put back on, and if we advance min_vruntime, we'll be placed back * further than we started -- ie. we'll be penalized. */ -if ((flags & (DEQUEUE_SAVE |DEQUEUE_MOVE )) ==DEQUEUE_SAVE ) +if ((flags & (DEQUEUE_SAVE |DEQUEUE_MOVE )) !=DEQUEUE_SAVE )update_min_vruntime (cfs_rq); }
Greg Kroah-Hartman
maintainerPATCH 22/141 perf cpu_map: Align cpu map synthesized events properly.
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Miller <[email protected]>
[ Upstream commit 0ed149cf5239cc6e7e65bf00f769e8f1e91076c0 ]
The size of the resulting cpu map can be smaller than a multiple of sizeof(u64), resulting in SIGBUS on cpus like Sparc as the next event will not be aligned properly.
--- tools/perf/util/event.c | 1 + 1 file changed, 1 insertion(+)
tools/perf/util/event.c +1 -0
@@ -839,6 +839,7 @@ void *cpu_map_data__alloc(struct cpu_map } *size +=sizeof (struct cpu_map_data ); + *size =PERF_ALIGN (*size,sizeof (u64));return zalloc (*size); }
Greg Kroah-Hartman
maintainerPATCH 23/141 x86/fpu: Remove second definition of fpu in __fpu__restore_sig()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <[email protected]>
[ Upstream commit 6aa676761d4c1acfa31320e55fa1f83f3fcbbc7a ]
Commit:
c5bedc6847c3b ("x86/fpu: Get rid of PF_USED_MATH usage, convert it to fpu->fpstate_active")
introduced the 'fpu' variable at top of __restore_xstate_sig(), which now shadows the other definition:
arch/x86/kernel/fpu/signal.c:318:28: warning: symbol 'fpu' shadows an earlier one arch/x86/kernel/fpu/signal.c:271:20: originally declared here
Remove the shadowed definition of 'fpu', as the two definitions are the same.
--- arch/x86/kernel/fpu/signal.c | 1 - 1 file changed, 1 deletion(-)
arch/x86/kernel/fpu/signal.c +0 -1
@@ -309,7 +309,6 @@ static int __fpu__restore_sig(void __use* thread's fpu state, reconstruct fxstate from the fsave * header. Sanitize the copied state etc. */ -struct fpu *fpu = &tsk->thread.fpu;struct user_i387_ia32_struct env;int err =0 ;
Greg Kroah-Hartman
maintainerPATCH 24/141 net: qla3xxx: Remove overflowing shift statement
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nathan Chancellor <[email protected]>
[ Upstream commit 8c3bf9b62b667456a57aefcf1689e826df146159 ]
Clang currently warns:
drivers/net/ethernet/qlogic/qla3xxx.c:384:24: warning: signed shift result (0xF00000000) requires 37 bits to represent, but 'int' only has 32 bits [-Wshift-overflow]
((ISP_NVRAM_MASK << 16) | qdev->eeprom_cmd_data));
~~~~~~~~~~~~~~ ^ ~~1 warning generated.
The warning is certainly accurate since ISP_NVRAM_MASK is defined as (0x000F << 16) which is then shifted by 16, resulting in 64424509440, well above UINT_MAX.
Given that this is the only location in this driver where ISP_NVRAM_MASK is shifted again, it seems likely that ISP_NVRAM_MASK was originally defined without a shift and during the move of the shift to the definition, this statement wasn't properly removed (since ISP_NVRAM_MASK is used in the statenent right above this). Only the maintainers can confirm this since this statment has been here since the driver was first added to the kernel.
--- drivers/net/ethernet/qlogic/qla3xxx.c | 2 -- 1 file changed, 2 deletions(-)
drivers/net/ethernet/qlogic/qla3xxx.c +0 -2
@@ -380,8 +380,6 @@ static void fm93c56a_select(struct ql3_a qdev->eeprom_cmd_data =AUBURN_EEPROM_CS_1 ;ql_write_nvram_reg (qdev, spir,ISP_NVRAM_MASK | qdev->eeprom_cmd_data); -ql_write_nvram_reg (qdev, spir, - ((ISP_NVRAM_MASK <<16 ) | qdev->eeprom_cmd_data)); }/*
Greg Kroah-Hartman
maintainerPATCH 25/141 selftests: ftrace: Add synthetic event syntax testcase
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masami Hiramatsu <[email protected]>
[ Upstream commit ba0e41ca81b935b958006c7120466e2217357827 ]
Add a testcase to check the syntax and field types for synthetic_events interface.
--- tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc | 80 ++++++++++ 1 file changed, 80 insertions(+) create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc new file +80 -0
@@ -0,0 +1,80 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: event trigger - test synthetic_events syntax parser + +do_reset() { + reset_trigger + echo > set_event + clear_trace +} + +fail() { #msg + do_reset + echo $1 + exit_fail +} + +if [ ! -f set_event ]; then + echo "event tracing is not supported" + exit_unsupported +fi + +if [ ! -f synthetic_events ]; then + echo "synthetic event is not supported" + exit_unsupported +fi + +reset_tracer +do_reset + +echo "Test synthetic_events syntax parser" + +echo > synthetic_events + +# synthetic event must have a field +! echo "myevent" >> synthetic_events +echo "myevent u64 var1" >> synthetic_events + +# synthetic event must be found in synthetic_events +grep "myevent[[:space:]]u64 var1" synthetic_events + +# it is not possible to add same name event +! echo "myevent u64 var2" >> synthetic_events + +# Non-append open will cleanup all events and add new one +echo "myevent u64 var2" > synthetic_events + +# multiple fields with different spaces +echo "myevent u64 var1; u64 var2;" > synthetic_events +grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events +echo "myevent u64 var1 ; u64 var2 ;" > synthetic_events +grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events +echo "myevent u64 var1 ;u64 var2" > synthetic_events +grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events + +# test field types +echo "myevent u32 var" > synthetic_events +echo "myevent u16 var" > synthetic_events +echo "myevent u8 var" > synthetic_events +echo "myevent s64 var" > synthetic_events +echo "myevent s32 var" > synthetic_events +echo "myevent s16 var" > synthetic_events +echo "myevent s8 var" > synthetic_events + +echo "myevent char var" > synthetic_events +echo "myevent int var" > synthetic_events +echo "myevent long var" > synthetic_events +echo "myevent pid_t var" > synthetic_events + +echo "myevent unsigned char var" > synthetic_events +echo "myevent unsigned int var" > synthetic_events +echo "myevent unsigned long var" > synthetic_events +grep "myevent[[:space:]]unsigned long var" synthetic_events + +# test string type +echo "myevent char var[10]" > synthetic_events +grep "myevent[[:space:]]char\[10\] var" synthetic_events + +do_reset + +exit 0
Greg Kroah-Hartman
maintainerPATCH 26/141 i2c: rcar: cleanup DMA for all kinds of failure
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wolfram Sang <[email protected]>
[ Upstream commit 31d86033a0749a0463ea654130b2de5c163154f1 ]
DMA needs to be cleaned up not only on timeout, but on all errors where it has been setup before.
--- drivers/i2c/busses/i2c-rcar.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/i2c/busses/i2c-rcar.c +5 -1
@@ -723,8 +723,12 @@ static int rcar_i2c_master_xfer(struct i time_left =wait_event_timeout (priv->wait, priv->flags &ID_DONE , num * adap->timeout); -if (!time_left) { + +/* cleanup DMA if it couldn't complete properly due to an error */ +if (priv->dma_direction !=DMA_NONE )rcar_i2c_cleanup_dma (priv); + +if (!time_left) {rcar_i2c_init (priv); ret = -ETIMEDOUT ; }else if (priv->flags &ID_NACK ) {
Greg Kroah-Hartman
maintainerPATCH 27/141 locking/lockdep: Fix debug_locks off performance problem
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Waiman Long <[email protected]>
[ Upstream commit 9506a7425b094d2f1d9c877ed5a78f416669269b ]
It was found that when debug_locks was turned off because of a problem found by the lockdep code, the system performance could drop quite significantly when the lock_stat code was also configured into the kernel. For instance, parallel kernel build time on a 4-socket x86-64 server nearly doubled.
Further analysis into the cause of the slowdown traced back to the frequent call to debug_locks_off() from the __lock_acquired() function probably due to some inconsistent lockdep states with debug_locks off. The debug_locks_off() function did an unconditional atomic xchg to write a 0 value into debug_locks which had already been set to 0. This led to severe cacheline contention in the cacheline that held debug_locks. As debug_locks is being referenced in quite a few different places in the kernel, this greatly slow down the system performance.
To prevent that trashing of debug_locks cacheline, lock_acquired() and lock_contended() now checks the state of debug_locks before proceeding. The debug_locks_off() function is also modified to check debug_locks before calling __debug_locks_off().
--- kernel/locking/lockdep.c | 4 ++-- lib/debug_locks.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)
kernel/locking/lockdep.c +2 -2
@@ -4010,7 +4010,7 @@ void lock_contended(struct lockdep_map * {unsigned long flags; -if (unlikely (!lock_stat)) +if (unlikely (!lock_stat || !debug_locks))return ;if (unlikely (current->lockdep_recursion))
@@ -4030,7 +4030,7 @@ void lock_acquired(struct lockdep_map *l {unsigned long flags; -if (unlikely (!lock_stat)) +if (unlikely (!lock_stat || !debug_locks))return ;if (unlikely (current->lockdep_recursion))
lib/debug_locks.c +1 -1
@@ -37,7 +37,7 @@ EXPORT_SYMBOL_GPL(debug_locks_silent);*/ int debug_locks_off (void ) { -if (__debug_locks_off ()) { +if (debug_locks &&__debug_locks_off ()) {if (!debug_locks_silent) {console_verbose ();return 1 ;
Greg Kroah-Hartman
maintainerPATCH 28/141 ataflop: fix error handling during setup
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Omar Sandoval <[email protected]>
[ Upstream commit 71327f547ee3a46ec5c39fdbbd268401b2578d0e ]
Move queue allocation next to disk allocation to fix a couple of issues:
- If add_disk() hasn't been called, we should clear disk->queue before calling put_disk().
- If we fail to allocate a request queue, we still need to put all of the disks, not just the ones that we allocated queues for.
--- drivers/block/ataflop.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-)
drivers/block/ataflop.c +15 -10
@@ -1933,6 +1933,11 @@ static int __init atari_floppy_init (voi unit[i].disk =alloc_disk (1 );if (!unit[i].disk) goto Enomem; + + unit[i].disk->queue =blk_init_queue (do_fd_request, + &ataflop_lock); +if (!unit[i].disk->queue) + goto Enomem; }if (UseTrackbuffer <0 )
@@ -1964,10 +1969,6 @@ static int __init atari_floppy_init (voisprintf (unit[i].disk->disk_name,"fd%d" , i); unit[i].disk->fops = &floppy_fops; unit[i].disk->private_data = &unit[i]; - unit[i].disk->queue =blk_init_queue (do_fd_request, - &ataflop_lock); -if (!unit[i].disk->queue) - goto Enomem;set_capacity (unit[i].disk,MAX_DISK_SIZE *2 );add_disk (unit[i].disk); }
@@ -1982,13 +1983,17 @@ static int __init atari_floppy_init (voireturn 0 ; Enomem: -while (i--) { -struct request_queue *q = unit[i].disk->queue; +do { +struct gendisk *disk = unit[i].disk; -put_disk (unit[i].disk); -if (q) -blk_cleanup_queue (q); - } +if (disk) { +if (disk->queue) { +blk_cleanup_queue (disk->queue); + disk->queue =NULL ; + } +put_disk (unit[i].disk); + } + }while (i--);unregister_blkdev (FLOPPY_MAJOR ,"fd" );return -ENOMEM ;
Greg Kroah-Hartman
maintainerPATCH 29/141 swim: fix cleanup on setup error
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Omar Sandoval <[email protected]>
[ Upstream commit 1448a2a5360ae06f25e2edc61ae070dff5c0beb4 ]
If we fail to allocate the request queue for a disk, we still need to free that disk, not just the previous ones. Additionally, we need to cleanup the previous request queues.
--- drivers/block/swim.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
drivers/block/swim.c +11 -2
@@ -868,8 +868,17 @@ static int swim_floppy_init(struct swim_ exit_put_disks:unregister_blkdev (FLOPPY_MAJOR ,"fd" ); -while (drive--) -put_disk (swd->unit[drive].disk); +do { +struct gendisk *disk = swd->unit[drive].disk; + +if (disk) { +if (disk->queue) { +blk_cleanup_queue (disk->queue); + disk->queue =NULL ; + } +put_disk (disk); + } + }while (drive--);return err; }
Greg Kroah-Hartman
maintainerPATCH 30/141 tun: Consistently configure generic netdev params via rtnetlink
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Serhey Popovych <[email protected]>
[ Upstream commit df52eab23d703142c766ac00bdb8db19d71238d0 ]
Configuring generic network device parameters on tun will fail in presence of IFLA_INFO_KIND attribute in IFLA_LINKINFO nested attribute since tun_validate() always return failure.
This can be visualized with following ip-link(8) command sequences:
# ip link set dev tun0 group 100 # ip link set dev tun0 group 100 type tun RTNETLINK answers: Invalid argument
with contrast to dummy and veth drivers:
# ip link set dev dummy0 group 100 # ip link set dev dummy0 type dummy
# ip link set dev veth0 group 100 # ip link set dev veth0 group 100 type veth
Fix by returning zero in tun_validate() when @data is NULL that is always in case since rtnl_link_ops->maxtype is zero in tun driver.
--- drivers/net/tun.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/tun.c +2 -0
@@ -1570,6 +1570,8 @@ static void tun_setup(struct net_device*/ static int tun_validate (struct nlattr *tb[],struct nlattr *data[]) { +if (!data) +return 0 ;return -EINVAL ; }
Greg Kroah-Hartman
maintainerPATCH 31/141 s390/sthyi: Fix machine name validity indication
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Janosch Frank <[email protected]>
[ Upstream commit b5130dc2224d1881f24224c0590c6d97f2168d6a ]
When running as a level 3 guest with no host provided sthyi support sclp_ocf_cpc_name_copy() will only return zeroes. Zeroes are not a valid group name, so let's not indicate that the group name field is valid.
Also the group name is not dependent on stsi, let's not return based on stsi before setting it.
--- arch/s390/kvm/sthyi.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
arch/s390/kvm/sthyi.c +5 -3
@@ -174,17 +174,19 @@ static void fill_hdr(struct sthyi_sctnsstatic void fill_stsi_mac (struct sthyi_sctns *sctns,struct sysinfo_1_1_1 *sysinfo) { +sclp_ocf_cpc_name_copy (sctns->mac.infmname); +if (*(u64 *)sctns->mac.infmname !=0 ) + sctns->mac.infmval1 |=MAC_NAME_VLD ; +if (stsi (sysinfo,1 ,1 ,1 ))return ; -sclp_ocf_cpc_name_copy (sctns->mac.infmname); -memcpy (sctns->mac.infmtype, sysinfo->type,sizeof (sctns->mac.infmtype));memcpy (sctns->mac.infmmanu, sysinfo->manufacturer,sizeof (sctns->mac.infmmanu));memcpy (sctns->mac.infmpman, sysinfo->plant,sizeof (sctns->mac.infmpman));memcpy (sctns->mac.infmseq, sysinfo->sequence,sizeof (sctns->mac.infmseq)); - sctns->mac.infmval1 |=MAC_ID_VLD |MAC_NAME_VLD ; + sctns->mac.infmval1 |=MAC_ID_VLD ; } static void fill_stsi_par(struct sthyi_sctns *sctns,
Greg Kroah-Hartman
maintainerPATCH 32/141 hwmon: (pwm-fan) Set fan speed to 0 on suspend
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thierry Reding <[email protected]>
[ Upstream commit 95dcd64bc5a27080beaa344edfe5bdcca3d2e7dc ]
Technically this is not required because disabling the PWM should be enough. However, when support for atomic operations was implemented in the PWM subsystem, only actual changes to the PWM channel are applied during pwm_config(), which means that during after resume from suspend the old settings won't be applied.
One possible solution is for the PWM driver to implement its own PM operations such that settings from before suspend get applied on resume. This has the disadvantage of completely ignoring any particular ordering requirements that PWM user drivers might have, so it is best to leave it up to the user drivers to apply the settings that they want at the appropriate time.
Another way to solve this would be to read back the current state of the PWM at the time of resume. That way, in case the configuration was lost during suspend, applying the old settings in PWM user drivers would actually get them applied because they differ from the current settings. However, not all PWM drivers support reading the hardware state, and not all hardware may support it.
The best workaround at this point seems to be to let PWM user drivers tell the PWM subsystem that the PWM is turned off by, in addition to disabling it, also setting the duty cycle to 0. This causes the resume operation to apply a configuration that is different from the current configuration, resulting in the proper state from before suspend getting restored.
--- drivers/hwmon/pwm-fan.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
drivers/hwmon/pwm-fan.c +11 -1
@@ -306,9 +306,19 @@ static int pwm_fan_remove(struct platforstatic int pwm_fan_suspend (struct device *dev) {struct pwm_fan_ctx *ctx =dev_get_drvdata (dev); +struct pwm_args args; +int ret; + +pwm_get_args (ctx->pwm, &args); + +if (ctx->pwm_value) { + ret =pwm_config (ctx->pwm,0 , args.period); +if (ret <0 ) +return ret; -if (ctx->pwm_value)pwm_disable (ctx->pwm); + } +return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 33/141 perf tools: Free temporary sys string in read_event_files()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sanskriti Sharma <[email protected]>
[ Upstream commit 1e44224fb0528b4c0cc176bde2bb31e9127eb14b ]
For each system in a given pevent, read_event_files() reads in a temporary 'sys' string. Be sure to free this string before moving onto to the next system and/or leaving read_event_files().
Fixes the following coverity complaints:
Error: RESOURCE_LEAK (CWE-772):
tools/perf/util/trace-event-read.c:343: overwrite_var: Overwriting "sys" in "sys = read_string()" leaks the storage that "sys" points to.
tools/perf/util/trace-event-read.c:353: leaked_storage: Variable "sys" going out of scope leaks the storage it points to.
--- tools/perf/util/trace-event-read.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
tools/perf/util/trace-event-read.c +4 -1
@@ -334,9 +334,12 @@ static int read_event_files(struct pevenfor (x=0 ; x < count; x++) { size =read8 (pevent); ret =read_event_file (pevent, sys, size); -if (ret) +if (ret) { +free (sys);return ret; + } } +free (sys); }return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 34/141 perf tools: Cleanup trace-event-info tdata leak
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sanskriti Sharma <[email protected]>
[ Upstream commit faedbf3fd19f2511a39397f76359e4cc6ee93072 ]
Free tracing_data structure in tracing_data_get() error paths.
Fixes the following coverity complaint:
Error: RESOURCE_LEAK (CWE-772):
leaked_storage: Variable "tdata" going out of scope leaks the storage
--- tools/perf/util/trace-event-info.c | 2 ++ 1 file changed, 2 insertions(+)
tools/perf/util/trace-event-info.c +2 -0
@@ -507,12 +507,14 @@ struct tracing_data *tracing_data_get(st "/tmp/perf-XXXXXX");if (!mkstemp (tdata->temp_file)) {pr_debug ("Can't make temp file" ); +free (tdata);return NULL ; } temp_fd =open (tdata->temp_file,O_RDWR );if (temp_fd <0 ) {pr_debug ("Can't read '%s'" , tdata->temp_file); +free (tdata);return NULL ; }
Greg Kroah-Hartman
maintainerPATCH 35/141 perf strbuf: Match va_{add,copy} with va_end
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sanskriti Sharma <[email protected]>
[ Upstream commit ce49d8436cffa9b7a6a5f110879d53e89dbc6746 ]
Ensure that all code paths in strbuf_addv() call va_end() on the ap_saved copy that was made.
Fixes the following coverity complaint:
Error: VARARGS (CWE-237): [#def683] tools/perf/util/strbuf.c:106: missing_va_end: va_end was not called for "ap_saved".
--- tools/perf/util/strbuf.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
tools/perf/util/strbuf.c +8 -2
@@ -105,19 +105,25 @@ static int strbuf_addv(struct strbuf *sbva_copy (ap_saved, ap); len =vsnprintf (sb->buf + sb->len, sb->alloc - sb->len, fmt, ap); -if (len <0 ) +if (len <0 ) { +va_end (ap_saved);return len; + }if (len >strbuf_avail (sb)) { ret =strbuf_grow (sb, len); -if (ret) +if (ret) { +va_end (ap_saved);return ret; + } len =vsnprintf (sb->buf + sb->len, sb->alloc - sb->len, fmt, ap_saved);va_end (ap_saved);if (len >strbuf_avail (sb)) {pr_debug ("this should not happen, your vsnprintf is broken" ); +va_end (ap_saved);return -EINVAL ; } } +va_end (ap_saved);return strbuf_setlen (sb, sb->len + len); }
Greg Kroah-Hartman
maintainerPATCH 36/141 cpupower: Fix coredump on VMWare
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Prarit Bhargava <[email protected]>
[ Upstream commit f69ffc5d3db8f1f03fd6d1df5930f9a1fbd787b6 ]
cpupower crashes on VMWare guests. The guests have the AMD PStateDef MSR (0xC0010064 + state number) set to zero. As a result fid and did are zero and the crash occurs because of a divide by zero (cof = fid/did). This can be prevented by checking the enable bit in the PStateDef MSR before calculating cof. By doing this the value of pstate[i] remains zero and the value can be tested before displaying the active Pstates.
Check the enable bit in the PstateDef register for all supported families and only print out enabled Pstates.
--- tools/power/cpupower/utils/cpufreq-info.c | 2 ++ tools/power/cpupower/utils/helpers/amd.c | 5 +++++ 2 files changed, 7 insertions(+)
tools/power/cpupower/utils/cpufreq-info.c +2 -0
@@ -202,6 +202,8 @@ static int get_boost_mode(unsigned int cprintf (_ (" Boost States: %d\n" ), b_states);printf (_ (" Total States: %d\n" ), pstate_no);for (i =0 ; i < pstate_no; i++) { +if (!pstates[i]) +continue ;if (i < b_states)printf (_ (" Pstate-Pb%d: %luMHz (boost state)" "\n" ), i, pstates[i]);
tools/power/cpupower/utils/helpers/amd.c +5 -0
@@ -103,6 +103,11 @@ int decode_pstates(unsigned int cpu, uns }if (read_msr (cpu,MSR_AMD_PSTATE + i, &pstate.val))return -1 ; +if ((cpu_family ==0x17 ) && (!pstate.fam17h_bits.en)) +continue ; +else if (!pstate.bits.en) +continue ; + pstates[i] =get_cof (cpu_family, pstate); } *no = i;
Greg Kroah-Hartman
maintainerPATCH 37/141 mmc: sdhci-pci-o2micro: Add quirk for O2 Micro dev 0x8620 rev 0x01
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yu Zhao <[email protected]>
[ Upstream commit 5169894982bb67486d93cc1e10151712bb86bcb6 ]
This device reports SDHCI_CLOCK_INT_STABLE even though it's not ready to take SDHCI_CLOCK_CARD_EN. The symptom is that reading SDHCI_CLOCK_CONTROL after enabling the clock shows absence of the bit from the register (e.g. expecting 0x0000fa07 = 0x0000fa03 | SDHCI_CLOCK_CARD_EN but only observed the first operand).
mmc1: Timeout waiting for hardware cmd interrupt.
mmc1: sdhci: ============ SDHCI REGISTER DUMP ===========
mmc1: sdhci: Sys addr: 0x00000000 | Version: 0x00000603
mmc1: sdhci: Blk size: 0x00000000 | Blk cnt: 0x00000000
mmc1: sdhci: Argument: 0x00000000 | Trn mode: 0x00000000
mmc1: sdhci: Present: 0x01ff0001 | Host ctl: 0x00000001
mmc1: sdhci: Power: 0x0000000f | Blk gap: 0x00000000
mmc1: sdhci: Wake-up: 0x00000000 | Clock: 0x0000fa03
mmc1: sdhci: Timeout: 0x00000000 | Int stat: 0x00000000
mmc1: sdhci: Int enab: 0x00ff0083 | Sig enab: 0x00ff0083
mmc1: sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000
mmc1: sdhci: Caps: 0x25fcc8bf | Caps_1: 0x00002077
mmc1: sdhci: Cmd: 0x00000000 | Max curr: 0x005800c8
mmc1: sdhci: Resp[0]: 0x00000000 | Resp[1]: 0x00000000
mmc1: sdhci: Resp[2]: 0x00000000 | Resp[3]: 0x00000000
mmc1: sdhci: Host ctl2: 0x00000008
mmc1: sdhci: ADMA Err: 0x00000000 | ADMA Ptr: 0x00000000
mmc1: sdhci: ============================================
The problem happens during wakeup from S3. Adding a delay quirk after power up reliably fixes the problem.
--- drivers/mmc/host/sdhci-pci-o2micro.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/mmc/host/sdhci-pci-o2micro.c +3 -0
@@ -334,6 +334,9 @@ int sdhci_pci_o2_probe(struct sdhci_pci_pci_write_config_byte (chip->pdev,O2_SD_LOCK_WP , scratch);break ;case PCI_DEVICE_ID_O2_SEABIRD0 : +if (chip->pdev->revision ==0x01 ) + chip->quirks |=SDHCI_QUIRK_DELAY_AFTER_POWER ; +/* fall through */ case PCI_DEVICE_ID_O2_SEABIRD1 :/* UnLock WP */ ret = pci_read_config_byte(chip->pdev,
Greg Kroah-Hartman
maintainerPATCH 38/141 iwlwifi: pcie: avoid empty free RB queue
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shaul Triebitz <[email protected]>
[ Upstream commit 868a1e863f95183f00809363fefba6d4f5bcd116 ]
If all free RB queues are empty, the driver will never restock the free RB queue. That's because the restocking happens in the Rx flow, and if the free queue is empty there will be no Rx.
Although there's a background worker (a.k.a. allocator) allocating memory for RBs so that the Rx handler can restock them, the worker may run only after the free queue has become empty (and then it is too late for restocking as explained above).
There is a solution for that called 'emergency': If the number of used RB's reaches half the amount of all RB's, the Rx handler will not wait for the allocator but immediately allocate memory for the used RB's and restock the free queue.
But, since the used RB's is per queue, it may happen that the used RB's are spread between the queues such that the emergency check will fail for each of the queues
(and still run out of RBs, causing the above symptom).
To fix it, move to emergency mode if the sum of *all* used RBs (for all Rx queues) reaches half the amount of all RB's
--- drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 32 +++++++++++++++++---------- 1 file changed, 21 insertions(+), 11 deletions(-)
drivers/net/wireless/intel/iwlwifi/pcie/rx.c +21 -11
@@ -1030,6 +1030,14 @@ void iwl_pcie_rx_free(struct iwl_trans *kfree (trans_pcie->rxq); } +static void iwl_pcie_rx_move_to_allocator (struct iwl_rxq *rxq, +struct iwl_rb_allocator *rba) +{ +spin_lock (&rba->lock); +list_splice_tail_init (&rxq->rx_used, &rba->rbd_empty); +spin_unlock (&rba->lock); +} +/* * iwl_pcie_rx_reuse_rbd - Recycle used RBDs *
@@ -1061,9 +1069,7 @@ static void iwl_pcie_rx_reuse_rbd(structif ((rxq->used_count %RX_CLAIM_REQ_ALLOC ) ==RX_POST_REQ_ALLOC ) {/* Move the 2 RBDs to the allocator ownership. Allocator has another 6 from pool for the request completion*/ -spin_lock (&rba->lock); -list_splice_tail_init (&rxq->rx_used, &rba->rbd_empty); -spin_unlock (&rba->lock); +iwl_pcie_rx_move_to_allocator (rxq, rba);atomic_inc (&rba->req_pending);queue_work (rba->alloc_wq, &rba->rx_alloc);
@@ -1233,10 +1239,18 @@ restart:IWL_DEBUG_RX (trans,"Q %d: HW = SW = %d\n" , rxq->id, r);while (i != r) { +struct iwl_rb_allocator *rba = &trans_pcie->rba;struct iwl_rx_mem_buffer *rxb; - -if (unlikely (rxq->used_count == rxq->queue_size /2 )) +/* number of RBDs still waiting for page allocation */ +u32 rb_pending_alloc = +atomic_read (&trans_pcie->rba.req_pending) * +RX_CLAIM_REQ_ALLOC ; + +if (unlikely (rb_pending_alloc >= rxq->queue_size /2 && + !emergency)) { +iwl_pcie_rx_move_to_allocator (rxq, rba); emergency = true; + }if (trans->cfg->mq_rx_supported) {/*
@@ -1279,17 +1293,13 @@ restart:iwl_pcie_rx_allocator_get (trans, rxq);if (rxq->used_count %RX_CLAIM_REQ_ALLOC ==0 && !emergency) { -struct iwl_rb_allocator *rba = &trans_pcie->rba; -/* Add the remaining empty RBDs for allocator use */ -spin_lock (&rba->lock); -list_splice_tail_init (&rxq->rx_used, &rba->rbd_empty); -spin_unlock (&rba->lock); +iwl_pcie_rx_move_to_allocator (rxq, rba); }else if (emergency) { count++;if (count ==8 ) { count =0 ; -if (rxq->used_count < rxq->queue_size /3 ) +if (rb_pending_alloc < rxq->queue_size /3 ) emergency = false; rxq->read = i;
Greg Kroah-Hartman
maintainerPATCH 39/141 x86/olpc: Indicate that legacy PC XO-1 platform should not register RTC
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lubomir Rintel <[email protected]>
[ Upstream commit d92116b800fb79a72ad26121f5011f6aa3ad94c2 ]
On OLPC XO-1, the RTC is discovered via device tree from the arch initcall. Don't let the PC platform register another one from its device initcall, it's not going to work:
sysfs: cannot create duplicate filename '/devices/platform/rtc_cmos'
CPU: 0 PID: 1 Comm: swapper Not tainted 4.19.0-rc6 #12
Hardware name: OLPC XO/XO, BIOS OLPC Ver 1.00.01 06/11/2014
Call Trace:
dump_stack+0x16/0x18
sysfs_warn_dup+0x46/0x58
sysfs_create_dir_ns+0x76/0x9b
kobject_add_internal+0xed/0x209
? __schedule+0x3fa/0x447
kobject_add+0x5b/0x66
device_add+0x298/0x535
? insert_resource_conflict+0x2a/0x3e
platform_device_add+0x14d/0x192
? io_delay_init+0x19/0x19
platform_device_register+0x1c/0x1f
add_rtc_cmos+0x16/0x31
do_one_initcall+0x78/0x14a
? do_early_param+0x75/0x75
kernel_init_freeable+0x152/0x1e0
? rest_init+0xa2/0xa2
kernel_init+0x8/0xd5
ret_from_fork+0x2e/0x38
kobject_add_internal failed for rtc_cmos with -EEXIST, don't try to
register things with the same name in the same directory.
platform rtc_cmos: registered platform RTC device (no PNP device found)--- arch/x86/platform/olpc/olpc-xo1-rtc.c | 3 +++ 1 file changed, 3 insertions(+)
arch/x86/platform/olpc/olpc-xo1-rtc.c +3 -0
@@ -16,6 +16,7 @@#include <asm/msr.h> #include <asm/olpc.h> +#include <asm/x86_init.h> static void rtc_wake_on (struct device *dev) {
@@ -75,6 +76,8 @@ static int __init xo1_rtc_init(void)if (r)return r; + x86_platform.legacy.rtc =0 ; +device_init_wakeup (&xo1_rtc_device.dev,1 );return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 40/141 cpufreq: dt: Try freeing static OPPs only if we have added them
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Viresh Kumar <[email protected]>
[ Upstream commit 51c99dd2c06b234575661fa1e0a1dea6c3ef566f ]
We can not call dev_pm_opp_of_cpumask_remove_table() freely anymore since the latest OPP core updates as that uses reference counting to free resources. There are cases where no static OPPs are added (using DT) for a platform and trying to remove the OPP table may end up decrementing refcount which is already zero and hence generating warnings.
Lets track if we were able to add static OPPs or not and then only remove the table based on that. Some reshuffling of code is also done to do that.
--- drivers/cpufreq/cpufreq-dt.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-)
drivers/cpufreq/cpufreq-dt.c +19 -15
@@ -32,6 +32,7 @@ struct private_data {struct device *cpu_dev;struct thermal_cooling_device *cdev;const char *reg_name; +bool have_static_opps; };static struct freq_attr *cpufreq_dt_attr[] = {
@@ -197,6 +198,15 @@ static int cpufreq_init(struct cpufreq_p } } + priv =kzalloc (sizeof (*priv),GFP_KERNEL ); +if (!priv) { + ret = -ENOMEM ; + goto out_put_regulator; + } + + priv->reg_name = name; + priv->opp_table = opp_table; +/* * Initialize OPP tables for all policy->cpus. They will be shared by * all CPUs which have marked their CPUs shared with OPP bindings.
@@ -207,7 +217,8 @@ static int cpufreq_init(struct cpufreq_p* * OPPs might be populated at runtime, don't check for error here */ -dev_pm_opp_of_cpumask_add_table (policy->cpus); +if (!dev_pm_opp_of_cpumask_add_table (policy->cpus)) + priv->have_static_opps = true;/* * But we need OPP table to function so if it is not there let's
@@ -233,19 +244,10 @@ static int cpufreq_init(struct cpufreq_p __func__, ret); } - priv =kzalloc (sizeof (*priv),GFP_KERNEL ); -if (!priv) { - ret = -ENOMEM ; - goto out_free_opp; - } - - priv->reg_name = name; - priv->opp_table = opp_table; - ret =dev_pm_opp_init_cpufreq_table (cpu_dev, &freq_table);if (ret) {dev_err (cpu_dev,"failed to init cpufreq table: %d\n" , ret); - goto out_free_priv; + goto out_free_opp; } priv->cpu_dev = cpu_dev;
@@ -284,10 +286,11 @@ static int cpufreq_init(struct cpufreq_p out_free_cpufreq_table:dev_pm_opp_free_cpufreq_table (cpu_dev, &freq_table); -out_free_priv: -kfree (priv); out_free_opp: -dev_pm_opp_of_cpumask_remove_table (policy->cpus); +if (priv->have_static_opps) +dev_pm_opp_of_cpumask_remove_table (policy->cpus); +kfree (priv); +out_put_regulator:if (name)dev_pm_opp_put_regulator (opp_table); out_put_clk:
@@ -302,7 +305,8 @@ static int cpufreq_exit(struct cpufreq_pcpufreq_cooling_unregister (priv->cdev);dev_pm_opp_free_cpufreq_table (priv->cpu_dev, &policy->freq_table); -dev_pm_opp_of_cpumask_remove_table (policy->related_cpus); +if (priv->have_static_opps) +dev_pm_opp_of_cpumask_remove_table (policy->related_cpus);if (priv->reg_name)dev_pm_opp_put_regulator (priv->opp_table);
Greg Kroah-Hartman
maintainerPATCH 41/141 Bluetooth: btbcm: Add entry for BCM4335C0 UART bluetooth
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Hewitt <[email protected]>
[ Upstream commit a357ea098c9605f60d92a66a9073f56ce25726da ]
This patch adds the device ID for the AMPAK AP6335 combo module used in the 1st generation WeTek Hub Android/LibreELEC HTPC box. The WiFI chip identifies itself as BCM4339, while Bluetooth identifies itself as BCM4335 (rev C0):
``` [ 4.864248] Bluetooth: hci0: BCM: chip id 86 [ 4.866388] Bluetooth: hci0: BCM: features 0x2f [ 4.889317] Bluetooth: hci0: BCM4335C0 [ 4.889332] Bluetooth: hci0: BCM4335C0 (003.001.009) build 0000 [ 9.778383] Bluetooth: hci0: BCM4335C0 (003.001.009) build 0268 ```
Output from hciconfig:
``` hci0: Type: Primary Bus: UART BD Address: 43:39:00:00:1F:AC ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING RX bytes:7567 acl:234 sco:0 events:386 errors:0 TX bytes:53844 acl:77 sco:0 commands:304 errors:0 Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH SNIFF Link mode: SLAVE ACCEPT Name: 'HUB' Class: 0x0c0000 Service Classes: Rendering, Capturing Device Class: Miscellaneous, HCI Version: 4.0 (0x6) Revision: 0x10c LMP Version: 4.0 (0x6) Subversion: 0x6109 Manufacturer: Broadcom Corporation (15) ```
--- drivers/bluetooth/btbcm.c | 1 + 1 file changed, 1 insertion(+)
drivers/bluetooth/btbcm.c +1 -0
@@ -270,6 +270,7 @@ static const struct { { 0x4103, "BCM4330B1" }, /* 002.001.003 */ { 0x410e, "BCM43341B0" }, /* 002.001.014 */ { 0x4406, "BCM4324B3" }, /* 002.004.006 */ + { 0x6109, "BCM4335C0" }, /* 003.001.009 */ { 0x610c, "BCM4354" }, /* 003.001.012 */ { } };
Greg Kroah-Hartman
maintainerPATCH 42/141 x86: boot: Fix EFI stub alignment
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ben Hutchings <[email protected]>
[ Upstream commit 9c1442a9d039a1a3302fa93e9a11001c5f23b624 ]
We currently align the end of the compressed image to a multiple of
16. However, the PE-COFF header included in the EFI stub says that the file alignment is 32 bytes, and when adding an EFI signature to the file it must first be padded to this alignment.
sbsigntool commands warn about this:
warning: file-aligned section .text extends beyond end of file
warning: checksum areas are greater than image size. Invalid section table?
Worse, pesign -at least when creating a detached signature- uses the hash of the unpadded file, resulting in an invalid signature if padding is required.
Avoid both these problems by increasing alignment to 32 bytes when CONFIG_EFI_STUB is enabled.
--- arch/x86/boot/tools/build.c | 7 +++++++ 1 file changed, 7 insertions(+)
arch/x86/boot/tools/build.c +7 -0
@@ -390,6 +390,13 @@ int main(int argc, char ** argv)die ("Unable to mmap '%s': %m" , argv[2 ]);/* Number of 16-byte paragraphs, including space for a 4-byte CRC */ sys_size = (sz +15 +4 ) /16 ; +#ifdef CONFIG_EFI_STUB +/* +* COFF requires minimum 32-byte alignment of sections, and +* adding a signature is problematic without that alignment. +*/ + sys_size = (sys_size +1 ) & ~1 ; +#endif /* Patch the setup code with the appropriate size parameters */ buf[0x1f1 ] = setup_sectors-1 ;
Greg Kroah-Hartman
maintainerPATCH 43/141 pinctrl: qcom: spmi-mpp: Fix err handling of pmic_mpp_set_mux
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: YueHaibing <[email protected]>
[ Upstream commit 69f8455f6cc78fa6cdf80d0105d7a748106271dc ]
'ret' should be returned while pmic_mpp_write_mode_ctl fails.
--- drivers/pinctrl/qcom/pinctrl-spmi-mpp.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/pinctrl/qcom/pinctrl-spmi-mpp.c +2 -0
@@ -319,6 +319,8 @@ static int pmic_mpp_set_mux(struct pinct pad->function = function; ret =pmic_mpp_write_mode_ctl (state, pad); +if (ret <0 ) +return ret; val = pad->is_enabled <<PMIC_MPP_REG_MASTER_EN_SHIFT ;
Greg Kroah-Hartman
maintainerPATCH 44/141 brcmfmac: fix for proper support of 160MHz bandwidth
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arend van Spriel <[email protected]>
[ Upstream commit 330994e8e8ec5d0b269a5265e6032b37e29aa336 ]
Decoding of firmware channel information was not complete for 160MHz support. This resulted in the following warning:
WARNING: CPU: 2 PID: 2222 at .../broadcom/brcm80211/brcmutil/d11.c:196 brcmu_d11ac_decchspec+0x2e/0x100 [brcmutil] Modules linked in: brcmfmac(O) brcmutil(O) sha256_generic cfg80211 ... CPU: 2 PID: 2222 Comm: kworker/2:0 Tainted: G O 4.17.0-wt-testing-x64-00002-gf1bed50 #1 Hardware name: Dell Inc. Latitude E6410/07XJP9, BIOS A07 02/15/2011 Workqueue: events request_firmware_work_func RIP: 0010:brcmu_d11ac_decchspec+0x2e/0x100 [brcmutil] RSP: 0018:ffffc90000047bd0 EFLAGS: 00010206 RAX: 000000000000e832 RBX: ffff8801146fe910 RCX: ffff8801146fd3c0 RDX: 0000000000002800 RSI: 0000000000000070 RDI: ffffc90000047c30 RBP: ffffc90000047bd0 R08: 0000000000000000 R09: ffffffffa0798c80 R10: ffff88012bca55e0 R11: ffff880110a4ea00 R12: ffff8801146f8000 R13: ffffc90000047c30 R14: ffff8801146fe930 R15: ffff8801138e02e0 FS: 0000000000000000(0000) GS:ffff88012bc80000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f18ce8b8070 CR3: 000000000200a003 CR4: 00000000000206e0 Call Trace: brcmf_setup_wiphybands+0x212/0x780 [brcmfmac] brcmf_cfg80211_attach+0xae2/0x11a0 [brcmfmac] brcmf_attach+0x1fc/0x4b0 [brcmfmac] ? __kmalloc+0x13c/0x1c0 brcmf_pcie_setup+0x99b/0xe00 [brcmfmac] brcmf_fw_request_done+0x16a/0x1f0 [brcmfmac] request_firmware_work_func+0x36/0x60 process_one_work+0x146/0x350 worker_thread+0x4a/0x3b0 kthread+0x102/0x140 ? process_one_work+0x350/0x350 ? kthread_bind+0x20/0x20 ret_from_fork+0x35/0x40 Code: 66 90 0f b7 07 55 48 89 e5 89 c2 88 47 02 88 47 03 66 81 e2 00 38 66 81 fa 00 18 74 6e 66 81 fa 00 20 74 39 66 81 fa 00 10 74 14 <0f> 0b 66 25 00 c0 74 20 66 3d 00 c0 75 20 c6 47 04 01 5d c3 66 ---[ end trace 550c46682415b26d ]--- brcmfmac: brcmf_construct_chaninfo: Ignoring unexpected firmware channel 50
This patch adds the missing stuff to properly handle this.
--- drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c | 34 ++++++++++- drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h | 2 2 files changed, 35 insertions(+), 1 deletion(-)
drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c +33 -1
@@ -77,6 +77,8 @@ static u16 d11ac_bw(enum brcmu_chan_bw breturn BRCMU_CHSPEC_D11AC_BW_40 ;case BRCMU_CHAN_BW_80 :return BRCMU_CHSPEC_D11AC_BW_80 ; +case BRCMU_CHAN_BW_160 : +return BRCMU_CHSPEC_D11AC_BW_160 ;default :WARN_ON (1 ); }
@@ -190,8 +192,38 @@ static void brcmu_d11ac_decchspec(structbreak ; }break ; -case BRCMU_CHSPEC_D11AC_BW_8080 :case BRCMU_CHSPEC_D11AC_BW_160 : +switch (ch->sb) { +case BRCMU_CHAN_SB_LLL : + ch->control_ch_num -=CH_70MHZ_APART ; +break ; +case BRCMU_CHAN_SB_LLU : + ch->control_ch_num -=CH_50MHZ_APART ; +break ; +case BRCMU_CHAN_SB_LUL : + ch->control_ch_num -=CH_30MHZ_APART ; +break ; +case BRCMU_CHAN_SB_LUU : + ch->control_ch_num -=CH_10MHZ_APART ; +break ; +case BRCMU_CHAN_SB_ULL : + ch->control_ch_num +=CH_10MHZ_APART ; +break ; +case BRCMU_CHAN_SB_ULU : + ch->control_ch_num +=CH_30MHZ_APART ; +break ; +case BRCMU_CHAN_SB_UUL : + ch->control_ch_num +=CH_50MHZ_APART ; +break ; +case BRCMU_CHAN_SB_UUU : + ch->control_ch_num +=CH_70MHZ_APART ; +break ; +default : +WARN_ON_ONCE (1 ); +break ; + } +break ; +case BRCMU_CHSPEC_D11AC_BW_8080 :default :WARN_ON_ONCE (1 );break ;
drivers/net/wireless/broadcom/brcm80211/include/brcmu_wifi.h +2 -0
@@ -29,6 +29,8 @@#define CH_UPPER_SB 0x01#define CH_LOWER_SB 0x02#define CH_EWA_VALID 0x04 +#define CH_70MHZ_APART 14 +#define CH_50MHZ_APART 10#define CH_30MHZ_APART 6#define CH_20MHZ_APART 4#define CH_10MHZ_APART 2
Greg Kroah-Hartman
maintainerPATCH 45/141 kprobes: Return error if we fail to reuse kprobe instead of BUG_ON()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masami Hiramatsu <[email protected]>
[ Upstream commit 819319fc93461c07b9cdb3064f154bd8cfd48172 ]
Make reuse_unused_kprobe() to return error code if it fails to reuse unused kprobe for optprobe instead of calling BUG_ON().
--- kernel/kprobes.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-)
kernel/kprobes.c +20 -7
@@ -665,9 +665,10 @@ static void unoptimize_kprobe(struct kpr }/* Cancel unoptimizing for reusing */ -static void reuse_unused_kprobe (struct kprobe *ap) +static int reuse_unused_kprobe (struct kprobe *ap) {struct optimized_kprobe *op; +int ret;BUG_ON (!kprobe_unused (ap));/*
@@ -681,8 +682,12 @@ static void reuse_unused_kprobe(struct k/* Enable the probe again */ ap->flags &= ~KPROBE_FLAG_DISABLED ;/* Optimize it again (remove from op->list) */ -BUG_ON (!kprobe_optready (ap)); + ret =kprobe_optready (ap); +if (ret) +return ret; +optimize_kprobe (ap); +return 0 ; }/* Remove optimized instructions */
@@ -894,11 +899,16 @@ static void __disarm_kprobe(struct kprob#define kprobe_disarmed (p) kprobe_disabled(p)#define wait_for_kprobe_optimizer () do {} while (0) -/* There should be no unused kprobes can be reused without optimization */ -static void reuse_unused_kprobe (struct kprobe *ap) +static int reuse_unused_kprobe (struct kprobe *ap) { +/* +* If the optimized kprobe is NOT supported, the aggr kprobe is +* released at the same time that the last aggregated kprobe is +* unregistered. +* Thus there should be no chance to reuse unused kprobe. +*/ printk (KERN_ERR "Error: There should be no unused kprobe here.\n" ); -BUG_ON (kprobe_unused (ap)); +return -EINVAL ; }static void free_aggr_kprobe (struct kprobe *p)
@@ -1276,9 +1286,12 @@ static int register_aggr_kprobe(struct k goto out; }init_aggr_kprobe (ap, orig_p); - }else if (kprobe_unused (ap)) + }else if (kprobe_unused (ap)) {/* This probe is going to die. Rescue it */ -reuse_unused_kprobe (ap); + ret =reuse_unused_kprobe (ap); +if (ret) + goto out; + }if (kprobe_gone (ap)) {/*
Greg Kroah-Hartman
maintainerPATCH 46/141 ACPI / LPSS: Add alternative ACPI HIDs for Cherry Trail DMA controllers
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 240714061c58e6b1abfb3322398a7634151c06cb ]
Bay and Cherry Trail DSTDs represent a different set of devices depending on which OS the device think it is booting. One set of decices for Windows and another set of devices for Android which targets the Android-x86 Linux kernel fork (which e.g. used to have its own display driver instead of using the i915 driver).
Which set of devices we are actually going to get is out of our control, this is controlled by the ACPI OSID variable, which gets either set through an EFI setup option, or sometimes is autodetected. So we need to support both.
This commit adds support for the 80862286 and 808622C0 ACPI HIDs which we get for the first resp. second DMA controller on Cherry Trail devices when OSID is set to Android.
--- drivers/acpi/acpi_lpss.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/acpi/acpi_lpss.c +2 -0
@@ -278,9 +278,11 @@ static const struct acpi_device_id acpi_ { "INT33FC", }, /* Braswell LPSS devices */ + { "80862286", LPSS_ADDR(lpss_dma_desc) }, { "80862288", LPSS_ADDR(bsw_pwm_dev_desc) }, { "8086228A", LPSS_ADDR(bsw_uart_dev_desc) }, { "8086228E", LPSS_ADDR(bsw_spi_dev_desc) }, + { "808622C0", LPSS_ADDR(lpss_dma_desc) }, { "808622C1", LPSS_ADDR(bsw_i2c_dev_desc) }, /* Broadwell LPSS devices */
Greg Kroah-Hartman
maintainerPATCH 47/141 pinctrl: qcom: spmi-mpp: Fix drive strength setting
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stephen Boyd <[email protected]>
[ Upstream commit 89c68b102f13f123aaef22b292526d6b92501334 ]
It looks like we parse the drive strength setting here, but never actually write it into the hardware to update it. Parse the setting and then write it at the end of the pinconf setting function so that it actually sticks in the hardware.
--- drivers/pinctrl/qcom/pinctrl-spmi-mpp.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/pinctrl/qcom/pinctrl-spmi-mpp.c +5 -1
@@ -457,7 +457,7 @@ static int pmic_mpp_config_set(struct pi pad->dtest = arg;break ;case PIN_CONFIG_DRIVE_STRENGTH : - arg = pad->drive_strength; + pad->drive_strength = arg;break ;case PMIC_MPP_CONF_AMUX_ROUTE :if (arg >=PMIC_MPP_AMUX_ROUTE_ABUS4 )
@@ -504,6 +504,10 @@ static int pmic_mpp_config_set(struct piif (ret <0 )return ret; + ret =pmic_mpp_write (state, pad,PMIC_MPP_REG_SINK_CTL , pad->drive_strength); +if (ret <0 ) +return ret; + val = pad->is_enabled <<PMIC_MPP_REG_MASTER_EN_SHIFT ;return pmic_mpp_write (state, pad,PMIC_MPP_REG_EN_CTL , val);
Greg Kroah-Hartman
maintainerPATCH 48/141 pinctrl: spmi-mpp: Fix pmic_mpp_config_get() to be compliant
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Douglas Anderson <[email protected]>
[ Upstream commit 0d5b476f8f57fcb06c45fe27681ac47254f63fd2 ]
If you look at "pinconf-groups" in debugfs for ssbi-mpp you'll notice it looks like nonsense.
The problem is fairly well described in commit 1cf86bc21257 ("pinctrl:
qcom: spmi-gpio: Fix pmic_gpio_config_get() to be compliant") and commit 05e0c828955c ("pinctrl: msm: Fix msm_config_group_get() to be compliant"), but it was pointed out that ssbi-mpp has the same problem. Let's fix it there too.
NOTE: in case it's helpful to someone reading this, the way to tell whether to do the -EINVAL or not is to look at the PCONFDUMP for a given attribute. If the last element (has_arg) is false then you need to do the -EINVAL trick.
ALSO NOTE: it seems unlikely that the values returned when we try to get PIN_CONFIG_BIAS_PULL_UP will actually be printed since "has_arg" is false for that one, but I guess it's still fine to return different values so I kept doing that. It seems like another driver (ssbi-gpio) uses a custom attribute (PM8XXX_QCOM_PULL_UP_STRENGTH) for something similar so maybe a future change should do that here too.
--- drivers/pinctrl/qcom/pinctrl-spmi-mpp.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
drivers/pinctrl/qcom/pinctrl-spmi-mpp.c +12 -7
@@ -345,13 +345,12 @@ static int pmic_mpp_config_get(struct piswitch (param) {case PIN_CONFIG_BIAS_DISABLE : - arg = pad->pullup ==PMIC_MPP_PULL_UP_OPEN ; +if (pad->pullup !=PMIC_MPP_PULL_UP_OPEN ) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_BIAS_PULL_UP :switch (pad->pullup) { -case PMIC_MPP_PULL_UP_OPEN : - arg =0 ; -break ;case PMIC_MPP_PULL_UP_0P6KOHM : arg =600 ;break ;
@@ -366,13 +365,17 @@ static int pmic_mpp_config_get(struct pi }break ;case PIN_CONFIG_BIAS_HIGH_IMPEDANCE : - arg = !pad->is_enabled; +if (pad->is_enabled) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_POWER_SOURCE : arg = pad->power_source;break ;case PIN_CONFIG_INPUT_ENABLE : - arg = pad->input_enabled; +if (!pad->input_enabled) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_OUTPUT : arg = pad->out_value;
@@ -384,7 +387,9 @@ static int pmic_mpp_config_get(struct pi arg = pad->amux_input;break ;case PMIC_MPP_CONF_PAIRED : - arg = pad->paired; +if (!pad->paired) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_DRIVE_STRENGTH : arg = pad->drive_strength;
Greg Kroah-Hartman
maintainerPATCH 49/141 pinctrl: ssbi-gpio: Fix pm8xxx_pin_config_get() to be compliant
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Douglas Anderson <[email protected]>
[ Upstream commit b432414b996d32a1bd9afe2bd595bd5729c1477f ]
If you look at "pinconf-groups" in debugfs for ssbi-gpio you'll notice it looks like nonsense.
The problem is fairly well described in commit 1cf86bc21257 ("pinctrl:
qcom: spmi-gpio: Fix pmic_gpio_config_get() to be compliant") and commit 05e0c828955c ("pinctrl: msm: Fix msm_config_group_get() to be compliant"), but it was pointed out that ssbi-gpio has the same problem. Let's fix it there too.
--- drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-)
drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c +21 -7
@@ -260,22 +260,32 @@ static int pm8xxx_pin_config_get(structswitch (param) {case PIN_CONFIG_BIAS_DISABLE : - arg = pin->bias ==PM8XXX_GPIO_BIAS_NP ; +if (pin->bias !=PM8XXX_GPIO_BIAS_NP ) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_BIAS_PULL_DOWN : - arg = pin->bias ==PM8XXX_GPIO_BIAS_PD ; +if (pin->bias !=PM8XXX_GPIO_BIAS_PD ) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_BIAS_PULL_UP : - arg = pin->bias <=PM8XXX_GPIO_BIAS_PU_1P5_30 ; +if (pin->bias >PM8XXX_GPIO_BIAS_PU_1P5_30 ) +return -EINVAL ; + arg =1 ;break ;case PM8XXX_QCOM_PULL_UP_STRENGTH : arg = pin->pull_up_strength;break ;case PIN_CONFIG_BIAS_HIGH_IMPEDANCE : - arg = pin->disable; +if (!pin->disable) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_INPUT_ENABLE : - arg = pin->mode ==PM8XXX_GPIO_MODE_INPUT ; +if (pin->mode !=PM8XXX_GPIO_MODE_INPUT ) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_OUTPUT :if (pin->mode &PM8XXX_GPIO_MODE_OUTPUT )
@@ -290,10 +300,14 @@ static int pm8xxx_pin_config_get(struct arg = pin->output_strength;break ;case PIN_CONFIG_DRIVE_PUSH_PULL : - arg = !pin->open_drain; +if (pin->open_drain) +return -EINVAL ; + arg =1 ;break ;case PIN_CONFIG_DRIVE_OPEN_DRAIN : - arg = pin->open_drain; +if (!pin->open_drain) +return -EINVAL ; + arg =1 ;break ;default :return -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 50/141 ixgbevf: VF2VF TCP RSS
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Basierski <[email protected]>
[ Upstream commit 7fb94bd58dd6650a0158e68d414e185077d8b57a ]
While VF2VF with RSS communication, RSS Type were wrongly recognized and RSS hash was not calculated as it should be. Packets was distributed on various queues by accident.
This commit fixes that behaviour and causes proper RSS Type recognition.
--- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +4 -0
@@ -3419,6 +3419,10 @@ static void ixgbevf_tx_csum(struct ixgbeskb_checksum_help (skb); goto no_csum; } + +if (first->protocol ==htons (ETH_P_IP )) + type_tucmd |=IXGBE_ADVTXD_TUCMD_IPV4 ; +/* update TX checksum flag */ first->tx_flags |=IXGBE_TX_FLAGS_CSUM ; vlan_macip_lens = skb_checksum_start_offset(skb) -
Greg Kroah-Hartman
maintainerPATCH 51/141 ath10k: schedule hardware restart if WMI command times out
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Martin Willi <[email protected]>
[ Upstream commit a9911937e7d332761e8c4fcbc7ba0426bdc3956f ]
When running in AP mode, ath10k sometimes suffers from TX credit starvation. The issue is hard to reproduce and shows up once in a few days, but has been repeatedly seen with QCA9882 and a large range of firmwares, including 10.2.4.70.67.
Once the module is in this state, TX credits are never replenished, which results in "SWBA overrun" errors, as no beacons can be sent. Even worse, WMI commands run in a timeout while holding the conf mutex for three seconds each, making any further operations slow and the whole system unresponsive.
The firmware/driver never recovers from that state automatically, and triggering TX flush or warm restarts won't work over WMI. So issue a hardware restart if a WMI command times out due to missing TX credits. This implies a connectivity outage of about 1.4s in AP mode, but brings back the interface and the whole system to a usable state. WMI command timeouts have not been seen in absent of this specific issue, so taking such drastic actions seems legitimate.
--- drivers/net/wireless/ath/ath10k/wmi.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/net/wireless/ath/ath10k/wmi.c +6 -0
@@ -1822,6 +1822,12 @@ int ath10k_wmi_cmd_send(struct ath10k *aif (ret)dev_kfree_skb_any (skb); +if (ret == -EAGAIN ) { +ath10k_warn (ar,"wmi command %d timeout, restarting hardware\n" , + cmd_id); +queue_work (ar->workqueue, &ar->restart_work); + } +return ret; }
Greg Kroah-Hartman
maintainerPATCH 52/141 cgroup, netclassid: add a preemption point to write_classid
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michal Hocko <[email protected]>
[ Upstream commit a90e90b7d55e789c71d85b946ffb5c1ab2f137ca ]
We have seen a customer complaining about soft lockups on !PREEMPT kernel config with 4.4 based kernel
[1072141.435366] NMI watchdog: BUG: soft lockup - CPU#21 stuck for 22s! [systemd:1] [1072141.444090] Modules linked in: mpt3sas raid_class binfmt_misc af_packet 8021q garp mrp stp llc xfs libcrc32c bonding iscsi_ibft iscsi_boot_sysfs msr ext4 crc16 jbd2 mbcache cdc_ether usbnet mii joydev hid_generic usbhid intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel ipmi_ssif mgag200 i2c_algo_bit ttm ipmi_devintf drbg ixgbe drm_kms_helper vxlan ansi_cprng ip6_udp_tunnel drm aesni_intel udp_tunnel aes_x86_64 iTCO_wdt syscopyarea ptp xhci_pci lrw iTCO_vendor_support pps_core gf128mul ehci_pci glue_helper sysfillrect mdio pcspkr sb_edac ablk_helper cryptd ehci_hcd sysimgblt xhci_hcd fb_sys_fops edac_core mei_me lpc_ich ses usbcore enclosure dca mfd_core ipmi_si mei i2c_i801 scsi_transport_sas usb_common ipmi_msghandler shpchp fjes wmi processor button acpi_pad btrfs xor raid6_pq sd_mod crc32c_intel megaraid_sas sg dm_multipath dm_mod scsi_dh_rdac scsi_dh_emc scsi_dh_alua scsi_mod md_mod autofs4 [1072141.444146] Supported: Yes [1072141.444149] CPU: 21 PID: 1 Comm: systemd Not tainted 4.4.121-92.80-default #1 [1072141.444150] Hardware name: LENOVO Lenovo System x3650 M5 -[5462P4U]- -[5462P4U]-/01GR451, BIOS -[TCE136H-2.70]- 06/13/2018 [1072141.444151] task: ffff880191bd0040 ti: ffff880191bd4000 task.ti: ffff880191bd4000 [1072141.444153] RIP: 0010:[<ffffffff815229f9>] [<ffffffff815229f9>] update_classid_sock+0x29/0x40 [1072141.444157] RSP: 0018:ffff880191bd7d58 EFLAGS: 00000286 [1072141.444158] RAX: ffff883b177cb7c0 RBX: 0000000000000000 RCX: 0000000000000000 [1072141.444159] RDX: 00000000000009c7 RSI: ffff880191bd7d5c RDI: ffff8822e29bb200 [1072141.444160] RBP: ffff883a72230980 R08: 0000000000000101 R09: 0000000000000000 [1072141.444161] R10: 0000000000000008 R11: f000000000000000 R12: ffffffff815229d0 [1072141.444162] R13: 0000000000000000 R14: ffff881fd0a47ac0 R15: ffff880191bd7f28 [1072141.444163] FS: 00007f3e2f1eb8c0(0000) GS:ffff882000340000(0000) knlGS:0000000000000000 [1072141.444164] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [1072141.444165] CR2: 00007f3e2f200000 CR3: 0000001ffea4e000 CR4: 00000000001606f0 [1072141.444166] Stack: [1072141.444166] ffffffa800000246 00000000000009c7 ffffffff8121d583 ffff8818312a05c0 [1072141.444168] ffff8818312a1100 ffff880197c3b280 ffff881861422858 ffffffffffffffea [1072141.444170] ffffffff81522b1c ffffffff81d0ca20 ffff8817fa17b950 ffff883fdd8121e0 [1072141.444171] Call Trace: [1072141.444179] [<ffffffff8121d583>] iterate_fd+0x53/0x80 [1072141.444182] [<ffffffff81522b1c>] write_classid+0x4c/0x80 [1072141.444187] [<ffffffff8111328b>] cgroup_file_write+0x9b/0x100 [1072141.444193] [<ffffffff81278bcb>] kernfs_fop_write+0x11b/0x150 [1072141.444198] [<ffffffff81201566>] __vfs_write+0x26/0x100 [1072141.444201] [<ffffffff81201bed>] vfs_write+0x9d/0x190 [1072141.444203] [<ffffffff812028c2>] SyS_write+0x42/0xa0 [1072141.444207] [<ffffffff815f58c3>] entry_SYSCALL_64_fastpath+0x1e/0xca [1072141.445490] DWARF2 unwinder stuck at entry_SYSCALL_64_fastpath+0x1e/0xca
If a cgroup has many tasks with many open file descriptors then we would end up in a large loop without any rescheduling point throught the operation. Add cond_resched once per task.
--- net/core/netclassid_cgroup.c | 1 + 1 file changed, 1 insertion(+)
net/core/netclassid_cgroup.c +1 -0
@@ -104,6 +104,7 @@ static int write_classid(struct cgroup_siterate_fd (p->files,0 , update_classid_sock, (void *)(unsigned long )cs->classid);task_unlock (p); +cond_resched (); }css_task_iter_end (&it);
Greg Kroah-Hartman
maintainerPATCH 53/141 scsi: esp_scsi: Track residual for PIO transfers
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Finn Thain <[email protected]>
[ Upstream commit fd47d919d0c336e7c22862b51ee94927ffea227a ]
If a target disconnects during a PIO data transfer the command may fail when the target reconnects:
scsi host1: DMA length is zero!
scsi host1: cur adr[04380000] len[00000000]
The scsi bus is then reset. This happens because the residual reached zero before the transfer was completed.
The usual residual calculation relies on the Transfer Count registers. That works for DMA transfers but not for PIO transfers. Fix the problem by storing the PIO transfer residual and using that to correctly calculate bytes_sent.
--- drivers/scsi/esp_scsi.c | 1 + drivers/scsi/esp_scsi.h | 2 ++ drivers/scsi/mac_esp.c | 2 ++ 3 files changed, 5 insertions(+)
drivers/scsi/esp_scsi.c +1 -0
@@ -1349,6 +1349,7 @@ static int esp_data_bytes_sent(struct es bytes_sent = esp->data_dma_len; bytes_sent -= ecount; + bytes_sent -= esp->send_cmd_residual;/* * The am53c974 has a DMA 'pecularity'. The doc states:
drivers/scsi/esp_scsi.h +2 -0
@@ -540,6 +540,8 @@ struct esp {void *dma;int dmarev; + +u32 send_cmd_residual; };/* A front-end driver for the ESP chip should do the following in
drivers/scsi/mac_esp.c +2 -0
@@ -426,6 +426,8 @@ static void mac_esp_send_pio_cmd(structscsi_esp_cmd (esp,ESP_CMD_TI ); } } + + esp->send_cmd_residual = esp_count; }static int mac_esp_irq_pending (struct esp *esp)
Greg Kroah-Hartman
maintainerPATCH 54/141 scsi: megaraid_sas: fix a missing-check bug
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wenwen Wang <[email protected]>
[ Upstream commit 47db7873136a9c57c45390a53b57019cf73c8259 ]
In megasas_mgmt_compat_ioctl_fw(), to handle the structure compat_megasas_iocpacket 'cioc', a user-space structure megasas_iocpacket 'ioc' is allocated before megasas_mgmt_ioctl_fw() is invoked to handle the packet. Since the two data structures have different fields, the data is copied from 'cioc' to 'ioc' field by field. In the copy process, 'sense_ptr' is prepared if the field 'sense_len' is not null, because it will be used in megasas_mgmt_ioctl_fw(). To prepare 'sense_ptr', the user-space data 'ioc->sense_off' and 'cioc->sense_off' are copied and saved to kernel-space variables 'local_sense_off' and 'user_sense_off' respectively. Given that 'ioc->sense_off' is also copied from 'cioc->sense_off', 'local_sense_off' and 'user_sense_off' should have the same value. However, 'cioc' is in the user space and a malicious user can race to change the value of 'cioc->sense_off' after it is copied to 'ioc->sense_off' but before it is copied to 'user_sense_off'. By doing so, the attacker can inject different values into 'local_sense_off' and 'user_sense_off'. This can cause undefined behavior in the following execution, because the two variables are supposed to be same.
This patch enforces a check on the two kernel variables 'local_sense_off' and 'user_sense_off' to make sure they are the same after the copy. In case they are not, an error code EINVAL will be returned.
--- drivers/scsi/megaraid/megaraid_sas_base.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/scsi/megaraid/megaraid_sas_base.c +3 -0
@@ -6901,6 +6901,9 @@ static int megasas_mgmt_compat_ioctl_fw( get_user(user_sense_off, &cioc->sense_off))return -EFAULT ; +if (local_sense_off != user_sense_off) +return -EINVAL ; +if (local_sense_len) {void __user **sense_ioc_ptr = (void __user **)((u8 *)((unsigned long )&ioc->frame.raw) + local_sense_off);
Greg Kroah-Hartman
maintainerPATCH 55/141 RDMA/core: Do not expose unsupported counters
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Parav Pandit <[email protected]>
[ Upstream commit 0f6ef65d1c6ec8deb5d0f11f86631ec4cfe8f22e ]
If the provider driver (such as rdma_rxe) doesn't support pma counters, avoid exposing its directory similar to optional hw_counters directory. If core fails to read the PMA counter, return an error so that user can retry later if needed.
--- drivers/infiniband/core/sysfs.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
drivers/infiniband/core/sysfs.c +12 -7
@@ -485,7 +485,7 @@ static ssize_t show_pma_counter(struct i ret =get_perf_mad (p->ibdev, p->port_num, tab_attr->attr_id, &data,40 + offset /8 ,sizeof (data));if (ret <0 ) -return sprintf (buf,"N/A (no PMA)\n" ); +return ret;switch (width) {case 4 :
@@ -1008,10 +1008,12 @@ static int add_port(struct ib_device *de goto err_put; } - p->pma_table =get_counter_table (device, port_num); - ret =sysfs_create_group (&p->kobj, p->pma_table); -if (ret) - goto err_put_gid_attrs; +if (device->process_mad) { + p->pma_table =get_counter_table (device, port_num); + ret =sysfs_create_group (&p->kobj, p->pma_table); +if (ret) + goto err_put_gid_attrs; + } p->gid_group.name ="gids" ; p->gid_group.attrs =alloc_group_attrs (show_port_gid, attr.gid_tbl_len);
@@ -1124,7 +1126,8 @@ err_free_gid: p->gid_group.attrs =NULL ; err_remove_pma: -sysfs_remove_group (&p->kobj, p->pma_table); +if (p->pma_table) +sysfs_remove_group (&p->kobj, p->pma_table); err_put_gid_attrs:kobject_put (&p->gid_attr_group->kobj);
@@ -1236,7 +1239,9 @@ static void free_port_list_attributes(stkfree (port->hw_stats);free_hsag (&port->kobj, port->hw_stats_ag); } -sysfs_remove_group (p, port->pma_table); + +if (port->pma_table) +sysfs_remove_group (p, port->pma_table);sysfs_remove_group (p, &port->pkey_group);sysfs_remove_group (p, &port->gid_group); sysfs_remove_group(&port->gid_attr_group->kobj,
Greg Kroah-Hartman
maintainerPATCH 56/141 IB/ipoib: Clear IPCB before icmp_send
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Denis Drozdov <[email protected]>
[ Upstream commit 4d6e4d12da2c308f8f976d3955c45ee62539ac98 ]
IPCB should be cleared before icmp_send, since it may contain data from previous layers and the data could be misinterpreted as ip header options, which later caused the ihl to be set to an invalid value and resulted in the following stack corruption:
[ 1083.031512] ib0: packet len 57824 (> 2048) too long to send, dropping [ 1083.031843] ib0: packet len 37904 (> 2048) too long to send, dropping [ 1083.032004] ib0: packet len 4040 (> 2048) too long to send, dropping [ 1083.032253] ib0: packet len 63800 (> 2048) too long to send, dropping [ 1083.032481] ib0: packet len 23960 (> 2048) too long to send, dropping [ 1083.033149] ib0: packet len 63800 (> 2048) too long to send, dropping [ 1083.033439] ib0: packet len 63800 (> 2048) too long to send, dropping [ 1083.033700] ib0: packet len 63800 (> 2048) too long to send, dropping [ 1083.034124] ib0: packet len 63800 (> 2048) too long to send, dropping [ 1083.034387] ================================================================== [ 1083.034602] BUG: KASAN: stack-out-of-bounds in __ip_options_echo+0xf08/0x1310 [ 1083.034798] Write of size 4 at addr ffff880353457c5f by task kworker/u16:0/7 [ 1083.034990] [ 1083.035104] CPU: 7 PID: 7 Comm: kworker/u16:0 Tainted: G O 4.19.0-rc5+ #1 [ 1083.035316] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu2 04/01/2014 [ 1083.035573] Workqueue: ipoib_wq ipoib_cm_skb_reap [ib_ipoib] [ 1083.035750] Call Trace: [ 1083.035888] dump_stack+0x9a/0xeb [ 1083.036031] print_address_description+0xe3/0x2e0 [ 1083.036213] kasan_report+0x18a/0x2e0 [ 1083.036356] ? __ip_options_echo+0xf08/0x1310 [ 1083.036522] __ip_options_echo+0xf08/0x1310 [ 1083.036688] icmp_send+0x7b9/0x1cd0 [ 1083.036843] ? icmp_route_lookup.constprop.9+0x1070/0x1070 [ 1083.037018] ? netif_schedule_queue+0x5/0x200 [ 1083.037180] ? debug_show_all_locks+0x310/0x310 [ 1083.037341] ? rcu_dynticks_curr_cpu_in_eqs+0x85/0x120 [ 1083.037519] ? debug_locks_off+0x11/0x80 [ 1083.037673] ? debug_check_no_obj_freed+0x207/0x4c6 [ 1083.037841] ? check_flags.part.27+0x450/0x450 [ 1083.037995] ? debug_check_no_obj_freed+0xc3/0x4c6 [ 1083.038169] ? debug_locks_off+0x11/0x80 [ 1083.038318] ? skb_dequeue+0x10e/0x1a0 [ 1083.038476] ? ipoib_cm_skb_reap+0x2b5/0x650 [ib_ipoib] [ 1083.038642] ? netif_schedule_queue+0xa8/0x200 [ 1083.038820] ? ipoib_cm_skb_reap+0x544/0x650 [ib_ipoib] [ 1083.038996] ipoib_cm_skb_reap+0x544/0x650 [ib_ipoib] [ 1083.039174] process_one_work+0x912/0x1830 [ 1083.039336] ? wq_pool_ids_show+0x310/0x310 [ 1083.039491] ? lock_acquire+0x145/0x3a0 [ 1083.042312] worker_thread+0x87/0xbb0 [ 1083.045099] ? process_one_work+0x1830/0x1830 [ 1083.047865] kthread+0x322/0x3e0 [ 1083.050624] ? kthread_create_worker_on_cpu+0xc0/0xc0 [ 1083.053354] ret_from_fork+0x3a/0x50
For instance __ip_options_echo is failing to proceed with invalid srr and optlen passed from another layer via IPCB
[ 762.139568] IPv4: __ip_options_echo rr=0 ts=0 srr=43 cipso=0 [ 762.139720] IPv4: ip_options_build: IPCB 00000000f3cd969e opt 000000002ccb3533 [ 762.139838] IPv4: __ip_options_echo in srr: optlen 197 soffset 84 [ 762.139852] IPv4: ip_options_build srr=0 is_frag=0 rr_needaddr=0 ts_needaddr=0 ts_needtime=0 rr=0 ts=0 [ 762.140269] ================================================================== [ 762.140713] IPv4: __ip_options_echo rr=0 ts=0 srr=0 cipso=0 [ 762.141078] BUG: KASAN: stack-out-of-bounds in __ip_options_echo+0x12ec/0x1680 [ 762.141087] Write of size 4 at addr ffff880353457c7f by task kworker/u16:0/7
--- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/infiniband/ulp/ipoib/ipoib_cm.c +6 -2
@@ -1422,11 +1422,15 @@ static void ipoib_cm_skb_reap(struct worspin_unlock_irqrestore (&priv->lock, flags);netif_tx_unlock_bh (dev); -if (skb->protocol ==htons (ETH_P_IP )) +if (skb->protocol ==htons (ETH_P_IP )) { +memset (IPCB (skb),0 ,sizeof (*IPCB (skb)));icmp_send (skb,ICMP_DEST_UNREACH ,ICMP_FRAG_NEEDED ,htonl (mtu)); + }#if IS_ENABLED (CONFIG_IPV6 ) - else if (skb->protocol == htons(ETH_P_IPV6)) + else if (skb->protocol == htons(ETH_P_IPV6)) { +memset (IP6CB (skb),0 ,sizeof (*IP6CB (skb)));icmpv6_send (skb,ICMPV6_PKT_TOOBIG ,0 , mtu); + }#endif dev_kfree_skb_any (skb);
Greg Kroah-Hartman
maintainerPATCH 57/141 tpm: suppress transmit cmd error logs when TPM 1.2 is disabled/deactivated
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Javier Martinez Canillas <[email protected]>
[ Upstream commit 0d6d0d62d9505a9816716aa484ebd0b04c795063 ]
For TPM 1.2 chips the system setup utility allows to set the TPM device in one of the following states:
* Active: Security chip is functional
* Inactive: Security chip is visible, but is not functional
* Disabled: Security chip is hidden and is not functional
When choosing the "Inactive" state, the TPM 1.2 device is enumerated and registered, but sending TPM commands fail with either TPM_DEACTIVATED or TPM_DISABLED depending if the firmware deactivated or disabled the TPM.
Since these TPM 1.2 error codes don't have special treatment, inactivating the TPM leads to a very noisy kernel log buffer that shows messages like the following:
tpm_tis 00:05: 1.2 TPM (device-id 0x0, rev-id 78)
tpm tpm0: A TPM error (6) occurred attempting to read a pcr value tpm tpm0: TPM is disabled/deactivated (0x6)
tpm tpm0: A TPM error (6) occurred attempting get random tpm tpm0: A TPM error (6) occurred attempting to read a pcr value
ima: No TPM chip found, activating TPM-bypass! (rc=6) tpm tpm0: A TPM error (6) occurred attempting get random tpm tpm0: A TPM error (6) occurred attempting get random tpm tpm0: A TPM error (6) occurred attempting get random tpm tpm0: A TPM error (6) occurred attempting get random
Let's just suppress error log messages for the TPM_{DEACTIVATED,DISABLED} return codes, since this is expected when the TPM 1.2 is set to Inactive.
In that case the kernel log is cleaner and less confusing for users, i.e:
tpm_tis 00:05: 1.2 TPM (device-id 0x0, rev-id 78) tpm tpm0: TPM is disabled/deactivated (0x6)
ima: No TPM chip found, activating TPM-bypass! (rc=6)
--- drivers/char/tpm/tpm-interface.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/char/tpm/tpm-interface.c +2 -1
@@ -420,7 +420,8 @@ ssize_t tpm_transmit_cmd(struct tpm_chip header = cmd; err =be32_to_cpu (header->return_code); -if (err !=0 && desc) +if (err !=0 && err !=TPM_ERR_DISABLED && err !=TPM_ERR_DEACTIVATED + && desc)dev_err (&chip->dev,"A TPM error (%d) occurred %s\n" , err, desc);
Greg Kroah-Hartman
maintainerPATCH 58/141 VMCI: Resource wildcard match fixed
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jorgen Hansen <[email protected]>
[ Upstream commit 11924ba5e671d6caef1516923e2bd8c72929a3fe ]
When adding a VMCI resource, the check for an existing entry would ignore that the new entry could be a wildcard. This could result in multiple resource entries that would match a given handle. One disastrous outcome of this is that the refcounting used to ensure that delayed callbacks for VMCI datagrams have run before the datagram is destroyed can be wrong, since the refcount could be increased on the duplicate entry. This in turn leads to a use after free bug. This issue was discovered by Hangbin Liu using KASAN and syzkaller.
--- drivers/misc/vmw_vmci/vmci_driver.c | 2 +- drivers/misc/vmw_vmci/vmci_resource.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-)
drivers/misc/vmw_vmci/vmci_driver.c +1 -1
@@ -113,5 +113,5 @@ module_exit(vmci_drv_exit);MODULE_AUTHOR ("VMware, Inc." );MODULE_DESCRIPTION ("VMware Virtual Machine Communication Interface." ); -MODULE_VERSION ("1.1.5.0-k" ); +MODULE_VERSION ("1.1.6.0-k" );MODULE_LICENSE ("GPL v2" );
drivers/misc/vmw_vmci/vmci_resource.c +2 -1
@@ -56,7 +56,8 @@ static struct vmci_resource *vmci_resourif (r->type == type && rid == handle.resource && - (cid == handle.context || cid ==VMCI_INVALID_ID )) { + (cid == handle.context || cid ==VMCI_INVALID_ID || + handle.context ==VMCI_INVALID_ID )) { resource = r;break ; }
Greg Kroah-Hartman
maintainerPATCH 59/141 usb: gadget: udc: atmel: handle at91sam9rl PMC
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexandre Belloni <[email protected]>
[ Upstream commit bb80e4fa57eb75ebd64ae9be4155da6d12c1a997 ]
The at91sam9rl PMC is not quite the same as the at91sam9g45 one and now has its own compatible string. Add support for that.
--- drivers/usb/gadget/udc/atmel_usba_udc.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/gadget/udc/atmel_usba_udc.c +2 -0
@@ -1923,6 +1923,8 @@ static struct usba_ep * atmel_udc_of_ini udc->errata = match->data; udc->pmc =syscon_regmap_lookup_by_compatible ("atmel,at91sam9g45-pmc" );if (IS_ERR (udc->pmc)) + udc->pmc =syscon_regmap_lookup_by_compatible ("atmel,at91sam9rl-pmc" ); +if (IS_ERR (udc->pmc)) udc->pmc =syscon_regmap_lookup_by_compatible ("atmel,at91sam9x5-pmc" );if (udc->errata &&IS_ERR (udc->pmc))return ERR_CAST (udc->pmc);
Greg Kroah-Hartman
maintainerPATCH 60/141 ext4: fix argument checking in EXT4_IOC_MOVE_EXT
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
[ Upstream commit f18b2b83a727a3db208308057d2c7945f368e625 ]
If the starting block number of either the source or destination file exceeds the EOF, EXT4_IOC_MOVE_EXT should return EINVAL.
Also fixed the helper function mext_check_coverage() so that if the logical block is beyond EOF, make it return immediately, instead of looping until the block number wraps all the away around. This takes long enough that if there are multiple threads trying to do pound on an the same inode doing non-sensical things, it can end up triggering the kernel's soft lockup detector.
--- fs/ext4/move_extent.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
fs/ext4/move_extent.c +6 -2
@@ -526,9 +526,13 @@ mext_check_arguments(struct inode *orig_ orig_inode->i_ino, donor_inode->i_ino);return -EINVAL ; } -if (orig_eof < orig_start + *len -1 ) +if (orig_eof <= orig_start) + *len =0 ; +else if (orig_eof < orig_start + *len -1 ) *len = orig_eof - orig_start; -if (donor_eof < donor_start + *len -1 ) +if (donor_eof <= donor_start) + *len =0 ; +else if (donor_eof < donor_start + *len -1 ) *len = donor_eof - donor_start;if (!*len) { ext4_debug("ext4 move extent: len should not be 0 "
Greg Kroah-Hartman
maintainerPATCH 61/141 MD: fix invalid stored role for a disk
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shaohua Li <[email protected]>
[ Upstream commit d595567dc4f0c1d90685ec1e2e296e2cad2643ac ]
If we change the number of array's device after device is removed from array, then add the device back to array, we can see that device is added as active role instead of spare which we expected.
Please see the below link for details:
https://marc.info/?l=linux-raid&m=153736982015076&w=2
This is caused by that we prefer to use device's previous role which is recorded by saved_raid_disk, but we should respect the new number of conf->raid_disks since it could be changed after device is removed.
--- drivers/md/md.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/md/md.c +4 -0
@@ -1665,6 +1665,10 @@ static int super_1_validate(struct mddev }else set_bit (In_sync, &rdev->flags); rdev->raid_disk = role; +if (role >= mddev->raid_disks) { + rdev->saved_raid_disk =-1 ; + rdev->raid_disk =-1 ; + }break ; }if (sb->devflags & WriteMostly1)
Greg Kroah-Hartman
maintainerPATCH 62/141 PCI/MSI: Warn and return error if driver enables MSI/MSI-X twice
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tonghao Zhang <[email protected]>
[ Upstream commit 4c1ef72e9b71a19fb405ebfcd37c0a5e16fa44ca ]
It is a serious driver defect to enable MSI or MSI-X more than once. Doing so may panic the kernel as in the stack trace below:
Call Trace:
sysfs_add_one+0xa5/0xd0
create_dir+0x7c/0xe0
sysfs_create_subdir+0x1c/0x20
internal_create_group+0x6d/0x290
sysfs_create_groups+0x4a/0xa0
populate_msi_sysfs+0x1cd/0x210
pci_enable_msix+0x31c/0x3e0
igbuio_pci_open+0x72/0x300 [igb_uio]
uio_open+0xcc/0x120 [uio]
chrdev_open+0xa1/0x1e0
[...]
do_sys_open+0xf3/0x1f0
SyS_open+0x1e/0x20
system_call_fastpath+0x16/0x1b
---[ end trace 11042e2848880209 ]---
Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: ffffffffa056b4faWe want to keep the WARN_ON() and stack trace so the driver can be fixed, but we can avoid the kernel panic by returning an error. We may still get warnings like this:
Call Trace:
pci_enable_msix+0x3c9/0x3e0
igbuio_pci_open+0x72/0x300 [igb_uio]
uio_open+0xcc/0x120 [uio]
chrdev_open+0xa1/0x1e0
[...]
do_sys_open+0xf3/0x1f0
SyS_open+0x1e/0x20
system_call_fastpath+0x16/0x1b
------------[ cut here ]------------
WARNING: at fs/sysfs/dir.c:526 sysfs_add_one+0xa5/0xd0()
sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:03.0/0000:01:00.1/msi_irqs'--- drivers/pci/msi.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/pci/msi.c +6 -3
@@ -981,7 +981,6 @@ static int __pci_enable_msix(struct pci_ } } } -WARN_ON (!!dev->msix_enabled);/* Check whether driver already requested for MSI irq */ if (dev->msi_enabled) {
@@ -1068,8 +1067,6 @@ static int __pci_enable_msi_range(structif (!pci_msi_supported (dev, minvec))return -EINVAL ; -WARN_ON (!!dev->msi_enabled); -/* Check whether driver already requested MSI-X irqs */ if (dev->msix_enabled) { dev_info(&dev->dev,
@@ -1080,6 +1077,9 @@ static int __pci_enable_msi_range(structif (maxvec < minvec)return -ERANGE ; +if (WARN_ON_ONCE (dev->msi_enabled)) +return -EINVAL ; + nvec =pci_msi_vec_count (dev);if (nvec <0 )return nvec;
@@ -1138,6 +1138,9 @@ static int __pci_enable_msix_range(strucif (maxvec < minvec)return -ERANGE ; +if (WARN_ON_ONCE (dev->msix_enabled)) +return -EINVAL ; +for (;;) {if (affinity) { nvec = irq_calc_affinity_vectors(dev->irq_affinity,
Greg Kroah-Hartman
maintainerPATCH 63/141 coresight: etb10: Fix handling of perf mode
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Suzuki K Poulose <[email protected]>
[ Upstream commit 987d1e8dcd370d96029a3d76a0031b043c4a69ae ]
If the ETB is already enabled in sysfs mode, the ETB reports success even if a perf mode is requested. Fix this by checking the requested mode.
--- drivers/hwtracing/coresight/coresight-etb10.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/hwtracing/coresight/coresight-etb10.c +4 -0
@@ -155,6 +155,10 @@ static int etb_enable(struct coresight_dif (val ==CS_MODE_PERF )return -EBUSY ; +/* Don't let perf disturb sysFS sessions */ +if (val ==CS_MODE_SYSFS && mode ==CS_MODE_PERF ) +return -EBUSY ; +/* Nothing to do, the tracer is already enabled. */ if (val ==CS_MODE_SYSFS ) goto out;
Greg Kroah-Hartman
maintainerPATCH 64/141 crypto: caam - fix implicit casts in endianness helpers
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Horia Geantă" <[email protected]>
[ Upstream commit aae733a3f46f5ef338fbdde26e14cbb205a23de0 ]
Fix the following sparse endianness warnings:
drivers/crypto/caam/regs.h:95:1: sparse: incorrect type in return expression (different base types) @@ expected unsigned int @@ got restricted __le32unsigned int @@drivers/crypto/caam/regs.h:95:1: expected unsigned intdrivers/crypto/caam/regs.h:95:1: got restricted __le32 [usertype] <noident>drivers/crypto/caam/regs.h:95:1: sparse: incorrect type in return expression (different base types) @@ expected unsigned int @@ got restricted __be32unsigned int @@drivers/crypto/caam/regs.h:95:1: expected unsigned intdrivers/crypto/caam/regs.h:95:1: got restricted __be32 [usertype] <noident>
drivers/crypto/caam/regs.h:92:1: sparse: cast to restricted __le32 drivers/crypto/caam/regs.h:92:1: sparse: cast to restricted __be32
--- drivers/crypto/caam/regs.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
drivers/crypto/caam/regs.h +14 -14
@@ -68,22 +68,22 @@extern bool caam_little_end; -#define caam_to_cpu (len) \ -static inline u##len caam##len ## _to_cpu(u##len val) \ -{ \ - if (caam_little_end) \ - return le##len ## _to_cpu(val); \ - else \ - return be##len ## _to_cpu(val); \ +#define caam_to_cpu (len) \ +static inline u##len caam##len ## _to_cpu(u##len val) \ +{ \ + if (caam_little_end) \ + return le##len ## _to_cpu((__force __le##len)val); \ + else \ + return be##len ## _to_cpu((__force __be##len)val); \ } -#define cpu_to_caam (len) \ -static inline u##len cpu_to_caam##len(u##len val) \ -{ \ - if (caam_little_end) \ - return cpu_to_le##len(val); \ - else \ - return cpu_to_be##len(val); \ +#define cpu_to_caam (len) \ +static inline u##len cpu_to_caam##len(u##len val) \ +{ \ + if (caam_little_end) \ + return (__force u##len)cpu_to_le##len(val); \ + else \ + return (__force u##len)cpu_to_be##len(val); \ }caam_to_cpu (16 )
Greg Kroah-Hartman
maintainerPATCH 65/141 usb: chipidea: Prevent unbalanced IRQ disable
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Loic Poulain <[email protected]>
[ Upstream commit 8b97d73c4d72a2abf58f8e49062a7ee1e5f1334e ]
The ChipIdea IRQ is disabled before scheduling the otg work and re-enabled on otg work completion. However if the job is already scheduled we have to undo the effect of disable_irq int order to balance the IRQ disable-depth value.
--- drivers/usb/chipidea/otg.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/usb/chipidea/otg.h +2 -1
@@ -20,7 +20,8 @@ void ci_handle_vbus_change(struct ci_hdrstatic inline void ci_otg_queue_work (struct ci_hdrc *ci) {disable_irq_nosync (ci->irq); -queue_work (ci->wq, &ci->work); +if (queue_work (ci->wq, &ci->work) == false) +enable_irq (ci->irq); }#endif /* __DRIVERS_USB_CHIPIDEA_OTG_H */
Greg Kroah-Hartman
maintainerPATCH 66/141 driver/dma/ioat: Call del_timer_sync() without holding prep_lock
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Waiman Long <[email protected]>
[ Upstream commit cfb03be6c7e8a1591285849c361d67b09f5149f7 ]
The following lockdep splat was observed:
[ 1222.241750] ======================================================
[ 1222.271301] WARNING: possible circular locking dependency detected
[ 1222.301060] 4.16.0-10.el8+5.x86_64+debug #1 Not tainted
[ 1222.326659] ------------------------------------------------------
[ 1222.356565] systemd-shutdow/1 is trying to acquire lock:
[ 1222.382660] ((&ioat_chan->timer)){+.-.}, at: [<00000000f71e1a28>] del_timer_sync+0x5/0xf0
[ 1222.422928]
[ 1222.422928] but task is already holding lock:
[ 1222.451743] (&(&ioat_chan->prep_lock)->rlock){+.-.}, at: [<000000008ea98b12>] ioat_shutdown+0x86/0x100 [ioatdma]
:
[ 1223.524987] Chain exists of:
[ 1223.524987] (&ioat_chan->timer) --> &(&ioat_chan->cleanup_lock)->rlock --> &(&ioat_chan->prep_lock)->rlock
[ 1223.524987]
[ 1223.594082] Possible unsafe locking scenario:
[ 1223.594082]
[ 1223.622630] CPU0 CPU1
[ 1223.645080] ---- ----
[ 1223.667404] lock(&(&ioat_chan->prep_lock)->rlock);
[ 1223.691535] lock(&(&ioat_chan->cleanup_lock)->rlock);
[ 1223.728657] lock(&(&ioat_chan->prep_lock)->rlock);
[ 1223.765122] lock((&ioat_chan->timer));
[ 1223.784095]
[ 1223.784095] *** DEADLOCK ***
[ 1223.784095]
[ 1223.813492] 4 locks held by systemd-shutdow/1:
[ 1223.834677] #0: (reboot_mutex){+.+.}, at: [<0000000056d33456>] SYSC_reboot+0x10f/0x300
[ 1223.873310] #1: (&dev->mutex){....}, at: [<00000000258dfdd7>] device_shutdown+0x1c8/0x660
[ 1223.913604] #2: (&dev->mutex){....}, at: [<0000000068331147>] device_shutdown+0x1d6/0x660
[ 1223.954000] #3: (&(&ioat_chan->prep_lock)->rlock){+.-.}, at: [<000000008ea98b12>] ioat_shutdown+0x86/0x100 [ioatdma]In the ioat_shutdown() function:
spin_lock_bh(&ioat_chan->prep_lock); set_bit(IOAT_CHAN_DOWN, &ioat_chan->state); del_timer_sync(&ioat_chan->timer); spin_unlock_bh(&ioat_chan->prep_lock);
According to the synchronization rule for the del_timer_sync() function, the caller must not hold locks which would prevent completion of the timer's handler.
The timer structure has its own lock that manages its synchronization. Setting the IOAT_CHAN_DOWN bit should prevent other CPUs from trying to use that device anyway, there is probably no need to call del_timer_sync() while holding the prep_lock. So the del_timer_sync() call is now moved outside of the prep_lock critical section to prevent the circular lock dependency.
--- drivers/dma/ioat/init.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/dma/ioat/init.c +8 -1
@@ -1210,8 +1210,15 @@ static void ioat_shutdown(struct pci_devspin_lock_bh (&ioat_chan->prep_lock);set_bit (IOAT_CHAN_DOWN , &ioat_chan->state); -del_timer_sync (&ioat_chan->timer);spin_unlock_bh (&ioat_chan->prep_lock); +/* +* Synchronization rule for del_timer_sync(): +* - The caller must not hold locks which would prevent +* completion of the timer's handler. +* So prep_lock cannot be held before calling it. +*/ +del_timer_sync (&ioat_chan->timer); +/* this should quiesce then reset */ ioat_reset_hw (ioat_chan); }
Greg Kroah-Hartman
maintainerPATCH 67/141 uio: ensure class is registered before devices
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexandre Belloni <[email protected]>
[ Upstream commit ae61cf5b9913027c6953a79ed3894da4f47061bd ]
When both uio and the uio drivers are built in the kernel, it is possible for a driver to register devices before the uio class is registered.
This may result in a NULL pointer dereference later on in get_device_parent() when accessing the class glue_dirs spinlock.
The trace looks like that:
Unable to handle kernel NULL pointer dereference at virtual address 00000140 [...] [<ffff0000089cc234>] _raw_spin_lock+0x14/0x48 [<ffff0000084f56bc>] device_add+0x154/0x6a0 [<ffff0000084f5e48>] device_create_groups_vargs+0x120/0x128 [<ffff0000084f5edc>] device_create+0x54/0x60 [<ffff0000086e72c0>] __uio_register_device+0x120/0x4a8 [<ffff000008528b7c>] jaguar2_pci_probe+0x2d4/0x558 [<ffff0000083fc18c>] local_pci_probe+0x3c/0xb8 [<ffff0000083fd81c>] pci_device_probe+0x11c/0x180 [<ffff0000084f88bc>] driver_probe_device+0x22c/0x2d8 [<ffff0000084f8a24>] __driver_attach+0xbc/0xc0 [<ffff0000084f69fc>] bus_for_each_dev+0x4c/0x98 [<ffff0000084f81b8>] driver_attach+0x20/0x28 [<ffff0000084f7d08>] bus_add_driver+0x1b8/0x228 [<ffff0000084f93c0>] driver_register+0x60/0xf8 [<ffff0000083fb918>] __pci_register_driver+0x40/0x48
Return EPROBE_DEFER in that case so the driver can register the device later.
--- drivers/uio/uio.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/uio/uio.c +9 -0
@@ -249,6 +249,8 @@ static struct class uio_class = { .dev_groups = uio_groups, }; +bool uio_class_registered; +/* * device functions */
@@ -780,6 +782,9 @@ static int init_uio_class(void)printk (KERN_ERR "class_register failed for uio\n" ); goto err_class_register; } + + uio_class_registered = true; +return 0 ; err_class_register:
@@ -790,6 +795,7 @@ exit:static void release_uio_class (void ) { + uio_class_registered = false;class_unregister (&uio_class);uio_major_cleanup (); }
@@ -809,6 +815,9 @@ int __uio_register_device(struct modulestruct uio_device *idev;int ret =0 ; +if (!uio_class_registered) +return -EPROBE_DEFER ; +if (!parent || !info || !info->name || !info->version)return -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 68/141 scsi: lpfc: Correct soft lockup when running mds diagnostics
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: James Smart <[email protected]>
[ Upstream commit 0ef01a2d95fd62bb4f536e7ce4d5e8e74b97a244 ]
When running an mds diagnostic that passes frames with the switch, soft lockups are detected. The driver is in a CQE processing loop and has sufficient amount of traffic that it never exits the ring processing routine, thus the "lockup".
Cap the number of elements in the work processing routine to 64 elements. This ensures that the cpu will be given up and the handler reschedule to process additional items.
--- drivers/scsi/lpfc/lpfc_sli.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/scsi/lpfc/lpfc_sli.c +7 -0
@@ -3512,6 +3512,7 @@ lpfc_sli_handle_slow_ring_event_s4(strucstruct hbq_dmabuf *dmabuf;struct lpfc_cq_event *cq_event;unsigned long iflag; +int count =0 ;spin_lock_irqsave (&phba->hbalock, iflag); phba->hba_flag &= ~HBA_SP_QUEUE_EVT ;
@@ -3533,16 +3534,22 @@ lpfc_sli_handle_slow_ring_event_s4(strucif (irspiocbq)lpfc_sli_sp_handle_rspiocb (phba, pring, irspiocbq); + count++;break ;case CQE_CODE_RECEIVE :case CQE_CODE_RECEIVE_V1 : dmabuf = container_of(cq_event, struct hbq_dmabuf, cq_event);lpfc_sli4_handle_received_buffer (phba, dmabuf); + count++;break ;default :break ; } + +/* Limit the number of events to 64 to avoid soft lockups */ +if (count ==64 ) +break ; } }
Greg Kroah-Hartman
maintainerPATCH 69/141 signal: Always deliver the kernels SIGKILL and SIGSTOP to a pid namespace init
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Eric W. Biederman" <[email protected]>
[ Upstream commit 3597dfe01d12f570bc739da67f857fd222a3ea66 ]
Instead of playing whack-a-mole and changing SEND_SIG_PRIV to SEND_SIG_FORCED throughout the kernel to ensure a pid namespace init gets signals sent by the kernel, stop allowing a pid namespace init to ignore SIGKILL or SIGSTOP sent by the kernel. A pid namespace init is only supposed to be able to ignore signals sent from itself and children with SIG_DFL.
--- kernel/signal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/signal.c +1 -1
@@ -991,7 +991,7 @@ static int __send_signal(int sig, struct result =TRACE_SIGNAL_IGNORED ;if (!prepare_signal (sig, t, - from_ancestor_ns || (info ==SEND_SIG_FORCED ))) + from_ancestor_ns || (info ==SEND_SIG_PRIV ) || (info ==SEND_SIG_FORCED ))) goto ret; pending = group ? &t->signal->shared_pending : &t->pending;
Greg Kroah-Hartman
maintainerPATCH 70/141 dmaengine: dma-jz4780: Return error if not probed from DT
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paul Cercueil <[email protected]>
[ Upstream commit 54f919a04cf221bc1601d1193682d4379dacacbd ]
The driver calls clk_get() with the clock name set to NULL, which means that the driver could only work when probed from devicetree. From now on, we explicitly require the driver to be probed from devicetree.
--- drivers/dma/dma-jz4780.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/dma/dma-jz4780.c +5 -0
@@ -754,6 +754,11 @@ static int jz4780_dma_probe(struct platfstruct resource *res;int i, ret; +if (!dev->of_node) { +dev_err (dev,"This driver must be probed from devicetree\n" ); +return -EINVAL ; + } + jzdma =devm_kzalloc (dev,sizeof (*jzdma),GFP_KERNEL );if (!jzdma)return -ENOMEM ;
Greg Kroah-Hartman
maintainerPATCH 71/141 ALSA: hda: Check the non-cached stream buffers more explicitly
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
[ Upstream commit 78c9be61c3a5cd9e2439fd27a5ffad73a81958c7 ]
Introduce a new flag, uc_buffer, to indicate that the controller requires the non-cached pages for stream buffers, either as a chip-specific requirement or specified via snoop=0 option. This improves the code-readability.
Also, this patch fixes the incorrect behavior for C-Media chip where the stream buffers were never handled as non-cached due to the check of driver_type even if you pass snoop=0 option.
--- sound/pci/hda/hda_controller.h | 1 + sound/pci/hda/hda_intel.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-)
sound/pci/hda/hda_controller.h +1 -0
@@ -155,6 +155,7 @@ struct azx { unsigned int msi:1; unsigned int probing:1; /* codec probing phase */ unsigned int snoop:1; + unsigned int uc_buffer:1; /* non-cached pages for stream buffers */ unsigned int align_buffer_size:1; unsigned int region_requested:1; unsigned int disabled:1; /* disabled by vga_switcheroo */
sound/pci/hda/hda_intel.c +8 -3
@@ -410,7 +410,7 @@ static void __mark_pages_wc(struct azx *#ifdef CONFIG_SND_DMA_SGBUF if (dmab->dev.type ==SNDRV_DMA_TYPE_DEV_SG ) {struct snd_sg_buf *sgbuf = dmab->private_data; -if (chip->driver_type ==AZX_DRIVER_CMEDIA ) +if (!chip->uc_buffer)return ;/* deal with only CORB/RIRB buffers */ if (on)set_pages_array_wc (sgbuf->page_table, sgbuf->pages);
@@ -1503,6 +1503,7 @@ static void azx_check_snoop_available(stdev_info (chip->card->dev,"Force to %s mode by module option\n" , snoop ?"snoop" :"non-snoop" ); chip->snoop = snoop; + chip->uc_buffer = !snoop;return ; }
@@ -1523,8 +1524,12 @@ static void azx_check_snoop_available(st snoop = false; chip->snoop = snoop; -if (!snoop) +if (!snoop) {dev_info (chip->card->dev,"Force to non-snoop mode\n" ); +/* C-Media requires non-cached pages only for CORB/RIRB */ +if (chip->driver_type !=AZX_DRIVER_CMEDIA ) + chip->uc_buffer = true; + } }static void azx_probe_work (struct work_struct *work)
@@ -1947,7 +1952,7 @@ static void pcm_mmap_prepare(struct snd_#ifdef CONFIG_X86 struct azx_pcm *apcm =snd_pcm_substream_chip (substream);struct azx *chip = apcm->chip; -if (!azx_snoop (chip) && chip->driver_type !=AZX_DRIVER_CMEDIA ) +if (chip->uc_buffer) area->vm_page_prot =pgprot_writecombine (area->vm_page_prot);#endif }
Greg Kroah-Hartman
maintainerPATCH 72/141 ARM: dts: exynos: Remove "cooling-{min|max}-level" for CPU nodes
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Viresh Kumar <[email protected]>
commit cd6f55457eb449a388e793abd676e3a5b73510bc upstream.
The "cooling-min-level" and "cooling-max-level" properties are not parsed by any part of the kernel currently and the max cooling state of a CPU cooling device is found by referring to the cpufreq table instead.
Remove the unused properties from the CPU nodes.
--- arch/arm/boot/dts/exynos4210.dtsi | 2 -- arch/arm/boot/dts/exynos4412.dtsi | 2 -- arch/arm/boot/dts/exynos5250.dtsi | 2 -- arch/arm/boot/dts/exynos5420-cpus.dtsi | 16 ---------------- arch/arm/boot/dts/exynos5422-cpus.dtsi | 16 ---------------- 5 files changed, 38 deletions(-)
arch/arm/boot/dts/exynos4210.dtsi +0 -2
@@ -52,8 +52,6 @@ 400000 975000 200000 950000 >; - cooling-min-level = <4>; - cooling-max-level = <2>; #cooling-cells = <2>; /* min followed by max */ };
arch/arm/boot/dts/exynos4412.dtsi +0 -2
@@ -33,8 +33,6 @@ clocks = <&clock CLK_ARM_CLK>; clock-names = "cpu"; operating-points-v2 = <&cpu0_opp_table>; - cooling-min-level = <13>; - cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ };
arch/arm/boot/dts/exynos5250.dtsi +0 -2
@@ -80,8 +80,6 @@ 300000 937500 200000 925000 >; - cooling-min-level = <15>; - cooling-max-level = <9>; #cooling-cells = <2>; /* min followed by max */ }; cpu@1 {
arch/arm/boot/dts/exynos5420-cpus.dtsi +0 -16
@@ -33,8 +33,6 @@ clock-frequency = <1800000000>; cci-control-port = <&cci_control1>; operating-points-v2 = <&cluster_a15_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <11>; #cooling-cells = <2>; /* min followed by max */ };
@@ -45,8 +43,6 @@ clock-frequency = <1800000000>; cci-control-port = <&cci_control1>; operating-points-v2 = <&cluster_a15_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <11>; #cooling-cells = <2>; /* min followed by max */ };
@@ -57,8 +53,6 @@ clock-frequency = <1800000000>; cci-control-port = <&cci_control1>; operating-points-v2 = <&cluster_a15_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <11>; #cooling-cells = <2>; /* min followed by max */ };
@@ -69,8 +63,6 @@ clock-frequency = <1800000000>; cci-control-port = <&cci_control1>; operating-points-v2 = <&cluster_a15_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <11>; #cooling-cells = <2>; /* min followed by max */ };
@@ -82,8 +74,6 @@ clock-frequency = <1000000000>; cci-control-port = <&cci_control0>; operating-points-v2 = <&cluster_a7_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ };
@@ -94,8 +84,6 @@ clock-frequency = <1000000000>; cci-control-port = <&cci_control0>; operating-points-v2 = <&cluster_a7_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ };
@@ -106,8 +94,6 @@ clock-frequency = <1000000000>; cci-control-port = <&cci_control0>; operating-points-v2 = <&cluster_a7_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ };
@@ -118,8 +104,6 @@ clock-frequency = <1000000000>; cci-control-port = <&cci_control0>; operating-points-v2 = <&cluster_a7_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ }; };
arch/arm/boot/dts/exynos5422-cpus.dtsi +0 -16
@@ -32,8 +32,6 @@ clock-frequency = <1000000000>; cci-control-port = <&cci_control0>; operating-points-v2 = <&cluster_a7_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <11>; #cooling-cells = <2>; /* min followed by max */ };
@@ -44,8 +42,6 @@ clock-frequency = <1000000000>; cci-control-port = <&cci_control0>; operating-points-v2 = <&cluster_a7_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <11>; #cooling-cells = <2>; /* min followed by max */ };
@@ -56,8 +52,6 @@ clock-frequency = <1000000000>; cci-control-port = <&cci_control0>; operating-points-v2 = <&cluster_a7_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <11>; #cooling-cells = <2>; /* min followed by max */ };
@@ -68,8 +62,6 @@ clock-frequency = <1000000000>; cci-control-port = <&cci_control0>; operating-points-v2 = <&cluster_a7_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <11>; #cooling-cells = <2>; /* min followed by max */ };
@@ -81,8 +73,6 @@ clock-frequency = <1800000000>; cci-control-port = <&cci_control1>; operating-points-v2 = <&cluster_a15_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <15>; #cooling-cells = <2>; /* min followed by max */ };
@@ -93,8 +83,6 @@ clock-frequency = <1800000000>; cci-control-port = <&cci_control1>; operating-points-v2 = <&cluster_a15_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <15>; #cooling-cells = <2>; /* min followed by max */ };
@@ -105,8 +93,6 @@ clock-frequency = <1800000000>; cci-control-port = <&cci_control1>; operating-points-v2 = <&cluster_a15_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <15>; #cooling-cells = <2>; /* min followed by max */ };
@@ -117,8 +103,6 @@ clock-frequency = <1800000000>; cci-control-port = <&cci_control1>; operating-points-v2 = <&cluster_a15_opp_table>; - cooling-min-level = <0>; - cooling-max-level = <15>; #cooling-cells = <2>; /* min followed by max */ }; };
Greg Kroah-Hartman
maintainerPATCH 73/141 arm: dts: exynos: Add missing cooling device properties for CPUs
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Viresh Kumar <[email protected]>
commit 672f33198bee21ee91e6af2cb8f67cfc8bc97ec1 upstream.
The cooling device properties, like "#cooling-cells" and "dynamic-power-coefficient", should either be present for all the CPUs of a cluster or none. If these are present only for a subset of CPUs of a cluster then things will start falling apart as soon as the CPUs are brought online in a different order. For example, this will happen because the operating system looks for such properties in the CPU node it is trying to bring up, so that it can register a cooling device.
Add such missing properties.
Fix other missing properties (clocks, OPP, clock latency) as well to make it all work.
--- arch/arm/boot/dts/exynos3250.dtsi | 16 ++++++++++++++++ arch/arm/boot/dts/exynos4210.dtsi | 13 +++++++++++++ arch/arm/boot/dts/exynos5250.dtsi | 23 +++++++++++++++++++++++ 3 files changed, 52 insertions(+)
arch/arm/boot/dts/exynos3250.dtsi +16 -0
@@ -80,6 +80,22 @@ compatible = "arm,cortex-a7"; reg = <1>; clock-frequency = <1000000000>; + clocks = <&cmu CLK_ARM_CLK>; + clock-names = "cpu"; + #cooling-cells = <2>; + + operating-points = < + 1000000 1150000 + 900000 1112500 + 800000 1075000 + 700000 1037500 + 600000 1000000 + 500000 962500 + 400000 925000 + 300000 887500 + 200000 850000 + 100000 850000 + >; }; };
arch/arm/boot/dts/exynos4210.dtsi +13 -0
@@ -59,6 +59,19 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0x901>; + clocks = <&clock CLK_ARM_CLK>; + clock-names = "cpu"; + clock-latency = <160000>; + + operating-points = < + 1200000 1250000 + 1000000 1150000 + 800000 1075000 + 500000 975000 + 400000 975000 + 200000 950000 + >; + #cooling-cells = <2>; /* min followed by max */ }; };
arch/arm/boot/dts/exynos5250.dtsi +23 -0
@@ -87,6 +87,29 @@ compatible = "arm,cortex-a15"; reg = <1>; clock-frequency = <1700000000>; + clocks = <&clock CLK_ARM_CLK>; + clock-names = "cpu"; + clock-latency = <140000>; + + operating-points = < + 1700000 1300000 + 1600000 1250000 + 1500000 1225000 + 1400000 1200000 + 1300000 1150000 + 1200000 1125000 + 1100000 1100000 + 1000000 1075000 + 900000 1050000 + 800000 1025000 + 700000 1012500 + 600000 1000000 + 500000 975000 + 400000 950000 + 300000 937500 + 200000 925000 + >; + #cooling-cells = <2>; /* min followed by max */ }; };
Greg Kroah-Hartman
maintainerPATCH 74/141 ARM: dts: exynos: Convert exynos5250.dtsi to opp-v2 bindings
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Szyprowski <[email protected]>
commit eb9e16d8573e243f8175647f851eb5085dbe97a4 upstream.
Convert Exynos5250 to OPP-v2 bindings. This is a preparation to add proper support for suspend operation point, which cannot be marked in opp-v1.
--- arch/arm/boot/dts/exynos5250.dtsi | 130 +++++++++++++++++++++++++------------- 1 file changed, 88 insertions(+), 42 deletions(-)
arch/arm/boot/dts/exynos5250.dtsi +88 -42
@@ -57,62 +57,108 @@ device_type = "cpu"; compatible = "arm,cortex-a15"; reg = <0>; - clock-frequency = <1700000000>; clocks = <&clock CLK_ARM_CLK>; clock-names = "cpu"; - clock-latency = <140000>; - - operating-points = < - 1700000 1300000 - 1600000 1250000 - 1500000 1225000 - 1400000 1200000 - 1300000 1150000 - 1200000 1125000 - 1100000 1100000 - 1000000 1075000 - 900000 1050000 - 800000 1025000 - 700000 1012500 - 600000 1000000 - 500000 975000 - 400000 950000 - 300000 937500 - 200000 925000 - >; + operating-points-v2 = <&cpu0_opp_table>; #cooling-cells = <2>; /* min followed by max */ }; cpu@1 { device_type = "cpu"; compatible = "arm,cortex-a15"; reg = <1>; - clock-frequency = <1700000000>; clocks = <&clock CLK_ARM_CLK>; clock-names = "cpu"; - clock-latency = <140000>; - - operating-points = < - 1700000 1300000 - 1600000 1250000 - 1500000 1225000 - 1400000 1200000 - 1300000 1150000 - 1200000 1125000 - 1100000 1100000 - 1000000 1075000 - 900000 1050000 - 800000 1025000 - 700000 1012500 - 600000 1000000 - 500000 975000 - 400000 950000 - 300000 937500 - 200000 925000 - >; + operating-points-v2 = <&cpu0_opp_table>; #cooling-cells = <2>; /* min followed by max */ }; }; + cpu0_opp_table: opp_table0 { + compatible = "operating-points-v2"; + opp-shared; + + opp-200000000 { + opp-hz = /bits/ 64 <200000000>; + opp-microvolt = <925000>; + clock-latency-ns = <140000>; + }; + opp-300000000 { + opp-hz = /bits/ 64 <300000000>; + opp-microvolt = <937500>; + clock-latency-ns = <140000>; + }; + opp-400000000 { + opp-hz = /bits/ 64 <400000000>; + opp-microvolt = <950000>; + clock-latency-ns = <140000>; + }; + opp-500000000 { + opp-hz = /bits/ 64 <500000000>; + opp-microvolt = <975000>; + clock-latency-ns = <140000>; + }; + opp-600000000 { + opp-hz = /bits/ 64 <600000000>; + opp-microvolt = <1000000>; + clock-latency-ns = <140000>; + }; + opp-700000000 { + opp-hz = /bits/ 64 <700000000>; + opp-microvolt = <1012500>; + clock-latency-ns = <140000>; + }; + opp-800000000 { + opp-hz = /bits/ 64 <800000000>; + opp-microvolt = <1025000>; + clock-latency-ns = <140000>; + }; + opp-900000000 { + opp-hz = /bits/ 64 <900000000>; + opp-microvolt = <1050000>; + clock-latency-ns = <140000>; + }; + opp-1000000000 { + opp-hz = /bits/ 64 <1000000000>; + opp-microvolt = <1075000>; + clock-latency-ns = <140000>; + }; + opp-1100000000 { + opp-hz = /bits/ 64 <1100000000>; + opp-microvolt = <1100000>; + clock-latency-ns = <140000>; + }; + opp-1200000000 { + opp-hz = /bits/ 64 <1200000000>; + opp-microvolt = <1125000>; + clock-latency-ns = <140000>; + }; + opp-1300000000 { + opp-hz = /bits/ 64 <1300000000>; + opp-microvolt = <1150000>; + clock-latency-ns = <140000>; + }; + opp-1400000000 { + opp-hz = /bits/ 64 <1400000000>; + opp-microvolt = <1200000>; + clock-latency-ns = <140000>; + }; + opp-1500000000 { + opp-hz = /bits/ 64 <1500000000>; + opp-microvolt = <1225000>; + clock-latency-ns = <140000>; + }; + opp-1600000000 { + opp-hz = /bits/ 64 <1600000000>; + opp-microvolt = <1250000>; + clock-latency-ns = <140000>; + }; + opp-1700000000 { + opp-hz = /bits/ 64 <1700000000>; + opp-microvolt = <1300000>; + clock-latency-ns = <140000>; + }; + }; + soc: soc { sysram@02020000 { compatible = "mmio-sram";
Greg Kroah-Hartman
maintainerPATCH 75/141 ARM: dts: exynos: Mark 1 GHz CPU OPP as suspend OPP on Exynos5250
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Szyprowski <[email protected]>
commit 645b23da6f8b47f295fa87051335d41d139717a5 upstream.
1 GHz CPU OPP is the default boot value for the Exynos5250 SOC, so mark it as suspend OPP. This fixes suspend/resume on Samsung Exynos5250 Snow Chomebook, which was broken since switching to generic cpufreq-dt driver in v4.3.
--- arch/arm/boot/dts/exynos5250.dtsi | 1 + 1 file changed, 1 insertion(+)
arch/arm/boot/dts/exynos5250.dtsi +1 -0
@@ -121,6 +121,7 @@ opp-hz = /bits/ 64 <1000000000>; opp-microvolt = <1075000>; clock-latency-ns = <140000>; + opp-suspend; }; opp-1100000000 { opp-hz = /bits/ 64 <1100000000>;
Greg Kroah-Hartman
maintainerPATCH 76/141 xen-swiotlb: use actually allocated size on check physical continuous
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Joe Jin <[email protected]>
commit 7250f422da0480d8512b756640f131b9b893ccda upstream.
xen_swiotlb_{alloc,free}_coherent() allocate/free memory based on the order of the pages and not size argument (bytes). This is inconsistent with range_straddles_page_boundary and memset which use the 'size' value, which may lead to not exchanging memory with Xen (range_straddles_page_boundary() returned true). And then the call to xen_swiotlb_free_coherent() would actually try to exchange the memory with Xen, leading to the kernel hitting an BUG (as the hypercall returned an error).
This patch fixes it by making the 'size' variable be of the same size as the amount of memory allocated.
--- drivers/xen/swiotlb-xen.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/xen/swiotlb-xen.c +6 -0
@@ -310,6 +310,9 @@ xen_swiotlb_alloc_coherent(struct device*/ flags &= ~(__GFP_DMA | __GFP_HIGHMEM); +/* Convert the size to actually allocated. */ + size =1UL << (order +XEN_PAGE_SHIFT ); +/* On ARM this function returns an ioremap'ped virtual address for * which virt_to_phys doesn't return the corresponding physical * address. In fact on ARM virt_to_phys only works for kernel direct
@@ -359,6 +362,9 @@ xen_swiotlb_free_coherent(struct device* physical address */ phys =xen_bus_to_phys (dev_addr); +/* Convert the size to actually allocated. */ + size =1UL << (order +XEN_PAGE_SHIFT ); +if (((dev_addr + size -1 <= dma_mask)) ||range_straddles_page_boundary (phys, size))xen_destroy_contiguous_region (phys, order);
Greg Kroah-Hartman
maintainerPATCH 77/141 tpm: Restore functionality to xen vtpm driver.
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dr. Greg Wettstein <[email protected]>
commit e487a0f52301293152a6f8c4e217f2a11dd808e3 upstream.
Functionality of the xen-tpmfront driver was lost secondary to the introduction of xenbus multi-page support in commit ccc9d90a9a8b ("xenbus_client: Extend interface to support multi-page ring").
In this commit pointer to location of where the shared page address is stored was being passed to the xenbus_grant_ring() function rather then the address of the shared page itself. This resulted in a situation where the driver would attach to the vtpm-stubdom but any attempt to send a command to the stub domain would timeout.
A diagnostic finding for this regression is the following error message being generated when the xen-tpmfront driver probes for a device:
<3>vtpm vtpm-0: tpm_transmit: tpm_send: error -62
<3>vtpm vtpm-0: A TPM error (-62) occurred attempting to determine the timeouts
This fix is relevant to all kernels from 4.1 forward which is the release in which multi-page xenbus support was introduced.
Daniel De Graaf formulated the fix by code inspection after the regression point was located.
--- drivers/char/tpm/xen-tpmfront.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/char/tpm/xen-tpmfront.c +1 -1
@@ -203,7 +203,7 @@ static int setup_ring(struct xenbus_devireturn -ENOMEM ; } - rv =xenbus_grant_ring (dev, &priv->shr,1 , &gref); + rv =xenbus_grant_ring (dev, priv->shr,1 , &gref);if (rv <0 )return rv;
Greg Kroah-Hartman
maintainerPATCH 78/141 xen/blkfront: avoid NULL blkfront_info dereference on device removal
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vasilis Liaskovitis <[email protected]>
commit f92898e7f32e3533bfd95be174044bc349d416ca upstream.
If a block device is hot-added when we are out of grants, gnttab_grant_foreign_access fails with -ENOSPC (log message "28 granting access to ring page") in this code path:
talk_to_blkback ->
setup_blkring -> xenbus_grant_ring -> gnttab_grant_foreign_access
and the failing path in talk_to_blkback sets the driver_data to NULL:
destroy_blkring:
blkif_free(info, 0);
mutex_lock(&blkfront_mutex);
free_info(info);
mutex_unlock(&blkfront_mutex);
dev_set_drvdata(&dev->dev, NULL);This results in a NULL pointer BUG when blkfront_remove and blkif_free try to access the failing device's NULL struct blkfront_info.
--- drivers/block/xen-blkfront.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/block/xen-blkfront.c +3 -0
@@ -2524,6 +2524,9 @@ static int blkfront_remove(struct xenbusdev_dbg (&xbdev->dev,"%s removed" , xbdev->nodename); +if (!info) +return 0 ; +blkif_free (info,0 );mutex_lock (&info->mutex);
Greg Kroah-Hartman
maintainerPATCH 79/141 xen: fix race in xen_qlock_wait()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juergen Gross <[email protected]>
commit 2ac2a7d4d9ff4e01e36f9c3d116582f6f655ab47 upstream.
In the following situation a vcpu waiting for a lock might not be woken up from xen_poll_irq():
CPU 1: CPU 2: CPU 3:
takes a spinlock
tries to get lock
-> xen_qlock_wait()
frees the lock
-> xen_qlock_kick(cpu2)
-> xen_clear_irq_pending()
takes lock again
tries to get lock
-> *lock = _Q_SLOW_VAL
-> *lock == _Q_SLOW_VAL ?
-> xen_poll_irq()frees the lock
-> xen_qlock_kick(cpu3)
And cpu 2 will sleep forever.
This can be avoided easily by modifying xen_qlock_wait() to call xen_poll_irq() only if the related irq was not pending and to call xen_clear_irq_pending() only if it was pending.
--- arch/x86/xen/spinlock.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-)
arch/x86/xen/spinlock.c +5 -10
@@ -45,17 +45,12 @@ static void xen_qlock_wait(u8 *byte, u8if (irq ==-1 )return ; -/* clear pending */ -xen_clear_irq_pending (irq); -barrier (); +/* If irq pending already clear it and return. */ +if (xen_test_irq_pending (irq)) { +xen_clear_irq_pending (irq); +return ; + } -/* -* We check the byte value after clearing pending IRQ to make sure -* that we won't miss a wakeup event because of the clearing. -* -* The sync_clear_bit() call in xen_clear_irq_pending() is atomic. -* So it is effectively a memory barrier for x86. -*/ if (READ_ONCE (*byte) != val)return ;
Greg Kroah-Hartman
maintainerPATCH 80/141 xen: make xen_qlock_wait() nestable
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juergen Gross <[email protected]>
commit a856531951dc8094359dfdac21d59cee5969c18e upstream.
xen_qlock_wait() isn't safe for nested calls due to interrupts. A call of xen_qlock_kick() might be ignored in case a deeper nesting level was active right before the call of xen_poll_irq():
CPU 1: CPU 2:spin_lock(lock1)
spin_lock(lock1)
-> xen_qlock_wait()
-> xen_clear_irq_pending()
Interrupt happens
spin_unlock(lock1)
-> xen_qlock_kick(CPU 2)
spin_lock_irqsave(lock2)
spin_lock_irqsave(lock2)
-> xen_qlock_wait()
-> xen_clear_irq_pending()
clears kick for lock1
-> xen_poll_irq()spin_unlock_irq_restore(lock2)
-> xen_qlock_kick(CPU 2)
wakes up
spin_unlock_irq_restore(lock2) IRET
resumes in xen_qlock_wait() -> xen_poll_irq() never wakes up
The solution is to disable interrupts in xen_qlock_wait() and not to poll for the irq in case xen_qlock_wait() is called in nmi context.
--- arch/x86/xen/spinlock.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-)
arch/x86/xen/spinlock.c +10 -14
@@ -39,29 +39,25 @@ static void xen_qlock_kick(int cpu)*/ static void xen_qlock_wait (u8 *byte,u8 val) { +unsigned long flags;int irq =__this_cpu_read (lock_kicker_irq);/* If kicker interrupts not initialized yet, just spin */ -if (irq ==-1 ) +if (irq ==-1 ||in_nmi ())return ; -/* If irq pending already clear it and return. */ +/* Guard against reentry. */ +local_irq_save (flags); + +/* If irq pending already clear it. */ if (xen_test_irq_pending (irq)) {xen_clear_irq_pending (irq); -return ; + }else if (READ_ONCE (*byte) == val) { +/* Block until irq becomes pending (or a spurious wakeup) */ +xen_poll_irq (irq); } -if (READ_ONCE (*byte) != val) -return ; - -/* -* If an interrupt happens here, it will leave the wakeup irq -* pending, which will cause xen_poll_irq() to return -* immediately. -*/ - -/* Block until irq becomes pending (or perhaps a spurious wakeup) */ -xen_poll_irq (irq); +local_irq_restore (flags); }static irqreturn_t dummy_handler (int irq,void *dev_id)
Greg Kroah-Hartman
maintainerPATCH 81/141 libertas: dont set URB_ZERO_PACKET on IN USB transfer
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lubomir Rintel <[email protected]>
commit 6528d88047801b80d2a5370ad46fb6eff2f509e0 upstream.
The USB core gets rightfully upset:
usb 1-1: BOGUS urb flags, 240 --> 200
WARNING: CPU: 0 PID: 60 at drivers/usb/core/urb.c:503 usb_submit_urb+0x2f8/0x3ed Modules linked in: CPU: 0 PID: 60 Comm: kworker/0:3 Not tainted 4.19.0-rc6-00319-g5206d00a45c7 #39 Hardware name: OLPC XO/XO, BIOS OLPC Ver 1.00.01 06/11/2014 Workqueue: events request_firmware_work_func EIP: usb_submit_urb+0x2f8/0x3ed Code: 75 06 8b 8f 80 00 00 00 8d 47 78 89 4d e4 89 55 e8 e8 35 1c f6 ff 8b 55 e8 56 52 8b 4d e4 51 50 68 e3 ce c7 c0 e8 ed 18 c6 ff <0f> 0b 83 c4 14 80 7d ef 01 74 0a 80 7d ef 03 0f 85 b8 00 00 00 8b EAX: 00000025 EBX: ce7d4980 ECX: 00000000 EDX: 00000001 ESI: 00000200 EDI: ce7d8800 EBP: ce7f5ea8 ESP: ce7f5e70 DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068 EFLAGS: 00210292 CR0: 80050033 CR2: 00000000 CR3: 00e80000 CR4: 00000090 Call Trace: ? if_usb_fw_timeo+0x64/0x64 __if_usb_submit_rx_urb+0x85/0xe6 ? if_usb_fw_timeo+0x64/0x64 if_usb_submit_rx_urb_fwload+0xd/0xf if_usb_prog_firmware+0xc0/0x3db ? _request_firmware+0x54/0x47b ? _request_firmware+0x89/0x47b ? if_usb_probe+0x412/0x412 lbs_fw_loaded+0x55/0xa6 ? debug_smp_processor_id+0x12/0x14 helper_firmware_cb+0x3c/0x3f request_firmware_work_func+0x37/0x6f process_one_work+0x164/0x25a worker_thread+0x1c4/0x284 kthread+0xec/0xf1 ? cancel_delayed_work_sync+0xf/0xf ? kthread_create_on_node+0x1a/0x1a ret_from_fork+0x2e/0x38 ---[ end trace 3ef1e3b2dd53852f ]---
--- drivers/net/wireless/marvell/libertas/if_usb.c | 2 -- 1 file changed, 2 deletions(-)
drivers/net/wireless/marvell/libertas/if_usb.c +0 -2
@@ -468,8 +468,6 @@ static int __if_usb_submit_rx_urb(structMRVDRV_ETH_RX_PACKET_BUFFER_SIZE , callbackfn, cardp); - cardp->rx_urb->transfer_flags |=URB_ZERO_PACKET ; -lbs_deb_usb2 (&cardp->udev->dev,"Pointer for rx_urb %p\n" , cardp->rx_urb);if ((ret =usb_submit_urb (cardp->rx_urb,GFP_ATOMIC ))) {lbs_deb_usbd (&cardp->udev->dev,"Submit Rx URB failed: %d\n" , ret);
Greg Kroah-Hartman
maintainerPATCH 82/141 usbip:vudc: BUG kmalloc-2048 (Not tainted): Poison overwritten
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shuah Khan (Samsung OSG) <[email protected]>
commit e28fd56ad5273be67d0fae5bedc7e1680e729952 upstream.
In rmmod path, usbip_vudc does platform_device_put() twice once from platform_device_unregister() and then from put_vudc_device().
The second put results in:
BUG kmalloc-2048 (Not tainted): Poison overwritten error or
BUG: KASAN: use-after-free in kobject_put+0x1e/0x230 if KASAN is
enabled.
[ 169.042156] calling init+0x0/0x1000 [usbip_vudc] @ 1697 [ 169.042396] ============================================================================= [ 169.043678] probe of usbip-vudc.0 returned 1 after 350 usecs [ 169.044508] BUG kmalloc-2048 (Not tainted): Poison overwritten [ 169.044509] ----------------------------------------------------------------------------- ... [ 169.057849] INFO: Freed in device_release+0x2b/0x80 age=4223 cpu=3 pid=1693 [ 169.057852] kobject_put+0x86/0x1b0 [ 169.057853] 0xffffffffc0c30a96 [ 169.057855] __x64_sys_delete_module+0x157/0x240
Fix it to call platform_device_del() instead and let put_vudc_device() do the platform_device_put().
--- drivers/usb/usbip/vudc_main.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/usb/usbip/vudc_main.c +9 -1
@@ -85,6 +85,10 @@ static int __init init(void) cleanup:list_for_each_entry_safe (udc_dev, udc_dev2, &vudc_devices, dev_entry) {list_del (&udc_dev->dev_entry); +/* +* Just do platform_device_del() here, put_vudc_device() +* calls the platform_device_put() +*/ platform_device_del (udc_dev->pdev);put_vudc_device (udc_dev); }
@@ -101,7 +105,11 @@ static void __exit cleanup(void)list_for_each_entry_safe (udc_dev, udc_dev2, &vudc_devices, dev_entry) {list_del (&udc_dev->dev_entry); -platform_device_unregister (udc_dev->pdev); +/* +* Just do platform_device_del() here, put_vudc_device() +* calls the platform_device_put() +*/ +platform_device_del (udc_dev->pdev);put_vudc_device (udc_dev); }platform_driver_unregister (&vudc_driver);
Greg Kroah-Hartman
maintainerPATCH 83/141 iwlwifi: mvm: check return value of rs_rate_from_ucode_rate()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luca Coelho <[email protected]>
commit 3d71c3f1f50cf309bd20659422af549bc784bfff upstream.
The rs_rate_from_ucode_rate() function may return -EINVAL if the rate is invalid, but none of the callsites check for the error, potentially making us access arrays with index IWL_RATE_INVALID, which is larger than the arrays, causing an out-of-bounds access. This will trigger KASAN warnings, such as the one reported in the bugzilla issue mentioned below.
This fixes https://bugzilla.kernel.org/show_bug.cgi?id=200659
--- drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)
drivers/net/wireless/intel/iwlwifi/mvm/rs.c +19 -5
@@ -1207,7 +1207,11 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm !(info->flags & IEEE80211_TX_STAT_AMPDU)) return; -rs_rate_from_ucode_rate (tx_resp_hwrate, info->band, &tx_resp_rate); +if (rs_rate_from_ucode_rate (tx_resp_hwrate, info->band, + &tx_resp_rate)) { +WARN_ON_ONCE (1 ); +return ; + }#ifdef CONFIG_MAC80211_DEBUGFS /* Disable last tx check if we are debugging with fixed rate but
@@ -1263,7 +1267,10 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm*/ table = &lq_sta->lq; lq_hwrate =le32_to_cpu (table->rs_table[0 ]); -rs_rate_from_ucode_rate (lq_hwrate, info->band, &lq_rate); +if (rs_rate_from_ucode_rate (lq_hwrate, info->band, &lq_rate)) { +WARN_ON_ONCE (1 ); +return ; + }/* Here we actually compare this rate to the latest LQ command */ if (!rs_rate_equal (&tx_resp_rate, &lq_rate, allow_ant_mismatch)) {
@@ -1365,8 +1372,12 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm/* Collect data for each rate used during failed TX attempts */ for (i =0 ; i <= retries; ++i) { lq_hwrate =le32_to_cpu (table->rs_table[i]); -rs_rate_from_ucode_rate (lq_hwrate, info->band, - &lq_rate); +if (rs_rate_from_ucode_rate (lq_hwrate, info->band, + &lq_rate)) { +WARN_ON_ONCE (1 ); +return ; + } +/* * Only collect stats if retried rate is in the same RS * table as active/search.
@@ -3261,7 +3272,10 @@ static void rs_build_rates_table_from_fifor (i =0 ; i < num_rates; i++) lq_cmd->rs_table[i] = ucode_rate_le32; -rs_rate_from_ucode_rate (ucode_rate, band, &rate); +if (rs_rate_from_ucode_rate (ucode_rate, band, &rate)) { +WARN_ON_ONCE (1 ); +return ; + }if (is_mimo (&rate)) lq_cmd->mimo_delim = num_rates -1 ;
Greg Kroah-Hartman
maintainerPATCH 84/141 net/ipv4: defensive cipso option parsing
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Nuernberger <[email protected]>
commit 076ed3da0c9b2f88d9157dbe7044a45641ae369e upstream.
commit 40413955ee26 ("Cipso: cipso_v4_optptr enter infinite loop") fixed a possible infinite loop in the IP option parsing of CIPSO. The fix assumes that ip_options_compile filtered out all zero length options and that no other one-byte options beside IPOPT_END and IPOPT_NOOP exist. While this assumption currently holds true, add explicit checks for zero length and invalid length options to be safe for the future. Even though ip_options_compile should have validated the options, the introduction of new one-byte options can still confuse this code without the additional checks.
--- net/ipv4/cipso_ipv4.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
net/ipv4/cipso_ipv4.c +7 -4
@@ -1512,7 +1512,7 @@ static int cipso_v4_parsetag_loc(const s* * Description: * Parse the packet's IP header looking for a CIPSO option. Returns a pointer -* to the start of the CIPSO option on success, NULL if one if not found. +* to the start of the CIPSO option on success, NULL if one is not found. * */ unsigned char *cipso_v4_optptr (const struct sk_buff *skb)
@@ -1522,10 +1522,8 @@ unsigned char *cipso_v4_optptr(const strint optlen;int taglen; -for (optlen = iph->ihl*4 -sizeof (struct iphdr ); optlen >0 ; ) { +for (optlen = iph->ihl*4 -sizeof (struct iphdr ); optlen >1 ; ) {switch (optptr[0 ]) { -case IPOPT_CIPSO : -return optptr;case IPOPT_END :return NULL ;case IPOPT_NOOP :
@@ -1534,6 +1532,11 @@ unsigned char *cipso_v4_optptr(const strdefault : taglen = optptr[1 ]; } +if (!taglen || taglen > optlen) +return NULL ; +if (optptr[0 ] ==IPOPT_CIPSO ) +return optptr; + optlen -= taglen; optptr += taglen; }
Greg Kroah-Hartman
maintainerPATCH 85/141 libnvdimm: Hold reference on parent while scheduling async init
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Duyck <[email protected]>
commit b6eae0f61db27748606cc00dafcfd1e2c032f0a5 upstream.
Unlike asynchronous initialization in the core we have not yet associated the device with the parent, and as such the device doesn't hold a reference to the parent.
In order to resolve that we should be holding a reference on the parent until the asynchronous initialization has completed.
--- drivers/nvdimm/bus.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/nvdimm/bus.c +4 -0
@@ -424,6 +424,8 @@ static void nd_async_device_register(voiput_device (dev); }put_device (dev); +if (dev->parent) +put_device (dev->parent); }static void nd_async_device_unregister (void *d,async_cookie_t cookie)
@@ -443,6 +445,8 @@ void __nd_device_register(struct deviceif (!dev)return ; dev->bus = &nvdimm_bus_type; +if (dev->parent) +get_device (dev->parent);get_device (dev);async_schedule_domain (nd_async_device_register, dev, &nd_async_domain);
Greg Kroah-Hartman
maintainerPATCH 86/141 ASoC: intel: skylake: Add missing break in skl_tplg_get_token()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 9c80c5a8831471e0a3e139aad1b0d4c0fdc50b2f upstream.
skl_tplg_get_token() misses a break in the big switch() block for SKL_TKN_U8_CORE_ID entry.
Spotted nicely by -Wimplicit-fallthrough compiler option.
--- sound/soc/intel/skylake/skl-topology.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/intel/skylake/skl-topology.c +1 -0
@@ -1780,6 +1780,7 @@ static int skl_tplg_get_token(struct devcase SKL_TKN_U8_CORE_ID : mconfig->core_id = tkn_elem->value; +break ;case SKL_TKN_U8_MOD_TYPE : mconfig->m_type = tkn_elem->value;
Greg Kroah-Hartman
maintainerPATCH 87/141 jbd2: fix use after free in jbd2_log_do_checkpoint()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit ccd3c4373eacb044eb3832966299d13d2631f66f upstream.
The code cleaning transaction's lists of checkpoint buffers has a bug where it increases bh refcount only after releasing journal->j_list_lock. Thus the following race is possible:
CPU0 CPU1jbd2_log_do_checkpoint()
jbd2_journal_try_to_free_buffers()
__journal_try_to_free_buffer(bh)
...
while (transaction->t_checkpoint_io_list)
...
if (buffer_locked(bh)) {<-- IO completes now, buffer gets unlocked -->
spin_unlock(&journal->j_list_lock);
spin_lock(&journal->j_list_lock);
__jbd2_journal_remove_checkpoint(jh);
spin_unlock(&journal->j_list_lock);
try_to_free_buffers(page);
get_bh(bh) <-- accesses freed bhFix the problem by grabbing bh reference before unlocking journal->j_list_lock.
--- fs/jbd2/checkpoint.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/jbd2/checkpoint.c +2 -2
@@ -254,8 +254,8 @@ restart: bh =jh2bh (jh);if (buffer_locked (bh)) { -spin_unlock (&journal->j_list_lock);get_bh (bh); +spin_unlock (&journal->j_list_lock);wait_on_buffer (bh);/* the journal_head may have gone by now */ BUFFER_TRACE (bh,"brelse" );
@@ -336,8 +336,8 @@ restart2: jh = transaction->t_checkpoint_io_list; bh =jh2bh (jh);if (buffer_locked (bh)) { -spin_unlock (&journal->j_list_lock);get_bh (bh); +spin_unlock (&journal->j_list_lock);wait_on_buffer (bh);/* the journal_head may have gone by now */ BUFFER_TRACE (bh,"brelse" );
Greg Kroah-Hartman
maintainerPATCH 88/141 gfs2_meta: ->mount() can get NULL dev_name
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
commit 3df629d873f8683af6f0d34dfc743f637966d483 upstream.
get in sync with mount_bdev() handling of the same
--- fs/gfs2/ops_fstype.c | 3 +++ 1 file changed, 3 insertions(+)
fs/gfs2/ops_fstype.c +3 -0
@@ -1355,6 +1355,9 @@ static struct dentry *gfs2_mount_meta(ststruct path path;int error; +if (!dev_name || !*dev_name) +return ERR_PTR (-EINVAL ); + error =kern_path (dev_name,LOOKUP_FOLLOW , &path);if (error) { pr_warn("path_lookup on %s returned error %d\n",
Greg Kroah-Hartman
maintainerPATCH 89/141 ext4: initialize retries variable in ext4_da_write_inline_data_begin()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukas Czerner <[email protected]>
commit 625ef8a3acd111d5f496d190baf99d1a815bd03e upstream.
Variable retries is not initialized in ext4_da_write_inline_data_begin() which can lead to nondeterministic number of retries in case we hit ENOSPC. Initialize retries to zero as we do everywhere else.
--- fs/ext4/inline.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/ext4/inline.c +1 -1
@@ -860,7 +860,7 @@ int ext4_da_write_inline_data_begin(struhandle_t *handle;struct page *page;struct ext4_iloc iloc; -int retries; +int retries =0 ; ret =ext4_get_inode_loc (inode, &iloc);if (ret)
Greg Kroah-Hartman
maintainerPATCH 90/141 ext4: propagate error from dquot_initialize() in EXT4_IOC_FSSETXATTR
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wang Shilong <[email protected]>
commit 182a79e0c17147d2c2d3990a9a7b6b58a1561c7a upstream.
We return most failure of dquota_initialize() except inode evict, this could make a bit sense, for example we allow file removal even quota files are broken?
But it dosen't make sense to allow setting project if quota files etc are broken.
--- fs/ext4/ioctl.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/ext4/ioctl.c +3 -1
@@ -345,7 +345,9 @@ static int ext4_ioctl_setproject(struct }brelse (iloc.bh); -dquot_initialize (inode); + err =dquot_initialize (inode); +if (err) +return err; handle = ext4_journal_start(inode, EXT4_HT_QUOTA, EXT4_QUOTA_INIT_BLOCKS(sb) +
Greg Kroah-Hartman
maintainerPATCH 91/141 HID: hiddev: fix potential Spectre v1
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Breno Leitao <[email protected]>
commit f11274396a538b31bc010f782e05c2ce3f804c13 upstream.
uref->usage_index can be indirectly controlled by userspace, hence leading to a potential exploitation of the Spectre variant 1 vulnerability.
This field is used as an array index by the hiddev_ioctl_usage() function, when 'cmd' is either HIDIOCGCOLLECTIONINDEX, HIDIOCGUSAGES or HIDIOCSUSAGES.
For cmd == HIDIOCGCOLLECTIONINDEX case, uref->usage_index is compared to field->maxusage and then used as an index to dereference field->usage array. The same thing happens to the cmd == HIDIOC{G,S}USAGES cases, where uref->usage_index is checked against an array maximum value and then it is used as an index in an array.
This is a summary of the HIDIOCGCOLLECTIONINDEX case, which matches the traditional Spectre V1 first load:
copy_from_user(uref, user_arg, sizeof(*uref)) if (uref->usage_index >= field->maxusage) goto inval; i = field->usage[uref->usage_index].collection_index; return i;
This patch fixes this by sanitizing field uref->usage_index before using it to index field->usage (HIDIOCGCOLLECTIONINDEX) or field->value in HIDIOC{G,S}USAGES arrays, thus, avoiding speculation in the first load.
v2: Contemplate cmd == HIDIOC{G,S}USAGES case
--- drivers/hid/usbhid/hiddev.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
drivers/hid/usbhid/hiddev.c +14 -4
@@ -521,14 +521,24 @@ static noinline int hiddev_ioctl_usage(sif (cmd ==HIDIOCGCOLLECTIONINDEX ) {if (uref->usage_index >= field->maxusage) goto inval; + uref->usage_index = +array_index_nospec (uref->usage_index, + field->maxusage); }else if (uref->usage_index >= field->report_count) goto inval; } -if ((cmd ==HIDIOCGUSAGES || cmd ==HIDIOCSUSAGES ) && - (uref_multi->num_values >HID_MAX_MULTI_USAGES || - uref->usage_index + uref_multi->num_values > field->report_count)) - goto inval; +if (cmd ==HIDIOCGUSAGES || cmd ==HIDIOCSUSAGES ) { +if (uref_multi->num_values >HID_MAX_MULTI_USAGES || + uref->usage_index + uref_multi->num_values > + field->report_count) + goto inval; + + uref->usage_index = +array_index_nospec (uref->usage_index, + field->report_count - + uref_multi->num_values); + }switch (cmd) {case HIDIOCGUSAGE :
Greg Kroah-Hartman
maintainerPATCH 92/141 EDAC, {i7core,sb,skx}_edac: Fix uncorrected error counting
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tony Luck <[email protected]>
commit 432de7fd7630c84ad24f1c2acd1e3bb4ce3741ca upstream.
The count of errors is picked up from bits 52:38 of the machine check bank status register. But this is the count of *corrected* errors. If an uncorrected error is being logged, the h/w sets this field to 0. Which means that when edac_mc_handle_error() is called, the EDAC core will carefully add zero to the appropriate uncorrected error counts.
--- drivers/edac/i7core_edac.c | 1 + drivers/edac/sb_edac.c | 1 + drivers/edac/skx_edac.c | 1 + 3 files changed, 3 insertions(+)
drivers/edac/i7core_edac.c +1 -0
@@ -1711,6 +1711,7 @@ static void i7core_mce_output_error(struu32 errnum =find_first_bit (&error,32 );if (uncorrected_error) { + core_err_cnt =1 ;if (ripv) tp_event =HW_EVENT_ERR_FATAL ;else
drivers/edac/sb_edac.c +1 -0
@@ -2934,6 +2934,7 @@ static void sbridge_mce_output_error(str recoverable =GET_BITFIELD (m->status,56 ,56 );if (uncorrected_error) { + core_err_cnt =1 ;if (ripv) { type ="FATAL" ; tp_event =HW_EVENT_ERR_FATAL ;
drivers/edac/skx_edac.c +1 -0
@@ -897,6 +897,7 @@ static void skx_mce_output_error(struct recoverable =GET_BITFIELD (m->status,56 ,56 );if (uncorrected_error) { + core_err_cnt =1 ;if (ripv) { type ="FATAL" ; tp_event =HW_EVENT_ERR_FATAL ;
Greg Kroah-Hartman
maintainerPATCH 93/141 EDAC, skx_edac: Fix logical channel intermediate decoding
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qiuxu Zhuo <[email protected]>
commit 8f18973877204dc8ca4ce1004a5d28683b9a7086 upstream.
The code "lchan = (lchan << 1) | ~lchan" for logical channel intermediate decoding is wrong. The wrong intermediate decoding result is {0xffffffff, 0xfffffffe}.
Fix it by replacing '~' with '!'. The correct intermediate decoding result is {0x1, 0x2}.
--- drivers/edac/skx_edac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/edac/skx_edac.c +1 -1
@@ -606,7 +606,7 @@ sad_found:break ;case 2 : lchan = (addr >> shift) %2 ; - lchan = (lchan <<1 ) | ~lchan; + lchan = (lchan <<1 ) | !lchan;break ;case 3 : lchan = ((addr >> shift) %2 ) <<1 ;
Greg Kroah-Hartman
maintainerPATCH 94/141 PCI: Add Device IDs for Intel GPU "spurious interrupt" quirk
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bin Meng <[email protected]>
commit d0c9606b31a21028fb5b753c8ad79626292accfd upstream.
Add Device IDs to the Intel GPU "spurious interrupt" quirk table.
For these devices, unplugging the VGA cable and plugging it in again causes spurious interrupts from the IGD. Linux eventually disables the interrupt, but of course that disables any other devices sharing the interrupt.
The theory is that this is a VGA BIOS defect: it should have disabled the IGD interrupt but failed to do so.
See f67fd55fa96f ("PCI: Add quirk for still enabled interrupts on Intel Sandy Bridge GPUs") and 7c82126a94e6 ("PCI: Add new ID for Intel GPU "spurious interrupt" quirk") for some history.
[bhelgaas: See link below for discussion about how to fix this more generically instead of adding device IDs for every new Intel GPU. I hope this is the last patch to add device IDs.]
--- drivers/pci/quirks.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/pci/quirks.c +4 -0
@@ -3124,7 +3124,11 @@ static void disable_igfx_irq(struct pci_pci_iounmap (dev, regs); } +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x0042 , disable_igfx_irq); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x0046 , disable_igfx_irq); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x004a , disable_igfx_irq);DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x0102 , disable_igfx_irq); +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x0106 , disable_igfx_irq);DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x010a , disable_igfx_irq);DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x0152 , disable_igfx_irq);
Greg Kroah-Hartman
maintainerPATCH 95/141 signal/GenWQE: Fix sending of SIGKILL
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric W. Biederman <[email protected]>
commit 0ab93e9c99f8208c0a1a7b7170c827936268c996 upstream.
The genweq_add_file and genwqe_del_file by caching current without using reference counting embed the assumption that a file descriptor will never be passed from one process to another. It even embeds the assumption that the the thread that opened the file will be in
existence when the process terminates. Neither of which are
guaranteed to be true.
Therefore replace caching the task_struct of the opener with pid of the openers thread group id. All the knowledge of the opener is used for is as the target of SIGKILL and a SIGKILL will kill the entire process group.
Rename genwqe_force_sig to genwqe_terminate, remove it's unncessary signal argument, update it's ownly caller, and use kill_pid instead of force_sig.
The work force_sig does in changing signal handling state is not relevant to SIGKILL sent as SEND_SIG_PRIV. The exact same processess will be killed just with less work, and less confusion. The work done by force_sig is really only needed for handling syncrhonous exceptions.
It will still be possible to cause genwqe_device_remove to wait 8 seconds by passing a file descriptor to another process but the possible user after free is fixed.
--- drivers/misc/genwqe/card_base.h | 2 +- drivers/misc/genwqe/card_dev.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-)
drivers/misc/genwqe/card_base.h +1 -1
@@ -404,7 +404,7 @@ struct genwqe_file {struct file *filp;struct fasync_struct *async_queue; -struct task_struct *owner; +struct pid *opener;struct list_head list;/* entry in list of open files */ spinlock_t map_lock;/* lock for dma_mappings */
drivers/misc/genwqe/card_dev.c +5 -4
@@ -52,7 +52,7 @@ static void genwqe_add_file(struct genwq {unsigned long flags; - cfile->owner = current; + cfile->opener =get_pid (task_tgid (current));spin_lock_irqsave (&cd->file_lock, flags);list_add (&cfile->list, &cd->file_list);spin_unlock_irqrestore (&cd->file_lock, flags);
@@ -65,6 +65,7 @@ static int genwqe_del_file(struct genwqespin_lock_irqsave (&cd->file_lock, flags);list_del (&cfile->list);spin_unlock_irqrestore (&cd->file_lock, flags); +put_pid (cfile->opener);return 0 ; }
@@ -275,7 +276,7 @@ static int genwqe_kill_fasync(struct genreturn files; } -static int genwqe_force_sig (struct genwqe_dev *cd,int sig) +static int genwqe_terminate (struct genwqe_dev *cd) {unsigned int files =0 ;unsigned long flags;
@@ -283,7 +284,7 @@ static int genwqe_force_sig(struct genwqspin_lock_irqsave (&cd->file_lock, flags);list_for_each_entry (cfile, &cd->file_list, list) { -force_sig (sig, cfile->owner); +kill_pid (cfile->opener,SIGKILL ,1 ); files++; }spin_unlock_irqrestore (&cd->file_lock, flags);
@@ -1356,7 +1357,7 @@ static int genwqe_inform_and_stop_procesdev_warn (&pci_dev->dev,"[%s] send SIGKILL and wait ...\n" , __func__); - rc =genwqe_force_sig (cd,SIGKILL );/* force terminate */ + rc =genwqe_terminate (cd);if (rc) {/* Give kill_timout more seconds to end processes */ for (i = 0; (i < genwqe_kill_timeout) &&
Greg Kroah-Hartman
maintainerPATCH 96/141 crypto: lrw - Fix out-of bounds access on counter overflow
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ondrej Mosnacek <[email protected]>
commit fbe1a850b3b1522e9fc22319ccbbcd2ab05328d2 upstream.
When the LRW block counter overflows, the current implementation returns 128 as the index to the precomputed multiplication table, which has 128 entries. This patch fixes it to return the correct value (127).
--- crypto/lrw.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
crypto/lrw.c +6 -1
@@ -132,7 +132,12 @@ static inline int get_index128(be128 *blreturn x +ffz (val); } -return x; +/* +* If we get here, then x == 128 and we are incrementing the counter +* from all ones to all zeros. This means we must return index 127, i.e. +* the one corresponding to key2*{ 1,...,1 }. +*/ +return 127 ; } static int crypt(struct blkcipher_desc *d,
Greg Kroah-Hartman
maintainerPATCH 97/141 crypto: tcrypt - fix ghash-generic speed test
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Horia Geantă <[email protected]>
commit 331351f89c36bf7d03561a28b6f64fa10a9f6f3a upstream.
ghash is a keyed hash algorithm, thus setkey needs to be called. Otherwise the following error occurs:
$ modprobe tcrypt mode=318 sec=1 testing speed of async ghash-generic (ghash-generic) tcrypt: test 0 ( 16 byte blocks, 16 bytes per update, 1 updates): tcrypt: hashing failed ret=-126
--- crypto/tcrypt.c | 3 +++ 1 file changed, 3 insertions(+)
crypto/tcrypt.c +3 -0
@@ -729,6 +729,9 @@ static void test_ahash_speed_common(consbreak ; } +if (speed[i].klen) +crypto_ahash_setkey (tfm, tvmem[0 ], speed[i].klen); +pr_info ("test%3u " "(%5u byte blocks,%5u bytes per update,%4u updates): " , i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
Greg Kroah-Hartman
maintainerPATCH 98/141 ima: fix showing large violations or runtime_measurements_count
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit 1e4c8dafbb6bf72fb5eca035b861e39c5896c2b7 upstream.
The 12 character temporary buffer is not necessarily long enough to hold a 'long' value. Increase it.
--- security/integrity/ima/ima_fs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
security/integrity/ima/ima_fs.c +3 -3
@@ -29,14 +29,14 @@static DEFINE_MUTEX (ima_write_mutex);static int valid_policy =1 ; -#define TMPBUFLEN 12 +static ssize_t ima_show_htable_value (char __user *buf,size_t count,loff_t *ppos,atomic_long_t *val) { -char tmpbuf[TMPBUFLEN ]; +char tmpbuf[32 ];/* greater than largest 'long' string value */ ssize_t len; - len =scnprintf (tmpbuf,TMPBUFLEN ,"%li\n" ,atomic_long_read (val)); + len =scnprintf (tmpbuf,sizeof (tmpbuf),"%li\n" ,atomic_long_read (val));return simple_read_from_buffer (buf, count, ppos, tmpbuf, len); }
Greg Kroah-Hartman
maintainerPATCH 99/141 hugetlbfs: dirty pages as they are added to pagecache
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Kravetz <[email protected]>
commit 22146c3ce98962436e401f7b7016a6f664c9ffb5 upstream.
Some test systems were experiencing negative huge page reserve counts and incorrect file block counts. This was traced to /proc/sys/vm/drop_caches removing clean pages from hugetlbfs file pagecaches. When non-hugetlbfs explicit code removes the pages, the appropriate accounting is not performed.
This can be recreated as follows:
fallocate -l 2M /dev/hugepages/foo
echo 1 > /proc/sys/vm/drop_caches
fallocate -l 2M /dev/hugepages/foo
grep -i huge /proc/meminfo
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
HugePages_Total: 2048
HugePages_Free: 2047
HugePages_Rsvd: 18446744073709551615
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 4194304 kB
ls -lsh /dev/hugepages/foo
4.0M -rw-r--r--. 1 root root 2.0M Oct 17 20:05 /dev/hugepages/foo
To address this issue, dirty pages as they are added to pagecache. This can easily be reproduced with fallocate as shown above. Read faulted pages will eventually end up being marked dirty. But there is a window where they are clean and could be impacted by code such as drop_caches. So, just dirty them all as they are added to the pagecache.
--- mm/hugetlb.c | 6 ++++++ 1 file changed, 6 insertions(+)
mm/hugetlb.c +6 -0
@@ -3645,6 +3645,12 @@ int huge_add_to_page_cache(struct page *return err;ClearPagePrivate (page); +/* +* set page dirty so that it will not be removed from cache/file +* by non-hugetlbfs specific code paths. +*/ +set_page_dirty (page); +spin_lock (&inode->i_lock); inode->i_blocks +=blocks_per_huge_page (h);spin_unlock (&inode->i_lock);
Greg Kroah-Hartman
maintainerPATCH 100/141 kbuild: fix kernel/bounds.c W=1 warning
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 6a32c2469c3fbfee8f25bcd20af647326650a6cf upstream.
Building any configuration with 'make W=1' produces a warning:
kernel/bounds.c:16:6: warning: no previous prototype for 'foo' [-Wmissing-prototypes]
When also passing -Werror, this prevents us from building any other files. Nobody ever calls the function, but we can't make it 'static' either since we want the compiler output.
Calling it 'main' instead however avoids the warning, because gcc does not insist on having a declaration for main.
--- kernel/bounds.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
kernel/bounds.c +3 -1
@@ -12,7 +12,7 @@#include <linux/log2.h> #include <linux/spinlock_types.h> -void foo (void ) +int main (void ) {/* The enum constants to put into include/generated/bounds.h */ DEFINE (NR_PAGEFLAGS , __NR_PAGEFLAGS);
@@ -22,4 +22,6 @@ void foo(void)#endif DEFINE (SPINLOCK_SIZE ,sizeof (spinlock_t));/* End of constants */ + +return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 101/141 iio: ad5064: Fix regulator handling
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lars-Peter Clausen <[email protected]>
commit 8911a43bc198877fad9f4b0246a866b26bb547ab upstream.
The correct way to handle errors returned by regualtor_get() and friends is to propagate the error since that means that an regulator was specified, but something went wrong when requesting it.
For handling optional regulators, e.g. when the device has an internal vref, regulator_get_optional() should be used to avoid getting the dummy regulator that the regulator core otherwise provides.
--- drivers/iio/dac/ad5064.c | 53 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 15 deletions(-)
drivers/iio/dac/ad5064.c +38 -15
@@ -760,6 +760,40 @@ static int ad5064_set_config(struct ad50return ad5064_write (st, cmd,0 , val,0 ); } +static int ad5064_request_vref (struct ad5064_state *st,struct device *dev) +{ +unsigned int i; +int ret; + +for (i =0 ; i <ad5064_num_vref (st); ++i) + st->vref_reg[i].supply =ad5064_vref_name (st, i); + +if (!st->chip_info->internal_vref) +return devm_regulator_bulk_get (dev,ad5064_num_vref (st), + st->vref_reg); + +/* +* This assumes that when the regulator has an internal VREF +* there is only one external VREF connection, which is +* currently the case for all supported devices. +*/ + st->vref_reg[0 ].consumer =devm_regulator_get_optional (dev,"vref" ); +if (!IS_ERR (st->vref_reg[0 ].consumer)) +return 0 ; + + ret =PTR_ERR (st->vref_reg[0 ].consumer); +if (ret != -ENODEV ) +return ret; + +/* If no external regulator was supplied use the internal VREF */ + st->use_internal_vref = true; + ret =ad5064_set_config (st,AD5064_CONFIG_INT_VREF_ENABLE ); +if (ret) +dev_err (dev,"Failed to enable internal vref: %d\n" , ret); + +return ret; +} +static int ad5064_probe (struct device *dev,enum ad5064_type type,const char *name,ad5064_write_func write) {
@@ -780,22 +814,11 @@ static int ad5064_probe(struct device *d st->dev = dev; st->write = write; -for (i =0 ; i <ad5064_num_vref (st); ++i) - st->vref_reg[i].supply =ad5064_vref_name (st, i); + ret =ad5064_request_vref (st, dev); +if (ret) +return ret; - ret =devm_regulator_bulk_get (dev,ad5064_num_vref (st), - st->vref_reg); -if (ret) { -if (!st->chip_info->internal_vref) -return ret; - st->use_internal_vref = true; - ret =ad5064_set_config (st,AD5064_CONFIG_INT_VREF_ENABLE ); -if (ret) { -dev_err (dev,"Failed to enable internal vref: %d\n" , - ret); -return ret; - } - }else { +if (!st->use_internal_vref) { ret =regulator_bulk_enable (ad5064_num_vref (st), st->vref_reg);if (ret)return ret;
Greg Kroah-Hartman
maintainerPATCH 102/141 iio: adc: imx25-gcq: Fix leak of device_node in mx25_gcq_setup_cfgs()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexey Khoroshilov <[email protected]>
commit d3fa21c73c391975488818b085b894c2980ea052 upstream.
Leaving for_each_child_of_node loop we should release child device node, if it is not stored for future use.
Found by Linux Driver Verification project (linuxtesting.org).
JC: I'm not sending this as a quick fix as it's been wrong for years, but good to pick up for stable after the merge window.
--- drivers/iio/adc/fsl-imx25-gcq.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/iio/adc/fsl-imx25-gcq.c +6 -0
@@ -209,12 +209,14 @@ static int mx25_gcq_setup_cfgs(struct pl ret =of_property_read_u32 (child,"reg" , ®);if (ret) {dev_err (dev,"Failed to get reg property\n" ); +of_node_put (child);return ret; }if (reg >=MX25_NUM_CFGS ) {dev_err (dev,"reg value is greater than the number of available configuration registers\n" ); +of_node_put (child);return -EINVAL ; }
@@ -228,6 +230,7 @@ static int mx25_gcq_setup_cfgs(struct plif (IS_ERR (priv->vref[refp])) {dev_err (dev,"Error, trying to use external voltage reference without a vref-%s regulator." , mx25_gcq_refp_names[refp]); +of_node_put (child);return PTR_ERR (priv->vref[refp]); } priv->channel_vref_mv[reg] =
@@ -240,6 +243,7 @@ static int mx25_gcq_setup_cfgs(struct plbreak ;default :dev_err (dev,"Invalid positive reference %d\n" , refp); +of_node_put (child);return -EINVAL ; }
@@ -254,10 +258,12 @@ static int mx25_gcq_setup_cfgs(struct plif ((refp &MX25_ADCQ_CFG_REFP_MASK ) != refp) {dev_err (dev,"Invalid fsl,adc-refp property value\n" ); +of_node_put (child);return -EINVAL ; }if ((refn &MX25_ADCQ_CFG_REFN_MASK ) != refn) {dev_err (dev,"Invalid fsl,adc-refn property value\n" ); +of_node_put (child);return -EINVAL ; }
Greg Kroah-Hartman
maintainerPATCH 103/141 iio: adc: at91: fix acking DRDY irq on simple conversions
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eugen Hristev <[email protected]>
commit bc1b45326223e7e890053cf6266357adfa61942d upstream.
When doing simple conversions, the driver did not acknowledge the DRDY irq. If this irq status is not acked, it will be left pending, and as soon as a trigger is enabled, the irq handler will be called, it doesn't know why this status has occurred because no channel is pending, and then it will go int a irq loop and board will hang.
To avoid this situation, read the LCDR after a raw conversion is done.
--- drivers/iio/adc/at91_adc.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/iio/adc/at91_adc.c +2 -0
@@ -278,6 +278,8 @@ static void handle_adc_eoc_trigger(int iiio_trigger_poll (idev->trig); }else { st->last_value =at91_adc_readl (st,AT91_ADC_CHAN (st, st->chnb)); +/* Needed to ACK the DRDY interruption */ +at91_adc_readl (st,AT91_ADC_LCDR ); st->done = true;wake_up_interruptible (&st->wq_data_avail); }
Greg Kroah-Hartman
maintainerPATCH 104/141 iio: adc: at91: fix wrong channel number in triggered buffer mode
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eugen Hristev <[email protected]>
commit aea835f2dc8a682942b859179c49ad1841a6c8b9 upstream.
When channels are registered, the hardware channel number is not the actual iio channel number.
This is because the driver is probed with a certain number of accessible channels. Some pins are routed and some not, depending on the description of the board in the DT.
Because of that, channels 0,1,2,3 can correspond to hardware channels 2,3,4,5 for example.
In the buffered triggered case, we need to do the translation accordingly. Fixed the channel number to stop reading the wrong channel.
--- drivers/iio/adc/at91_adc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/iio/adc/at91_adc.c +3 -1
@@ -247,12 +247,14 @@ static irqreturn_t at91_adc_trigger_handstruct iio_poll_func *pf = p;struct iio_dev *idev = pf->indio_dev;struct at91_adc_state *st =iio_priv (idev); +struct iio_chan_spec const *chan;int i, j =0 ;for (i =0 ; i < idev->masklength; i++) {if (!test_bit (i, idev->active_scan_mask))continue ; - st->buffer[j] =at91_adc_readl (st,AT91_ADC_CHAN (st, i)); + chan = idev->channels + i; + st->buffer[j] =at91_adc_readl (st,AT91_ADC_CHAN (st, chan->channel)); j++; }
Greg Kroah-Hartman
maintainerPATCH 105/141 w1: omap-hdq: fix missing bus unregister at removal
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andreas Kemnade <[email protected]>
commit a007734618fee1bf35556c04fa498d41d42c7301 upstream.
The bus master was not removed after unloading the module or unbinding the driver. That lead to oopses like this
[ 127.842987] Unable to handle kernel paging request at virtual address bf01d04c [ 127.850646] pgd = 70e3cd9a [ 127.853698] [bf01d04c] *pgd=8f908811, *pte=00000000, *ppte=00000000 [ 127.860412] Internal error: Oops: 80000007 [#1] PREEMPT SMP ARM [ 127.866668] Modules linked in: bq27xxx_battery overlay [last unloaded: omap_hdq] [ 127.874542] CPU: 0 PID: 1022 Comm: w1_bus_master1 Not tainted 4.19.0-rc4-00001-g2d51da718324 #12 [ 127.883819] Hardware name: Generic OMAP36xx (Flattened Device Tree) [ 127.890441] PC is at 0xbf01d04c [ 127.893798] LR is at w1_search_process_cb+0x4c/0xfc [ 127.898956] pc : [<bf01d04c>] lr : [<c05f9580>] psr: a0070013 [ 127.905609] sp : cf885f48 ip : bf01d04c fp : ddf1e11c [ 127.911132] r10: cf8fe040 r9 : c05f8d00 r8 : cf8fe040 [ 127.916656] r7 : 000000f0 r6 : cf8fe02c r5 : cf8fe000 r4 : cf8fe01c [ 127.923553] r3 : c05f8d00 r2 : 000000f0 r1 : cf8fe000 r0 : dde1ef10 [ 127.930450] Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none [ 127.938018] Control: 10c5387d Table: 8f8f0019 DAC: 00000051 [ 127.944091] Process w1_bus_master1 (pid: 1022, stack limit = 0x9135699f) [ 127.951171] Stack: (0xcf885f48 to 0xcf886000) [ 127.955810] 5f40: cf8fe000 00000000 cf884000 cf8fe090 000003e8 c05f8d00 [ 127.964477] 5f60: dde5fc34 c05f9700 ddf1e100 ddf1e540 cf884000 cf8fe000 c05f9694 00000000 [ 127.973114] 5f80: dde5fc34 c01499a4 00000000 ddf1e540 c0149874 00000000 00000000 00000000 [ 127.981781] 5fa0: 00000000 00000000 00000000 c01010e8 00000000 00000000 00000000 00000000 [ 127.990447] 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 127.999114] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000 [ 128.007781] [<c05f9580>] (w1_search_process_cb) from [<c05f9700>] (w1_process+0x6c/0x118) [ 128.016479] [<c05f9700>] (w1_process) from [<c01499a4>] (kthread+0x130/0x148) [ 128.024047] [<c01499a4>] (kthread) from [<c01010e8>] (ret_from_fork+0x14/0x2c) [ 128.031677] Exception stack(0xcf885fb0 to 0xcf885ff8) [ 128.037017] 5fa0: 00000000 00000000 00000000 00000000 [ 128.045684] 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 128.054351] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 [ 128.061340] Code: bad PC value [ 128.064697] ---[ end trace af066e33c0e14119 ]---
--- drivers/w1/masters/omap_hdq.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/w1/masters/omap_hdq.c +2 -0
@@ -784,6 +784,8 @@ static int omap_hdq_remove(struct platfo/* remove module dependency */ pm_runtime_disable (&pdev->dev); +w1_remove_master_device (&omap_w1_master); +return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 106/141 smb3: allow stats which track session and share reconnects to be reset
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steve French <[email protected]>
commit 2c887635cd6ab3af619dc2be94e5bf8f2e172b78 upstream.
Currently, "echo 0 > /proc/fs/cifs/Stats" resets all of the stats except the session and share reconnect counts. Fix it to reset those as well.
--- fs/cifs/cifs_debug.c | 3 +++ 1 file changed, 3 insertions(+)
fs/cifs/cifs_debug.c +3 -0
@@ -284,6 +284,9 @@ static ssize_t cifs_stats_proc_write(stratomic_set (&totBufAllocCount,0 );atomic_set (&totSmBufAllocCount,0 );#endif /* CONFIG_CIFS_STATS2 */ +atomic_set (&tcpSesReconnectCount,0 ); +atomic_set (&tconInfoReconnectCount,0 ); +spin_lock (&GlobalMid_Lock); GlobalMaxActiveXid =0 ; GlobalCurrentXid =0 ;
Greg Kroah-Hartman
maintainerPATCH 107/141 smb3: do not attempt cifs operation in smb3 query info error path
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steve French <[email protected]>
commit 1e77a8c204c9d1b655c61751b8ad0fde22421dbb upstream.
If backupuid mount option is sent, we can incorrectly retry (on access denied on query info) with a cifs (FindFirst) operation on an smb3 mount which causes the server to force the session close.
We set backup intent on open so no need for this fallback.
See kernel bugzilla 201435
--- fs/cifs/inode.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
fs/cifs/inode.c +9 -1
@@ -768,7 +768,15 @@ cifs_get_inode_info(struct inode **inode }else if (rc == -EREMOTE ) {cifs_create_dfs_fattr (&fattr, sb); rc =0 ; - }else if (rc == -EACCES &&backup_cred (cifs_sb)) { + }else if ((rc == -EACCES ) &&backup_cred (cifs_sb) && + (strcmp (server->vals->version_string,SMB1_VERSION_STRING ) + ==0 )) { +/* +* For SMB2 and later the backup intent flag is already +* sent if needed on open and there is no path based +* FindFirst operation to use to retry with +*/ + srchinf =kzalloc (sizeof (struct cifs_search_info ),GFP_KERNEL );if (srchinf ==NULL ) {
Greg Kroah-Hartman
maintainerPATCH 108/141 smb3: on kerberos mount if server doesnt specify auth type use krb5
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steve French <[email protected]>
commit 926674de6705f0f1dbf29a62fd758d0977f535d6 upstream.
Some servers (e.g. Azure) do not include a spnego blob in the SMB3 negotiate protocol response, so on kerberos mounts ("sec=krb5") we can fail, as we expected the server to list its supported auth types (OIDs in the spnego blob in the negprot response). Change this so that on krb5 mounts we default to trying krb5 if the server doesn't list its supported protocol mechanisms.
--- fs/cifs/cifs_spnego.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
fs/cifs/cifs_spnego.c +4 -2
@@ -147,8 +147,10 @@ cifs_get_spnego_key(struct cifs_ses *sessprintf (dp,";sec=krb5" ); else if (server->sec_mskerberos) sprintf(dp, ";sec=mskrb5"); - else - goto out; + else { +cifs_dbg (VFS ,"unknown or missing server auth type, use krb5\n" ); +sprintf (dp,";sec=krb5" ); + } dp = description +strlen (description); sprintf(dp, ";uid=0x%x",
Greg Kroah-Hartman
maintainerPATCH 109/141 printk: Fix panic caused by passing log_buf_len to command line
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: He Zhe <[email protected]>
commit 277fcdb2cfee38ccdbe07e705dbd4896ba0c9930 upstream.
log_buf_len_setup does not check input argument before passing it to simple_strtoull. The argument would be a NULL pointer if "log_buf_len", without its value, is set in command line and thus causes the following panic.
PANIC: early exception 0xe3 IP 10:ffffffffaaeacd0d error 0 cr2 0x0
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.0-rc4-yocto-standard+ #1 [ 0.000000] RIP: 0010:_parse_integer_fixup_radix+0xd/0x70 ... [ 0.000000] Call Trace: [ 0.000000] simple_strtoull+0x29/0x70 [ 0.000000] memparse+0x26/0x90 [ 0.000000] log_buf_len_setup+0x17/0x22 [ 0.000000] do_early_param+0x57/0x8e [ 0.000000] parse_args+0x208/0x320 [ 0.000000] ? rdinit_setup+0x30/0x30 [ 0.000000] parse_early_options+0x29/0x2d [ 0.000000] ? rdinit_setup+0x30/0x30 [ 0.000000] parse_early_param+0x36/0x4d [ 0.000000] setup_arch+0x336/0x99e [ 0.000000] start_kernel+0x6f/0x4ee [ 0.000000] x86_64_start_reservations+0x24/0x26 [ 0.000000] x86_64_start_kernel+0x6f/0x72 [ 0.000000] secondary_startup_64+0xa4/0xb0
This patch adds a check to prevent the panic.
--- kernel/printk/printk.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
kernel/printk/printk.c +6 -1
@@ -1010,7 +1010,12 @@ static void __init log_buf_len_update(un/* save requested log_buf_len since it's too early to process it */ static int __init log_buf_len_setup (char *str) { -unsigned size =memparse (str, &str); +unsigned int size; + +if (!str) +return -EINVAL ; + + size =memparse (str, &str);log_buf_len_update (size);
Greg Kroah-Hartman
maintainerPATCH 110/141 genirq: Fix race on spurious interrupt detection
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukas Wunner <[email protected]>
commit 746a923b863a1065ef77324e1e43f19b1a3eab5c upstream.
Commit 1e77d0a1ed74 ("genirq: Sanitize spurious interrupt detection of threaded irqs") made detection of spurious interrupts work for threaded handlers by:
a) incrementing a counter every time the thread returns IRQ_HANDLED, and
b) checking whether that counter has increased every time the thread is woken.
However for oneshot interrupts, the commit unmasks the interrupt before incrementing the counter. If another interrupt occurs right after unmasking but before the counter is incremented, that interrupt is incorrectly considered spurious:
time
| irq_thread() | irq_thread_fn() | action->thread_fn() | irq_finalize_oneshot() | unmask_threaded_irq() /* interrupt is unmasked */ | | /* interrupt fires, incorrectly deemed spurious */ | | atomic_inc(&desc->threads_handled); /* counter is incremented */
v
This is observed with a hi3110 CAN controller receiving data at high volume (from a separate machine sending with "cangen -g 0 -i -x"): The controller signals a huge number of interrupts (hundreds of millions per day) and every second there are about a dozen which are deemed spurious.
In theory with high CPU load and the presence of higher priority tasks, the number of incorrectly detected spurious interrupts might increase beyond the 99,900 threshold and cause disablement of the interrupt.
In practice it just increments the spurious interrupt count. But that can cause people to waste time investigating it over and over.
Fix it by moving the accounting before the invocation of irq_finalize_oneshot().
[ tglx: Folded change log update ]
--- kernel/irq/manage.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
kernel/irq/manage.c +6 -2
@@ -878,6 +878,9 @@ irq_forced_thread_fn(struct irq_desc *delocal_bh_disable (); ret = action->thread_fn (action->irq, action->dev_id); +if (ret ==IRQ_HANDLED ) +atomic_inc (&desc->threads_handled); +irq_finalize_oneshot (desc, action);local_bh_enable ();return ret;
@@ -894,6 +897,9 @@ static irqreturn_t irq_thread_fn(structirqreturn_t ret; ret = action->thread_fn (action->irq, action->dev_id); +if (ret ==IRQ_HANDLED ) +atomic_inc (&desc->threads_handled); +irq_finalize_oneshot (desc, action);return ret; }
@@ -971,8 +977,6 @@ static int irq_thread(void *data)irq_thread_check_affinity (desc, action); action_ret =handler_fn (desc, action); -if (action_ret ==IRQ_HANDLED ) -atomic_inc (&desc->threads_handled);if (action_ret ==IRQ_WAKE_THREAD )irq_wake_secondary (desc, action);
Greg Kroah-Hartman
maintainerPATCH 111/141 NFSv4.1: Fix the r/wsize checking
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Trond Myklebust <[email protected]>
commit 943cff67b842839f4f35364ba2db5c2d3f025d94 upstream.
The intention of nfs4_session_set_rwsize() was to cap the r/wsize to the buffer sizes negotiated by the CREATE_SESSION. The initial code had a bug whereby we would not check the values negotiated by nfs_probe_fsinfo() (the assumption being that CREATE_SESSION will always negotiate buffer values that are sane w.r.t. the server's preferred r/wsizes) but would only check values set by the user in the 'mount' command.
The code was changed in 4.11 to _always_ set the r/wsize, meaning that we now never use the server preferred r/wsizes. This is the regression that this patch fixes.
Also rename the function to nfs4_session_limit_rwsize() in order to avoid future confusion.
--- fs/nfs/nfs4client.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
fs/nfs/nfs4client.c +9 -7
@@ -988,10 +988,10 @@ EXPORT_SYMBOL_GPL(nfs4_set_ds_client);/* * Session has been established, and the client marked ready. -* Set the mount rsize and wsize with negotiated fore channel -* attributes which will be bound checked in nfs_server_set_fsinfo. +* Limit the mount rsize, wsize and dtsize using negotiated fore +* channel attributes. */ -static void nfs4_session_set_rwsize (struct nfs_server *server) +static void nfs4_session_limit_rwsize (struct nfs_server *server) {#ifdef CONFIG_NFS_V4_1 struct nfs4_session *sess;
@@ -1004,9 +1004,11 @@ static void nfs4_session_set_rwsize(stru server_resp_sz = sess->fc_attrs.max_resp_sz - nfs41_maxread_overhead; server_rqst_sz = sess->fc_attrs.max_rqst_sz - nfs41_maxwrite_overhead; -if (!server->rsize || server->rsize > server_resp_sz) +if (server->dtsize > server_resp_sz) + server->dtsize = server_resp_sz; +if (server->rsize > server_resp_sz) server->rsize = server_resp_sz; -if (!server->wsize || server->wsize > server_rqst_sz) +if (server->wsize > server_rqst_sz) server->wsize = server_rqst_sz;#endif /* CONFIG_NFS_V4_1 */ }
@@ -1053,12 +1055,12 @@ static int nfs4_server_common_setup(stru (unsigned long long) server->fsid.minor);nfs_display_fhandle (mntfh,"Pseudo-fs root FH" ); -nfs4_session_set_rwsize (server); - error =nfs_probe_fsinfo (server, mntfh, fattr);if (error <0 ) goto out; +nfs4_session_limit_rwsize (server); +if (server->namelen ==0 || server->namelen >NFS4_MAXNAMLEN ) server->namelen =NFS4_MAXNAMLEN ;
Greg Kroah-Hartman
maintainerPATCH 112/141 nfsd: Fix an Oops in free_session()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Trond Myklebust <[email protected]>
commit bb6ad5572c0022e17e846b382d7413cdcf8055be upstream.
In call_xpt_users(), we delete the entry from the list, but we do not reinitialise it. This triggers the list poisoning when we later call unregister_xpt_user() in nfsd4_del_conns().
--- net/sunrpc/svc_xprt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/sunrpc/svc_xprt.c +1 -1
@@ -1038,7 +1038,7 @@ static void call_xpt_users(struct svc_xpspin_lock (&xprt->xpt_lock);while (!list_empty (&xprt->xpt_users)) { u = list_first_entry(&xprt->xpt_users, struct svc_xpt_user, list); -list_del (&u->list); +list_del_init (&u->list); u->callback (u); }spin_unlock (&xprt->xpt_lock);
Greg Kroah-Hartman
maintainerPATCH 113/141 lockd: fix access beyond unterminated strings in prints
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amir Goldstein <[email protected]>
commit 93f38b6fae0ea8987e22d9e6c38f8dfdccd867ee upstream.
printk format used %*s instead of %.*s, so hostname_len does not limit the number of bytes accessed from hostname.
--- fs/lockd/host.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/lockd/host.c +1 -1
@@ -340,7 +340,7 @@ struct nlm_host *nlmsvc_lookup_host(cons };struct lockd_net *ln =net_generic (net, lockd_net_id); -dprintk ("lockd: %s(host='%*s', vers=%u, proto=%s)\n" , __func__, +dprintk ("lockd: %s(host='%.*s', vers=%u, proto=%s)\n" , __func__, (int )hostname_len, hostname, rqstp->rq_vers, (rqstp->rq_prot ==IPPROTO_UDP ?"udp" :"tcp" ));
Greg Kroah-Hartman
maintainerPATCH 114/141 dm ioctl: harden copy_params()s copy_from_user() from malicious users
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wenwen Wang <[email protected]>
commit 800a7340ab7dd667edf95e74d8e4f23a17e87076 upstream.
In copy_params(), the struct 'dm_ioctl' is first copied from the user space buffer 'user' to 'param_kernel' and the field 'data_size' is checked against 'minimum_data_size' (size of 'struct dm_ioctl' payload up to its 'data' member). If the check fails, an error code EINVAL will be returned. Otherwise, param_kernel->data_size is used to do a second copy, which copies from the same user-space buffer to 'dmi'. After the second copy, only 'dmi->data_size' is checked against 'param_kernel->data_size'. Given that the buffer 'user' resides in the user space, a malicious user-space process can race to change the content in the buffer between the two copies. This way, the attacker can inject inconsistent data into 'dmi' (versus previously validated 'param_kernel').
Fix redundant copying of 'minimum_data_size' from user-space buffer by using the first copy stored in 'param_kernel'. Also remove the 'data_size' check after the second copy because it is now unnecessary.
--- drivers/md/dm-ioctl.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
drivers/md/dm-ioctl.c +6 -12
@@ -1692,8 +1692,7 @@ static void free_params(struct dm_ioctl }static int copy_params (struct dm_ioctl __user *user,struct dm_ioctl *param_kernel, -int ioctl_flags, -struct dm_ioctl **param,int *param_flags) +int ioctl_flags,struct dm_ioctl **param,int *param_flags) {struct dm_ioctl *dmi;int secure_data;
@@ -1738,18 +1737,13 @@ static int copy_params(struct dm_ioctl _ *param_flags |=DM_PARAMS_MALLOC ; -if (copy_from_user (dmi, user, param_kernel->data_size)) - goto bad; +/* Copy from param_kernel (which was already copied from user) */ +memcpy (dmi, param_kernel, minimum_data_size); -data_copied: -/* -* Abort if something changed the ioctl data while it was being copied. -*/ -if (dmi->data_size != param_kernel->data_size) { -DMERR ("rejecting ioctl: data size modified while processing parameters" ); +if (copy_from_user (&dmi->data, (char __user *)user + minimum_data_size, + param_kernel->data_size - minimum_data_size)) goto bad; - } - +data_copied:/* Wipe the user buffer so we do not return it to userspace */ if (secure_data &&clear_user (user, param_kernel->data_size)) goto bad;
Greg Kroah-Hartman
maintainerPATCH 115/141 powerpc/msi: Fix compile error on mpc83xx
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe Leroy <[email protected]>
commit 0f99153def98134403c9149128e59d3e1786cf04 upstream.
mpic_get_primary_version() is not defined when not using MPIC. The compile error log like:
arch/powerpc/sysdev/built-in.o: In function `fsl_of_msi_probe':
fsl_msi.c:(.text+0x150c): undefined reference to `fsl_mpic_primary_get_version'
--- arch/powerpc/include/asm/mpic.h | 7 +++++++ 1 file changed, 7 insertions(+)
arch/powerpc/include/asm/mpic.h +7 -0
@@ -392,7 +392,14 @@ extern struct bus_type mpic_subsys;#define MPIC_REGSET_TSI108 MPIC_REGSET(1)/* Tsi108/109 PIC */ /* Get the version of primary MPIC */ +#ifdef CONFIG_MPIC extern u32 fsl_mpic_primary_get_version (void ); +#else +static inline u32 fsl_mpic_primary_get_version (void ) +{ +return 0 ; +} +#endif /* Allocate the controller structure and setup the linux irq descs * for the range if interrupts passed in. No HW initialization is
Greg Kroah-Hartman
maintainerPATCH 116/141 MIPS: OCTEON: fix out of bounds array access on CN68XX
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aaro Koskinen <[email protected]>
commit c0fae7e2452b90c31edd2d25eb3baf0c76b400ca upstream.
The maximum number of interfaces is returned by cvmx_helper_get_number_of_interfaces(), and the value is used to access interface_port_count[]. When CN68XX support was added, we forgot to increase the array size. Fix that.
Patchwork: https://patchwork.linux-mips.org/patch/20949/
--- arch/mips/cavium-octeon/executive/cvmx-helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/cavium-octeon/executive/cvmx-helper.c +1 -1
@@ -67,7 +67,7 @@ void (*cvmx_override_pko_queue_priority)void (*cvmx_override_ipd_port_setup) (int ipd_port);/* Port count per interface */ -static int interface_port_count[5 ]; +static int interface_port_count[9 ];/* Port last configured link info index by IPD/PKO port */ static cvmx_helper_link_info_t
Greg Kroah-Hartman
maintainerPATCH 117/141 TC: Set DMA masks for devices
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maciej W. Rozycki <[email protected]>
commit 3f2aa244ee1a0d17ed5b6c86564d2c1b24d1c96b upstream.
Fix a TURBOchannel support regression with commit 205e1b7f51e4 ("dma-mapping: warn when there is no coherent_dma_mask") that caused coherent DMA allocations to produce a warning such as:
defxx: v1.11 2014/07/01 Lawrence V. Stefani and others
tc1: DEFTA at MMIO addr = 0x1e900000, IRQ = 20, Hardware addr = 08-00-2b-a3-a3-29
------------[ cut here ]------------
WARNING: CPU: 0 PID: 1 at ./include/linux/dma-mapping.h:516 dfx_dev_register+0x670/0x678
Modules linked in:
CPU: 0 PID: 1 Comm: swapper Not tainted 4.19.0-rc6 #2
Stack : ffffffff8009ffc0 fffffffffffffec0 0000000000000000 ffffffff80647650
0000000000000000 0000000000000000 ffffffff806f5f80 ffffffffffffffff
0000000000000000 0000000000000000 0000000000000001 ffffffff8065d4e8
98000000031b6300 ffffffff80563478 ffffffff805685b0 ffffffffffffffff
0000000000000000 ffffffff805d6720 0000000000000204 ffffffff80388df8
0000000000000000 0000000000000009 ffffffff8053efd0 ffffffff806657d0
0000000000000000 ffffffff803177f8 0000000000000000 ffffffff806d0000
9800000003078000 980000000307b9e0 000000001e900000 ffffffff80067940
0000000000000000 ffffffff805d6720 0000000000000204 ffffffff80388df8
ffffffff805176c0 ffffffff8004dc78 0000000000000000 ffffffff80067940
...
Call Trace:
[<ffffffff8004dc78>] show_stack+0xa0/0x130
[<ffffffff80067940>] __warn+0x128/0x170
---[ end trace b1d1e094f67f3bb2 ]---This is because the TURBOchannel bus driver fails to set the coherent DMA mask for devices enumerated.
Set the regular and coherent DMA masks for TURBOchannel devices then, observing that the bus protocol supports a 34-bit (16GiB) DMA address space, by interpreting the value presented in the address cycle across the 32 `ad' lines as a 32-bit word rather than byte address[1]. The architectural size of the TURBOchannel DMA address space exceeds the maximum amount of RAM any actual TURBOchannel system in existence may have, hence both masks are the same.
This removes the warning shown above.
References:
[1] "TURBOchannel Hardware Specification", EK-369AA-OD-007B, Digital
Equipment Corporation, January 1993, Section "DMA", pp. 1-15 -- 1-17
Patchwork: https://patchwork.linux-mips.org/patch/20835/
--- drivers/tc/tc.c | 8 +++++++- include/linux/tc.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-)
drivers/tc/tc.c +7 -1
@@ -2,7 +2,7 @@* TURBOchannel bus services. * * Copyright (c) Harald Koerfgen, 1998 -* Copyright (c) 2001, 2003, 2005, 2006 Maciej W. Rozycki +* Copyright (c) 2001, 2003, 2005, 2006, 2018 Maciej W. Rozycki * Copyright (c) 2005 James Simmons * * This file is subject to the terms and conditions of the GNU
@@ -10,6 +10,7 @@* directory of this archive for more details. */ #include <linux/compiler.h> +#include <linux/dma-mapping.h> #include <linux/errno.h> #include <linux/init.h> #include <linux/ioport.h>
@@ -92,6 +93,11 @@ static void __init tc_bus_add_devices(st tdev->dev.bus = &tc_bus_type; tdev->slot = slot; +/* TURBOchannel has 34-bit DMA addressing (16GiB space). */ + tdev->dma_mask =DMA_BIT_MASK (34 ); + tdev->dev.dma_mask = &tdev->dma_mask; + tdev->dev.coherent_dma_mask =DMA_BIT_MASK (34 ); +for (i =0 ; i <8 ; i++) { tdev->firmware[i] =readb (module + offset +TC_FIRM_VER +4 * i);
include/linux/tc.h +1 -0
@@ -84,6 +84,7 @@ struct tc_dev {device. */ struct device dev;/* Generic device interface. */ struct resource resource;/* Address space of this device. */ +u64 dma_mask;/* DMA addressable range. */ char vendor[9 ];char name[9 ];char firmware[9 ];
Greg Kroah-Hartman
maintainerPATCH 118/141 media: v4l2-tpg: fix kernel oops when enabling HFLIP and OSD
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans Verkuil <[email protected]>
commit 250854eed5d45a73d81e4137dfd85180af6f2ec3 upstream.
When the OSD is on (i.e. vivid displays text on top of the test pattern), and you enable hflip, then the driver crashes.
The cause turned out to be a division of a negative number by an unsigned value. You expect that -8 / 2U would be -4, but in reality it is 2147483644 :-(
--- drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/common/v4l2-tpg/v4l2-tpg-core.c +1 -1
@@ -1650,7 +1650,7 @@ typedef struct { u16 __; u8 _; } __packe pos[7 ] = (chr & (0x01 <<0 ) ? fg : bg); \ } \ \ - pos += (tpg->hflip ?-8 :8 ) / hdiv; \ + pos += (tpg->hflip ?-8 :8 ) / (int )hdiv; \ } \ } \ }while (0 )
Greg Kroah-Hartman
maintainerPATCH 119/141 kgdboc: Passing ekgdboc to command line causes panic
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: He Zhe <[email protected]>
commit 1bd54d851f50dea6af30c3e6ff4f3e9aab5558f9 upstream.
kgdboc_option_setup does not check input argument before passing it to strlen. The argument would be a NULL pointer if "ekgdboc", without its value, is set in command line and thus cause the following panic.
PANIC: early exception 0xe3 IP 10:ffffffff8fbbb620 error 0 cr2 0x0
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.18-rc8+ #1 [ 0.000000] RIP: 0010:strlen+0x0/0x20 ... [ 0.000000] Call Trace [ 0.000000] ? kgdboc_option_setup+0x9/0xa0 [ 0.000000] ? kgdboc_early_init+0x6/0x1b [ 0.000000] ? do_early_param+0x4d/0x82 [ 0.000000] ? parse_args+0x212/0x330 [ 0.000000] ? rdinit_setup+0x26/0x26 [ 0.000000] ? parse_early_options+0x20/0x23 [ 0.000000] ? rdinit_setup+0x26/0x26 [ 0.000000] ? parse_early_param+0x2d/0x39 [ 0.000000] ? setup_arch+0x2f7/0xbf4 [ 0.000000] ? start_kernel+0x5e/0x4c2 [ 0.000000] ? load_ucode_bsp+0x113/0x12f [ 0.000000] ? secondary_startup_64+0xa5/0xb0
This patch adds a check to prevent the panic.
--- drivers/tty/serial/kgdboc.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/tty/serial/kgdboc.c +5 -0
@@ -133,6 +133,11 @@ static void kgdboc_unregister_kbd(void)static int kgdboc_option_setup (char *opt) { +if (!opt) { +pr_err ("kgdboc: config string not provided\n" ); +return -EINVAL ; + } +if (strlen (opt) >=MAX_CONFIG_LEN ) {printk (KERN_ERR "kgdboc: config string too long\n" );return -ENOSPC ;
Greg Kroah-Hartman
maintainerPATCH 120/141 xen: fix xen_qlock_wait()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juergen Gross <[email protected]>
commit d3132b3860f6cf35ff7609a76bbcdbb814bd027c upstream.
Commit a856531951dc80 ("xen: make xen_qlock_wait() nestable") introduced a regression for Xen guests running fully virtualized (HVM or PVH mode). The Xen hypervisor wouldn't return from the poll hypercall with interrupts disabled in case of an interrupt (for PV guests it does).
So instead of disabling interrupts in xen_qlock_wait() use a nesting counter to avoid calling xen_clear_irq_pending() in case xen_qlock_wait() is nested.
--- arch/x86/xen/spinlock.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
arch/x86/xen/spinlock.c +8 -6
@@ -8,6 +8,7 @@#include <linux/log2.h> #include <linux/gfp.h> #include <linux/slab.h> +#include <linux/atomic.h> #include <asm/paravirt.h>
@@ -19,6 +20,7 @@ static DEFINE_PER_CPU(int, lock_kicker_irq) = -1; static DEFINE_PER_CPU(char *, irq_name); +static DEFINE_PER_CPU(atomic_t, xen_qlock_wait_nest);static bool xen_pvspin = true;#include <asm/qspinlock.h>
@@ -39,25 +41,25 @@ static void xen_qlock_kick(int cpu)*/ static void xen_qlock_wait (u8 *byte,u8 val) { -unsigned long flags;int irq =__this_cpu_read (lock_kicker_irq); +atomic_t *nest_cnt =this_cpu_ptr (&xen_qlock_wait_nest);/* If kicker interrupts not initialized yet, just spin */ if (irq ==-1 ||in_nmi ())return ; -/* Guard against reentry. */ -local_irq_save (flags); +/* Detect reentry. */ +atomic_inc (nest_cnt); -/* If irq pending already clear it. */ -if (xen_test_irq_pending (irq)) { +/* If irq pending already and no nested call clear it. */ +if (atomic_read (nest_cnt) ==1 &&xen_test_irq_pending (irq)) {xen_clear_irq_pending (irq); }else if (READ_ONCE (*byte) == val) {/* Block until irq becomes pending (or a spurious wakeup) */ xen_poll_irq (irq); } -local_irq_restore (flags); +atomic_dec (nest_cnt); }static irqreturn_t dummy_handler (int irq,void *dev_id)
Greg Kroah-Hartman
maintainerPATCH 121/141 media: em28xx: use a default format if TRY_FMT fails
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mauro Carvalho Chehab <[email protected]>
commit f823ce2a1202d47110a7ef86b65839f0be8adc38 upstream.
Follow the V4L2 spec, as warned by v4l2-compliance:
warn: v4l2-test-formats.cpp(732): TRY_FMT cannot handle an invalid pixelformat.
warn: v4l2-test-formats.cpp(733): This may or may not be a problem. For more information see:
warn: v4l2-test-formats.cpp(734): http://www.mail-archive.com/[email protected]/msg56550.html
--- drivers/media/usb/em28xx/em28xx-video.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/media/usb/em28xx/em28xx-video.c +3 -3
@@ -1435,9 +1435,9 @@ static int vidioc_try_fmt_vid_cap(struct fmt =format_by_fourcc (f->fmt.pix.pixelformat);if (!fmt) { -em28xx_videodbg ("Fourcc format (%08x) invalid.\n" , - f->fmt.pix.pixelformat); -return -EINVAL ; + fmt = &format[0 ]; +em28xx_videodbg ("Fourcc format (%08x) invalid. Using default (%08x).\n" , + f->fmt.pix.pixelformat, fmt->fourcc); }if (dev->board.is_em2800) {
Greg Kroah-Hartman
maintainerPATCH 122/141 media: tvp5150: avoid going past array on v4l2_querymenu()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mauro Carvalho Chehab <[email protected]>
commit 5c4c4505b716cb782ad7263091edc466c4d1fbd4 upstream.
The parameters of v4l2_ctrl_new_std_menu_items() are tricky: instead of the number of possible values, it requires the number of the maximum value. In other words, the ARRAY_SIZE() value should be decremented, otherwise it will go past the array bounds, as warned by KASAN:
[ 279.839688] BUG: KASAN: global-out-of-bounds in v4l2_querymenu+0x10d/0x180 [videodev] [ 279.839709] Read of size 8 at addr ffffffffc10a4cb0 by task v4l2-compliance/16676
[ 279.839736] CPU: 1 PID: 16676 Comm: v4l2-compliance Not tainted 4.18.0-rc2+ #120 [ 279.839741] Hardware name: /NUC5i7RYB, BIOS RYBDWi35.86A.0364.2017.0511.0949 05/11/2017 [ 279.839743] Call Trace: [ 279.839758] dump_stack+0x71/0xab [ 279.839807] ? v4l2_querymenu+0x10d/0x180 [videodev] [ 279.839817] print_address_description+0x1c9/0x270 [ 279.839863] ? v4l2_querymenu+0x10d/0x180 [videodev] [ 279.839871] kasan_report+0x237/0x360 [ 279.839918] v4l2_querymenu+0x10d/0x180 [videodev] [ 279.839964] __video_do_ioctl+0x2c8/0x590 [videodev] [ 279.840011] ? copy_overflow+0x20/0x20 [videodev] [ 279.840020] ? avc_ss_reset+0xa0/0xa0 [ 279.840028] ? check_stack_object+0x21/0x60 [ 279.840036] ? __check_object_size+0xe7/0x240 [ 279.840080] video_usercopy+0xed/0x730 [videodev] [ 279.840123] ? copy_overflow+0x20/0x20 [videodev] [ 279.840167] ? v4l_enumstd+0x40/0x40 [videodev] [ 279.840177] ? __handle_mm_fault+0x9f9/0x1ba0 [ 279.840186] ? __pmd_alloc+0x2c0/0x2c0 [ 279.840193] ? __vfs_write+0xb6/0x350 [ 279.840200] ? kernel_read+0xa0/0xa0 [ 279.840244] ? video_usercopy+0x730/0x730 [videodev] [ 279.840284] v4l2_ioctl+0xa1/0xb0 [videodev] [ 279.840295] do_vfs_ioctl+0x117/0x8a0 [ 279.840303] ? selinux_file_ioctl+0x211/0x2f0 [ 279.840313] ? ioctl_preallocate+0x120/0x120 [ 279.840319] ? selinux_capable+0x20/0x20 [ 279.840332] ksys_ioctl+0x70/0x80 [ 279.840342] __x64_sys_ioctl+0x3d/0x50 [ 279.840351] do_syscall_64+0x6d/0x1c0 [ 279.840361] entry_SYSCALL_64_after_hwframe+0x44/0xa9 [ 279.840367] RIP: 0033:0x7fdfb46275d7 [ 279.840369] Code: b3 66 90 48 8b 05 b1 48 2d 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 81 48 2d 00 f7 d8 64 89 01 48 [ 279.840474] RSP: 002b:00007ffee1179038 EFLAGS: 00000202 ORIG_RAX: 0000000000000010 [ 279.840483] RAX: ffffffffffffffda RBX: 00007ffee1179180 RCX: 00007fdfb46275d7 [ 279.840488] RDX: 00007ffee11790c0 RSI: 00000000c02c5625 RDI: 0000000000000003 [ 279.840493] RBP: 0000000000000002 R08: 0000000000000020 R09: 00000000009f0902 [ 279.840497] R10: 0000000000000000 R11: 0000000000000202 R12: 00007ffee117a5a0 [ 279.840501] R13: 00007ffee11790c0 R14: 0000000000000002 R15: 0000000000000000
[ 279.840515] The buggy address belongs to the variable: [ 279.840535] tvp5150_test_patterns+0x10/0xffffffffffffe360 [tvp5150]
--- drivers/media/i2c/tvp5150.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/i2c/tvp5150.c +1 -1
@@ -1527,7 +1527,7 @@ static int tvp5150_probe(struct i2c_clie 27000000, 1, 27000000);v4l2_ctrl_new_std_menu_items (&core->hdl, &tvp5150_ctrl_ops,V4L2_CID_TEST_PATTERN , -ARRAY_SIZE (tvp5150_test_patterns), +ARRAY_SIZE (tvp5150_test_patterns) -1 ,0 ,0 , tvp5150_test_patterns); sd->ctrl_handler = &core->hdl;if (core->hdl.error) {
Greg Kroah-Hartman
maintainerPATCH 123/141 media: em28xx: fix input name for Terratec AV 350
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mauro Carvalho Chehab <[email protected]>
commit 15644bfa195bd166d0a5ed76ae2d587f719c3dac upstream.
Instead of using a register value, use an AMUX name, as otherwise VIDIOC_G_AUDIO would fail.
--- drivers/media/usb/em28xx/em28xx-cards.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/media/usb/em28xx/em28xx-cards.c +2 -2
@@ -2093,13 +2093,13 @@ struct em28xx_board em28xx_boards[] = { .input = { { .type = EM28XX_VMUX_COMPOSITE, .vmux = TVP5150_COMPOSITE1, - .amux = EM28XX_AUDIO_SRC_LINE, + .amux = EM28XX_AMUX_LINE_IN, .gpio = terratec_av350_unmute_gpio, }, { .type = EM28XX_VMUX_SVIDEO, .vmux = TVP5150_SVIDEO, - .amux = EM28XX_AUDIO_SRC_LINE, + .amux = EM28XX_AMUX_LINE_IN, .gpio = terratec_av350_unmute_gpio, } }, },
Greg Kroah-Hartman
maintainerPATCH 124/141 media: em28xx: make v4l2-compliance happier by starting sequence on zero
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mauro Carvalho Chehab <[email protected]>
commit afeaade90db4c5dab93f326d9582be1d5954a198 upstream.
The v4l2-compliance tool complains if a video doesn't start with a zero sequence number.
While this shouldn't cause any real problem for apps, let's make it happier, in order to better check the v4l2-compliance differences before and after patchsets.
This is actually an old issue. It is there since at least its videobuf2 conversion, e. g. changeset 3829fadc461 ("[media]
em28xx: convert to videobuf2"), if VB1 wouldn't suffer from the same issue.
--- drivers/media/usb/em28xx/em28xx-video.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/media/usb/em28xx/em28xx-video.c +2 -0
@@ -1290,6 +1290,8 @@ static void em28xx_ctrl_notify(struct v4 {struct em28xx *dev = priv; + dev->v4l2->field_count =0 ; +/* * In the case of non-AC97 volume controls, we still need * to do some setups at em28xx, in order to mute/unmute
Greg Kroah-Hartman
maintainerPATCH 125/141 arm64: lse: remove -fcall-used-x0 flag
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tri Vo <[email protected]>
commit 2a6c7c367de82951c98a290a21156770f6f82c84 upstream.
x0 is not callee-saved in the PCS. So there is no need to specify -fcall-used-x0.
Clang doesn't currently support -fcall-used flags. This patch will help building the kernel with clang.
--- arch/arm64/lib/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/lib/Makefile +1 -1
@@ -11,7 +11,7 @@ lib-y := bitops.o clear_user.o delay.o # when supported by the CPU. Result and argument registers are handled # correctly, based on the function prototype. lib-$(CONFIG_ARM64_LSE_ATOMICS) += atomic_ll_sc.o -CFLAGS_atomic_ll_sc.o := -fcall-used-x0 -ffixed-x1 -ffixed-x2 \ +CFLAGS_atomic_ll_sc.o := -ffixed-x1 -ffixed-x2 \ -ffixed-x3 -ffixed-x4 -ffixed-x5 -ffixed-x6 \ -ffixed-x7 -fcall-saved-x8 -fcall-saved-x9 \ -fcall-saved-x10 -fcall-saved-x11 -fcall-saved-x12 \
Greg Kroah-Hartman
maintainerPATCH 126/141 rpmsg: smd: fix memory leak on channel create
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
commit 940c620d6af8fca7d115de40f19870fba415efac upstream.
Currently a failed allocation of channel->name leads to an immediate return without freeing channel. Fix this by setting ret to -ENOMEM and jumping to an exit path that kfree's channel.
Detected by CoverityScan, CID#1473692 ("Resource Leak")
--- drivers/rpmsg/qcom_smd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/rpmsg/qcom_smd.c +5 -2
@@ -1012,8 +1012,10 @@ static struct qcom_smd_channel *qcom_smd channel->edge = edge; channel->name =kstrdup (name,GFP_KERNEL ); -if (!channel->name) -return ERR_PTR (-ENOMEM ); +if (!channel->name) { + ret = -ENOMEM ; + goto free_channel; + }mutex_init (&channel->tx_lock);spin_lock_init (&channel->recv_lock);
@@ -1062,6 +1064,7 @@ static struct qcom_smd_channel *qcom_smd free_name_and_channel:kfree (channel->name); +free_channel:kfree (channel);return ERR_PTR (ret);
Greg Kroah-Hartman
maintainerPATCH 127/141 Cramfs: fix abad comparison when wrap-arounds occur
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicolas Pitre <[email protected]>
commit 672ca9dd13f1aca0c17516f76fc5b0e8344b3e46 upstream.
It is possible for corrupted filesystem images to produce very large block offsets that may wrap when a length is added, and wrongly pass the buffer size test.
--- fs/cramfs/inode.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/cramfs/inode.c +2 -1
@@ -186,7 +186,8 @@ static void *cramfs_read(struct super_blcontinue ; blk_offset = (blocknr - buffer_blocknr[i]) <<PAGE_SHIFT ; blk_offset += offset; -if (blk_offset + len >BUFFER_SIZE ) +if (blk_offset >BUFFER_SIZE || + blk_offset + len >BUFFER_SIZE )continue ;return read_buffers[i] + blk_offset; }
Greg Kroah-Hartman
maintainerPATCH 128/141 arm64: dts: stratix10: Correct System Manager register size
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thor Thayer <[email protected]>
commit 74121b9aa3cd571ddfff014a9f47db36cae3cda9 upstream.
Correct the register size of the System Manager node.
--- arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi +1 -1
@@ -249,7 +249,7 @@ sysmgr: sysmgr@ffd12000 { compatible = "altr,sys-mgr", "syscon"; - reg = <0xffd12000 0x1000>; + reg = <0xffd12000 0x228>; }; /* Local timer */
Greg Kroah-Hartman
maintainerPATCH 129/141 soc/tegra: pmc: Fix child-node lookup
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit 1dc6bd5e39a29453bdcc17348dd2a89f1aa4004e upstream.
Fix child-node lookup during probe, which ended up searching the whole device tree depth-first starting at the parent rather than just matching on its children.
To make things worse, the parent pmc node could end up being prematurely freed as of_find_node_by_name() drops a reference to its first argument.
--- drivers/soc/tegra/pmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/soc/tegra/pmc.c +1 -1
@@ -1189,7 +1189,7 @@ static void tegra_pmc_init_tsense_reset(if (!pmc->soc->has_tsense_reset)return ; - np =of_find_node_by_name (pmc->dev->of_node,"i2c-thermtrip" ); + np =of_get_child_by_name (pmc->dev->of_node,"i2c-thermtrip" );if (!np) {dev_warn (dev,"i2c-thermtrip node not found, %s.\n" , disabled);return ;
Greg Kroah-Hartman
maintainerPATCH 130/141 btrfs: Handle owner mismatch gracefully when walking up tree
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
commit 65c6e82becec33731f48786e5a30f98662c86b16 upstream.
[BUG]
When mounting certain crafted image, btrfs will trigger kernel BUG_ON() when trying to recover balance:
kernel BUG at fs/btrfs/extent-tree.c:8956!
invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
CPU: 1 PID: 662 Comm: mount Not tainted 4.18.0-rc1-custom+ #10 RIP: 0010:walk_up_proc+0x336/0x480 [btrfs] RSP: 0018:ffffb53540c9b890 EFLAGS: 00010202 Call Trace: walk_up_tree+0x172/0x1f0 [btrfs] btrfs_drop_snapshot+0x3a4/0x830 [btrfs] merge_reloc_roots+0xe1/0x1d0 [btrfs] btrfs_recover_relocation+0x3ea/0x420 [btrfs] open_ctree+0x1af3/0x1dd0 [btrfs] btrfs_mount_root+0x66b/0x740 [btrfs] mount_fs+0x3b/0x16a vfs_kern_mount.part.9+0x54/0x140 btrfs_mount+0x16d/0x890 [btrfs] mount_fs+0x3b/0x16a vfs_kern_mount.part.9+0x54/0x140 do_mount+0x1fd/0xda0 ksys_mount+0xba/0xd0 __x64_sys_mount+0x21/0x30 do_syscall_64+0x60/0x210 entry_SYSCALL_64_after_hwframe+0x49/0xbe
[CAUSE]
Extent tree corruption. In this particular case, reloc tree root's owner is DATA_RELOC_TREE (should be TREE_RELOC), thus its backref is corrupted and we failed the owner check in walk_up_tree().
[FIX]
It's pretty hard to take care of every extent tree corruption, but at least we can remove such BUG_ON() and exit more gracefully.
And since in this particular image, DATA_RELOC_TREE and TREE_RELOC share the same root (which is obviously invalid), we needs to make __del_reloc_root() more robust to detect such invalid sharing to avoid possible NULL dereference as root->node can be NULL in this case.
--- fs/btrfs/extent-tree.c | 18 ++++++++++++------ fs/btrfs/relocation.c | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-)
fs/btrfs/extent-tree.c +12 -6
@@ -9100,15 +9100,14 @@ static noinline int walk_up_proc(structif (eb == root->node) {if (wc->flags[level] &BTRFS_BLOCK_FLAG_FULL_BACKREF ) parent = eb->start; -else -BUG_ON (root->root_key.objectid != -btrfs_header_owner (eb)); +else if (root->root_key.objectid !=btrfs_header_owner (eb)) + goto owner_mismatch; }else {if (wc->flags[level +1 ] &BTRFS_BLOCK_FLAG_FULL_BACKREF ) parent = path->nodes[level +1 ]->start; -else -BUG_ON (root->root_key.objectid != -btrfs_header_owner (path->nodes[level +1 ])); +else if (root->root_key.objectid != +btrfs_header_owner (path->nodes[level +1 ])) + goto owner_mismatch; }btrfs_free_tree_block (trans, root, eb, parent, wc->refs[level] ==1 );
@@ -9116,6 +9115,11 @@ out: wc->refs[level] =0 ; wc->flags[level] =0 ;return 0 ; + +owner_mismatch: +btrfs_err_rl (root->fs_info,"unexpected tree owner, have %llu expect %llu" , +btrfs_header_owner (eb), root->root_key.objectid); +return -EUCLEAN ; } static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
@@ -9169,6 +9173,8 @@ static noinline int walk_up_tree(struct ret =walk_up_proc (trans, root, path, wc);if (ret >0 )return 0 ; +if (ret <0 ) +return ret;if (path->locks[level]) { btrfs_tree_unlock_rw(path->nodes[level],
fs/btrfs/relocation.c +1 -1
@@ -1325,7 +1325,7 @@ static void __del_reloc_root(struct btrfstruct mapping_node *node =NULL ;struct reloc_control *rc = root->fs_info->reloc_ctl; -if (rc) { +if (rc && root->node) {spin_lock (&rc->reloc_root_tree.lock); rb_node =tree_search (&rc->reloc_root_tree.rb_root, root->node->start);
Greg Kroah-Hartman
maintainerPATCH 131/141 btrfs: locking: Add extra check in btrfs_init_new_buffer() to avoid deadlock
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
commit b72c3aba09a53fc7c1824250d71180ca154517a7 upstream.
[BUG]
For certain crafted image, whose csum root leaf has missing backref, if we try to trigger write with data csum, it could cause deadlock with the following kernel WARN_ON():
WARNING: CPU: 1 PID: 41 at fs/btrfs/locking.c:230 btrfs_tree_lock+0x3e2/0x400 CPU: 1 PID: 41 Comm: kworker/u4:1 Not tainted 4.18.0-rc1+ #8 Workqueue: btrfs-endio-write btrfs_endio_write_helper RIP: 0010:btrfs_tree_lock+0x3e2/0x400 Call Trace: btrfs_alloc_tree_block+0x39f/0x770 __btrfs_cow_block+0x285/0x9e0 btrfs_cow_block+0x191/0x2e0 btrfs_search_slot+0x492/0x1160 btrfs_lookup_csum+0xec/0x280 btrfs_csum_file_blocks+0x2be/0xa60 add_pending_csums+0xaf/0xf0 btrfs_finish_ordered_io+0x74b/0xc90 finish_ordered_fn+0x15/0x20 normal_work_helper+0xf6/0x500 btrfs_endio_write_helper+0x12/0x20 process_one_work+0x302/0x770 worker_thread+0x81/0x6d0 kthread+0x180/0x1d0 ret_from_fork+0x35/0x40
[CAUSE]
That crafted image has missing backref for csum tree root leaf. And when we try to allocate new tree block, since there is no EXTENT/METADATA_ITEM for csum tree root, btrfs consider it's free slot and use it.
The extent tree of the image looks like:
Normal image | This fuzzed image
----------------------------------+--------------------------------
BG 29360128 | BG 29360128 One empty slot | One empty slot 29364224: backref to UUID tree | 29364224: backref to UUID tree Two empty slots | Two empty slots 29376512: backref to CSUM tree | One empty slot (bad type) <<< 29380608: backref to D_RELOC tree | 29380608: backref to D_RELOC tree ... | ...
Since bytenr 29376512 has no METADATA/EXTENT_ITEM, when btrfs try to alloc tree block, it's an valid slot for btrfs.
And for finish_ordered_write, when we need to insert csum, we try to CoW csum tree root.
By accident, empty slots at bytenr BG_OFFSET, BG_OFFSET + 8K, BG_OFFSET + 12K is already used by tree block COW for other trees, the next empty slot is BG_OFFSET + 16K, which should be the backref for CSUM tree.
But due to the bad type, btrfs can recognize it and still consider it as an empty slot, and will try to use it for csum tree CoW.
Then in the following call trace, we will try to lock the new tree block, which turns out to be the old csum tree root which is already locked:
btrfs_search_slot() called on csum tree root, which is at 29376512 |- btrfs_cow_block()
|- btrfs_set_lock_block()
| |- Now locks tree block 29376512 (old csum tree root)
|- __btrfs_cow_block()
|- btrfs_alloc_tree_block()
|- btrfs_reserve_extent()
| Now it returns tree block 29376512, which extent tree
| shows its empty slot, but it's already hold by csum tree
|- btrfs_init_new_buffer()
|- btrfs_tree_lock()
| Triggers WARN_ON(eb->lock_owner == current->pid)
|- wait_event()
Wait lock owner to release the lock, but it's
locked by ourself, so it will deadlock[FIX]
This patch will do the lock_owner and current->pid check at btrfs_init_new_buffer().
So above deadlock can be avoided.
Since such problem can only happen in crafted image, we will still trigger kernel warning for later aborted transaction, but with a little more meaningful warning message.
--- fs/btrfs/extent-tree.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
fs/btrfs/extent-tree.c +13 -0
@@ -8263,6 +8263,19 @@ btrfs_init_new_buffer(struct btrfs_transif (IS_ERR (buf))return buf; +/* +* Extra safety check in case the extent tree is corrupted and extent +* allocator chooses to use a tree block which is already used and +* locked. +*/ +if (buf->lock_owner == current->pid) { +btrfs_err_rl (root->fs_info, +"tree block %llu owner %llu already locked by pid=%d, extent tree corruption detected" , + buf->start,btrfs_header_owner (buf), current->pid); +free_extent_buffer (buf); +return ERR_PTR (-EUCLEAN ); + } +btrfs_set_header_generation (buf, trans->transid);btrfs_set_buffer_lockdep_class (root->root_key.objectid, buf, level);btrfs_tree_lock (buf);
Greg Kroah-Hartman
maintainerPATCH 132/141 btrfs: fix error handling in free_log_tree
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Mahoney <[email protected]>
commit 374b0e2d6ba5da7fd1cadb3247731ff27d011f6f upstream.
When we hit an I/O error in free_log_tree->walk_log_tree during file system shutdown we can crash due to there not being a valid transaction handle.
Use btrfs_handle_fs_error when there's no transaction handle to use.
BUG: unable to handle kernel NULL pointer dereference at 0000000000000060 IP: free_log_tree+0xd2/0x140 [btrfs] PGD 0 P4D 0 Oops: 0000 [#1] SMP DEBUG_PAGEALLOC PTI Modules linked in: <modules> CPU: 2 PID: 23544 Comm: umount Tainted: G W 4.12.14-kvmsmall #9 SLE15 (unreleased) Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.0.0-prebuilt.qemu-project.org 04/01/2014 task: ffff96bfd3478880 task.stack: ffffa7cf40d78000 RIP: 0010:free_log_tree+0xd2/0x140 [btrfs] RSP: 0018:ffffa7cf40d7bd10 EFLAGS: 00010282 RAX: 00000000fffffffb RBX: 00000000fffffffb RCX: 0000000000000002 RDX: 0000000000000000 RSI: ffff96c02f07d4c8 RDI: 0000000000000282 RBP: ffff96c013cf1000 R08: ffff96c02f07d4c8 R09: ffff96c02f07d4d0 R10: 0000000000000000 R11: 0000000000000002 R12: 0000000000000000 R13: ffff96c005e800c0 R14: ffffa7cf40d7bdb8 R15: 0000000000000000 FS: 00007f17856bcfc0(0000) GS:ffff96c03f600000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000060 CR3: 0000000045ed6002 CR4: 00000000003606e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: ? wait_for_writer+0xb0/0xb0 [btrfs] btrfs_free_log+0x17/0x30 [btrfs] btrfs_drop_and_free_fs_root+0x9a/0xe0 [btrfs] btrfs_free_fs_roots+0xc0/0x130 [btrfs] ? wait_for_completion+0xf2/0x100 close_ctree+0xea/0x2e0 [btrfs] ? kthread_stop+0x161/0x260 generic_shutdown_super+0x6c/0x120 kill_anon_super+0xe/0x20 btrfs_kill_super+0x13/0x100 [btrfs] deactivate_locked_super+0x3f/0x70 cleanup_mnt+0x3b/0x70 task_work_run+0x78/0x90 exit_to_usermode_loop+0x77/0xa6 do_syscall_64+0x1c5/0x1e0 entry_SYSCALL_64_after_hwframe+0x42/0xb7 RIP: 0033:0x7f1784f90827 RSP: 002b:00007ffdeeb03118 EFLAGS: 00000246 ORIG_RAX: 00000000000000a6 RAX: 0000000000000000 RBX: 0000556a60c62970 RCX: 00007f1784f90827 RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000556a60c62b50 RBP: 0000000000000000 R08: 0000000000000005 R09: 00000000ffffffff R10: 0000556a60c63900 R11: 0000000000000246 R12: 0000556a60c62b50 R13: 00007f17854a81c4 R14: 0000000000000000 R15: 0000000000000000 RIP: free_log_tree+0xd2/0x140 [btrfs] RSP: ffffa7cf40d7bd10 CR2: 0000000000000060
--- fs/btrfs/tree-log.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
fs/btrfs/tree-log.c +6 -3
@@ -3016,9 +3016,12 @@ static void free_log_tree(struct btrfs_t }; ret =walk_log_tree (trans, log, &wc); -/* I don't think this can happen but just in case */ -if (ret) -btrfs_abort_transaction (trans, ret); +if (ret) { +if (trans) +btrfs_abort_transaction (trans, ret); +else +btrfs_handle_fs_error (log->fs_info, ret,NULL ); + }while (1 ) { ret = find_first_extent_bit(&log->dirty_log_pages,
Greg Kroah-Hartman
maintainerPATCH 133/141 btrfs: iterate all devices during trim, instead of fs_devices::alloc_list
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Mahoney <[email protected]>
commit d4e329de5e5e21594df2e0dd59da9acee71f133b upstream.
btrfs_trim_fs iterates over the fs_devices->alloc_list while holding the device_list_mutex. The problem is that ->alloc_list is protected by the chunk mutex. We don't want to hold the chunk mutex over the trim of the entire file system. Fortunately, the ->dev_list list is protected by the dev_list mutex and while it will give us all devices, including read-only devices, we already just skip the read-only devices. Then we can continue to take and release the chunk mutex while scanning each device.
--- fs/btrfs/extent-tree.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/btrfs/extent-tree.c +2 -2
@@ -11193,8 +11193,8 @@ int btrfs_trim_fs(struct btrfs_root *roo }mutex_lock (&root->fs_info->fs_devices->device_list_mutex); - devices = &root->fs_info->fs_devices->alloc_list; -list_for_each_entry (device, devices, dev_alloc_list) { + devices = &root->fs_info->fs_devices->devices; +list_for_each_entry (device, devices, dev_list) { ret =btrfs_trim_free_extents (device, range->minlen, &group_trimmed);if (ret)
Greg Kroah-Hartman
maintainerPATCH 134/141 btrfs: dont attempt to trim devices that dont support it
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Mahoney <[email protected]>
commit 0be88e367fd8fbdb45257615d691f4675dda062f upstream.
We check whether any device the file system is using supports discard in the ioctl call, but then we attempt to trim free extents on every device regardless of whether discard is supported. Due to the way we mask off EOPNOTSUPP, we can end up issuing the trim operations on each free range on devices that don't support it, just wasting time.
--- fs/btrfs/extent-tree.c | 4 ++++ 1 file changed, 4 insertions(+)
fs/btrfs/extent-tree.c +4 -0
@@ -11071,6 +11071,10 @@ static int btrfs_trim_free_extents(struc *trimmed =0 ; +/* Discard not supported = nothing to do. */ +if (!blk_queue_discard (bdev_get_queue (device->bdev))) +return 0 ; +/* Not writeable = nothing to do. */ if (!device->writeable)return 0 ;
Greg Kroah-Hartman
maintainerPATCH 135/141 btrfs: wait on caching when putting the bg cache
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
commit 3aa7c7a31c26321696b92841d5103461c6f3f517 upstream.
While testing my backport I noticed there was a panic if I ran generic/416 generic/417 generic/418 all in a row. This just happened to uncover a race where we had outstanding IO after we destroy all of our workqueues, and then we'd go to queue the endio work on those free'd workqueues.
This is because we aren't waiting for the caching threads to be done before freeing everything up, so to fix this make sure we wait on any outstanding caching that's being done before we free up the block group, so we're sure to be done with all IO by the time we get to btrfs_stop_all_workers(). This fixes the panic I was seeing consistently in testing.
------------[ cut here ]------------ kernel BUG at fs/btrfs/volumes.c:6112! SMP PTI Modules linked in: CPU: 1 PID: 27165 Comm: kworker/u4:7 Not tainted 4.16.0-02155-g3553e54a578d-dirty #875 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-2.el7 04/01/2014 Workqueue: btrfs-cache btrfs_cache_helper RIP: 0010:btrfs_map_bio+0x346/0x370 RSP: 0000:ffffc900061e79d0 EFLAGS: 00010202 RAX: 0000000000000000 RBX: ffff880071542e00 RCX: 0000000000533000 RDX: ffff88006bb74380 RSI: 0000000000000008 RDI: ffff880078160000 RBP: 0000000000000001 R08: ffff8800781cd200 R09: 0000000000503000 R10: ffff88006cd21200 R11: 0000000000000000 R12: 0000000000000000 R13: 0000000000000000 R14: ffff8800781cd200 R15: ffff880071542e00 FS: 0000000000000000(0000) GS:ffff88007fd00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 000000000817ffc4 CR3: 0000000078314000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: btree_submit_bio_hook+0x8a/0xd0 submit_one_bio+0x5d/0x80 read_extent_buffer_pages+0x18a/0x320 btree_read_extent_buffer_pages+0xbc/0x200 ? alloc_extent_buffer+0x359/0x3e0 read_tree_block+0x3d/0x60 read_block_for_search.isra.30+0x1a5/0x360 btrfs_search_slot+0x41b/0xa10 btrfs_next_old_leaf+0x212/0x470 caching_thread+0x323/0x490 normal_work_helper+0xc5/0x310 process_one_work+0x141/0x340 worker_thread+0x44/0x3c0 kthread+0xf8/0x130 ? process_one_work+0x340/0x340 ? kthread_bind+0x10/0x10 ret_from_fork+0x35/0x40 RIP: btrfs_map_bio+0x346/0x370 RSP: ffffc900061e79d0 ---[ end trace 827eb13e50846033 ]--- Kernel panic - not syncing: Fatal exception Kernel Offset: disabled ---[ end Kernel panic - not syncing: Fatal exception
--- fs/btrfs/extent-tree.c | 1 + 1 file changed, 1 insertion(+)
fs/btrfs/extent-tree.c +1 -0
@@ -9952,6 +9952,7 @@ void btrfs_put_block_group_cache(struct block_group =btrfs_lookup_first_block_group (info, last);while (block_group) { +wait_block_group_cache_done (block_group);spin_lock (&block_group->lock);if (block_group->iref)break ;
Greg Kroah-Hartman
maintainerPATCH 136/141 btrfs: reset max_extent_size on clear in a bitmap
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
commit 553cceb49681d60975d00892877d4c871bf220f9 upstream.
We need to clear the max_extent_size when we clear bits from a bitmap since it could have been from the range that contains the max_extent_size.
--- fs/btrfs/free-space-cache.c | 2 ++ 1 file changed, 2 insertions(+)
fs/btrfs/free-space-cache.c +2 -0
@@ -1693,6 +1693,8 @@ static inline void __bitmap_clear_bits(sbitmap_clear (info->bitmap, start, count); info->bytes -= bytes; +if (info->max_extent_size > ctl->unit) + info->max_extent_size =0 ; } static void bitmap_clear_bits(struct btrfs_free_space_ctl *ctl,
Greg Kroah-Hartman
maintainerPATCH 137/141 btrfs: make sure we create all new block groups
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
commit 545e3366db823dc3342ca9d7fea803f829c9062f upstream.
Allocating new chunks modifies both the extent and chunk tree, which can trigger new chunk allocations. So instead of doing list_for_each_safe, just do while (!list_empty()) so we make sure we don't exit with other pending bg's still on our list.
--- fs/btrfs/extent-tree.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
fs/btrfs/extent-tree.c +5 -2
@@ -10352,7 +10352,7 @@ error:void btrfs_create_pending_block_groups (struct btrfs_trans_handle *trans,struct btrfs_root *root) { -struct btrfs_block_group_cache *block_group, *tmp; +struct btrfs_block_group_cache *block_group;struct btrfs_root *extent_root = root->fs_info->extent_root;struct btrfs_block_group_item item;struct btrfs_key key;
@@ -10360,7 +10360,10 @@ void btrfs_create_pending_block_groups(sbool can_flush_pending_bgs = trans->can_flush_pending_bgs; trans->can_flush_pending_bgs = false; -list_for_each_entry_safe (block_group, tmp, &trans->new_bgs, bg_list) { +while (!list_empty (&trans->new_bgs)) { + block_group =list_first_entry (&trans->new_bgs, + struct btrfs_block_group_cache, + bg_list);if (ret) goto next;
Greg Kroah-Hartman
maintainerPATCH 138/141 Btrfs: fix wrong dentries after fsync of file that got its parent replaced
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <[email protected]>
commit 0f375eed92b5a407657532637ed9652611a682f5 upstream.
In a scenario like the following:
mkdir /mnt/A # inode 258 mkdir /mnt/B # inode 259 touch /mnt/B/bar # inode 260
sync
mv /mnt/B/bar /mnt/A/bar
mv -T /mnt/A /mnt/B
fsync /mnt/B/bar
<power fail>
After replaying the log we end up with file bar having 2 hard links, both with the name 'bar' and one in the directory with inode number 258 and the other in the directory with inode number 259. Also, we end up with the directory inode 259 still existing and with the directory inode 258 still named as 'A', instead of 'B'. In this scenario, file 'bar' should only have one hard link, located at directory inode 258, the directory inode 259 should not exist anymore and the name for directory inode 258 should be 'B'.
This incorrect behaviour happens because when attempting to log the old parents of an inode, we skip any parents that no longer exist. Fix this by forcing a full commit if an old parent no longer exists.
A test case for fstests follows soon.
--- fs/btrfs/tree-log.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-)
fs/btrfs/tree-log.c +27 -3
@@ -5373,9 +5373,33 @@ static int btrfs_log_all_parents(struct dir_inode =btrfs_iget (root->fs_info->sb, &inode_key, root,NULL ); -/* If parent inode was deleted, skip it. */ -if (IS_ERR (dir_inode)) -continue ; +/* +* If the parent inode was deleted, return an error to +* fallback to a transaction commit. This is to prevent +* getting an inode that was moved from one parent A to +* a parent B, got its former parent A deleted and then +* it got fsync'ed, from existing at both parents after +* a log replay (and the old parent still existing). +* Example: +* +* mkdir /mnt/A +* mkdir /mnt/B +* touch /mnt/B/bar +* sync +* mv /mnt/B/bar /mnt/A/bar +* mv -T /mnt/A /mnt/B +* fsync /mnt/B/bar +* <power fail> +* +* If we ignore the old parent B which got deleted, +* after a log replay we would have file bar linked +* at both parents and the old parent B would still +* exist. +*/ +if (IS_ERR (dir_inode)) { + ret =PTR_ERR (dir_inode); + goto out; + }if (ctx) ctx->log_new_dentries = false;
Greg Kroah-Hartman
maintainerPATCH 139/141 btrfs: qgroup: Dirty all qgroups before rescan
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
commit 9c7b0c2e8dbfbcd80a71e2cbfe02704f26c185c6 upstream.
[BUG]
In the following case, rescan won't zero out the number of qgroup 1/0:
$ mkfs.btrfs -fq $DEV $ mount $DEV /mnt
$ btrfs quota enable /mnt $ btrfs qgroup create 1/0 /mnt $ btrfs sub create /mnt/sub $ btrfs qgroup assign 0/257 1/0 /mnt
$ dd if=/dev/urandom of=/mnt/sub/file bs=1k count=1000 $ btrfs sub snap /mnt/sub /mnt/snap $ btrfs quota rescan -w /mnt $ btrfs qgroup show -pcre /mnt qgroupid rfer excl max_rfer max_excl parent child -------- ---- ---- -------- -------- ------ ----- 0/5 16.00KiB 16.00KiB none none --- --- 0/257 1016.00KiB 16.00KiB none none 1/0 --- 0/258 1016.00KiB 16.00KiB none none --- --- 1/0 1016.00KiB 16.00KiB none none --- 0/257
So far so good, but:
$ btrfs qgroup remove 0/257 1/0 /mnt WARNING: quotas may be inconsistent, rescan needed $ btrfs quota rescan -w /mnt $ btrfs qgroup show -pcre /mnt qgoupid rfer excl max_rfer max_excl parent child -------- ---- ---- -------- -------- ------ ----- 0/5 16.00KiB 16.00KiB none none --- --- 0/257 1016.00KiB 16.00KiB none none --- --- 0/258 1016.00KiB 16.00KiB none none --- --- 1/0 1016.00KiB 16.00KiB none none --- --- ^^^^^^^^^^ ^^^^^^^^ not cleared
[CAUSE]
Before rescan we call qgroup_rescan_zero_tracking() to zero out all qgroups' accounting numbers.
However we don't mark all qgroups dirty, but rely on rescan to do so.
If we have any high level qgroup without children, it won't be marked dirty during rescan, since we cannot reach that qgroup.
This will cause QGROUP_INFO items of childless qgroups never get updated in the quota tree, thus their numbers will stay the same in "btrfs qgroup show" output.
[FIX]
Just mark all qgroups dirty in qgroup_rescan_zero_tracking(), so even if we have childless qgroups, their QGROUP_INFO items will still get updated during rescan.
--- fs/btrfs/qgroup.c | 1 + 1 file changed, 1 insertion(+)
fs/btrfs/qgroup.c +1 -0
@@ -2498,6 +2498,7 @@ qgroup_rescan_zero_tracking(struct btrfs qgroup->rfer_cmpr =0 ; qgroup->excl =0 ; qgroup->excl_cmpr =0 ; +qgroup_dirty (fs_info, qgroup); }spin_unlock (&fs_info->qgroup_lock); }
Greg Kroah-Hartman
maintainerPATCH 140/141 Btrfs: fix null pointer dereference on compressed write path error
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <[email protected]>
commit 3527a018c00e5dbada2f9d7ed5576437b6dd5cfb upstream.
At inode.c:compress_file_range(), under the "free_pages_out" label, we can end up dereferencing the "pages" pointer when it has a NULL value. This case happens when "start" has a value of 0 and we fail to allocate memory for the "pages" pointer. When that happens we jump to the "cont" label and then enter the "if (start == 0)" branch where we immediately call the cow_file_range_inline() function. If that function returns 0 (success creating an inline extent) or an error (like -ENOMEM for example) we jump to the "free_pages_out" label and then access "pages[i]" leading to a NULL pointer dereference, since "nr_pages" has a value greater than zero at that point.
Fix this by setting "nr_pages" to 0 when we fail to allocate memory for the "pages" pointer.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=201119
--- fs/btrfs/inode.c | 1 + 1 file changed, 1 insertion(+)
fs/btrfs/inode.c +1 -0
@@ -489,6 +489,7 @@ again: pages =kcalloc (nr_pages,sizeof (struct page *),GFP_NOFS );if (!pages) {/* just bail out to the uncompressed code */ + nr_pages =0 ; goto cont; }
Greg Kroah-Hartman
maintainerPATCH 141/141 btrfs: set max_extent_size properly
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
commit ad22cf6ea47fa20fbe11ac324a0a15c0a9a4a2a9 upstream.
We can't use entry->bytes if our entry is a bitmap entry, we need to use entry->max_extent_size in that case. Fix up all the logic to make this consistent.
--- fs/btrfs/free-space-cache.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-)
fs/btrfs/free-space-cache.c +20 -10
@@ -1778,6 +1778,13 @@ static int search_bitmap(struct btrfs_frreturn -1 ; } +static inline u64 get_max_extent_size (struct btrfs_free_space *entry) +{ +if (entry->bitmap) +return entry->max_extent_size; +return entry->bytes; +} +/* Cache the size of the max extent in bytes */ static struct btrfs_free_space * find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
@@ -1799,8 +1806,8 @@ find_free_space(struct btrfs_free_space_for (node = &entry->offset_index; node; node =rb_next (node)) { entry = rb_entry(node, struct btrfs_free_space, offset_index);if (entry->bytes < *bytes) { -if (entry->bytes > *max_extent_size) - *max_extent_size = entry->bytes; + *max_extent_size =max (get_max_extent_size (entry), + *max_extent_size);continue ; }
@@ -1818,8 +1825,8 @@ find_free_space(struct btrfs_free_space_ }if (entry->bytes < *bytes + align_off) { -if (entry->bytes > *max_extent_size) - *max_extent_size = entry->bytes; + *max_extent_size =max (get_max_extent_size (entry), + *max_extent_size);continue ; }
@@ -1831,8 +1838,10 @@ find_free_space(struct btrfs_free_space_ *offset = tmp; *bytes = size;return entry; - }else if (size > *max_extent_size) { - *max_extent_size = size; + }else { + *max_extent_size = +max (get_max_extent_size (entry), + *max_extent_size); }continue ; }
@@ -2691,8 +2700,8 @@ static u64 btrfs_alloc_from_bitmap(struc err =search_bitmap (ctl, entry, &search_start, &search_bytes, true);if (err) { -if (search_bytes > *max_extent_size) - *max_extent_size = search_bytes; + *max_extent_size =max (get_max_extent_size (entry), + *max_extent_size);return 0 ; }
@@ -2729,8 +2738,9 @@ u64 btrfs_alloc_from_cluster(struct btrf entry = rb_entry(node, struct btrfs_free_space, offset_index);while (1 ) { -if (entry->bytes < bytes && entry->bytes > *max_extent_size) - *max_extent_size = entry->bytes; +if (entry->bytes < bytes) + *max_extent_size =max (get_max_extent_size (entry), + *max_extent_size);if (entry->bytes < bytes || (!entry->bitmap && entry->offset < min_start)) {
stable-rc/linux-4.9.y boot: 81 boots: 1 failed, 60 passed with 14 offline, 6 conflicts (v4.9.136-142-gdc28287de643)
stable-rc/linux-4.9.y boot: 81 boots: 1 failed, 60 passed with 14 offline, 6 conflicts (v4.9.136-142-gdc28287de643)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.9.y/kernel/v4.9.136-142-gdc28287de643/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.9.y/kernel/v4.9.136-142-gdc28287de643/
Tree: stable-rc
Branch: linux-4.9.y
Git Describe: v4.9.136-142-gdc28287de643
Git Commit: dc28287de6435c38a38eb37a44e19832497d0c63
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 43 unique boards, 20 SoC families, 16 builds out of 182
Boot Regressions Detected:
arm:
multi_v7_defconfig:
imx6q-sabrelite:
lab-baylibre: failing since 1 day (last pass: v4.9.135-156-gdb1dd7ad04c4 - first fail: v4.9.136)
meson8b-odroidc1:
lab-baylibre: failing since 1 day (last pass: v4.9.135-156-gdb1dd7ad04c4 - first fail: v4.9.136)arm64:
defconfig:
meson-gxbb-p200:
lab-baylibre: failing since 1 day (last pass: v4.9.135-172-gcc46a1dedc8b - first fail: v4.9.136)
qemu:
lab-baylibre: failing since 1 day (last pass: v4.9.135-172-gcc46a1dedc8b - first fail: v4.9.136)x86:
x86_64_defconfig:
qemu:
lab-baylibre: failing since 1 day (last pass: v4.9.135-172-gcc46a1dedc8b - first fail: v4.9.136)Boot Failure Detected:
arm:
multi_v7_defconfig
imx6q-sabrelite: 1 failed lab
Offline Platforms:
arm:
omap2plus_defconfig:
am335x-boneblack: 1 offline lab
sunxi_defconfig:
sun5i-r8-chip: 1 offline lab
tegra_defconfig:
tegra124-jetson-tk1: 1 offline lab
bcm2835_defconfig:
bcm2835-rpi-b: 1 offline lab
sama5_defconfig:
at91-sama5d4_xplained: 1 offline lab
multi_v7_defconfig:
alpine-db: 1 offline lab
am335x-boneblack: 1 offline lab
at91-sama5d4_xplained: 1 offline lab socfpga_cyclone5_de0_sockit: 1 offline lab
sun5i-r8-chip: 1 offline lab
tegra124-jetson-tk1: 1 offline lab
socfpga_defconfig:
socfpga_cyclone5_de0_sockit: 1 offline lab
arm64:
defconfig:
apq8016-sbc: 1 offline lab
juno-r2: 1 offline lab
Conflicting Boot Failures Detected: (These likely are not failures as other labs are reporting PASS. Needs review.)
arm:
multi_v7_defconfig:
meson8b-odroidc1:
lab-baylibre: FAIL
lab-baylibre-seattle: PASS
qemu:
lab-baylibre: FAIL
lab-mhart: PASS
vexpress_defconfig:
qemu:
lab-baylibre: FAIL
lab-mhart: PASS
arm64:
defconfig:
qemu:
lab-baylibre: FAIL
lab-mhart: PASS
meson-gxbb-p200:
lab-baylibre: FAIL
lab-baylibre-seattle: PASSx86:
x86_64_defconfig:
qemu:
lab-baylibre: FAIL
lab-mhart: PASS---
For more info write to <[email protected]>
Quoted 24 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.137 release. There are 141 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 Tue Nov 13 22:15:38 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.9.137-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 4.9.137-rc1
...
Quoted 2 lines
Prarit Bhargava <[email protected]>
cpupower: Fix coredump on VMWare
Greg, maybe...
commit ef8d3a128c1f1de7ffdedb2f14e846e10fd3fec3
Author: Prarit Bhargava <[email protected]> Date: Mon Oct 8 12:06:19 2018
cpupower: Fix coredump on VMWare
[ Upstream commit f69ffc5d3db8f1f03fd6d1df5930f9a1fbd787b6 ]
should be dropped from v4.9 (and v4.4) since it causes:
$ make V=1 -C tools/power/cpupower all
gcc -fPIC -DVERSION=\"4.9.136.142.g36c7703\" -DPACKAGE=\"cpupower\" -DPACKAGE_BUGREPORT=\"[email protected]\" -D_GNU_SOURCE -pipe -DNLS -Wall -Wchar-subscripts -Wpointer-arith -Wsign-compare -Wno-pointer-sign -Wdeclaration-after-statement -Wshadow -O1 -g -DDEBUG -I./lib -I ./utils -o utils/helpers/amd.o -c utils/helpers/amd.c utils/helpers/amd.c: In function ‘decode_pstates’:utils/helpers/amd.c:106:39: error: ‘union msr_pstate’ has no member named ‘fam17h_bits’
if ((cpu_family == 0x17) && (!pstate.fam17h_bits.en))
Due to nonexistent CPU (flag) support.
Replied to Sasha on specific commits for both, v4.4 and v4.9.
Thanks!
Signature · 2 lines
Rafael D. Tinoco Linaro Kernel Validation
Greg Kroah-Hartman
maintainerQuoted 53 lines · Rafael David Tinoco
Quoted 24 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.137 release. There are 141 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 Tue Nov 13 22:15:38 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.9.137-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 4.9.137-rc1...
Quoted 2 lines
Prarit Bhargava <[email protected]>
cpupower: Fix coredump on VMWareGreg, maybe...
commit
ef8d3a128c1f1de7ffdedb2f14e846e10fd3fec3Author: Prarit Bhargava <[email protected]> Date: Mon Oct 8 12:06:19 2018cpupower: Fix coredump on VMWare
[ Upstream commit
f69ffc5d3db8f1f03fd6d1df5930f9a1fbd787b6]should be dropped from v4.9 (and v4.4) since it causes:
$ make V=1 -C tools/power/cpupower allgcc -fPIC -DVERSION=\"4.9.136.142.g36c7703\" -DPACKAGE=\"cpupower\"
(quoted diff) +0
-3-DPACKAGE_BUGREPORT=\"[email protected]\" -D_GNU_SOURCE -pipe -DNLS -Wall -Wchar-subscripts -Wpointer-arith -Wsign-compare -Wno-pointer-sign -Wdeclaration-after-statement -Wshadow -O1 -g -DDEBUG -I./lib -I ./utils -o
utils/helpers/amd.o-cutils/helpers/amd.cutils/helpers/amd.c: In function ‘decode_pstates’:utils/helpers/amd.c:106:39: error: ‘union msr_pstate’ has no member named ‘fam17h_bits’
if ((cpu_family==0x17) && (!pstate.fam17h_bits.en))
Quoted 3 lines
Due to nonexistent CPU (flag) support.
Replied to Sasha on specific commits for both, v4.4 and v4.9.
Now dropped from both queues.
thanks,
greg k-h
Quoted 55 lines · Greg Kroah-Hartman
Quoted 53 lines · Rafael David Tinoco
Quoted 24 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.137 release. There are 141 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 Tue Nov 13 22:15:38 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.9.137-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 4.9.137-rc1...
Quoted 2 lines
Prarit Bhargava <[email protected]>
cpupower: Fix coredump on VMWareGreg, maybe...
commit
ef8d3a128c1f1de7ffdedb2f14e846e10fd3fec3Author: Prarit Bhargava <[email protected]> Date: Mon Oct 8 12:06:19 2018cpupower: Fix coredump on VMWare
[ Upstream commit
f69ffc5d3db8f1f03fd6d1df5930f9a1fbd787b6]should be dropped from v4.9 (and v4.4) since it causes:
$ make V=1 -C tools/power/cpupower allgcc -fPIC -DVERSION=\"4.9.136.142.g36c7703\" -DPACKAGE=\"cpupower\"
(quoted diff) +0
-3-DPACKAGE_BUGREPORT=\"[email protected]\" -D_GNU_SOURCE -pipe -DNLS -Wall -Wchar-subscripts -Wpointer-arith -Wsign-compare -Wno-pointer-sign -Wdeclaration-after-statement -Wshadow -O1 -g -DDEBUG -I./lib -I ./utils -o
utils/helpers/amd.o-cutils/helpers/amd.cutils/helpers/amd.c: In function ‘decode_pstates’:utils/helpers/amd.c:106:39: error: ‘union msr_pstate’ has no member named ‘fam17h_bits’
if ((cpu_family==0x17) && (!pstate.fam17h_bits.en))
Quoted 5 lines
Quoted 3 lines
Due to nonexistent CPU (flag) support.
Replied to Sasha on specific commits for both, v4.4 and v4.9.
Now dropped from both queues.
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Summary
------------------------------------------------------------------------
kernel: 4.9.137-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.9.y
git commit: cee1cbef71e8a5ebf74ae0e7d3858739df82a4db
git describe: v4.9.136-142-gcee1cbef71e8
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.9-oe/build/v4.9.136-142-gcee1cbef71e8
No regressions (compared to build v4.9.136)
No fixes (compared to build v4.9.136)
Ran 21202 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c - arm64
- hi6220-hikey - arm64
- i386
- juno-r2 - arm64
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15 - arm
- x86_64
Test Suites
-----------
* boot
* kselftest
* libhugetlbfs
* ltp-containers-tests
* ltp-cve-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-timers-tests
* ltp-cap_bounds-tests
* ltp-open-posix-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-none
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Quoted 4 lines
thanks,
greg k-h
Greg Kroah-Hartman
maintainerQuoted 57 lines · Naresh Kamboju
Quoted 55 lines · Greg Kroah-Hartman
Quoted 53 lines · Rafael David Tinoco
Quoted 24 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.137 release. There are 141 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 Tue Nov 13 22:15:38 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.9.137-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 4.9.137-rc1...
Quoted 2 lines
Prarit Bhargava <[email protected]>
cpupower: Fix coredump on VMWareGreg, maybe...
commit
ef8d3a128c1f1de7ffdedb2f14e846e10fd3fec3Author: Prarit Bhargava <[email protected]> Date: Mon Oct 8 12:06:19 2018cpupower: Fix coredump on VMWare
[ Upstream commit
f69ffc5d3db8f1f03fd6d1df5930f9a1fbd787b6]should be dropped from v4.9 (and v4.4) since it causes:
$ make V=1 -C tools/power/cpupower allgcc -fPIC -DVERSION=\"4.9.136.142.g36c7703\" -DPACKAGE=\"cpupower\"
(quoted diff) +0
-3-DPACKAGE_BUGREPORT=\"[email protected]\" -D_GNU_SOURCE -pipe -DNLS -Wall -Wchar-subscripts -Wpointer-arith -Wsign-compare -Wno-pointer-sign -Wdeclaration-after-statement -Wshadow -O1 -g -DDEBUG -I./lib -I ./utils -o
utils/helpers/amd.o-cutils/helpers/amd.cutils/helpers/amd.c: In function ‘decode_pstates’:utils/helpers/amd.c:106:39: error: ‘union msr_pstate’ has no member named ‘fam17h_bits’
if ((cpu_family==0x17) && (!pstate.fam17h_bits.en))
Quoted 8 lines
Quoted 5 lines
Quoted 3 lines
Due to nonexistent CPU (flag) support.
Replied to Sasha on specific commits for both, v4.4 and v4.9.
Now dropped from both queues.
Results from Linaro’s test farm.
No regressions on arm64, arm,x86_64, and i386.
Great, thanks for letting me know.
greg k-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.137 release. There are 141 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 Tue Nov 13 22:15:38 UTC 2018. Anything received after that time might be too late.
Build results:
total: 150 pass: 150 fail: 0 Qemu test results: total: 283 pass: 283 fail: 0
Details are available at https://kerneltests.org/builders/.
Guenter