* [PATCH 6.9 000/197] 6.9.9-rc1 review
@ 2024-07-09 11:07 Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 001/197] selftests/resctrl: Fix non-contiguous CBM for AMD Greg Kroah-Hartman
` (210 more replies)
0 siblings, 211 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, linux-kernel, torvalds, akpm, linux,
shuah, patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie
This is the start of the stable review cycle for the 6.9.9 release.
There are 197 patches in this series, all will be posted as a response
to this one. If anyone has any issues with these being applied, please
let me know.
Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Linux 6.9.9-rc1
Andrii Nakryiko <andrii@kernel.org>
libbpf: don't close(-1) in multi-uprobe feature detector
Damien Le Moal <dlemoal@kernel.org>
null_blk: Do not allow runt zone with zone capacity smaller then zone size
Armin Wolf <W_Armin@gmx.de>
hwmon: (dell-smm) Add Dell G15 5511 to fan control whitelist
Alex Deucher <alexander.deucher@amd.com>
drm/amdgpu: silence UBSAN warning
Takashi Iwai <tiwai@suse.de>
ALSA: ump: Set default protocol when not given explicitly
Witold Sadowski <wsadowski@marvell.com>
spi: cadence: Ensure data lines set to low during dummy-cycle period
Edward Adam Davis <eadavis@qq.com>
nfc/nci: Add the inconsistency check between the input data length and count
Masahiro Yamada <masahiroy@kernel.org>
kbuild: fix short log for AS in link-vmlinux.sh
Sagi Grimberg <sagi@grimberg.me>
nvmet: fix a possible leak when destroy a ctrl during qp establishment
Hannes Reinecke <hare@kernel.org>
block: check for max_hw_sectors underflow
hmtheboy154 <buingoc67@gmail.com>
platform/x86: touchscreen_dmi: Add info for the EZpad 6s Pro
hmtheboy154 <buingoc67@gmail.com>
platform/x86: touchscreen_dmi: Add info for GlobalSpace SolT IVW 11.6" tablet
Jim Wylder <jwylder@google.com>
regmap-i2c: Subtract reg size from max_write
Andrii Nakryiko <andrii@kernel.org>
libbpf: detect broken PID filtering logic for multi-uprobe
Kundan Kumar <kundan.kumar@samsung.com>
nvme: adjust multiples of NVME_CTRL_PAGE_SIZE in offset
Christian Brauner <brauner@kernel.org>
swap: yield device immediately
Matt Jan <zoo868e@gmail.com>
connector: Fix invalid conversion in cn_proc.h
Hawking Zhang <Hawking.Zhang@amd.com>
drm/amdgpu: correct hbm field in boot status
Fedor Pchelkin <pchelkin@ispras.ru>
dma-mapping: benchmark: avoid needless copy_to_user if benchmark fails
Nilay Shroff <nilay@linux.ibm.com>
nvme-multipath: find NUMA path only for online numa-node
Mike Christie <michael.christie@oracle.com>
vhost-scsi: Handle vhost_vq_work_queue failures for events
Jian-Hong Pan <jhp@endlessos.org>
ALSA: hda/realtek: Enable headset mic of JP-IK LEAP W502 with ALC897
Lang Yu <Lang.Yu@amd.com>
drm/amdkfd: Let VRAM allocations go to GTT domain on small APUs
Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3: Mark volume as dirty if xattr is broken
Piotr Wojtaszczyk <piotr.wojtaszczyk@timesys.com>
i2c: pnx: Fix potential deadlock warning from del_timer_sync() call in isr
Pin-yen Lin <treapking@chromium.org>
clk: mediatek: mt8183: Only enable runtime PM on mt8183-mfgcfg
Gabor Juhos <j4g8y7@gmail.com>
clk: qcom: clk-alpha-pll: set ALPHA_EN bit for Stromer Plus PLLs
Luca Weiss <luca.weiss@fairphone.com>
clk: qcom: gcc-sm6350: Fix gpll6* & gpll7 parents
Dragan Simic <dsimic@manjaro.org>
arm64: dts: rockchip: Fix the DCDC_REG2 minimum voltage on Quartz64 Model B
Mickaël Salaün <mic@digikod.net>
selftests/harness: Fix tests timeout and race condition
Stefan Haberland <sth@linux.ibm.com>
s390/dasd: Fix invalid dereferencing of indirect CCW data pointer
Ghadi Elie Rahme <ghadi.rahme@canonical.com>
bnx2x: Fix multiple UBSAN array-index-out-of-bounds
Yijie Yang <quic_yijiyang@quicinc.com>
net: stmmac: dwmac-qcom-ethqos: fix error array size
Christian Brauner <brauner@kernel.org>
fs: don't misleadingly warn during thaw operations
Val Packett <val@packett.cool>
mtd: rawnand: rockchip: ensure NVDDR timings are rejected
Miquel Raynal <miquel.raynal@bootlin.com>
mtd: rawnand: Bypass a couple of sanity checks during NAND identification
Miquel Raynal <miquel.raynal@bootlin.com>
mtd: rawnand: Fix the nand_read_data_op() early check
Miquel Raynal <miquel.raynal@bootlin.com>
mtd: rawnand: Ensure ECC configuration is propagated to upper layers
Jann Horn <jannh@google.com>
filelock: Remove locks reliably when fcntl/close race is detected
Thomas Zimmermann <tzimmermann@suse.de>
firmware: sysfb: Fix reference count of sysfb parent device
Jinglin Wen <jinglin.wen@shingroup.cn>
powerpc/64s: Fix unnecessary copy to 0 when kernel is booted at address 0
Nicholas Piggin <npiggin@gmail.com>
powerpc/pseries: Fix scv instruction crash with kexec
Frank Oltmanns <frank@oltmanns.dev>
clk: sunxi-ng: common: Don't call hw_to_ccu_common on hw without common
Md Sadre Alam <quic_mdalam@quicinc.com>
clk: qcom: gcc-ipq9574: Add BRANCH_HALT_VOTED flag
John Schoenick <johns@valvesoftware.com>
drm: panel-orientation-quirks: Add quirk for Valve Galileo
Alex Deucher <alexander.deucher@amd.com>
drm/amdgpu/atomfirmware: silence UBSAN warning
Ma Ke <make24@iscas.ac.cn>
drm/nouveau: fix null pointer dereference in nouveau_connector_get_modes
Thomas Hellström <thomas.hellstrom@linux.intel.com>
drm/ttm: Always take the bo delayed cleanup path for imported bos
Matthew Auld <matthew.auld@intel.com>
drm/xe: fix error handling in xe_migrate_update_pgtables
Jan Kara <jack@suse.cz>
Revert "mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again"
Jan Kara <jack@suse.cz>
fsnotify: Do not generate events for O_PATH file descriptors
Jimmy Assarsson <extja@kvaser.com>
can: kvaser_usb: Explicitly initialize family in leafimx driver_info struct
Zijun Hu <quic_zijuhu@quicinc.com>
Bluetooth: qca: Fix BT enable failure again for QCA6390 after warm reboot
Sven Peter <sven@svenpeter.dev>
Bluetooth: Add quirk to ignore reserved PHY bits in LE Extended Adv Report
Hector Martin <marcan@marcan.st>
Bluetooth: hci_bcm4377: Fix msgid release
Nathan Chancellor <nathan@kernel.org>
scsi: mpi3mr: Use proper format specifier in mpi3mr_sas_port_add()
Nathan Chancellor <nathan@kernel.org>
f2fs: Add inline to f2fs_build_fault_attr() stub
Boris Burkov <boris@bur.io>
btrfs: fix folio refcount in __alloc_dummy_extent_buffer()
Naohiro Aota <naohiro.aota@wdc.com>
btrfs: fix adding block group to a reclaim list and the unused list during reclaim
Naohiro Aota <naohiro.aota@wdc.com>
btrfs: zoned: fix calc_available_free_space() for zoned mode
Jan Kara <jack@suse.cz>
mm: avoid overflows in dirty throttling logic
Jinliang Zheng <alexjlzheng@tencent.com>
mm: optimize the redundant loop of mm_update_owner_next()
Ryusuke Konishi <konishi.ryusuke@gmail.com>
nilfs2: fix incorrect inode allocation from reserved inodes
Ryusuke Konishi <konishi.ryusuke@gmail.com>
nilfs2: add missing check for inode numbers on directory entries
Ryusuke Konishi <konishi.ryusuke@gmail.com>
nilfs2: fix inode number range checks
Sasha Neftin <sasha.neftin@intel.com>
Revert "igc: fix a log entry using uninitialized netdev"
Armin Wolf <W_Armin@gmx.de>
platform/x86: toshiba_acpi: Fix quickstart quirk handling
Dmitry Torokhov <dmitry.torokhov@gmail.com>
gpiolib: of: add polarity quirk for TSC2005
Pavan Chebbi <pavan.chebbi@broadcom.com>
bnxt_en: Fix the resource check condition for RSS contexts
Aleksandr Mishin <amishin@t-argos.ru>
mlxsw: core_linecards: Fix double memory deallocation in case of invalid INI file
Shigeru Yoshida <syoshida@redhat.com>
inet_diag: Initialize pad field in struct inet_diag_req_v2
Kuniyuki Iwashima <kuniyu@amazon.com>
tcp: Don't flag tcp_sk(sk)->rx_opt.saw_unknown for TCP AO.
Matt Roper <matthew.d.roper@intel.com>
drm/xe/mcr: Avoid clobbering DSS steering
Zijian Zhang <zijianzhang@bytedance.com>
selftests: make order checking verbose in msg_zerocopy selftest
Zijian Zhang <zijianzhang@bytedance.com>
selftests: fix OOM in msg_zerocopy selftest
Petr Oros <poros@redhat.com>
ice: use proper macro for testing bit
Jacob Keller <jacob.e.keller@intel.com>
ice: Reject pin requests with unsupported flags
Jacob Keller <jacob.e.keller@intel.com>
ice: Don't process extts if PTP is disabled
Milena Olech <milena.olech@intel.com>
ice: Fix improper extts handling
Sam Sun <samsun1006219@gmail.com>
bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set()
Radu Rendec <rrendec@redhat.com>
net: rswitch: Avoid use-after-free in rswitch_poll()
Florian Westphal <fw@strlen.de>
netfilter: nf_tables: unconditionally flush pending work before notifier
Song Shuai <songshuaishuai@tinylab.org>
riscv: kexec: Avoid deadlock in kexec crash path
Jozef Hopko <jozef.hopko@altana.com>
wifi: wilc1000: fix ies_len type in connect path
Shiji Yang <yangshiji66@outlook.com>
gpio: mmio: do not calculate bgpio_bits via "ngpios"
Eric Farman <farman@linux.ibm.com>
s390/vfio_ccw: Fix target addresses of TIC CCWs
Furong Xu <0x1207@gmail.com>
net: stmmac: enable HW-accelerated VLAN stripping for gmac4 only
Thomas Huth <thuth@redhat.com>
drm/fbdev-generic: Fix framebuffer on big endian devices
Dave Jiang <dave.jiang@intel.com>
net: ntb_netdev: Move ntb_netdev_rx_handler() to call netif_rx() from __netif_rx()
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
net: phy: aquantia: add missing include guards
Qu Wenruo <wqu@suse.com>
btrfs: always do the basic checks for btrfs_qgroup_inherit structure
Jiawen Wu <jiawenwu@trustnetic.com>
net: txgbe: free isb resources at the right time
Jiawen Wu <jiawenwu@trustnetic.com>
net: txgbe: add extra handle for MSI/INTx into thread irq handle
Jiawen Wu <jiawenwu@trustnetic.com>
net: txgbe: remove separate irq request for MSI and INTx
Jiawen Wu <jiawenwu@trustnetic.com>
net: txgbe: initialize num_q_vectors for MSI/INTx interrupts
Sagi Grimberg <sagi@grimberg.me>
net: allow skb_datagram_iter to be called from any context
Dmitry Torokhov <dmitry.torokhov@gmail.com>
gpiolib: of: fix lookup quirk for MIPS Lantiq
Dima Ruinskiy <dima.ruinskiy@intel.com>
e1000e: Fix S0ix residency on corporate systems
Christian Borntraeger <borntraeger@linux.ibm.com>
KVM: s390: fix LPSWEY handling
Jakub Kicinski <kuba@kernel.org>
tcp_metrics: validate source addr length
Pavel Skripkin <paskripkin@gmail.com>
bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX
Iulia Tanasescu <iulia.tanasescu@nxp.com>
Bluetooth: ISO: Check socket flag instead of hcon
Edward Adam Davis <eadavis@qq.com>
Bluetooth: Ignore too large handle values in BIG
Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Bluetooth: hci_event: Fix setting of unicast qos interval
Leon Romanovsky <leon@kernel.org>
net/mlx5e: Approximate IPsec per-SA payload data bytes count
Leon Romanovsky <leon@kernel.org>
net/mlx5e: Present succeeded IPsec SA bytes and packet
Jianbo Liu <jianbol@nvidia.com>
net/mlx5e: Add mqprio_rl cleanup and free in mlx5e_priv_cleanup()
Chris Mi <cmi@nvidia.com>
net/mlx5: E-switch, Create ingress ACL when needed
Neal Cardwell <ncardwell@google.com>
UPSTREAM: tcp: fix DSACK undo in fast recovery to call tcp_try_to_open()
Johannes Berg <johannes.berg@intel.com>
wifi: mac80211: fix BSS_CHANGED_UNSOL_BCAST_PROBE_RESP
Marek Vasut <marex@denx.de>
net: phy: phy_device: Fix PHY LED blinking code comment
Eric Dumazet <edumazet@google.com>
wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values
Dmitry Antipov <dmantipov@yandex.ru>
mac802154: fix time calculation in ieee802154_configure_durations()
Li Zhang <zhanglikernel@gmail.com>
virtio-pci: Check if is_avq is NULL
Mike Christie <michael.christie@oracle.com>
vhost_task: Handle SIGKILL by flushing work and exiting
Mike Christie <michael.christie@oracle.com>
vhost: Release worker mutex during flushes
Mike Christie <michael.christie@oracle.com>
vhost: Use virtqueue mutex for swapping worker
Patryk Wlazlyn <patryk.wlazlyn@linux.intel.com>
tools/power turbostat: Avoid possible memory corruption due to sparse topology IDs
Len Brown <len.brown@intel.com>
tools/power turbostat: Remember global max_die_id
Justin Stitt <justinstitt@google.com>
cdrom: rearrange last_media_change check to avoid unintentional overflow
Lu Yao <yaolu@kylinos.cn>
btrfs: scrub: initialize ret in scrub_simple_mirror() to fix compilation warning
Holger Dengler <dengler@linux.ibm.com>
s390/pkey: Wipe copies of protected- and secure-keys
Holger Dengler <dengler@linux.ibm.com>
s390/pkey: Wipe copies of clear-key structures on failure
Holger Dengler <dengler@linux.ibm.com>
s390/pkey: Wipe sensitive data on failure
Jules Irenge <jbi.octave@gmail.com>
s390/pkey: Use kfree_sensitive() to fix Coccinelle warnings
Sven Schnelle <svens@linux.ibm.com>
s390: Mark psw in __load_psw_mask() as __unitialized
Wang Yong <wang.yong12@zte.com.cn>
jffs2: Fix potential illegal address access in jffs2_free_inode
Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
serial: imx: Raise TX trigger level to 8
Tomas Henzl <thenzl@redhat.com>
scsi: mpi3mr: Sanitise num_phys
Chao Yu <chao@kernel.org>
f2fs: check validation of fault attrs in f2fs_build_fault_attr()
Jose E. Marchesi <jose.marchesi@oracle.com>
bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD
Corinna Vinschen <vinschen@redhat.com>
igc: fix a log entry using uninitialized netdev
John Hubbard <jhubbard@nvidia.com>
selftests/net: fix uninitialized variables
Greg Kurz <groug@kaod.org>
powerpc/xmon: Check cpu id in commands "c#", "dp#" and "dx#"
Mickaël Salaün <mic@digikod.net>
kunit: Handle test faults
Mickaël Salaün <mic@digikod.net>
kunit: Fix timeout message
Mike Marshall <hubcap@omnibond.com>
orangefs: fix out-of-bounds fsid access
Michael Ellerman <mpe@ellerman.id.au>
powerpc/64: Set _IO_BASE to POISON_POINTER_DELTA not 0 for CONFIG_PCI=n
Heiner Kallweit <hkallweit1@gmail.com>
i2c: i801: Annotate apanel_addr as __ro_after_init
Shailend Chand <shailend@google.com>
gve: Account for stopped queues when reading NIC stats
Benjamin Gray <bgray@linux.ibm.com>
powerpc/dexcr: Track the DEXCR per-process
Wenkai Lin <linwenkai6@hisilicon.com>
crypto: hisilicon/sec2 - fix for register offset
Ricardo Ribalda <ribalda@chromium.org>
media: dvb-frontends: tda10048: Fix integer overflow
Ricardo Ribalda <ribalda@chromium.org>
media: tc358746: Use the correct div_ function
Ricardo Ribalda <ribalda@chromium.org>
media: i2c: st-mipid02: Use the correct div function
Ricardo Ribalda <ribalda@chromium.org>
media: s2255: Use refcount_t instead of atomic_t for num_channels
Ricardo Ribalda <ribalda@chromium.org>
media: dvb-frontends: tda18271c2dd: Remove casting during div
Simon Horman <horms@kernel.org>
net: dsa: mv88e6xxx: Correct check for empty list
Julien Panis <jpanis@baylibre.com>
thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data
StanleyYP Wang <StanleyYP.Wang@mediatek.com>
wifi: mt76: mt7996: add sanity checks for background radar trigger
Felix Fietkau <nbd@nbd.name>
wifi: mt76: replace skb_put with skb_put_zero
Niklas Neronin <niklas.neronin@linux.intel.com>
usb: xhci: prevent potential failure in handle_tx_event() for Transfer events without TRB
Erick Archer <erick.archer@outlook.com>
Input: ff-core - prefer struct_size over open coded arithmetic
Kees Cook <keescook@chromium.org>
kunit/fortify: Do not spam logs with fortify WARNs
Jean Delvare <jdelvare@suse.de>
firmware: dmi: Stop decoding on broken entry
Erick Archer <erick.archer@outlook.com>
sctp: prefer struct_size over open coded arithmetic
Mauro Carvalho Chehab <mchehab@kernel.org>
media: dw2102: fix a potential buffer overflow
Samuel Holland <samuel.holland@sifive.com>
riscv: Apply SiFive CIP-1200 workaround to single-ASID sfence.vma
Michael Bunk <micha@freedict.org>
media: dw2102: Don't translate i2c read into write
Jesse Zhang <jesse.zhang@amd.com>
drm/amdgpu: fix the warning about the expression (int)size - len
Tim Huang <Tim.Huang@amd.com>
drm/amdgpu: fix uninitialized scalar variable warning
Alex Hung <alex.hung@amd.com>
drm/amd/display: Fix uninitialized variables in DM
Alex Hung <alex.hung@amd.com>
drm/amd/display: ASSERT when failing to find index by plane/stream id
Alex Hung <alex.hung@amd.com>
drm/amd/display: Do not return negative stream id for array
Wenjing Liu <wenjing.liu@amd.com>
drm/amd/display: update pipe topology log to support subvp
Hersen Wu <hersenxs.wu@amd.com>
drm/amd/display: Fix overlapping copy within dml_core_mode_programming
Alex Hung <alex.hung@amd.com>
drm/amd/display: Skip finding free audio for unknown engine_id
Alex Hung <alex.hung@amd.com>
drm/amd/display: Check pipe offset before setting vblank
Alex Hung <alex.hung@amd.com>
drm/amd/display: Check index msg_id before read or write
Hersen Wu <hersenxs.wu@amd.com>
drm/amd/display: Add NULL pointer check for kzalloc
Bob Zhou <bob.zhou@amd.com>
drm/amdgpu: fix double free err_addr pointer warnings
Ma Jun <Jun.Ma2@amd.com>
drm/amdgpu: Initialize timestamp for some legacy SOCs
Jesse Zhang <jesse.zhang@amd.com>
drm/amdgpu: Using uninitialized value *size when calling amdgpu_vce_cs_reloc
Ma Jun <Jun.Ma2@amd.com>
drm/amdgpu: Fix uninitialized variable warnings
Fei Shao <fshao@chromium.org>
media: mediatek: vcodec: Only free buffer VA that is not NULL
Hailey Mothershead <hailmo@amazon.com>
crypto: aead,cipher - zeroize key buffer after use
Atish Patra <atishp@rivosinc.com>
RISC-V: KVM: Fix the initial sample period value
Eduard Zingerman <eddyz87@gmail.com>
selftests/bpf: dummy_st_ops should reject 0 for non-nullable params
Eduard Zingerman <eddyz87@gmail.com>
bpf: check bpf_dummy_struct_ops program params for test runs
Eduard Zingerman <eddyz87@gmail.com>
selftests/bpf: do not pass NULL for non-nullable params in dummy_st_ops
Eduard Zingerman <eddyz87@gmail.com>
selftests/bpf: adjust dummy_st_ops_success to detect additional error
Eduard Zingerman <eddyz87@gmail.com>
bpf: mark bpf_dummy_struct_ops.test_1 parameter as nullable
Guanrui Huang <guanrui.huang@linux.alibaba.com>
irqchip/gic-v3-its: Remove BUG_ON in its_vpe_irq_domain_alloc
John Meneghini <jmeneghi@redhat.com>
scsi: qedf: Make qedf_execute_tmf() non-preemptible
Michael Guralnik <michaelgur@nvidia.com>
IB/core: Implement a limit on UMAD receive List
Rodrigo Vivi <rodrigo.vivi@intel.com>
drm/xe: Add outer runtime_pm protection to xe_live_ktest@xe_dma_buf
Zong-Zhe Yang <kevin_yang@realtek.com>
wifi: rtw89: fw: scan offload prohibit all 6 GHz channel if no 6 GHz sband
Breno Leitao <leitao@debian.org>
net: dql: Avoid calling BUG() when WARN() is enough
Ricardo Ribalda <ribalda@chromium.org>
media: dvb-usb: dib0700_devices: Add missing release_firmware()
Ricardo Ribalda <ribalda@chromium.org>
media: dvb: as102-fe: Fix as10x_register_addr packing
Mahesh Salgaonkar <mahesh@linux.ibm.com>
powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt.
Erico Nunes <nunes.erico@gmail.com>
drm/lima: fix shared irq handling on driver remove
Chenghai Huang <huangchenghai2@huawei.com>
crypto: hisilicon/debugfs - Fix debugfs uninit process issue
George Stark <gnstark@salutedevices.com>
leds: an30259a: Use devm_mutex_init() for mutex initialization
George Stark <gnstark@salutedevices.com>
leds: mlxreg: Use devm_mutex_init() for mutex initialization
George Stark <gnstark@salutedevices.com>
locking/mutex: Introduce devm_mutex_init()
Babu Moger <babu.moger@amd.com>
selftests/resctrl: Fix non-contiguous CBM for AMD
-------------
Diffstat:
Makefile | 4 +-
arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts | 2 +-
arch/powerpc/include/asm/interrupt.h | 10 ++
arch/powerpc/include/asm/io.h | 2 +-
arch/powerpc/include/asm/percpu.h | 10 ++
arch/powerpc/include/asm/processor.h | 1 +
arch/powerpc/kernel/head_64.S | 5 +-
arch/powerpc/kernel/process.c | 10 ++
arch/powerpc/kernel/ptrace/ptrace-view.c | 7 +-
arch/powerpc/kernel/setup_64.c | 2 +
arch/powerpc/kexec/core_64.c | 11 ++
arch/powerpc/platforms/pseries/kexec.c | 8 --
arch/powerpc/platforms/pseries/pseries.h | 1 -
arch/powerpc/platforms/pseries/setup.c | 1 -
arch/powerpc/xmon/xmon.c | 6 +-
arch/riscv/include/asm/errata_list.h | 12 +-
arch/riscv/include/asm/tlbflush.h | 19 ++-
arch/riscv/kernel/machine_kexec.c | 10 +-
arch/riscv/kvm/vcpu_pmu.c | 2 +-
arch/riscv/mm/tlbflush.c | 23 ----
arch/s390/include/asm/kvm_host.h | 1 +
arch/s390/include/asm/processor.h | 2 +-
arch/s390/kvm/kvm-s390.c | 1 +
arch/s390/kvm/kvm-s390.h | 15 +++
arch/s390/kvm/priv.c | 32 +++++
block/blk-settings.c | 8 +-
crypto/aead.c | 3 +-
crypto/cipher.c | 3 +-
drivers/base/regmap/regmap-i2c.c | 3 +-
drivers/block/null_blk/zoned.c | 11 ++
drivers/bluetooth/hci_bcm4377.c | 10 +-
drivers/bluetooth/hci_qca.c | 18 ++-
drivers/cdrom/cdrom.c | 2 +-
drivers/clk/mediatek/clk-mt8183-mfgcfg.c | 1 +
drivers/clk/mediatek/clk-mtk.c | 24 ++--
drivers/clk/mediatek/clk-mtk.h | 2 +
drivers/clk/qcom/clk-alpha-pll.c | 3 +
drivers/clk/qcom/gcc-ipq9574.c | 10 +-
drivers/clk/qcom/gcc-sm6350.c | 10 +-
drivers/clk/sunxi-ng/ccu_common.c | 18 ++-
drivers/crypto/hisilicon/debugfs.c | 21 +++-
drivers/crypto/hisilicon/sec2/sec_main.c | 2 +-
drivers/firmware/dmi_scan.c | 11 ++
drivers/firmware/sysfb.c | 12 +-
drivers/gpio/gpio-mmio.c | 2 -
drivers/gpio/gpiolib-of.c | 22 +++-
drivers/gpu/drm/amd/amdgpu/aldebaran.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 5 +
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 20 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 5 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 3 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 8 ++
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 3 +-
drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c | 2 +-
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 2 +-
drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 6 +-
drivers/gpu/drm/amd/amdkfd/kfd_svm.h | 3 +-
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 +-
.../drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 4 +-
.../amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c | 8 ++
.../amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c | 8 ++
drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 106 ++++++++++++-----
.../drm/amd/display/dc/dml2/display_mode_core.c | 4 +-
.../amd/display/dc/dml2/dml2_dc_resource_mgmt.c | 6 +-
.../amd/display/dc/irq/dce110/irq_service_dce110.c | 8 +-
.../amd/display/dc/resource/dcn30/dcn30_resource.c | 3 +
.../amd/display/dc/resource/dcn31/dcn31_resource.c | 5 +
.../display/dc/resource/dcn314/dcn314_resource.c | 5 +
.../display/dc/resource/dcn315/dcn315_resource.c | 2 +
.../display/dc/resource/dcn316/dcn316_resource.c | 2 +
.../amd/display/dc/resource/dcn32/dcn32_resource.c | 5 +
.../display/dc/resource/dcn321/dcn321_resource.c | 2 +
.../amd/display/dc/resource/dcn35/dcn35_resource.c | 2 +
.../display/dc/resource/dcn351/dcn351_resource.c | 2 +
.../gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c | 8 ++
drivers/gpu/drm/amd/include/atomfirmware.h | 4 +-
drivers/gpu/drm/drm_fbdev_generic.c | 3 +-
drivers/gpu/drm/drm_panel_orientation_quirks.c | 7 ++
drivers/gpu/drm/lima/lima_gp.c | 2 +
drivers/gpu/drm/lima/lima_mmu.c | 5 +
drivers/gpu/drm/lima/lima_pp.c | 4 +
drivers/gpu/drm/nouveau/nouveau_connector.c | 3 +
drivers/gpu/drm/ttm/ttm_bo.c | 1 +
drivers/gpu/drm/xe/tests/xe_dma_buf.c | 3 +
drivers/gpu/drm/xe/xe_gt_mcr.c | 6 +-
drivers/gpu/drm/xe/xe_migrate.c | 8 +-
drivers/hwmon/dell-smm-hwmon.c | 8 ++
drivers/i2c/busses/i2c-i801.c | 2 +-
drivers/i2c/busses/i2c-pnx.c | 48 ++------
drivers/infiniband/core/user_mad.c | 21 +++-
drivers/input/ff-core.c | 7 +-
drivers/irqchip/irq-gic-v3-its.c | 2 -
drivers/leds/leds-an30259a.c | 14 +--
drivers/leds/leds-mlxreg.c | 14 +--
drivers/media/dvb-frontends/as102_fe_types.h | 2 +-
drivers/media/dvb-frontends/tda10048.c | 9 +-
drivers/media/dvb-frontends/tda18271c2dd.c | 4 +-
drivers/media/i2c/st-mipid02.c | 2 +-
drivers/media/i2c/tc358746.c | 3 +-
.../vcodec/decoder/vdec/vdec_av1_req_lat_if.c | 22 ++--
.../mediatek/vcodec/encoder/venc/venc_h264_if.c | 5 +-
drivers/media/usb/dvb-usb/dib0700_devices.c | 18 ++-
drivers/media/usb/dvb-usb/dw2102.c | 120 +++++++++++--------
drivers/media/usb/s2255/s2255drv.c | 20 ++--
drivers/mtd/nand/raw/nand_base.c | 68 ++++++-----
drivers/mtd/nand/raw/rockchip-nand-controller.c | 6 +-
drivers/net/bonding/bond_options.c | 6 +-
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 1 +
drivers/net/dsa/mv88e6xxx/chip.c | 4 +-
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 2 +-
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 +-
drivers/net/ethernet/google/gve/gve_ethtool.c | 41 ++++++-
drivers/net/ethernet/intel/e1000e/netdev.c | 132 ++++++++++-----------
drivers/net/ethernet/intel/ice/ice_hwmon.c | 2 +-
drivers/net/ethernet/intel/ice/ice_ptp.c | 131 +++++++++++++++-----
drivers/net/ethernet/intel/ice/ice_ptp.h | 9 ++
.../ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 46 +++++--
drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 5 +
.../mellanox/mlx5/core/esw/acl/ingress_ofld.c | 37 ++++--
.../net/ethernet/mellanox/mlxsw/core_linecards.c | 1 +
drivers/net/ethernet/renesas/rswitch.c | 4 +-
.../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 2 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 7 +-
drivers/net/ethernet/wangxun/libwx/wx_hw.c | 1 +
drivers/net/ethernet/wangxun/libwx/wx_lib.c | 10 +-
drivers/net/ethernet/wangxun/libwx/wx_type.h | 1 +
drivers/net/ethernet/wangxun/ngbe/ngbe_main.c | 2 +
drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c | 124 ++++++++-----------
drivers/net/ethernet/wangxun/txgbe/txgbe_irq.h | 2 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_main.c | 9 +-
drivers/net/ntb_netdev.c | 2 +-
drivers/net/phy/aquantia/aquantia.h | 5 +
.../net/wireless/mediatek/mt76/mt76_connac_mcu.c | 10 +-
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 2 +-
.../net/wireless/mediatek/mt76/mt7996/debugfs.c | 5 +
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c | 5 +-
drivers/net/wireless/microchip/wilc1000/hif.c | 3 +-
drivers/net/wireless/realtek/rtw89/fw.c | 4 +
drivers/nfc/virtual_ncidev.c | 4 +
drivers/nvme/host/multipath.c | 2 +-
drivers/nvme/host/pci.c | 3 +-
drivers/nvme/target/core.c | 9 ++
drivers/platform/x86/toshiba_acpi.c | 31 +++--
drivers/platform/x86/touchscreen_dmi.c | 36 ++++++
drivers/s390/block/dasd_eckd.c | 4 +-
drivers/s390/block/dasd_fba.c | 2 +-
drivers/s390/cio/vfio_ccw_cp.c | 9 +-
drivers/s390/crypto/pkey_api.c | 109 ++++++++---------
drivers/scsi/mpi3mr/mpi3mr_transport.c | 10 ++
drivers/scsi/qedf/qedf_io.c | 6 +-
drivers/spi/spi-cadence-xspi.c | 20 +++-
drivers/thermal/mediatek/lvts_thermal.c | 2 +
drivers/tty/serial/imx.c | 2 +-
drivers/usb/host/xhci-ring.c | 5 +-
drivers/vhost/scsi.c | 17 ++-
drivers/vhost/vhost.c | 118 ++++++++++++++----
drivers/vhost/vhost.h | 2 +
drivers/virtio/virtio_pci_common.c | 2 +-
fs/btrfs/block-group.c | 13 +-
fs/btrfs/extent_io.c | 2 +-
fs/btrfs/qgroup.c | 10 +-
fs/btrfs/scrub.c | 2 +-
fs/btrfs/space-info.c | 24 +++-
fs/f2fs/f2fs.h | 12 +-
fs/f2fs/super.c | 27 +++--
fs/f2fs/sysfs.c | 14 ++-
fs/jffs2/super.c | 1 +
fs/locks.c | 9 +-
fs/nilfs2/alloc.c | 19 ++-
fs/nilfs2/alloc.h | 4 +-
fs/nilfs2/dat.c | 2 +-
fs/nilfs2/dir.c | 6 +
fs/nilfs2/ifile.c | 7 +-
fs/nilfs2/nilfs.h | 10 +-
fs/nilfs2/the_nilfs.c | 6 +
fs/nilfs2/the_nilfs.h | 2 +-
fs/ntfs3/xattr.c | 5 +-
fs/orangefs/super.c | 3 +-
fs/super.c | 11 +-
include/kunit/try-catch.h | 3 -
include/linux/dynamic_queue_limits.h | 3 +-
include/linux/fsnotify.h | 8 +-
include/linux/mutex.h | 27 +++++
include/linux/phy.h | 2 +-
include/linux/sched/vhost_task.h | 3 +-
include/net/bluetooth/hci.h | 11 ++
include/net/mac80211.h | 2 +-
include/uapi/linux/cn_proc.h | 3 +-
kernel/dma/map_benchmark.c | 3 +
kernel/exit.c | 2 +
kernel/kthread.c | 1 +
kernel/locking/mutex-debug.c | 12 ++
kernel/power/swap.c | 2 +-
kernel/vhost_task.c | 53 ++++++---
lib/fortify_kunit.c | 9 +-
lib/kunit/try-catch.c | 22 ++--
mm/page-writeback.c | 32 ++++-
net/bluetooth/hci_conn.c | 15 ++-
net/bluetooth/hci_event.c | 33 +++++-
net/bluetooth/iso.c | 3 +-
net/bpf/bpf_dummy_struct_ops.c | 55 ++++++++-
net/core/datagram.c | 19 ++-
net/ipv4/inet_diag.c | 2 +
net/ipv4/tcp_input.c | 9 +-
net/ipv4/tcp_metrics.c | 1 +
net/mac802154/main.c | 14 ++-
net/netfilter/nf_tables_api.c | 3 +-
net/sctp/socket.c | 7 +-
net/wireless/nl80211.c | 6 +-
scripts/link-vmlinux.sh | 2 +-
sound/core/ump.c | 8 ++
sound/pci/hda/patch_realtek.c | 9 ++
tools/lib/bpf/bpf_core_read.h | 1 +
tools/lib/bpf/features.c | 32 ++++-
tools/power/x86/turbostat/turbostat.c | 35 ++++--
.../selftests/bpf/prog_tests/dummy_st_ops.c | 34 +++++-
.../selftests/bpf/progs/dummy_st_ops_success.c | 15 ++-
tools/testing/selftests/kselftest_harness.h | 43 ++++---
tools/testing/selftests/net/gro.c | 3 +
tools/testing/selftests/net/ip_local_port_range.c | 2 +-
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 2 +-
tools/testing/selftests/net/msg_zerocopy.c | 14 ++-
tools/testing/selftests/resctrl/cat_test.c | 32 +++--
225 files changed, 2001 insertions(+), 883 deletions(-)
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 001/197] selftests/resctrl: Fix non-contiguous CBM for AMD
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 002/197] locking/mutex: Introduce devm_mutex_init() Greg Kroah-Hartman
` (209 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Babu Moger, Reinette Chatre,
Ilpo Järvinen, Shuah Khan, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Babu Moger <babu.moger@amd.com>
[ Upstream commit 48236960c06d32370bfa6f2cc408e786873262c8 ]
The non-contiguous CBM test fails on AMD with:
Starting L3_NONCONT_CAT test ...
Mounting resctrl to "/sys/fs/resctrl"
CPUID output doesn't match 'sparse_masks' file content!
not ok 5 L3_NONCONT_CAT: test
AMD always supports non-contiguous CBM but does not report it via CPUID.
Fix the non-contiguous CBM test to use CPUID to discover non-contiguous
CBM support only on Intel.
Fixes: ae638551ab64 ("selftests/resctrl: Add non-contiguous CBMs CAT test")
Signed-off-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/resctrl/cat_test.c | 32 +++++++++++++++-------
1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/tools/testing/selftests/resctrl/cat_test.c b/tools/testing/selftests/resctrl/cat_test.c
index 4cb991be8e31b..178a41d4bb1be 100644
--- a/tools/testing/selftests/resctrl/cat_test.c
+++ b/tools/testing/selftests/resctrl/cat_test.c
@@ -294,11 +294,30 @@ static int cat_run_test(const struct resctrl_test *test, const struct user_param
return ret;
}
+static bool arch_supports_noncont_cat(const struct resctrl_test *test)
+{
+ unsigned int eax, ebx, ecx, edx;
+
+ /* AMD always supports non-contiguous CBM. */
+ if (get_vendor() == ARCH_AMD)
+ return true;
+
+ /* Intel support for non-contiguous CBM needs to be discovered. */
+ if (!strcmp(test->resource, "L3"))
+ __cpuid_count(0x10, 1, eax, ebx, ecx, edx);
+ else if (!strcmp(test->resource, "L2"))
+ __cpuid_count(0x10, 2, eax, ebx, ecx, edx);
+ else
+ return false;
+
+ return ((ecx >> 3) & 1);
+}
+
static int noncont_cat_run_test(const struct resctrl_test *test,
const struct user_params *uparams)
{
unsigned long full_cache_mask, cont_mask, noncont_mask;
- unsigned int eax, ebx, ecx, edx, sparse_masks;
+ unsigned int sparse_masks;
int bit_center, ret;
char schemata[64];
@@ -307,15 +326,8 @@ static int noncont_cat_run_test(const struct resctrl_test *test,
if (ret)
return ret;
- if (!strcmp(test->resource, "L3"))
- __cpuid_count(0x10, 1, eax, ebx, ecx, edx);
- else if (!strcmp(test->resource, "L2"))
- __cpuid_count(0x10, 2, eax, ebx, ecx, edx);
- else
- return -EINVAL;
-
- if (sparse_masks != ((ecx >> 3) & 1)) {
- ksft_print_msg("CPUID output doesn't match 'sparse_masks' file content!\n");
+ if (arch_supports_noncont_cat(test) != sparse_masks) {
+ ksft_print_msg("Hardware and kernel differ on non-contiguous CBM support!\n");
return 1;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 002/197] locking/mutex: Introduce devm_mutex_init()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 001/197] selftests/resctrl: Fix non-contiguous CBM for AMD Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 003/197] leds: mlxreg: Use devm_mutex_init() for mutex initialization Greg Kroah-Hartman
` (208 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christophe Leroy, George Stark,
Andy Shevchenko, Marek Behún, Waiman Long, Lee Jones,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: George Stark <gnstark@salutedevices.com>
[ Upstream commit 4cd47222e435dec8e3787614924174f53fcfb5ae ]
Using of devm API leads to a certain order of releasing resources.
So all dependent resources which are not devm-wrapped should be deleted
with respect to devm-release order. Mutex is one of such objects that
often is bound to other resources and has no own devm wrapping.
Since mutex_destroy() actually does nothing in non-debug builds
frequently calling mutex_destroy() is just ignored which is safe for now
but wrong formally and can lead to a problem if mutex_destroy() will be
extended so introduce devm_mutex_init().
Suggested-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: George Stark <gnstark@salutedevices.com>
Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Marek Behún <kabel@kernel.org>
Acked-by: Waiman Long <longman@redhat.com>
Link: https://lore.kernel.org/r/20240411161032.609544-2-gnstark@salutedevices.com
Signed-off-by: Lee Jones <lee@kernel.org>
Stable-dep-of: efc347b9efee ("leds: mlxreg: Use devm_mutex_init() for mutex initialization")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/linux/mutex.h | 27 +++++++++++++++++++++++++++
kernel/locking/mutex-debug.c | 12 ++++++++++++
2 files changed, 39 insertions(+)
diff --git a/include/linux/mutex.h b/include/linux/mutex.h
index 67edc4ca2beeb..a561c629d89f0 100644
--- a/include/linux/mutex.h
+++ b/include/linux/mutex.h
@@ -22,6 +22,8 @@
#include <linux/cleanup.h>
#include <linux/mutex_types.h>
+struct device;
+
#ifdef CONFIG_DEBUG_LOCK_ALLOC
# define __DEP_MAP_MUTEX_INITIALIZER(lockname) \
, .dep_map = { \
@@ -117,6 +119,31 @@ do { \
} while (0)
#endif /* CONFIG_PREEMPT_RT */
+#ifdef CONFIG_DEBUG_MUTEXES
+
+int __devm_mutex_init(struct device *dev, struct mutex *lock);
+
+#else
+
+static inline int __devm_mutex_init(struct device *dev, struct mutex *lock)
+{
+ /*
+ * When CONFIG_DEBUG_MUTEXES is off mutex_destroy() is just a nop so
+ * no really need to register it in the devm subsystem.
+ */
+ return 0;
+}
+
+#endif
+
+#define devm_mutex_init(dev, mutex) \
+({ \
+ typeof(mutex) mutex_ = (mutex); \
+ \
+ mutex_init(mutex_); \
+ __devm_mutex_init(dev, mutex_); \
+})
+
/*
* See kernel/locking/mutex.c for detailed documentation of these APIs.
* Also see Documentation/locking/mutex-design.rst.
diff --git a/kernel/locking/mutex-debug.c b/kernel/locking/mutex-debug.c
index bc8abb8549d20..6e6f6071cfa27 100644
--- a/kernel/locking/mutex-debug.c
+++ b/kernel/locking/mutex-debug.c
@@ -12,6 +12,7 @@
*/
#include <linux/mutex.h>
#include <linux/delay.h>
+#include <linux/device.h>
#include <linux/export.h>
#include <linux/poison.h>
#include <linux/sched.h>
@@ -89,6 +90,17 @@ void debug_mutex_init(struct mutex *lock, const char *name,
lock->magic = lock;
}
+static void devm_mutex_release(void *res)
+{
+ mutex_destroy(res);
+}
+
+int __devm_mutex_init(struct device *dev, struct mutex *lock)
+{
+ return devm_add_action_or_reset(dev, devm_mutex_release, lock);
+}
+EXPORT_SYMBOL_GPL(__devm_mutex_init);
+
/***
* mutex_destroy - mark a mutex unusable
* @lock: the mutex to be destroyed
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 003/197] leds: mlxreg: Use devm_mutex_init() for mutex initialization
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 001/197] selftests/resctrl: Fix non-contiguous CBM for AMD Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 002/197] locking/mutex: Introduce devm_mutex_init() Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 004/197] leds: an30259a: " Greg Kroah-Hartman
` (207 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, George Stark, Andy Shevchenko,
Lee Jones, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: George Stark <gnstark@salutedevices.com>
[ Upstream commit efc347b9efee1c2b081f5281d33be4559fa50a16 ]
In this driver LEDs are registered using devm_led_classdev_register()
so they are automatically unregistered after module's remove() is done.
led_classdev_unregister() calls module's led_set_brightness() to turn off
the LEDs and that callback uses mutex which was destroyed already
in module's remove() so use devm API instead.
Signed-off-by: George Stark <gnstark@salutedevices.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20240411161032.609544-8-gnstark@salutedevices.com
Signed-off-by: Lee Jones <lee@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/leds/leds-mlxreg.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/drivers/leds/leds-mlxreg.c b/drivers/leds/leds-mlxreg.c
index 5595788d98d20..1b70de72376cc 100644
--- a/drivers/leds/leds-mlxreg.c
+++ b/drivers/leds/leds-mlxreg.c
@@ -256,6 +256,7 @@ static int mlxreg_led_probe(struct platform_device *pdev)
{
struct mlxreg_core_platform_data *led_pdata;
struct mlxreg_led_priv_data *priv;
+ int err;
led_pdata = dev_get_platdata(&pdev->dev);
if (!led_pdata) {
@@ -267,26 +268,21 @@ static int mlxreg_led_probe(struct platform_device *pdev)
if (!priv)
return -ENOMEM;
- mutex_init(&priv->access_lock);
+ err = devm_mutex_init(&pdev->dev, &priv->access_lock);
+ if (err)
+ return err;
+
priv->pdev = pdev;
priv->pdata = led_pdata;
return mlxreg_led_config(priv);
}
-static void mlxreg_led_remove(struct platform_device *pdev)
-{
- struct mlxreg_led_priv_data *priv = dev_get_drvdata(&pdev->dev);
-
- mutex_destroy(&priv->access_lock);
-}
-
static struct platform_driver mlxreg_led_driver = {
.driver = {
.name = "leds-mlxreg",
},
.probe = mlxreg_led_probe,
- .remove_new = mlxreg_led_remove,
};
module_platform_driver(mlxreg_led_driver);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 004/197] leds: an30259a: Use devm_mutex_init() for mutex initialization
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (2 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 003/197] leds: mlxreg: Use devm_mutex_init() for mutex initialization Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 005/197] crypto: hisilicon/debugfs - Fix debugfs uninit process issue Greg Kroah-Hartman
` (206 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, George Stark, Andy Shevchenko,
Lee Jones, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: George Stark <gnstark@salutedevices.com>
[ Upstream commit c382e2e3eccb6b7ca8c7aff5092c1668428e7de6 ]
In this driver LEDs are registered using devm_led_classdev_register()
so they are automatically unregistered after module's remove() is done.
led_classdev_unregister() calls module's led_set_brightness() to turn off
the LEDs and that callback uses mutex which was destroyed already
in module's remove() so use devm API instead.
Signed-off-by: George Stark <gnstark@salutedevices.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20240411161032.609544-9-gnstark@salutedevices.com
Signed-off-by: Lee Jones <lee@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/leds/leds-an30259a.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/leds/leds-an30259a.c b/drivers/leds/leds-an30259a.c
index 0216afed3b6e7..decfca447d8a7 100644
--- a/drivers/leds/leds-an30259a.c
+++ b/drivers/leds/leds-an30259a.c
@@ -283,7 +283,10 @@ static int an30259a_probe(struct i2c_client *client)
if (err < 0)
return err;
- mutex_init(&chip->mutex);
+ err = devm_mutex_init(&client->dev, &chip->mutex);
+ if (err)
+ return err;
+
chip->client = client;
i2c_set_clientdata(client, chip);
@@ -317,17 +320,9 @@ static int an30259a_probe(struct i2c_client *client)
return 0;
exit:
- mutex_destroy(&chip->mutex);
return err;
}
-static void an30259a_remove(struct i2c_client *client)
-{
- struct an30259a *chip = i2c_get_clientdata(client);
-
- mutex_destroy(&chip->mutex);
-}
-
static const struct of_device_id an30259a_match_table[] = {
{ .compatible = "panasonic,an30259a", },
{ /* sentinel */ },
@@ -347,7 +342,6 @@ static struct i2c_driver an30259a_driver = {
.of_match_table = an30259a_match_table,
},
.probe = an30259a_probe,
- .remove = an30259a_remove,
.id_table = an30259a_id,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 005/197] crypto: hisilicon/debugfs - Fix debugfs uninit process issue
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (3 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 004/197] leds: an30259a: " Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 006/197] drm/lima: fix shared irq handling on driver remove Greg Kroah-Hartman
` (205 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Chenghai Huang, Herbert Xu,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chenghai Huang <huangchenghai2@huawei.com>
[ Upstream commit 8be0913389718e8d27c4f1d4537b5e1b99ed7739 ]
During the zip probe process, the debugfs failure does not stop
the probe. When debugfs initialization fails, jumping to the
error branch will also release regs, in addition to its own
rollback operation.
As a result, it may be released repeatedly during the regs
uninit process. Therefore, the null check needs to be added to
the regs uninit process.
Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/crypto/hisilicon/debugfs.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/drivers/crypto/hisilicon/debugfs.c b/drivers/crypto/hisilicon/debugfs.c
index cd67fa348ca72..6351a452878dd 100644
--- a/drivers/crypto/hisilicon/debugfs.c
+++ b/drivers/crypto/hisilicon/debugfs.c
@@ -809,8 +809,14 @@ static void dfx_regs_uninit(struct hisi_qm *qm,
{
int i;
+ if (!dregs)
+ return;
+
/* Setting the pointer is NULL to prevent double free */
for (i = 0; i < reg_len; i++) {
+ if (!dregs[i].regs)
+ continue;
+
kfree(dregs[i].regs);
dregs[i].regs = NULL;
}
@@ -860,14 +866,21 @@ static struct dfx_diff_registers *dfx_regs_init(struct hisi_qm *qm,
static int qm_diff_regs_init(struct hisi_qm *qm,
struct dfx_diff_registers *dregs, u32 reg_len)
{
+ int ret;
+
qm->debug.qm_diff_regs = dfx_regs_init(qm, qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
- if (IS_ERR(qm->debug.qm_diff_regs))
- return PTR_ERR(qm->debug.qm_diff_regs);
+ if (IS_ERR(qm->debug.qm_diff_regs)) {
+ ret = PTR_ERR(qm->debug.qm_diff_regs);
+ qm->debug.qm_diff_regs = NULL;
+ return ret;
+ }
qm->debug.acc_diff_regs = dfx_regs_init(qm, dregs, reg_len);
if (IS_ERR(qm->debug.acc_diff_regs)) {
dfx_regs_uninit(qm, qm->debug.qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
- return PTR_ERR(qm->debug.acc_diff_regs);
+ ret = PTR_ERR(qm->debug.acc_diff_regs);
+ qm->debug.acc_diff_regs = NULL;
+ return ret;
}
return 0;
@@ -908,7 +921,9 @@ static int qm_last_regs_init(struct hisi_qm *qm)
static void qm_diff_regs_uninit(struct hisi_qm *qm, u32 reg_len)
{
dfx_regs_uninit(qm, qm->debug.acc_diff_regs, reg_len);
+ qm->debug.acc_diff_regs = NULL;
dfx_regs_uninit(qm, qm->debug.qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
+ qm->debug.qm_diff_regs = NULL;
}
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 006/197] drm/lima: fix shared irq handling on driver remove
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (4 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 005/197] crypto: hisilicon/debugfs - Fix debugfs uninit process issue Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 007/197] powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt Greg Kroah-Hartman
` (204 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Erico Nunes, Qiang Yu, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Erico Nunes <nunes.erico@gmail.com>
[ Upstream commit a6683c690bbfd1f371510cb051e8fa49507f3f5e ]
lima uses a shared interrupt, so the interrupt handlers must be prepared
to be called at any time. At driver removal time, the clocks are
disabled early and the interrupts stay registered until the very end of
the remove process due to the devm usage.
This is potentially a bug as the interrupts access device registers
which assumes clocks are enabled. A crash can be triggered by removing
the driver in a kernel with CONFIG_DEBUG_SHIRQ enabled.
This patch frees the interrupts at each lima device finishing callback
so that the handlers are already unregistered by the time we fully
disable clocks.
Signed-off-by: Erico Nunes <nunes.erico@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240401224329.1228468-2-nunes.erico@gmail.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/lima/lima_gp.c | 2 ++
drivers/gpu/drm/lima/lima_mmu.c | 5 +++++
drivers/gpu/drm/lima/lima_pp.c | 4 ++++
3 files changed, 11 insertions(+)
diff --git a/drivers/gpu/drm/lima/lima_gp.c b/drivers/gpu/drm/lima/lima_gp.c
index e15295071533b..3282997a0358d 100644
--- a/drivers/gpu/drm/lima/lima_gp.c
+++ b/drivers/gpu/drm/lima/lima_gp.c
@@ -345,7 +345,9 @@ int lima_gp_init(struct lima_ip *ip)
void lima_gp_fini(struct lima_ip *ip)
{
+ struct lima_device *dev = ip->dev;
+ devm_free_irq(dev->dev, ip->irq, ip);
}
int lima_gp_pipe_init(struct lima_device *dev)
diff --git a/drivers/gpu/drm/lima/lima_mmu.c b/drivers/gpu/drm/lima/lima_mmu.c
index e18317c5ca8c1..6611e2836bf0d 100644
--- a/drivers/gpu/drm/lima/lima_mmu.c
+++ b/drivers/gpu/drm/lima/lima_mmu.c
@@ -118,7 +118,12 @@ int lima_mmu_init(struct lima_ip *ip)
void lima_mmu_fini(struct lima_ip *ip)
{
+ struct lima_device *dev = ip->dev;
+
+ if (ip->id == lima_ip_ppmmu_bcast)
+ return;
+ devm_free_irq(dev->dev, ip->irq, ip);
}
void lima_mmu_flush_tlb(struct lima_ip *ip)
diff --git a/drivers/gpu/drm/lima/lima_pp.c b/drivers/gpu/drm/lima/lima_pp.c
index a4a2ffe6527c2..eaab4788dff49 100644
--- a/drivers/gpu/drm/lima/lima_pp.c
+++ b/drivers/gpu/drm/lima/lima_pp.c
@@ -286,7 +286,9 @@ int lima_pp_init(struct lima_ip *ip)
void lima_pp_fini(struct lima_ip *ip)
{
+ struct lima_device *dev = ip->dev;
+ devm_free_irq(dev->dev, ip->irq, ip);
}
int lima_pp_bcast_resume(struct lima_ip *ip)
@@ -319,7 +321,9 @@ int lima_pp_bcast_init(struct lima_ip *ip)
void lima_pp_bcast_fini(struct lima_ip *ip)
{
+ struct lima_device *dev = ip->dev;
+ devm_free_irq(dev->dev, ip->irq, ip);
}
static int lima_pp_task_validate(struct lima_sched_pipe *pipe,
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 007/197] powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt.
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (5 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 006/197] drm/lima: fix shared irq handling on driver remove Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 008/197] media: dvb: as102-fe: Fix as10x_register_addr packing Greg Kroah-Hartman
` (203 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christophe Leroy, Shirisha Ganta,
Mahesh Salgaonkar, Michael Ellerman, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mahesh Salgaonkar <mahesh@linux.ibm.com>
[ Upstream commit 0db880fc865ffb522141ced4bfa66c12ab1fbb70 ]
nmi_enter()/nmi_exit() touches per cpu variables which can lead to kernel
crash when invoked during real mode interrupt handling (e.g. early HMI/MCE
interrupt handler) if percpu allocation comes from vmalloc area.
Early HMI/MCE handlers are called through DEFINE_INTERRUPT_HANDLER_NMI()
wrapper which invokes nmi_enter/nmi_exit calls. We don't see any issue when
percpu allocation is from the embedded first chunk. However with
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK enabled there are chances where percpu
allocation can come from the vmalloc area.
With kernel command line "percpu_alloc=page" we can force percpu allocation
to come from vmalloc area and can see kernel crash in machine_check_early:
[ 1.215714] NIP [c000000000e49eb4] rcu_nmi_enter+0x24/0x110
[ 1.215717] LR [c0000000000461a0] machine_check_early+0xf0/0x2c0
[ 1.215719] --- interrupt: 200
[ 1.215720] [c000000fffd73180] [0000000000000000] 0x0 (unreliable)
[ 1.215722] [c000000fffd731b0] [0000000000000000] 0x0
[ 1.215724] [c000000fffd73210] [c000000000008364] machine_check_early_common+0x134/0x1f8
Fix this by avoiding use of nmi_enter()/nmi_exit() in real mode if percpu
first chunk is not embedded.
Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Tested-by: Shirisha Ganta <shirisha@linux.ibm.com>
Signed-off-by: Mahesh Salgaonkar <mahesh@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240410043006.81577-1-mahesh@linux.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/powerpc/include/asm/interrupt.h | 10 ++++++++++
arch/powerpc/include/asm/percpu.h | 10 ++++++++++
arch/powerpc/kernel/setup_64.c | 2 ++
3 files changed, 22 insertions(+)
diff --git a/arch/powerpc/include/asm/interrupt.h b/arch/powerpc/include/asm/interrupt.h
index 7b610864b3645..2d6c886b40f44 100644
--- a/arch/powerpc/include/asm/interrupt.h
+++ b/arch/powerpc/include/asm/interrupt.h
@@ -336,6 +336,14 @@ static inline void interrupt_nmi_enter_prepare(struct pt_regs *regs, struct inte
if (IS_ENABLED(CONFIG_KASAN))
return;
+ /*
+ * Likewise, do not use it in real mode if percpu first chunk is not
+ * embedded. With CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK enabled there
+ * are chances where percpu allocation can come from vmalloc area.
+ */
+ if (percpu_first_chunk_is_paged)
+ return;
+
/* Otherwise, it should be safe to call it */
nmi_enter();
}
@@ -351,6 +359,8 @@ static inline void interrupt_nmi_exit_prepare(struct pt_regs *regs, struct inter
// no nmi_exit for a pseries hash guest taking a real mode exception
} else if (IS_ENABLED(CONFIG_KASAN)) {
// no nmi_exit for KASAN in real mode
+ } else if (percpu_first_chunk_is_paged) {
+ // no nmi_exit if percpu first chunk is not embedded
} else {
nmi_exit();
}
diff --git a/arch/powerpc/include/asm/percpu.h b/arch/powerpc/include/asm/percpu.h
index 8e5b7d0b851c6..634970ce13c6b 100644
--- a/arch/powerpc/include/asm/percpu.h
+++ b/arch/powerpc/include/asm/percpu.h
@@ -15,6 +15,16 @@
#endif /* CONFIG_SMP */
#endif /* __powerpc64__ */
+#if defined(CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK) && defined(CONFIG_SMP)
+#include <linux/jump_label.h>
+DECLARE_STATIC_KEY_FALSE(__percpu_first_chunk_is_paged);
+
+#define percpu_first_chunk_is_paged \
+ (static_key_enabled(&__percpu_first_chunk_is_paged.key))
+#else
+#define percpu_first_chunk_is_paged false
+#endif /* CONFIG_PPC64 && CONFIG_SMP */
+
#include <asm-generic/percpu.h>
#include <asm/paca.h>
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 2f19d5e944852..ae36a129789ff 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -834,6 +834,7 @@ static __init int pcpu_cpu_to_node(int cpu)
unsigned long __per_cpu_offset[NR_CPUS] __read_mostly;
EXPORT_SYMBOL(__per_cpu_offset);
+DEFINE_STATIC_KEY_FALSE(__percpu_first_chunk_is_paged);
void __init setup_per_cpu_areas(void)
{
@@ -876,6 +877,7 @@ void __init setup_per_cpu_areas(void)
if (rc < 0)
panic("cannot initialize percpu area (err=%d)", rc);
+ static_key_enable(&__percpu_first_chunk_is_paged.key);
delta = (unsigned long)pcpu_base_addr - (unsigned long)__per_cpu_start;
for_each_possible_cpu(cpu) {
__per_cpu_offset[cpu] = delta + pcpu_unit_offsets[cpu];
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 008/197] media: dvb: as102-fe: Fix as10x_register_addr packing
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (6 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 007/197] powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 009/197] media: dvb-usb: dib0700_devices: Add missing release_firmware() Greg Kroah-Hartman
` (202 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ricardo Ribalda, Hans Verkuil,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ricardo Ribalda <ribalda@chromium.org>
[ Upstream commit 309422d280748c74f57f471559980268ac27732a ]
This structure is embedded in multiple other structures that are packed,
which conflicts with it being aligned.
drivers/media/usb/as102/as10x_cmd.h:379:30: warning: field reg_addr within 'struct as10x_dump_memory::(unnamed at drivers/media/usb/as102/as10x_cmd.h:373:2)' is less aligned than 'struct as10x_register_addr' and is usually due to 'struct as10x_dump_memory::(unnamed at drivers/media/usb/as102/as10x_cmd.h:373:2)' being packed, which can lead to unaligned accesses [-Wunaligned-access]
Mark it as being packed.
Marking the inner struct as 'packed' does not change the layout, since the
whole struct is already packed, it just silences the clang warning. See
also this llvm discussion:
https://github.com/llvm/llvm-project/issues/55520
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/dvb-frontends/as102_fe_types.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/dvb-frontends/as102_fe_types.h b/drivers/media/dvb-frontends/as102_fe_types.h
index 297f9520ebf9d..8a4e392c88965 100644
--- a/drivers/media/dvb-frontends/as102_fe_types.h
+++ b/drivers/media/dvb-frontends/as102_fe_types.h
@@ -174,6 +174,6 @@ struct as10x_register_addr {
uint32_t addr;
/* register mode access */
uint8_t mode;
-};
+} __packed;
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 009/197] media: dvb-usb: dib0700_devices: Add missing release_firmware()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (7 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 008/197] media: dvb: as102-fe: Fix as10x_register_addr packing Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 010/197] net: dql: Avoid calling BUG() when WARN() is enough Greg Kroah-Hartman
` (201 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ricardo Ribalda, Hans Verkuil,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ricardo Ribalda <ribalda@chromium.org>
[ Upstream commit 4b267c23ee064bd24c6933df0588ad1b6e111145 ]
Add missing release_firmware on the error paths.
drivers/media/usb/dvb-usb/dib0700_devices.c:2415 stk9090m_frontend_attach() warn: 'state->frontend_firmware' from request_firmware() not released on lines: 2415.
drivers/media/usb/dvb-usb/dib0700_devices.c:2497 nim9090md_frontend_attach() warn: 'state->frontend_firmware' from request_firmware() not released on lines: 2489,2497.
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/usb/dvb-usb/dib0700_devices.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c
index 3af594134a6de..6ddc205133939 100644
--- a/drivers/media/usb/dvb-usb/dib0700_devices.c
+++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
@@ -2412,7 +2412,12 @@ static int stk9090m_frontend_attach(struct dvb_usb_adapter *adap)
adap->fe_adap[0].fe = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &stk9090m_config);
- return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
+ if (!adap->fe_adap[0].fe) {
+ release_firmware(state->frontend_firmware);
+ return -ENODEV;
+ }
+
+ return 0;
}
static int dib9090_tuner_attach(struct dvb_usb_adapter *adap)
@@ -2485,8 +2490,10 @@ static int nim9090md_frontend_attach(struct dvb_usb_adapter *adap)
dib9000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x20, 0x80);
adap->fe_adap[0].fe = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &nim9090md_config[0]);
- if (adap->fe_adap[0].fe == NULL)
+ if (!adap->fe_adap[0].fe) {
+ release_firmware(state->frontend_firmware);
return -ENODEV;
+ }
i2c = dib9000_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_GPIO_3_4, 0);
dib9000_i2c_enumeration(i2c, 1, 0x12, 0x82);
@@ -2494,7 +2501,12 @@ static int nim9090md_frontend_attach(struct dvb_usb_adapter *adap)
fe_slave = dvb_attach(dib9000_attach, i2c, 0x82, &nim9090md_config[1]);
dib9000_set_slave_frontend(adap->fe_adap[0].fe, fe_slave);
- return fe_slave == NULL ? -ENODEV : 0;
+ if (!fe_slave) {
+ release_firmware(state->frontend_firmware);
+ return -ENODEV;
+ }
+
+ return 0;
}
static int nim9090md_tuner_attach(struct dvb_usb_adapter *adap)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 010/197] net: dql: Avoid calling BUG() when WARN() is enough
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (8 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 009/197] media: dvb-usb: dib0700_devices: Add missing release_firmware() Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 011/197] wifi: rtw89: fw: scan offload prohibit all 6 GHz channel if no 6 GHz sband Greg Kroah-Hartman
` (200 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Breno Leitao, Jakub Kicinski,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Breno Leitao <leitao@debian.org>
[ Upstream commit 4854b463c4b27c94a7de86d16ad84f235f4c1a72 ]
If the dql_queued() function receives an invalid argument, WARN about it
and continue, instead of crashing the kernel.
This was raised by checkpatch, when I am refactoring this code (see
following patch/commit)
WARNING: Do not crash the kernel unless it is absolutely unavoidable--use WARN_ON_ONCE() plus recovery code (if feasible) instead of BUG() or variants
Signed-off-by: Breno Leitao <leitao@debian.org>
Link: https://lore.kernel.org/r/20240411192241.2498631-2-leitao@debian.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/linux/dynamic_queue_limits.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/linux/dynamic_queue_limits.h b/include/linux/dynamic_queue_limits.h
index 5693a4be0d9a9..ff9c65841ae8d 100644
--- a/include/linux/dynamic_queue_limits.h
+++ b/include/linux/dynamic_queue_limits.h
@@ -91,7 +91,8 @@ static inline void dql_queued(struct dql *dql, unsigned int count)
{
unsigned long map, now, now_hi, i;
- BUG_ON(count > DQL_MAX_OBJECT);
+ if (WARN_ON_ONCE(count > DQL_MAX_OBJECT))
+ return;
dql->last_obj_cnt = count;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 011/197] wifi: rtw89: fw: scan offload prohibit all 6 GHz channel if no 6 GHz sband
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (9 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 010/197] net: dql: Avoid calling BUG() when WARN() is enough Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 012/197] drm/xe: Add outer runtime_pm protection to xe_live_ktest@xe_dma_buf Greg Kroah-Hartman
` (199 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Zong-Zhe Yang, Ping-Ke Shih,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zong-Zhe Yang <kevin_yang@realtek.com>
[ Upstream commit bb38626f3f97e16e6d368a9ff6daf320f3fe31d9 ]
We have some policy via BIOS to block uses of 6 GHz. In this case, 6 GHz
sband will be NULL even if it is WiFi 7 chip. So, add NULL handling here
to avoid crash.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://msgid.link/20240412115729.8316-3-pkshih@realtek.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/wireless/realtek/rtw89/fw.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index 6c75ebbb21caa..ef86389545ffb 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -4646,6 +4646,10 @@ static void rtw89_scan_get_6g_disabled_chan(struct rtw89_dev *rtwdev,
u8 i, idx;
sband = rtwdev->hw->wiphy->bands[NL80211_BAND_6GHZ];
+ if (!sband) {
+ option->prohib_chan = U64_MAX;
+ return;
+ }
for (i = 0; i < sband->n_channels; i++) {
chan = &sband->channels[i];
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 012/197] drm/xe: Add outer runtime_pm protection to xe_live_ktest@xe_dma_buf
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (10 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 011/197] wifi: rtw89: fw: scan offload prohibit all 6 GHz channel if no 6 GHz sband Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 013/197] IB/core: Implement a limit on UMAD receive List Greg Kroah-Hartman
` (198 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Matthew Auld, Francois Dugast,
Matthew Brost, Rodrigo Vivi, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
[ Upstream commit f9116f658a6217b101e3b4e89f845775b6fb05d9 ]
Any kunit doing any memory access should get their own runtime_pm
outer references since they don't use the standard driver API
entries. In special this dma_buf from the same driver.
Found by pre-merge CI on adding WARN calls for unprotected
inner callers:
<6> [318.639739] # xe_dma_buf_kunit: running xe_test_dmabuf_import_same_driver
<4> [318.639957] ------------[ cut here ]------------
<4> [318.639967] xe 0000:4d:00.0: Missing outer runtime PM protection
<4> [318.640049] WARNING: CPU: 117 PID: 3832 at drivers/gpu/drm/xe/xe_pm.c:533 xe_pm_runtime_get_noresume+0x48/0x60 [xe]
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Francois Dugast <francois.dugast@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240417203952.25503-10-rodrigo.vivi@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/xe/tests/xe_dma_buf.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/xe/tests/xe_dma_buf.c b/drivers/gpu/drm/xe/tests/xe_dma_buf.c
index 9f6d571d7fa9c..a3d2dd42adf96 100644
--- a/drivers/gpu/drm/xe/tests/xe_dma_buf.c
+++ b/drivers/gpu/drm/xe/tests/xe_dma_buf.c
@@ -12,6 +12,7 @@
#include "tests/xe_pci_test.h"
#include "xe_pci.h"
+#include "xe_pm.h"
static bool p2p_enabled(struct dma_buf_test_params *params)
{
@@ -259,6 +260,7 @@ static int dma_buf_run_device(struct xe_device *xe)
const struct dma_buf_test_params *params;
struct kunit *test = xe_cur_kunit();
+ xe_pm_runtime_get(xe);
for (params = test_params; params->mem_mask; ++params) {
struct dma_buf_test_params p = *params;
@@ -266,6 +268,7 @@ static int dma_buf_run_device(struct xe_device *xe)
test->priv = &p;
xe_test_dmabuf_import_same_driver(xe);
}
+ xe_pm_runtime_put(xe);
/* A non-zero return would halt iteration over driver devices */
return 0;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 013/197] IB/core: Implement a limit on UMAD receive List
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (11 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 012/197] drm/xe: Add outer runtime_pm protection to xe_live_ktest@xe_dma_buf Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 014/197] scsi: qedf: Make qedf_execute_tmf() non-preemptible Greg Kroah-Hartman
` (197 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Michael Guralnik, Mark Zhang,
Leon Romanovsky, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Guralnik <michaelgur@nvidia.com>
[ Upstream commit ca0b44e20a6f3032224599f02e7c8fb49525c894 ]
The existing behavior of ib_umad, which maintains received MAD
packets in an unbounded list, poses a risk of uncontrolled growth.
As user-space applications extract packets from this list, the rate
of extraction may not match the rate of incoming packets, leading
to potential list overflow.
To address this, we introduce a limit to the size of the list. After
considering typical scenarios, such as OpenSM processing, which can
handle approximately 100k packets per second, and the 1-second retry
timeout for most packets, we set the list size limit to 200k. Packets
received beyond this limit are dropped, assuming they are likely timed
out by the time they are handled by user-space.
Notably, packets queued on the receive list due to reasons like
timed-out sends are preserved even when the list is full.
Signed-off-by: Michael Guralnik <michaelgur@nvidia.com>
Reviewed-by: Mark Zhang <markzhang@nvidia.com>
Link: https://lore.kernel.org/r/7197cb58a7d9e78399008f25036205ceab07fbd5.1713268818.git.leon@kernel.org
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/infiniband/core/user_mad.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c
index f5feca7fa9b9c..2ed749f50a29f 100644
--- a/drivers/infiniband/core/user_mad.c
+++ b/drivers/infiniband/core/user_mad.c
@@ -63,6 +63,8 @@ MODULE_AUTHOR("Roland Dreier");
MODULE_DESCRIPTION("InfiniBand userspace MAD packet access");
MODULE_LICENSE("Dual BSD/GPL");
+#define MAX_UMAD_RECV_LIST_SIZE 200000
+
enum {
IB_UMAD_MAX_PORTS = RDMA_MAX_PORTS,
IB_UMAD_MAX_AGENTS = 32,
@@ -113,6 +115,7 @@ struct ib_umad_file {
struct mutex mutex;
struct ib_umad_port *port;
struct list_head recv_list;
+ atomic_t recv_list_size;
struct list_head send_list;
struct list_head port_list;
spinlock_t send_lock;
@@ -180,24 +183,28 @@ static struct ib_mad_agent *__get_agent(struct ib_umad_file *file, int id)
return file->agents_dead ? NULL : file->agent[id];
}
-static int queue_packet(struct ib_umad_file *file,
- struct ib_mad_agent *agent,
- struct ib_umad_packet *packet)
+static int queue_packet(struct ib_umad_file *file, struct ib_mad_agent *agent,
+ struct ib_umad_packet *packet, bool is_recv_mad)
{
int ret = 1;
mutex_lock(&file->mutex);
+ if (is_recv_mad &&
+ atomic_read(&file->recv_list_size) > MAX_UMAD_RECV_LIST_SIZE)
+ goto unlock;
+
for (packet->mad.hdr.id = 0;
packet->mad.hdr.id < IB_UMAD_MAX_AGENTS;
packet->mad.hdr.id++)
if (agent == __get_agent(file, packet->mad.hdr.id)) {
list_add_tail(&packet->list, &file->recv_list);
+ atomic_inc(&file->recv_list_size);
wake_up_interruptible(&file->recv_wait);
ret = 0;
break;
}
-
+unlock:
mutex_unlock(&file->mutex);
return ret;
@@ -224,7 +231,7 @@ static void send_handler(struct ib_mad_agent *agent,
if (send_wc->status == IB_WC_RESP_TIMEOUT_ERR) {
packet->length = IB_MGMT_MAD_HDR;
packet->mad.hdr.status = ETIMEDOUT;
- if (!queue_packet(file, agent, packet))
+ if (!queue_packet(file, agent, packet, false))
return;
}
kfree(packet);
@@ -284,7 +291,7 @@ static void recv_handler(struct ib_mad_agent *agent,
rdma_destroy_ah_attr(&ah_attr);
}
- if (queue_packet(file, agent, packet))
+ if (queue_packet(file, agent, packet, true))
goto err2;
return;
@@ -409,6 +416,7 @@ static ssize_t ib_umad_read(struct file *filp, char __user *buf,
packet = list_entry(file->recv_list.next, struct ib_umad_packet, list);
list_del(&packet->list);
+ atomic_dec(&file->recv_list_size);
mutex_unlock(&file->mutex);
@@ -421,6 +429,7 @@ static ssize_t ib_umad_read(struct file *filp, char __user *buf,
/* Requeue packet */
mutex_lock(&file->mutex);
list_add(&packet->list, &file->recv_list);
+ atomic_inc(&file->recv_list_size);
mutex_unlock(&file->mutex);
} else {
if (packet->recv_wc)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 014/197] scsi: qedf: Make qedf_execute_tmf() non-preemptible
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (12 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 013/197] IB/core: Implement a limit on UMAD receive List Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 015/197] irqchip/gic-v3-its: Remove BUG_ON in its_vpe_irq_domain_alloc Greg Kroah-Hartman
` (196 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Guangwu Zhang, Saurav Kashyap,
Nilesh Javali, John Meneghini, Martin K. Petersen, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Meneghini <jmeneghi@redhat.com>
[ Upstream commit 0d8b637c9c5eeaa1a4e3dfb336f3ff918eb64fec ]
Stop calling smp_processor_id() from preemptible code in
qedf_execute_tmf90. This results in BUG_ON() when running an RT kernel.
[ 659.343280] BUG: using smp_processor_id() in preemptible [00000000] code: sg_reset/3646
[ 659.343282] caller is qedf_execute_tmf+0x8b/0x360 [qedf]
Tested-by: Guangwu Zhang <guazhang@redhat.com>
Cc: Saurav Kashyap <skashyap@marvell.com>
Cc: Nilesh Javali <njavali@marvell.com>
Signed-off-by: John Meneghini <jmeneghi@redhat.com>
Link: https://lore.kernel.org/r/20240403150155.412954-1-jmeneghi@redhat.com
Acked-by: Saurav Kashyap <skashyap@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/scsi/qedf/qedf_io.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/qedf/qedf_io.c b/drivers/scsi/qedf/qedf_io.c
index bf921caaf6aea..054a51713d556 100644
--- a/drivers/scsi/qedf/qedf_io.c
+++ b/drivers/scsi/qedf/qedf_io.c
@@ -2324,9 +2324,6 @@ static int qedf_execute_tmf(struct qedf_rport *fcport, u64 tm_lun,
io_req->fcport = fcport;
io_req->cmd_type = QEDF_TASK_MGMT_CMD;
- /* Record which cpu this request is associated with */
- io_req->cpu = smp_processor_id();
-
/* Set TM flags */
io_req->io_req_flags = QEDF_READ;
io_req->data_xfer_len = 0;
@@ -2349,6 +2346,9 @@ static int qedf_execute_tmf(struct qedf_rport *fcport, u64 tm_lun,
spin_lock_irqsave(&fcport->rport_lock, flags);
+ /* Record which cpu this request is associated with */
+ io_req->cpu = smp_processor_id();
+
sqe_idx = qedf_get_sqe_idx(fcport);
sqe = &fcport->sq[sqe_idx];
memset(sqe, 0, sizeof(struct fcoe_wqe));
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 015/197] irqchip/gic-v3-its: Remove BUG_ON in its_vpe_irq_domain_alloc
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (13 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 014/197] scsi: qedf: Make qedf_execute_tmf() non-preemptible Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 016/197] bpf: mark bpf_dummy_struct_ops.test_1 parameter as nullable Greg Kroah-Hartman
` (195 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Guanrui Huang, Thomas Gleixner,
Zenghui Yu, Marc Zyngier, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Guanrui Huang <guanrui.huang@linux.alibaba.com>
[ Upstream commit 382d2ffe86efb1e2fa803d2cf17e5bfc34e574f3 ]
This BUG_ON() is useless, because the same effect will be obtained
by letting the code run its course and vm being dereferenced,
triggering an exception.
So just remove this check.
Signed-off-by: Guanrui Huang <guanrui.huang@linux.alibaba.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Zenghui Yu <yuzenghui@huawei.com>
Acked-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20240418061053.96803-3-guanrui.huang@linux.alibaba.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/irqchip/irq-gic-v3-its.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 6dbac6ec778ee..33fa6b7f41c93 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -4507,8 +4507,6 @@ static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virq
struct page *vprop_page;
int base, nr_ids, i, err = 0;
- BUG_ON(!vm);
-
bitmap = its_lpi_alloc(roundup_pow_of_two(nr_irqs), &base, &nr_ids);
if (!bitmap)
return -ENOMEM;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 016/197] bpf: mark bpf_dummy_struct_ops.test_1 parameter as nullable
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (14 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 015/197] irqchip/gic-v3-its: Remove BUG_ON in its_vpe_irq_domain_alloc Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 017/197] selftests/bpf: adjust dummy_st_ops_success to detect additional error Greg Kroah-Hartman
` (194 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jose E. Marchesi, Eduard Zingerman,
Alexei Starovoitov, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eduard Zingerman <eddyz87@gmail.com>
[ Upstream commit 1479eaff1f16983d8fda7c5a08a586c21891087d ]
Test case dummy_st_ops/dummy_init_ret_value passes NULL as the first
parameter of the test_1() function. Mark this parameter as nullable to
make verifier aware of such possibility.
Otherwise, NULL check in the test_1() code:
SEC("struct_ops/test_1")
int BPF_PROG(test_1, struct bpf_dummy_ops_state *state)
{
if (!state)
return ...;
... access state ...
}
Might be removed by verifier, thus triggering NULL pointer dereference
under certain conditions.
Reported-by: Jose E. Marchesi <jemarch@gnu.org>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240424012821.595216-2-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/bpf/bpf_dummy_struct_ops.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/bpf/bpf_dummy_struct_ops.c b/net/bpf/bpf_dummy_struct_ops.c
index de33dc1b0daad..fdbe30ad8db2f 100644
--- a/net/bpf/bpf_dummy_struct_ops.c
+++ b/net/bpf/bpf_dummy_struct_ops.c
@@ -230,7 +230,7 @@ static void bpf_dummy_unreg(void *kdata)
{
}
-static int bpf_dummy_test_1(struct bpf_dummy_ops_state *cb)
+static int bpf_dummy_ops__test_1(struct bpf_dummy_ops_state *cb__nullable)
{
return 0;
}
@@ -247,7 +247,7 @@ static int bpf_dummy_test_sleepable(struct bpf_dummy_ops_state *cb)
}
static struct bpf_dummy_ops __bpf_bpf_dummy_ops = {
- .test_1 = bpf_dummy_test_1,
+ .test_1 = bpf_dummy_ops__test_1,
.test_2 = bpf_dummy_test_2,
.test_sleepable = bpf_dummy_test_sleepable,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 017/197] selftests/bpf: adjust dummy_st_ops_success to detect additional error
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (15 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 016/197] bpf: mark bpf_dummy_struct_ops.test_1 parameter as nullable Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 018/197] selftests/bpf: do not pass NULL for non-nullable params in dummy_st_ops Greg Kroah-Hartman
` (193 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jose E. Marchesi, Eduard Zingerman,
Alexei Starovoitov, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eduard Zingerman <eddyz87@gmail.com>
[ Upstream commit 3b3b84aacb4420226576c9732e7b539ca7b79633 ]
As reported by Jose E. Marchesi in off-list discussion, GCC and LLVM
generate slightly different code for dummy_st_ops_success/test_1():
SEC("struct_ops/test_1")
int BPF_PROG(test_1, struct bpf_dummy_ops_state *state)
{
int ret;
if (!state)
return 0xf2f3f4f5;
ret = state->val;
state->val = 0x5a;
return ret;
}
GCC-generated LLVM-generated
---------------------------- ---------------------------
0: r1 = *(u64 *)(r1 + 0x0) 0: w0 = -0xd0c0b0b
1: if r1 == 0x0 goto 5f 1: r1 = *(u64 *)(r1 + 0x0)
2: r0 = *(s32 *)(r1 + 0x0) 2: if r1 == 0x0 goto 6f
3: *(u32 *)(r1 + 0x0) = 0x5a 3: r0 = *(u32 *)(r1 + 0x0)
4: exit 4: w2 = 0x5a
5: r0 = -0xd0c0b0b 5: *(u32 *)(r1 + 0x0) = r2
6: exit 6: exit
If the 'state' argument is not marked as nullable in
net/bpf/bpf_dummy_struct_ops.c, the verifier would assume that
'r1 == 0x0' is never true:
- for the GCC version, this means that instructions #5-6 would be
marked as dead and removed;
- for the LLVM version, all instructions would be marked as live.
The test dummy_st_ops/dummy_init_ret_value actually sets the 'state'
parameter to NULL.
Therefore, when the 'state' argument is not marked as nullable,
the GCC-generated version of the code would trigger a NULL pointer
dereference at instruction #3.
This patch updates the test_1() test case to always follow a shape
similar to the GCC-generated version above, in order to verify whether
the 'state' nullability is marked correctly.
Reported-by: Jose E. Marchesi <jemarch@gnu.org>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240424012821.595216-3-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../selftests/bpf/progs/dummy_st_ops_success.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/bpf/progs/dummy_st_ops_success.c b/tools/testing/selftests/bpf/progs/dummy_st_ops_success.c
index 1efa746c25dc7..cc7b69b001aae 100644
--- a/tools/testing/selftests/bpf/progs/dummy_st_ops_success.c
+++ b/tools/testing/selftests/bpf/progs/dummy_st_ops_success.c
@@ -11,8 +11,17 @@ int BPF_PROG(test_1, struct bpf_dummy_ops_state *state)
{
int ret;
- if (!state)
- return 0xf2f3f4f5;
+ /* Check that 'state' nullable status is detected correctly.
+ * If 'state' argument would be assumed non-null by verifier
+ * the code below would be deleted as dead (which it shouldn't).
+ * Hide it from the compiler behind 'asm' block to avoid
+ * unnecessary optimizations.
+ */
+ asm volatile (
+ "if %[state] != 0 goto +2;"
+ "r0 = 0xf2f3f4f5;"
+ "exit;"
+ ::[state]"p"(state));
ret = state->val;
state->val = 0x5a;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 018/197] selftests/bpf: do not pass NULL for non-nullable params in dummy_st_ops
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (16 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 017/197] selftests/bpf: adjust dummy_st_ops_success to detect additional error Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 019/197] bpf: check bpf_dummy_struct_ops program params for test runs Greg Kroah-Hartman
` (192 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Eduard Zingerman, Alexei Starovoitov,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eduard Zingerman <eddyz87@gmail.com>
[ Upstream commit f612210d456a0b969a0adca91e68dbea0e0ea301 ]
dummy_st_ops.test_2 and dummy_st_ops.test_sleepable do not have their
'state' parameter marked as nullable. Update dummy_st_ops.c to avoid
passing NULL for such parameters, as the next patch would allow kernel
to enforce this restriction.
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240424012821.595216-4-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c | 7 +++++--
tools/testing/selftests/bpf/progs/dummy_st_ops_success.c | 2 +-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c b/tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c
index f43fcb13d2c46..dd926c00f4146 100644
--- a/tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c
+++ b/tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c
@@ -98,7 +98,8 @@ static void test_dummy_init_ptr_arg(void)
static void test_dummy_multiple_args(void)
{
- __u64 args[5] = {0, -100, 0x8a5f, 'c', 0x1234567887654321ULL};
+ struct bpf_dummy_ops_state st = { 7 };
+ __u64 args[5] = {(__u64)&st, -100, 0x8a5f, 'c', 0x1234567887654321ULL};
LIBBPF_OPTS(bpf_test_run_opts, attr,
.ctx_in = args,
.ctx_size_in = sizeof(args),
@@ -115,6 +116,7 @@ static void test_dummy_multiple_args(void)
fd = bpf_program__fd(skel->progs.test_2);
err = bpf_prog_test_run_opts(fd, &attr);
ASSERT_OK(err, "test_run");
+ args[0] = 7;
for (i = 0; i < ARRAY_SIZE(args); i++) {
snprintf(name, sizeof(name), "arg %zu", i);
ASSERT_EQ(skel->bss->test_2_args[i], args[i], name);
@@ -125,7 +127,8 @@ static void test_dummy_multiple_args(void)
static void test_dummy_sleepable(void)
{
- __u64 args[1] = {0};
+ struct bpf_dummy_ops_state st;
+ __u64 args[1] = {(__u64)&st};
LIBBPF_OPTS(bpf_test_run_opts, attr,
.ctx_in = args,
.ctx_size_in = sizeof(args),
diff --git a/tools/testing/selftests/bpf/progs/dummy_st_ops_success.c b/tools/testing/selftests/bpf/progs/dummy_st_ops_success.c
index cc7b69b001aae..ec0c595d47af8 100644
--- a/tools/testing/selftests/bpf/progs/dummy_st_ops_success.c
+++ b/tools/testing/selftests/bpf/progs/dummy_st_ops_success.c
@@ -34,7 +34,7 @@ SEC("struct_ops/test_2")
int BPF_PROG(test_2, struct bpf_dummy_ops_state *state, int a1, unsigned short a2,
char a3, unsigned long a4)
{
- test_2_args[0] = (unsigned long)state;
+ test_2_args[0] = state->val;
test_2_args[1] = a1;
test_2_args[2] = a2;
test_2_args[3] = a3;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 019/197] bpf: check bpf_dummy_struct_ops program params for test runs
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (17 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 018/197] selftests/bpf: do not pass NULL for non-nullable params in dummy_st_ops Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 020/197] selftests/bpf: dummy_st_ops should reject 0 for non-nullable params Greg Kroah-Hartman
` (191 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Kui-Feng Lee, Eduard Zingerman,
Alexei Starovoitov, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eduard Zingerman <eddyz87@gmail.com>
[ Upstream commit 980ca8ceeae69ddf362870ea9183f389ae26324a ]
When doing BPF_PROG_TEST_RUN for bpf_dummy_struct_ops programs,
reject execution when NULL is passed for non-nullable params.
For programs with non-nullable params verifier assumes that
such params are never NULL and thus might optimize out NULL checks.
Suggested-by: Kui-Feng Lee <sinquersw@gmail.com>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240424012821.595216-5-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/bpf/bpf_dummy_struct_ops.c | 51 +++++++++++++++++++++++++++++++++-
1 file changed, 50 insertions(+), 1 deletion(-)
diff --git a/net/bpf/bpf_dummy_struct_ops.c b/net/bpf/bpf_dummy_struct_ops.c
index fdbe30ad8db2f..7236349cf0598 100644
--- a/net/bpf/bpf_dummy_struct_ops.c
+++ b/net/bpf/bpf_dummy_struct_ops.c
@@ -79,6 +79,51 @@ static int dummy_ops_call_op(void *image, struct bpf_dummy_ops_test_args *args)
args->args[3], args->args[4]);
}
+static const struct bpf_ctx_arg_aux *find_ctx_arg_info(struct bpf_prog_aux *aux, int offset)
+{
+ int i;
+
+ for (i = 0; i < aux->ctx_arg_info_size; i++)
+ if (aux->ctx_arg_info[i].offset == offset)
+ return &aux->ctx_arg_info[i];
+
+ return NULL;
+}
+
+/* There is only one check at the moment:
+ * - zero should not be passed for pointer parameters not marked as nullable.
+ */
+static int check_test_run_args(struct bpf_prog *prog, struct bpf_dummy_ops_test_args *args)
+{
+ const struct btf_type *func_proto = prog->aux->attach_func_proto;
+
+ for (u32 arg_no = 0; arg_no < btf_type_vlen(func_proto) ; ++arg_no) {
+ const struct btf_param *param = &btf_params(func_proto)[arg_no];
+ const struct bpf_ctx_arg_aux *info;
+ const struct btf_type *t;
+ int offset;
+
+ if (args->args[arg_no] != 0)
+ continue;
+
+ /* Program is validated already, so there is no need
+ * to check if t is NULL.
+ */
+ t = btf_type_skip_modifiers(bpf_dummy_ops_btf, param->type, NULL);
+ if (!btf_type_is_ptr(t))
+ continue;
+
+ offset = btf_ctx_arg_offset(bpf_dummy_ops_btf, func_proto, arg_no);
+ info = find_ctx_arg_info(prog->aux, offset);
+ if (info && (info->reg_type & PTR_MAYBE_NULL))
+ continue;
+
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
extern const struct bpf_link_ops bpf_struct_ops_link_lops;
int bpf_struct_ops_test_run(struct bpf_prog *prog, const union bpf_attr *kattr,
@@ -87,7 +132,7 @@ int bpf_struct_ops_test_run(struct bpf_prog *prog, const union bpf_attr *kattr,
const struct bpf_struct_ops *st_ops = &bpf_bpf_dummy_ops;
const struct btf_type *func_proto;
struct bpf_dummy_ops_test_args *args;
- struct bpf_tramp_links *tlinks;
+ struct bpf_tramp_links *tlinks = NULL;
struct bpf_tramp_link *link = NULL;
void *image = NULL;
unsigned int op_idx;
@@ -109,6 +154,10 @@ int bpf_struct_ops_test_run(struct bpf_prog *prog, const union bpf_attr *kattr,
if (IS_ERR(args))
return PTR_ERR(args);
+ err = check_test_run_args(prog, args);
+ if (err)
+ goto out;
+
tlinks = kcalloc(BPF_TRAMP_MAX, sizeof(*tlinks), GFP_KERNEL);
if (!tlinks) {
err = -ENOMEM;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 020/197] selftests/bpf: dummy_st_ops should reject 0 for non-nullable params
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (18 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 019/197] bpf: check bpf_dummy_struct_ops program params for test runs Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 021/197] RISC-V: KVM: Fix the initial sample period value Greg Kroah-Hartman
` (190 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Eduard Zingerman, Alexei Starovoitov,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eduard Zingerman <eddyz87@gmail.com>
[ Upstream commit 6a2d30d3c5bf9f088dcfd5f3746b04d84f2fab83 ]
Check if BPF_PROG_TEST_RUN for bpf_dummy_struct_ops programs
rejects execution if NULL is passed for non-nullable parameter.
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240424012821.595216-6-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../selftests/bpf/prog_tests/dummy_st_ops.c | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c b/tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c
index dd926c00f4146..d3d94596ab79c 100644
--- a/tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c
+++ b/tools/testing/selftests/bpf/prog_tests/dummy_st_ops.c
@@ -147,6 +147,31 @@ static void test_dummy_sleepable(void)
dummy_st_ops_success__destroy(skel);
}
+/* dummy_st_ops.test_sleepable() parameter is not marked as nullable,
+ * thus bpf_prog_test_run_opts() below should be rejected as it tries
+ * to pass NULL for this parameter.
+ */
+static void test_dummy_sleepable_reject_null(void)
+{
+ __u64 args[1] = {0};
+ LIBBPF_OPTS(bpf_test_run_opts, attr,
+ .ctx_in = args,
+ .ctx_size_in = sizeof(args),
+ );
+ struct dummy_st_ops_success *skel;
+ int fd, err;
+
+ skel = dummy_st_ops_success__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "dummy_st_ops_load"))
+ return;
+
+ fd = bpf_program__fd(skel->progs.test_sleepable);
+ err = bpf_prog_test_run_opts(fd, &attr);
+ ASSERT_EQ(err, -EINVAL, "test_run");
+
+ dummy_st_ops_success__destroy(skel);
+}
+
void test_dummy_st_ops(void)
{
if (test__start_subtest("dummy_st_ops_attach"))
@@ -159,6 +184,8 @@ void test_dummy_st_ops(void)
test_dummy_multiple_args();
if (test__start_subtest("dummy_sleepable"))
test_dummy_sleepable();
+ if (test__start_subtest("dummy_sleepable_reject_null"))
+ test_dummy_sleepable_reject_null();
RUN_TESTS(dummy_st_ops_fail);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 021/197] RISC-V: KVM: Fix the initial sample period value
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (19 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 020/197] selftests/bpf: dummy_st_ops should reject 0 for non-nullable params Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 022/197] crypto: aead,cipher - zeroize key buffer after use Greg Kroah-Hartman
` (189 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Andrew Jones, Atish Patra,
Anup Patel, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Atish Patra <atishp@rivosinc.com>
[ Upstream commit 57990ab90ce31aadac0d5a6293f5582e24ff7521 ]
The initial sample period value when counter value is not assigned
should be set to maximum value supported by the counter width.
Otherwise, it may result in spurious interrupts.
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Signed-off-by: Atish Patra <atishp@rivosinc.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Link: https://lore.kernel.org/r/20240420151741.962500-11-atishp@rivosinc.com
Signed-off-by: Anup Patel <anup@brainfault.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/riscv/kvm/vcpu_pmu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/riscv/kvm/vcpu_pmu.c b/arch/riscv/kvm/vcpu_pmu.c
index 86391a5061dda..cee1b9ca4ec48 100644
--- a/arch/riscv/kvm/vcpu_pmu.c
+++ b/arch/riscv/kvm/vcpu_pmu.c
@@ -39,7 +39,7 @@ static u64 kvm_pmu_get_sample_period(struct kvm_pmc *pmc)
u64 sample_period;
if (!pmc->counter_val)
- sample_period = counter_val_mask + 1;
+ sample_period = counter_val_mask;
else
sample_period = (-pmc->counter_val) & counter_val_mask;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 022/197] crypto: aead,cipher - zeroize key buffer after use
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (20 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 021/197] RISC-V: KVM: Fix the initial sample period value Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 023/197] media: mediatek: vcodec: Only free buffer VA that is not NULL Greg Kroah-Hartman
` (188 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Hailey Mothershead, Herbert Xu,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hailey Mothershead <hailmo@amazon.com>
[ Upstream commit 23e4099bdc3c8381992f9eb975c79196d6755210 ]
I.G 9.7.B for FIPS 140-3 specifies that variables temporarily holding
cryptographic information should be zeroized once they are no longer
needed. Accomplish this by using kfree_sensitive for buffers that
previously held the private key.
Signed-off-by: Hailey Mothershead <hailmo@amazon.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
crypto/aead.c | 3 +--
crypto/cipher.c | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/crypto/aead.c b/crypto/aead.c
index 54906633566a2..5f3c1954d8e5d 100644
--- a/crypto/aead.c
+++ b/crypto/aead.c
@@ -45,8 +45,7 @@ static int setkey_unaligned(struct crypto_aead *tfm, const u8 *key,
alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
memcpy(alignbuffer, key, keylen);
ret = crypto_aead_alg(tfm)->setkey(tfm, alignbuffer, keylen);
- memset(alignbuffer, 0, keylen);
- kfree(buffer);
+ kfree_sensitive(buffer);
return ret;
}
diff --git a/crypto/cipher.c b/crypto/cipher.c
index 47c77a3e59783..40cae908788ec 100644
--- a/crypto/cipher.c
+++ b/crypto/cipher.c
@@ -34,8 +34,7 @@ static int setkey_unaligned(struct crypto_cipher *tfm, const u8 *key,
alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
memcpy(alignbuffer, key, keylen);
ret = cia->cia_setkey(crypto_cipher_tfm(tfm), alignbuffer, keylen);
- memset(alignbuffer, 0, keylen);
- kfree(buffer);
+ kfree_sensitive(buffer);
return ret;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 023/197] media: mediatek: vcodec: Only free buffer VA that is not NULL
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (21 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 022/197] crypto: aead,cipher - zeroize key buffer after use Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 024/197] drm/amdgpu: Fix uninitialized variable warnings Greg Kroah-Hartman
` (187 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Fei Shao, AngeloGioacchino Del Regno,
Andrzej Pietrasiewicz, Sebastian Fricke, Mauro Carvalho Chehab,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fei Shao <fshao@chromium.org>
[ Upstream commit eb005c801ec70ff4307727bd3bd6e8280169ef32 ]
In the MediaTek vcodec driver, while mtk_vcodec_mem_free() is mostly
called only when the buffer to free exists, there are some instances
that didn't do the check and triggered warnings in practice.
We believe those checks were forgotten unintentionally. Add the checks
back to fix the warnings.
Signed-off-by: Fei Shao <fshao@chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../vcodec/decoder/vdec/vdec_av1_req_lat_if.c | 22 +++++++++++++------
.../vcodec/encoder/venc/venc_h264_if.c | 5 +++--
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c
index 2b6a5adbc4199..b0e2e59f61b5d 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c
@@ -1023,18 +1023,26 @@ static void vdec_av1_slice_free_working_buffer(struct vdec_av1_slice_instance *i
int i;
for (i = 0; i < ARRAY_SIZE(instance->mv); i++)
- mtk_vcodec_mem_free(ctx, &instance->mv[i]);
+ if (instance->mv[i].va)
+ mtk_vcodec_mem_free(ctx, &instance->mv[i]);
for (i = 0; i < ARRAY_SIZE(instance->seg); i++)
- mtk_vcodec_mem_free(ctx, &instance->seg[i]);
+ if (instance->seg[i].va)
+ mtk_vcodec_mem_free(ctx, &instance->seg[i]);
for (i = 0; i < ARRAY_SIZE(instance->cdf); i++)
- mtk_vcodec_mem_free(ctx, &instance->cdf[i]);
+ if (instance->cdf[i].va)
+ mtk_vcodec_mem_free(ctx, &instance->cdf[i]);
+
- mtk_vcodec_mem_free(ctx, &instance->tile);
- mtk_vcodec_mem_free(ctx, &instance->cdf_temp);
- mtk_vcodec_mem_free(ctx, &instance->cdf_table);
- mtk_vcodec_mem_free(ctx, &instance->iq_table);
+ if (instance->tile.va)
+ mtk_vcodec_mem_free(ctx, &instance->tile);
+ if (instance->cdf_temp.va)
+ mtk_vcodec_mem_free(ctx, &instance->cdf_temp);
+ if (instance->cdf_table.va)
+ mtk_vcodec_mem_free(ctx, &instance->cdf_table);
+ if (instance->iq_table.va)
+ mtk_vcodec_mem_free(ctx, &instance->iq_table);
instance->level = AV1_RES_NONE;
}
diff --git a/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c b/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c
index a68dac72c4e42..f8145998fcaf7 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c
@@ -301,11 +301,12 @@ static void h264_enc_free_work_buf(struct venc_h264_inst *inst)
* other buffers need to be freed by AP.
*/
for (i = 0; i < VENC_H264_VPU_WORK_BUF_MAX; i++) {
- if (i != VENC_H264_VPU_WORK_BUF_SKIP_FRAME)
+ if (i != VENC_H264_VPU_WORK_BUF_SKIP_FRAME && inst->work_bufs[i].va)
mtk_vcodec_mem_free(inst->ctx, &inst->work_bufs[i]);
}
- mtk_vcodec_mem_free(inst->ctx, &inst->pps_buf);
+ if (inst->pps_buf.va)
+ mtk_vcodec_mem_free(inst->ctx, &inst->pps_buf);
}
static int h264_enc_alloc_work_buf(struct venc_h264_inst *inst, bool is_34bit)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 024/197] drm/amdgpu: Fix uninitialized variable warnings
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (22 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 023/197] media: mediatek: vcodec: Only free buffer VA that is not NULL Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 025/197] drm/amdgpu: Using uninitialized value *size when calling amdgpu_vce_cs_reloc Greg Kroah-Hartman
` (186 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ma Jun, Christian König,
Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ma Jun <Jun.Ma2@amd.com>
[ Upstream commit 60c448439f3b5db9431e13f7f361b4074d0e8594 ]
return 0 to avoid returning an uninitialized variable r
Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/amdgpu/aldebaran.c | 2 +-
drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/aldebaran.c b/drivers/gpu/drm/amd/amdgpu/aldebaran.c
index 576067d66bb9a..d0a8da67dc2a1 100644
--- a/drivers/gpu/drm/amd/amdgpu/aldebaran.c
+++ b/drivers/gpu/drm/amd/amdgpu/aldebaran.c
@@ -97,7 +97,7 @@ static int aldebaran_mode2_suspend_ip(struct amdgpu_device *adev)
adev->ip_blocks[i].status.hw = false;
}
- return r;
+ return 0;
}
static int
diff --git a/drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c b/drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c
index 93f6772d1b241..481217c32d853 100644
--- a/drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c
+++ b/drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c
@@ -92,7 +92,7 @@ static int sienna_cichlid_mode2_suspend_ip(struct amdgpu_device *adev)
adev->ip_blocks[i].status.hw = false;
}
- return r;
+ return 0;
}
static int
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 025/197] drm/amdgpu: Using uninitialized value *size when calling amdgpu_vce_cs_reloc
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (23 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 024/197] drm/amdgpu: Fix uninitialized variable warnings Greg Kroah-Hartman
@ 2024-07-09 11:07 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 026/197] drm/amdgpu: Initialize timestamp for some legacy SOCs Greg Kroah-Hartman
` (185 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:07 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jesse Zhang, Christian König,
Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jesse Zhang <jesse.zhang@amd.com>
[ Upstream commit 88a9a467c548d0b3c7761b4fd54a68e70f9c0944 ]
Initialize the size before calling amdgpu_vce_cs_reloc, such as case 0x03000001.
V2: To really improve the handling we would actually
need to have a separate value of 0xffffffff.(Christian)
Signed-off-by: Jesse Zhang <jesse.zhang@amd.com>
Suggested-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index 59acf424a078f..968ca2c84ef7e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
@@ -743,7 +743,8 @@ int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p,
uint32_t created = 0;
uint32_t allocated = 0;
uint32_t tmp, handle = 0;
- uint32_t *size = &tmp;
+ uint32_t dummy = 0xffffffff;
+ uint32_t *size = &dummy;
unsigned int idx;
int i, r = 0;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 026/197] drm/amdgpu: Initialize timestamp for some legacy SOCs
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (24 preceding siblings ...)
2024-07-09 11:07 ` [PATCH 6.9 025/197] drm/amdgpu: Using uninitialized value *size when calling amdgpu_vce_cs_reloc Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 027/197] drm/amdgpu: fix double free err_addr pointer warnings Greg Kroah-Hartman
` (184 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ma Jun, Christian König,
Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ma Jun <Jun.Ma2@amd.com>
[ Upstream commit 2e55bcf3d742a4946d862b86e39e75a95cc6f1c0 ]
Initialize the interrupt timestamp for some legacy SOCs
to fix the coverity issue "Uninitialized scalar variable"
Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
Suggested-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
index 7e6d09730e6d3..665c63f552787 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
@@ -445,6 +445,14 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
entry.ih = ih;
entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
+
+ /*
+ * timestamp is not supported on some legacy SOCs (cik, cz, iceland,
+ * si and tonga), so initialize timestamp and timestamp_src to 0
+ */
+ entry.timestamp = 0;
+ entry.timestamp_src = 0;
+
amdgpu_ih_decode_iv(adev, &entry);
trace_amdgpu_iv(ih - &adev->irq.ih, &entry);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 027/197] drm/amdgpu: fix double free err_addr pointer warnings
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (25 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 026/197] drm/amdgpu: Initialize timestamp for some legacy SOCs Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 028/197] drm/amd/display: Add NULL pointer check for kzalloc Greg Kroah-Hartman
` (183 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Bob Zhou, Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bob Zhou <bob.zhou@amd.com>
[ Upstream commit 506c245f3f1cd989cb89811a7f06e04ff8813a0d ]
In amdgpu_umc_bad_page_polling_timeout, the amdgpu_umc_handle_bad_pages
will be run many times so that double free err_addr in some special case.
So set the err_addr to NULL to avoid the warnings.
Signed-off-by: Bob Zhou <bob.zhou@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
index 20436f81856ad..6f7451e3ee87e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
@@ -170,6 +170,7 @@ static void amdgpu_umc_handle_bad_pages(struct amdgpu_device *adev,
}
kfree(err_data->err_addr);
+ err_data->err_addr = NULL;
mutex_unlock(&con->page_retirement_lock);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 028/197] drm/amd/display: Add NULL pointer check for kzalloc
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (26 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 027/197] drm/amdgpu: fix double free err_addr pointer warnings Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 029/197] drm/amd/display: Check index msg_id before read or write Greg Kroah-Hartman
` (182 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alex Hung, Wayne Lin, Hersen Wu,
Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hersen Wu <hersenxs.wu@amd.com>
[ Upstream commit 8e65a1b7118acf6af96449e1e66b7adbc9396912 ]
[Why & How]
Check return pointer of kzalloc before using it.
Reviewed-by: Alex Hung <alex.hung@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Hersen Wu <hersenxs.wu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c | 8 ++++++++
.../gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c | 8 ++++++++
.../drm/amd/display/dc/resource/dcn30/dcn30_resource.c | 3 +++
.../drm/amd/display/dc/resource/dcn31/dcn31_resource.c | 5 +++++
.../drm/amd/display/dc/resource/dcn314/dcn314_resource.c | 5 +++++
.../drm/amd/display/dc/resource/dcn315/dcn315_resource.c | 2 ++
.../drm/amd/display/dc/resource/dcn316/dcn316_resource.c | 2 ++
.../drm/amd/display/dc/resource/dcn32/dcn32_resource.c | 5 +++++
.../drm/amd/display/dc/resource/dcn321/dcn321_resource.c | 2 ++
.../drm/amd/display/dc/resource/dcn35/dcn35_resource.c | 2 ++
.../drm/amd/display/dc/resource/dcn351/dcn351_resource.c | 2 ++
11 files changed, 44 insertions(+)
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c
index 3271c8c7905dd..4e036356b6a89 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c
@@ -560,11 +560,19 @@ void dcn3_clk_mgr_construct(
dce_clock_read_ss_info(clk_mgr);
clk_mgr->base.bw_params = kzalloc(sizeof(*clk_mgr->base.bw_params), GFP_KERNEL);
+ if (!clk_mgr->base.bw_params) {
+ BREAK_TO_DEBUGGER();
+ return;
+ }
/* need physical address of table to give to PMFW */
clk_mgr->wm_range_table = dm_helpers_allocate_gpu_mem(clk_mgr->base.ctx,
DC_MEM_ALLOC_TYPE_GART, sizeof(WatermarksExternal_t),
&clk_mgr->wm_range_table_addr);
+ if (!clk_mgr->wm_range_table) {
+ BREAK_TO_DEBUGGER();
+ return;
+ }
}
void dcn3_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr)
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c
index e506e4f969ca9..dda1173be35ea 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c
@@ -1208,11 +1208,19 @@ void dcn32_clk_mgr_construct(
clk_mgr->smu_present = false;
clk_mgr->base.bw_params = kzalloc(sizeof(*clk_mgr->base.bw_params), GFP_KERNEL);
+ if (!clk_mgr->base.bw_params) {
+ BREAK_TO_DEBUGGER();
+ return;
+ }
/* need physical address of table to give to PMFW */
clk_mgr->wm_range_table = dm_helpers_allocate_gpu_mem(clk_mgr->base.ctx,
DC_MEM_ALLOC_TYPE_GART, sizeof(WatermarksExternal_t),
&clk_mgr->wm_range_table_addr);
+ if (!clk_mgr->wm_range_table) {
+ BREAK_TO_DEBUGGER();
+ return;
+ }
}
void dcn32_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr)
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c
index ecc477ef8e3b7..b427a98066c11 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c
@@ -2050,6 +2050,9 @@ bool dcn30_validate_bandwidth(struct dc *dc,
BW_VAL_TRACE_COUNT();
+ if (!pipes)
+ goto validate_fail;
+
DC_FP_START();
out = dcn30_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, fast_validate, true);
DC_FP_END();
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
index 2fb1d00ff9654..f38de5391176f 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
@@ -1311,6 +1311,8 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
/* allocate HPO link encoder */
hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+ if (!hpo_dp_enc31)
+ return NULL; /* out of memory */
hpo_dp_link_encoder31_construct(hpo_dp_enc31, ctx, inst,
&hpo_dp_link_enc_regs[inst],
@@ -1767,6 +1769,9 @@ bool dcn31_validate_bandwidth(struct dc *dc,
BW_VAL_TRACE_COUNT();
+ if (!pipes)
+ goto validate_fail;
+
DC_FP_START();
out = dcn30_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, fast_validate, true);
DC_FP_END();
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c
index c97391edb5ff7..2791fc45bb8c7 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c
@@ -1384,6 +1384,8 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
/* allocate HPO link encoder */
hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+ if (!hpo_dp_enc31)
+ return NULL; /* out of memory */
hpo_dp_link_encoder31_construct(hpo_dp_enc31, ctx, inst,
&hpo_dp_link_enc_regs[inst],
@@ -1744,6 +1746,9 @@ bool dcn314_validate_bandwidth(struct dc *dc,
BW_VAL_TRACE_COUNT();
+ if (!pipes)
+ goto validate_fail;
+
if (filter_modes_for_single_channel_workaround(dc, context))
goto validate_fail;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c
index 515ba435f759c..4ce0f4bf1d9bb 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c
@@ -1309,6 +1309,8 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
/* allocate HPO link encoder */
hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+ if (!hpo_dp_enc31)
+ return NULL; /* out of memory */
hpo_dp_link_encoder31_construct(hpo_dp_enc31, ctx, inst,
&hpo_dp_link_enc_regs[inst],
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c
index b9753d4606f89..efa5627b0c50a 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c
@@ -1306,6 +1306,8 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
/* allocate HPO link encoder */
hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+ if (!hpo_dp_enc31)
+ return NULL; /* out of memory */
hpo_dp_link_encoder31_construct(hpo_dp_enc31, ctx, inst,
&hpo_dp_link_enc_regs[inst],
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c
index ce1754cc1f463..1f5a91b764828 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c
@@ -1304,6 +1304,8 @@ static struct hpo_dp_link_encoder *dcn32_hpo_dp_link_encoder_create(
/* allocate HPO link encoder */
hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+ if (!hpo_dp_enc31)
+ return NULL; /* out of memory */
#undef REG_STRUCT
#define REG_STRUCT hpo_dp_link_enc_regs
@@ -1751,6 +1753,9 @@ static bool dml1_validate(struct dc *dc, struct dc_state *context, bool fast_val
BW_VAL_TRACE_COUNT();
+ if (!pipes)
+ goto validate_fail;
+
DC_FP_START();
out = dcn32_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, fast_validate);
DC_FP_END();
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c
index 296a0a8e71459..e83d340ed6260 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c
@@ -1288,6 +1288,8 @@ static struct hpo_dp_link_encoder *dcn321_hpo_dp_link_encoder_create(
/* allocate HPO link encoder */
hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+ if (!hpo_dp_enc31)
+ return NULL; /* out of memory */
#undef REG_STRUCT
#define REG_STRUCT hpo_dp_link_enc_regs
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c
index 5d52853cac96a..cf0cb5cf4b5b2 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c
@@ -1368,6 +1368,8 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
/* allocate HPO link encoder */
hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+ if (!hpo_dp_enc31)
+ return NULL; /* out of memory */
#undef REG_STRUCT
#define REG_STRUCT hpo_dp_link_enc_regs
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c
index 909e14261f9b4..116b59123199f 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c
@@ -1348,6 +1348,8 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
/* allocate HPO link encoder */
hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+ if (!hpo_dp_enc31)
+ return NULL; /* out of memory */
#undef REG_STRUCT
#define REG_STRUCT hpo_dp_link_enc_regs
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 029/197] drm/amd/display: Check index msg_id before read or write
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (27 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 028/197] drm/amd/display: Add NULL pointer check for kzalloc Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 030/197] drm/amd/display: Check pipe offset before setting vblank Greg Kroah-Hartman
` (181 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Rodrigo Siqueira, Wayne Lin,
Alex Hung, Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Hung <alex.hung@amd.com>
[ Upstream commit 59d99deb330af206a4541db0c4da8f73880fba03 ]
[WHAT]
msg_id is used as an array index and it cannot be a negative value, and
therefore cannot be equal to MOD_HDCP_MESSAGE_ID_INVALID (-1).
[HOW]
Check whether msg_id is valid before reading and setting.
This fixes 4 OVERRUN issues reported by Coverity.
Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c
index f7b5583ee609a..8e9caae7c9559 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c
@@ -156,6 +156,10 @@ static enum mod_hdcp_status read(struct mod_hdcp *hdcp,
uint32_t cur_size = 0;
uint32_t data_offset = 0;
+ if (msg_id == MOD_HDCP_MESSAGE_ID_INVALID) {
+ return MOD_HDCP_STATUS_DDC_FAILURE;
+ }
+
if (is_dp_hdcp(hdcp)) {
while (buf_len > 0) {
cur_size = MIN(buf_len, HDCP_MAX_AUX_TRANSACTION_SIZE);
@@ -215,6 +219,10 @@ static enum mod_hdcp_status write(struct mod_hdcp *hdcp,
uint32_t cur_size = 0;
uint32_t data_offset = 0;
+ if (msg_id == MOD_HDCP_MESSAGE_ID_INVALID) {
+ return MOD_HDCP_STATUS_DDC_FAILURE;
+ }
+
if (is_dp_hdcp(hdcp)) {
while (buf_len > 0) {
cur_size = MIN(buf_len, HDCP_MAX_AUX_TRANSACTION_SIZE);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 030/197] drm/amd/display: Check pipe offset before setting vblank
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (28 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 029/197] drm/amd/display: Check index msg_id before read or write Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 031/197] drm/amd/display: Skip finding free audio for unknown engine_id Greg Kroah-Hartman
` (180 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Rodrigo Siqueira, Wayne Lin,
Alex Hung, Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Hung <alex.hung@amd.com>
[ Upstream commit 5396a70e8cf462ec5ccf2dc8de103c79de9489e6 ]
pipe_ctx has a size of MAX_PIPES so checking its index before accessing
the array.
This fixes an OVERRUN issue reported by Coverity.
Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../drm/amd/display/dc/irq/dce110/irq_service_dce110.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dce110/irq_service_dce110.c b/drivers/gpu/drm/amd/display/dc/irq/dce110/irq_service_dce110.c
index 1c0d89e675da5..bb576a9c5fdbd 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dce110/irq_service_dce110.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dce110/irq_service_dce110.c
@@ -211,8 +211,12 @@ bool dce110_vblank_set(struct irq_service *irq_service,
info->ext_id);
uint8_t pipe_offset = dal_irq_src - IRQ_TYPE_VBLANK;
- struct timing_generator *tg =
- dc->current_state->res_ctx.pipe_ctx[pipe_offset].stream_res.tg;
+ struct timing_generator *tg;
+
+ if (pipe_offset >= MAX_PIPES)
+ return false;
+
+ tg = dc->current_state->res_ctx.pipe_ctx[pipe_offset].stream_res.tg;
if (enable) {
if (!tg || !tg->funcs->arm_vert_intr(tg, 2)) {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 031/197] drm/amd/display: Skip finding free audio for unknown engine_id
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (29 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 030/197] drm/amd/display: Check pipe offset before setting vblank Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 032/197] drm/amd/display: Fix overlapping copy within dml_core_mode_programming Greg Kroah-Hartman
` (179 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Rodrigo Siqueira, Wayne Lin,
Alex Hung, Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Hung <alex.hung@amd.com>
[ Upstream commit 1357b2165d9ad94faa4c4a20d5e2ce29c2ff29c3 ]
[WHY]
ENGINE_ID_UNKNOWN = -1 and can not be used as an array index. Plus, it
also means it is uninitialized and does not need free audio.
[HOW]
Skip and return NULL.
This fixes 2 OVERRUN issues reported by Coverity.
Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
index ec4bf9432bdb1..37a8e530cc951 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -3117,6 +3117,9 @@ static struct audio *find_first_free_audio(
{
int i, available_audio_count;
+ if (id == ENGINE_ID_UNKNOWN)
+ return NULL;
+
available_audio_count = pool->audio_count;
for (i = 0; i < available_audio_count; i++) {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 032/197] drm/amd/display: Fix overlapping copy within dml_core_mode_programming
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (30 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 031/197] drm/amd/display: Skip finding free audio for unknown engine_id Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 033/197] drm/amd/display: update pipe topology log to support subvp Greg Kroah-Hartman
` (178 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Rodrigo Siqueira, Wayne Lin,
Alex Hung, Hersen Wu, Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hersen Wu <hersenxs.wu@amd.com>
[ Upstream commit f1fd8a0a54e6d23a6d16ee29159f247862460fd1 ]
[WHY]
&mode_lib->mp.Watermark and &locals->Watermark are
the same address. memcpy may lead to unexpected behavior.
[HOW]
memmove should be used.
Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Reviewed-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Hersen Wu <hersenxs.wu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/dml2/display_mode_core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dml2/display_mode_core.c b/drivers/gpu/drm/amd/display/dc/dml2/display_mode_core.c
index 9be5ebf3a8c0b..79cd4c4790439 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2/display_mode_core.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2/display_mode_core.c
@@ -9460,8 +9460,10 @@ void dml_core_mode_programming(struct display_mode_lib_st *mode_lib, const struc
/* Copy the calculated watermarks to mp.Watermark as the getter functions are
* implemented by the DML team to copy the calculated values from the mp.Watermark interface.
+ * &mode_lib->mp.Watermark and &locals->Watermark are the same address, memcpy may lead to
+ * unexpected behavior. memmove should be used.
*/
- memcpy(&mode_lib->mp.Watermark, CalculateWatermarks_params->Watermark, sizeof(struct Watermarks));
+ memmove(&mode_lib->mp.Watermark, CalculateWatermarks_params->Watermark, sizeof(struct Watermarks));
for (k = 0; k < mode_lib->ms.num_active_planes; ++k) {
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true) {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 033/197] drm/amd/display: update pipe topology log to support subvp
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (31 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 032/197] drm/amd/display: Fix overlapping copy within dml_core_mode_programming Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 034/197] drm/amd/display: Do not return negative stream id for array Greg Kroah-Hartman
` (177 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alvin Lee, Roman Li, Wenjing Liu,
Daniel Wheeler, Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wenjing Liu <wenjing.liu@amd.com>
[ Upstream commit 5db346c256bbacc634ff515a1a9202cd4b61d8c7 ]
[why]
There is an ambiguity in subvp pipe topology log. The log doesn't show
subvp relation to main stream and it is not clear that certain stream
is an internal stream for subvp pipes.
[how]
Separate subvp pipe topology logging from main pipe topology. Log main
stream indices instead of the internal stream for subvp pipes.
The following is a sample log showing 2 streams with subvp enabled on
both:
pipe topology update
________________________
| plane0 slice0 stream0|
|DPP1----OPP1----OTG1----|
| plane0 slice0 stream1|
|DPP0----OPP0----OTG0----|
| (phantom pipes) |
| plane0 slice0 stream0|
|DPP3----OPP3----OTG3----|
| plane0 slice0 stream1|
|DPP2----OPP2----OTG2----|
|________________________|
Reviewed-by: Alvin Lee <alvin.lee2@amd.com>
Acked-by: Roman Li <roman.li@amd.com>
Signed-off-by: Wenjing Liu <wenjing.liu@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Stable-dep-of: 3ac31c9a707d ("drm/amd/display: Do not return negative stream id for array")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../gpu/drm/amd/display/dc/core/dc_resource.c | 96 +++++++++++++------
1 file changed, 65 insertions(+), 31 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
index 37a8e530cc951..d0bdfdf270ac9 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -2168,50 +2168,84 @@ static void resource_log_pipe(struct dc *dc, struct pipe_ctx *pipe,
}
}
-void resource_log_pipe_topology_update(struct dc *dc, struct dc_state *state)
+static void resource_log_pipe_for_stream(struct dc *dc, struct dc_state *state,
+ struct pipe_ctx *otg_master, int stream_idx)
{
- struct pipe_ctx *otg_master;
struct pipe_ctx *opp_heads[MAX_PIPES];
struct pipe_ctx *dpp_pipes[MAX_PIPES];
- int stream_idx, slice_idx, dpp_idx, plane_idx, slice_count, dpp_count;
+ int slice_idx, dpp_idx, plane_idx, slice_count, dpp_count;
bool is_primary;
DC_LOGGER_INIT(dc->ctx->logger);
+ slice_count = resource_get_opp_heads_for_otg_master(otg_master,
+ &state->res_ctx, opp_heads);
+ for (slice_idx = 0; slice_idx < slice_count; slice_idx++) {
+ plane_idx = -1;
+ if (opp_heads[slice_idx]->plane_state) {
+ dpp_count = resource_get_dpp_pipes_for_opp_head(
+ opp_heads[slice_idx],
+ &state->res_ctx,
+ dpp_pipes);
+ for (dpp_idx = 0; dpp_idx < dpp_count; dpp_idx++) {
+ is_primary = !dpp_pipes[dpp_idx]->top_pipe ||
+ dpp_pipes[dpp_idx]->top_pipe->plane_state != dpp_pipes[dpp_idx]->plane_state;
+ if (is_primary)
+ plane_idx++;
+ resource_log_pipe(dc, dpp_pipes[dpp_idx],
+ stream_idx, slice_idx,
+ plane_idx, slice_count,
+ is_primary);
+ }
+ } else {
+ resource_log_pipe(dc, opp_heads[slice_idx],
+ stream_idx, slice_idx, plane_idx,
+ slice_count, true);
+ }
+
+ }
+}
+
+static int resource_stream_to_stream_idx(struct dc_state *state,
+ struct dc_stream_state *stream)
+{
+ int i, stream_idx = -1;
+
+ for (i = 0; i < state->stream_count; i++)
+ if (state->streams[i] == stream) {
+ stream_idx = i;
+ break;
+ }
+ return stream_idx;
+}
+
+void resource_log_pipe_topology_update(struct dc *dc, struct dc_state *state)
+{
+ struct pipe_ctx *otg_master;
+ int stream_idx, phantom_stream_idx;
+ DC_LOGGER_INIT(dc->ctx->logger);
+
DC_LOG_DC(" pipe topology update");
DC_LOG_DC(" ________________________");
for (stream_idx = 0; stream_idx < state->stream_count; stream_idx++) {
+ if (state->streams[stream_idx]->is_phantom)
+ continue;
+
otg_master = resource_get_otg_master_for_stream(
&state->res_ctx, state->streams[stream_idx]);
- if (!otg_master || otg_master->stream_res.tg == NULL) {
- DC_LOG_DC("topology update: otg_master NULL stream_idx %d!\n", stream_idx);
- return;
- }
- slice_count = resource_get_opp_heads_for_otg_master(otg_master,
- &state->res_ctx, opp_heads);
- for (slice_idx = 0; slice_idx < slice_count; slice_idx++) {
- plane_idx = -1;
- if (opp_heads[slice_idx]->plane_state) {
- dpp_count = resource_get_dpp_pipes_for_opp_head(
- opp_heads[slice_idx],
- &state->res_ctx,
- dpp_pipes);
- for (dpp_idx = 0; dpp_idx < dpp_count; dpp_idx++) {
- is_primary = !dpp_pipes[dpp_idx]->top_pipe ||
- dpp_pipes[dpp_idx]->top_pipe->plane_state != dpp_pipes[dpp_idx]->plane_state;
- if (is_primary)
- plane_idx++;
- resource_log_pipe(dc, dpp_pipes[dpp_idx],
- stream_idx, slice_idx,
- plane_idx, slice_count,
- is_primary);
- }
- } else {
- resource_log_pipe(dc, opp_heads[slice_idx],
- stream_idx, slice_idx, plane_idx,
- slice_count, true);
- }
+ resource_log_pipe_for_stream(dc, state, otg_master, stream_idx);
+ }
+ if (state->phantom_stream_count > 0) {
+ DC_LOG_DC(" | (phantom pipes) |");
+ for (stream_idx = 0; stream_idx < state->stream_count; stream_idx++) {
+ if (state->stream_status[stream_idx].mall_stream_config.type != SUBVP_MAIN)
+ continue;
+ phantom_stream_idx = resource_stream_to_stream_idx(state,
+ state->stream_status[stream_idx].mall_stream_config.paired_stream);
+ otg_master = resource_get_otg_master_for_stream(
+ &state->res_ctx, state->streams[phantom_stream_idx]);
+ resource_log_pipe_for_stream(dc, state, otg_master, stream_idx);
}
}
DC_LOG_DC(" |________________________|\n");
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 034/197] drm/amd/display: Do not return negative stream id for array
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (32 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 033/197] drm/amd/display: update pipe topology log to support subvp Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 035/197] drm/amd/display: ASSERT when failing to find index by plane/stream id Greg Kroah-Hartman
` (176 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Rodrigo Siqueira, Wayne Lin,
Alex Hung, Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Hung <alex.hung@amd.com>
[ Upstream commit 3ac31c9a707dd1c7c890b95333182f955e9dcb57 ]
[WHY]
resource_stream_to_stream_idx returns an array index and it return -1
when not found; however, -1 is not a valid array index number.
[HOW]
When this happens, call ASSERT(), and return a zero instead.
This fixes an OVERRUN and an NEGATIVE_RETURNS issues reported by Coverity.
Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
index d0bdfdf270ac9..ab598e1f088cf 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -2216,6 +2216,13 @@ static int resource_stream_to_stream_idx(struct dc_state *state,
stream_idx = i;
break;
}
+
+ /* never return negative array index */
+ if (stream_idx == -1) {
+ ASSERT(0);
+ return 0;
+ }
+
return stream_idx;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 035/197] drm/amd/display: ASSERT when failing to find index by plane/stream id
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (33 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 034/197] drm/amd/display: Do not return negative stream id for array Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 036/197] drm/amd/display: Fix uninitialized variables in DM Greg Kroah-Hartman
` (175 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Rodrigo Siqueira, Wayne Lin,
Alex Hung, Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Hung <alex.hung@amd.com>
[ Upstream commit 01eb50e53c1ce505bf449348d433181310288765 ]
[WHY]
find_disp_cfg_idx_by_plane_id and find_disp_cfg_idx_by_stream_id returns
an array index and they return -1 when not found; however, -1 is not a
valid index number.
[HOW]
When this happens, call ASSERT(), and return a positive number (which is
fewer than callers' array size) instead.
This fixes 4 OVERRUN and 2 NEGATIVE_RETURNS issues reported by Coverity.
Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c b/drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c
index a52c594e1ba4b..e1f1b5dd13203 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c
@@ -88,7 +88,8 @@ static int find_disp_cfg_idx_by_plane_id(struct dml2_dml_to_dc_pipe_mapping *map
return i;
}
- return -1;
+ ASSERT(false);
+ return __DML2_WRAPPER_MAX_STREAMS_PLANES__;
}
static int find_disp_cfg_idx_by_stream_id(struct dml2_dml_to_dc_pipe_mapping *mapping, unsigned int stream_id)
@@ -100,7 +101,8 @@ static int find_disp_cfg_idx_by_stream_id(struct dml2_dml_to_dc_pipe_mapping *ma
return i;
}
- return -1;
+ ASSERT(false);
+ return __DML2_WRAPPER_MAX_STREAMS_PLANES__;
}
// The master pipe of a stream is defined as the top pipe in odm slice 0
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 036/197] drm/amd/display: Fix uninitialized variables in DM
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (34 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 035/197] drm/amd/display: ASSERT when failing to find index by plane/stream id Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 037/197] drm/amdgpu: fix uninitialized scalar variable warning Greg Kroah-Hartman
` (174 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Hersen Wu, Wayne Lin, Alex Hung,
Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Hung <alex.hung@amd.com>
[ Upstream commit f95bcb041f213a5da3da5fcaf73269bd13dba945 ]
This fixes 11 UNINIT issues reported by Coverity.
Reviewed-by: Hersen Wu <hersenxs.wu@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++++----
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 4 ++--
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index f866a02f4f489..2152e40ee1c27 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -274,7 +274,7 @@ static u32 dm_vblank_get_counter(struct amdgpu_device *adev, int crtc)
static int dm_crtc_get_scanoutpos(struct amdgpu_device *adev, int crtc,
u32 *vbl, u32 *position)
{
- u32 v_blank_start, v_blank_end, h_position, v_position;
+ u32 v_blank_start = 0, v_blank_end = 0, h_position = 0, v_position = 0;
struct amdgpu_crtc *acrtc = NULL;
struct dc *dc = adev->dm.dc;
@@ -848,7 +848,7 @@ static void dm_handle_hpd_work(struct work_struct *work)
*/
static void dm_dmub_outbox1_low_irq(void *interrupt_params)
{
- struct dmub_notification notify;
+ struct dmub_notification notify = {0};
struct common_irq_params *irq_params = interrupt_params;
struct amdgpu_device *adev = irq_params->adev;
struct amdgpu_display_manager *dm = &adev->dm;
@@ -7192,7 +7192,7 @@ static int dm_update_mst_vcpi_slots_for_dsc(struct drm_atomic_state *state,
struct amdgpu_dm_connector *aconnector;
struct dm_connector_state *dm_conn_state;
int i, j, ret;
- int vcpi, pbn_div, pbn, slot_num = 0;
+ int vcpi, pbn_div, pbn = 0, slot_num = 0;
for_each_new_connector_in_state(state, connector, new_con_state, i) {
@@ -10595,7 +10595,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
struct dm_crtc_state *dm_old_crtc_state, *dm_new_crtc_state;
struct drm_dp_mst_topology_mgr *mgr;
struct drm_dp_mst_topology_state *mst_state;
- struct dsc_mst_fairness_vars vars[MAX_PIPES];
+ struct dsc_mst_fairness_vars vars[MAX_PIPES] = {0};
trace_amdgpu_dm_atomic_check_begin(state);
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
index c7715a17f388b..4d7a5d470b1ea 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
@@ -1249,7 +1249,7 @@ static ssize_t dp_sdp_message_debugfs_write(struct file *f, const char __user *b
size_t size, loff_t *pos)
{
int r;
- uint8_t data[36];
+ uint8_t data[36] = {0};
struct amdgpu_dm_connector *connector = file_inode(f)->i_private;
struct dm_crtc_state *acrtc_state;
uint32_t write_size = 36;
@@ -2960,7 +2960,7 @@ static int psr_read_residency(void *data, u64 *val)
{
struct amdgpu_dm_connector *connector = data;
struct dc_link *link = connector->dc_link;
- u32 residency;
+ u32 residency = 0;
link->dc->link_srv->edp_get_psr_residency(link, &residency);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 037/197] drm/amdgpu: fix uninitialized scalar variable warning
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (35 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 036/197] drm/amd/display: Fix uninitialized variables in DM Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 038/197] drm/amdgpu: fix the warning about the expression (int)size - len Greg Kroah-Hartman
` (173 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Tim Huang, Christian König,
Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tim Huang <Tim.Huang@amd.com>
[ Upstream commit 9a5f15d2a29d06ce5bd50919da7221cda92afb69 ]
Clear warning that uses uninitialized value fw_size.
Signed-off-by: Tim Huang <Tim.Huang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
index 55d5508987ffe..1d955652f3ba6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
@@ -1206,7 +1206,8 @@ void amdgpu_gfx_cp_init_microcode(struct amdgpu_device *adev,
fw_size = le32_to_cpu(cp_hdr_v2_0->data_size_bytes);
break;
default:
- break;
+ dev_err(adev->dev, "Invalid ucode id %u\n", ucode_id);
+ return;
}
if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 038/197] drm/amdgpu: fix the warning about the expression (int)size - len
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (36 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 037/197] drm/amdgpu: fix uninitialized scalar variable warning Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 039/197] media: dw2102: Dont translate i2c read into write Greg Kroah-Hartman
` (172 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jesse Zhang, Alex Deucher,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jesse Zhang <jesse.zhang@amd.com>
[ Upstream commit ea686fef5489ef7a2450a9fdbcc732b837fb46a8 ]
Converting size from size_t to int may overflow.
v2: keep reverse xmas tree order (Christian)
Signed-off-by: Jesse Zhang <jesse.zhang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
index f5d0fa207a88b..b62ae3c91a9db 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
@@ -2065,12 +2065,13 @@ static ssize_t amdgpu_reset_dump_register_list_write(struct file *f,
struct amdgpu_device *adev = (struct amdgpu_device *)file_inode(f)->i_private;
char reg_offset[11];
uint32_t *new = NULL, *tmp = NULL;
- int ret, i = 0, len = 0;
+ unsigned int len = 0;
+ int ret, i = 0;
do {
memset(reg_offset, 0, 11);
if (copy_from_user(reg_offset, buf + len,
- min(10, ((int)size-len)))) {
+ min(10, (size-len)))) {
ret = -EFAULT;
goto error_free;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 039/197] media: dw2102: Dont translate i2c read into write
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (37 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 038/197] drm/amdgpu: fix the warning about the expression (int)size - len Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 040/197] riscv: Apply SiFive CIP-1200 workaround to single-ASID sfence.vma Greg Kroah-Hartman
` (171 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Michael Bunk, Mauro Carvalho Chehab,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Bunk <micha@freedict.org>
[ Upstream commit 0e148a522b8453115038193e19ec7bea71403e4a ]
The code ignored the I2C_M_RD flag on I2C messages. Instead it assumed
an i2c transaction with a single message must be a write operation and a
transaction with two messages would be a read operation.
Though this works for the driver code, it leads to problems once the i2c
device is exposed to code not knowing this convention. For example,
I did "insmod i2c-dev" and issued read requests from userspace, which
were translated into write requests and destroyed the EEPROM of my
device.
So, just check and respect the I2C_M_READ flag, which indicates a read
when set on a message. If it is absent, it is a write message.
Incidentally, changing from the case statement to a while loop allows
the code to lift the limitation to two i2c messages per transaction.
There are 4 more *_i2c_transfer functions affected by the same behaviour
and limitation that should be fixed in the same way.
Link: https://lore.kernel.org/linux-media/20220116112238.74171-2-micha@freedict.org
Signed-off-by: Michael Bunk <micha@freedict.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/usb/dvb-usb/dw2102.c | 120 ++++++++++++++++++-----------
1 file changed, 73 insertions(+), 47 deletions(-)
diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
index b3bb1805829ad..10351308b0d02 100644
--- a/drivers/media/usb/dvb-usb/dw2102.c
+++ b/drivers/media/usb/dvb-usb/dw2102.c
@@ -716,6 +716,7 @@ static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
{
struct dvb_usb_device *d = i2c_get_adapdata(adap);
struct dw2102_state *state;
+ int j;
if (!d)
return -ENODEV;
@@ -729,11 +730,11 @@ static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
return -EAGAIN;
}
- switch (num) {
- case 1:
- switch (msg[0].addr) {
+ j = 0;
+ while (j < num) {
+ switch (msg[j].addr) {
case SU3000_STREAM_CTRL:
- state->data[0] = msg[0].buf[0] + 0x36;
+ state->data[0] = msg[j].buf[0] + 0x36;
state->data[1] = 3;
state->data[2] = 0;
if (dvb_usb_generic_rw(d, state->data, 3,
@@ -745,61 +746,86 @@ static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
if (dvb_usb_generic_rw(d, state->data, 1,
state->data, 2, 0) < 0)
err("i2c transfer failed.");
- msg[0].buf[1] = state->data[0];
- msg[0].buf[0] = state->data[1];
+ msg[j].buf[1] = state->data[0];
+ msg[j].buf[0] = state->data[1];
break;
default:
- if (3 + msg[0].len > sizeof(state->data)) {
- warn("i2c wr: len=%d is too big!\n",
- msg[0].len);
+ /* if the current write msg is followed by a another
+ * read msg to/from the same address
+ */
+ if ((j+1 < num) && (msg[j+1].flags & I2C_M_RD) &&
+ (msg[j].addr == msg[j+1].addr)) {
+ /* join both i2c msgs to one usb read command */
+ if (4 + msg[j].len > sizeof(state->data)) {
+ warn("i2c combined wr/rd: write len=%d is too big!\n",
+ msg[j].len);
+ num = -EOPNOTSUPP;
+ break;
+ }
+ if (1 + msg[j+1].len > sizeof(state->data)) {
+ warn("i2c combined wr/rd: read len=%d is too big!\n",
+ msg[j+1].len);
+ num = -EOPNOTSUPP;
+ break;
+ }
+
+ state->data[0] = 0x09;
+ state->data[1] = msg[j].len;
+ state->data[2] = msg[j+1].len;
+ state->data[3] = msg[j].addr;
+ memcpy(&state->data[4], msg[j].buf, msg[j].len);
+
+ if (dvb_usb_generic_rw(d, state->data, msg[j].len + 4,
+ state->data, msg[j+1].len + 1, 0) < 0)
+ err("i2c transfer failed.");
+
+ memcpy(msg[j+1].buf, &state->data[1], msg[j+1].len);
+ j++;
+ break;
+ }
+
+ if (msg[j].flags & I2C_M_RD) {
+ /* single read */
+ if (1 + msg[j].len > sizeof(state->data)) {
+ warn("i2c rd: len=%d is too big!\n", msg[j].len);
+ num = -EOPNOTSUPP;
+ break;
+ }
+
+ state->data[0] = 0x09;
+ state->data[1] = 0;
+ state->data[2] = msg[j].len;
+ state->data[3] = msg[j].addr;
+ memcpy(&state->data[4], msg[j].buf, msg[j].len);
+
+ if (dvb_usb_generic_rw(d, state->data, 4,
+ state->data, msg[j].len + 1, 0) < 0)
+ err("i2c transfer failed.");
+
+ memcpy(msg[j].buf, &state->data[1], msg[j].len);
+ break;
+ }
+
+ /* single write */
+ if (3 + msg[j].len > sizeof(state->data)) {
+ warn("i2c wr: len=%d is too big!\n", msg[j].len);
num = -EOPNOTSUPP;
break;
}
- /* always i2c write*/
state->data[0] = 0x08;
- state->data[1] = msg[0].addr;
- state->data[2] = msg[0].len;
+ state->data[1] = msg[j].addr;
+ state->data[2] = msg[j].len;
- memcpy(&state->data[3], msg[0].buf, msg[0].len);
+ memcpy(&state->data[3], msg[j].buf, msg[j].len);
- if (dvb_usb_generic_rw(d, state->data, msg[0].len + 3,
+ if (dvb_usb_generic_rw(d, state->data, msg[j].len + 3,
state->data, 1, 0) < 0)
err("i2c transfer failed.");
+ } // switch
+ j++;
- }
- break;
- case 2:
- /* always i2c read */
- if (4 + msg[0].len > sizeof(state->data)) {
- warn("i2c rd: len=%d is too big!\n",
- msg[0].len);
- num = -EOPNOTSUPP;
- break;
- }
- if (1 + msg[1].len > sizeof(state->data)) {
- warn("i2c rd: len=%d is too big!\n",
- msg[1].len);
- num = -EOPNOTSUPP;
- break;
- }
-
- state->data[0] = 0x09;
- state->data[1] = msg[0].len;
- state->data[2] = msg[1].len;
- state->data[3] = msg[0].addr;
- memcpy(&state->data[4], msg[0].buf, msg[0].len);
-
- if (dvb_usb_generic_rw(d, state->data, msg[0].len + 4,
- state->data, msg[1].len + 1, 0) < 0)
- err("i2c transfer failed.");
-
- memcpy(msg[1].buf, &state->data[1], msg[1].len);
- break;
- default:
- warn("more than 2 i2c messages at a time is not handled yet.");
- break;
- }
+ } // while
mutex_unlock(&d->data_mutex);
mutex_unlock(&d->i2c_mutex);
return num;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 040/197] riscv: Apply SiFive CIP-1200 workaround to single-ASID sfence.vma
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (38 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 039/197] media: dw2102: Dont translate i2c read into write Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 041/197] media: dw2102: fix a potential buffer overflow Greg Kroah-Hartman
` (170 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Samuel Holland, Palmer Dabbelt,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Samuel Holland <samuel.holland@sifive.com>
[ Upstream commit 20e03d702e00a3e0269a1d6f9549c2e370492054 ]
commit 3f1e782998cd ("riscv: add ASID-based tlbflushing methods") added
calls to the sfence.vma instruction with rs2 != x0. These single-ASID
instruction variants are also affected by SiFive errata CIP-1200.
Until now, the errata workaround was not needed for the single-ASID
sfence.vma variants, because they were only used when the ASID allocator
was enabled, and the affected SiFive platforms do not support multiple
ASIDs. However, we are going to start using those sfence.vma variants
regardless of ASID support, so now we need alternatives covering them.
Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
Link: https://lore.kernel.org/r/20240327045035.368512-8-samuel.holland@sifive.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/riscv/include/asm/errata_list.h | 12 +++++++++++-
arch/riscv/include/asm/tlbflush.h | 19 ++++++++++++++++++-
arch/riscv/mm/tlbflush.c | 23 -----------------------
3 files changed, 29 insertions(+), 25 deletions(-)
diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
index efd851e1b4832..7c8a71a526a30 100644
--- a/arch/riscv/include/asm/errata_list.h
+++ b/arch/riscv/include/asm/errata_list.h
@@ -43,11 +43,21 @@ ALTERNATIVE(__stringify(RISCV_PTR do_page_fault), \
CONFIG_ERRATA_SIFIVE_CIP_453)
#else /* !__ASSEMBLY__ */
-#define ALT_FLUSH_TLB_PAGE(x) \
+#define ALT_SFENCE_VMA_ASID(asid) \
+asm(ALTERNATIVE("sfence.vma x0, %0", "sfence.vma", SIFIVE_VENDOR_ID, \
+ ERRATA_SIFIVE_CIP_1200, CONFIG_ERRATA_SIFIVE_CIP_1200) \
+ : : "r" (asid) : "memory")
+
+#define ALT_SFENCE_VMA_ADDR(addr) \
asm(ALTERNATIVE("sfence.vma %0", "sfence.vma", SIFIVE_VENDOR_ID, \
ERRATA_SIFIVE_CIP_1200, CONFIG_ERRATA_SIFIVE_CIP_1200) \
: : "r" (addr) : "memory")
+#define ALT_SFENCE_VMA_ADDR_ASID(addr, asid) \
+asm(ALTERNATIVE("sfence.vma %0, %1", "sfence.vma", SIFIVE_VENDOR_ID, \
+ ERRATA_SIFIVE_CIP_1200, CONFIG_ERRATA_SIFIVE_CIP_1200) \
+ : : "r" (addr), "r" (asid) : "memory")
+
/*
* _val is marked as "will be overwritten", so need to set it to 0
* in the default case.
diff --git a/arch/riscv/include/asm/tlbflush.h b/arch/riscv/include/asm/tlbflush.h
index 4112cc8d1d69f..79dada53d7eb5 100644
--- a/arch/riscv/include/asm/tlbflush.h
+++ b/arch/riscv/include/asm/tlbflush.h
@@ -22,10 +22,27 @@ static inline void local_flush_tlb_all(void)
__asm__ __volatile__ ("sfence.vma" : : : "memory");
}
+static inline void local_flush_tlb_all_asid(unsigned long asid)
+{
+ if (asid != FLUSH_TLB_NO_ASID)
+ ALT_SFENCE_VMA_ASID(asid);
+ else
+ local_flush_tlb_all();
+}
+
/* Flush one page from local TLB */
static inline void local_flush_tlb_page(unsigned long addr)
{
- ALT_FLUSH_TLB_PAGE(__asm__ __volatile__ ("sfence.vma %0" : : "r" (addr) : "memory"));
+ ALT_SFENCE_VMA_ADDR(addr);
+}
+
+static inline void local_flush_tlb_page_asid(unsigned long addr,
+ unsigned long asid)
+{
+ if (asid != FLUSH_TLB_NO_ASID)
+ ALT_SFENCE_VMA_ADDR_ASID(addr, asid);
+ else
+ local_flush_tlb_page(addr);
}
#else /* CONFIG_MMU */
#define local_flush_tlb_all() do { } while (0)
diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c
index 07d743f87b3f6..a6f788774856b 100644
--- a/arch/riscv/mm/tlbflush.c
+++ b/arch/riscv/mm/tlbflush.c
@@ -7,29 +7,6 @@
#include <asm/sbi.h>
#include <asm/mmu_context.h>
-static inline void local_flush_tlb_all_asid(unsigned long asid)
-{
- if (asid != FLUSH_TLB_NO_ASID)
- __asm__ __volatile__ ("sfence.vma x0, %0"
- :
- : "r" (asid)
- : "memory");
- else
- local_flush_tlb_all();
-}
-
-static inline void local_flush_tlb_page_asid(unsigned long addr,
- unsigned long asid)
-{
- if (asid != FLUSH_TLB_NO_ASID)
- __asm__ __volatile__ ("sfence.vma %0, %1"
- :
- : "r" (addr), "r" (asid)
- : "memory");
- else
- local_flush_tlb_page(addr);
-}
-
/*
* Flush entire TLB if number of entries to be flushed is greater
* than the threshold below.
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 041/197] media: dw2102: fix a potential buffer overflow
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (39 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 040/197] riscv: Apply SiFive CIP-1200 workaround to single-ASID sfence.vma Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 042/197] sctp: prefer struct_size over open coded arithmetic Greg Kroah-Hartman
` (169 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Hans Verkuil, Mauro Carvalho Chehab,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mauro Carvalho Chehab <mchehab@kernel.org>
[ Upstream commit 1c73d0b29d04bf4082e7beb6a508895e118ee30d ]
As pointed by smatch:
drivers/media/usb/dvb-usb/dw2102.c:802 su3000_i2c_transfer() error: __builtin_memcpy() '&state->data[4]' too small (64 vs 67)
That seemss to be due to a wrong copy-and-paste.
Fixes: 0e148a522b84 ("media: dw2102: Don't translate i2c read into write")
Reported-by: Hans Verkuil <hverkuil@xs4all.nl>
Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/usb/dvb-usb/dw2102.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
index 10351308b0d02..f31d3835430e7 100644
--- a/drivers/media/usb/dvb-usb/dw2102.c
+++ b/drivers/media/usb/dvb-usb/dw2102.c
@@ -786,7 +786,7 @@ static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
if (msg[j].flags & I2C_M_RD) {
/* single read */
- if (1 + msg[j].len > sizeof(state->data)) {
+ if (4 + msg[j].len > sizeof(state->data)) {
warn("i2c rd: len=%d is too big!\n", msg[j].len);
num = -EOPNOTSUPP;
break;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 042/197] sctp: prefer struct_size over open coded arithmetic
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (40 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 041/197] media: dw2102: fix a potential buffer overflow Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 043/197] firmware: dmi: Stop decoding on broken entry Greg Kroah-Hartman
` (168 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Erick Archer, Xin Long, Kees Cook,
Paolo Abeni, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Erick Archer <erick.archer@outlook.com>
[ Upstream commit e5c5f3596de224422561d48eba6ece5210d967b3 ]
This is an effort to get rid of all multiplications from allocation
functions in order to prevent integer overflows [1][2].
As the "ids" variable is a pointer to "struct sctp_assoc_ids" and this
structure ends in a flexible array:
struct sctp_assoc_ids {
[...]
sctp_assoc_t gaids_assoc_id[];
};
the preferred way in the kernel is to use the struct_size() helper to
do the arithmetic instead of the calculation "size + size * count" in
the kmalloc() function.
Also, refactor the code adding the "ids_size" variable to avoid sizing
twice.
This way, the code is more readable and safer.
This code was detected with the help of Coccinelle, and audited and
modified manually.
Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#open-coded-arithmetic-in-allocator-arguments [1]
Link: https://github.com/KSPP/linux/issues/160 [2]
Signed-off-by: Erick Archer <erick.archer@outlook.com>
Acked-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/PAXPR02MB724871DB78375AB06B5171C88B152@PAXPR02MB7248.eurprd02.prod.outlook.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/sctp/socket.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index c67679a41044f..13b3998c6177f 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -7119,6 +7119,7 @@ static int sctp_getsockopt_assoc_ids(struct sock *sk, int len,
struct sctp_sock *sp = sctp_sk(sk);
struct sctp_association *asoc;
struct sctp_assoc_ids *ids;
+ size_t ids_size;
u32 num = 0;
if (sctp_style(sk, TCP))
@@ -7131,11 +7132,11 @@ static int sctp_getsockopt_assoc_ids(struct sock *sk, int len,
num++;
}
- if (len < sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num)
+ ids_size = struct_size(ids, gaids_assoc_id, num);
+ if (len < ids_size)
return -EINVAL;
- len = sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num;
-
+ len = ids_size;
ids = kmalloc(len, GFP_USER | __GFP_NOWARN);
if (unlikely(!ids))
return -ENOMEM;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 043/197] firmware: dmi: Stop decoding on broken entry
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (41 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 042/197] sctp: prefer struct_size over open coded arithmetic Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 044/197] kunit/fortify: Do not spam logs with fortify WARNs Greg Kroah-Hartman
` (167 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jean Delvare, Michael Kelley,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jean Delvare <jdelvare@suse.de>
[ Upstream commit 0ef11f604503b1862a21597436283f158114d77e ]
If a DMI table entry is shorter than 4 bytes, it is invalid. Due to
how DMI table parsing works, it is impossible to safely recover from
such an error, so we have to stop decoding the table.
Signed-off-by: Jean Delvare <jdelvare@suse.de>
Link: https://lore.kernel.org/linux-kernel/Zh2K3-HLXOesT_vZ@liuwe-devbox-debian-v2/T/
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/firmware/dmi_scan.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 015c95a825d31..ac2a5d2d47463 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -101,6 +101,17 @@ static void dmi_decode_table(u8 *buf,
(data - buf + sizeof(struct dmi_header)) <= dmi_len) {
const struct dmi_header *dm = (const struct dmi_header *)data;
+ /*
+ * If a short entry is found (less than 4 bytes), not only it
+ * is invalid, but we cannot reliably locate the next entry.
+ */
+ if (dm->length < sizeof(struct dmi_header)) {
+ pr_warn(FW_BUG
+ "Corrupted DMI table, offset %zd (only %d entries processed)\n",
+ data - buf, i);
+ break;
+ }
+
/*
* We want to know the total length (formatted area and
* strings) before decoding to make sure we won't run off the
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 044/197] kunit/fortify: Do not spam logs with fortify WARNs
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (42 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 043/197] firmware: dmi: Stop decoding on broken entry Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 045/197] Input: ff-core - prefer struct_size over open coded arithmetic Greg Kroah-Hartman
` (166 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Kees Cook, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <keescook@chromium.org>
[ Upstream commit 091f79e8de44736a1e677701d67334bba5b749e3 ]
When running KUnit fortify tests, we're already doing precise tracking
of which warnings are getting hit. Don't fill the logs with WARNs unless
we've been explicitly built with DEBUG enabled.
Link: https://lore.kernel.org/r/20240429194342.2421639-2-keescook@chromium.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
lib/fortify_kunit.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/lib/fortify_kunit.c b/lib/fortify_kunit.c
index fdba0eaf19a59..ad29721b956bc 100644
--- a/lib/fortify_kunit.c
+++ b/lib/fortify_kunit.c
@@ -15,10 +15,17 @@
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+/* We don't need to fill dmesg with the fortify WARNs during testing. */
+#ifdef DEBUG
+# define FORTIFY_REPORT_KUNIT(x...) __fortify_report(x)
+#else
+# define FORTIFY_REPORT_KUNIT(x...) do { } while (0)
+#endif
+
/* Redefine fortify_panic() to track failures. */
void fortify_add_kunit_error(int write);
#define fortify_panic(func, write, avail, size, retfail) do { \
- __fortify_report(FORTIFY_REASON(func, write), avail, size); \
+ FORTIFY_REPORT_KUNIT(FORTIFY_REASON(func, write), avail, size); \
fortify_add_kunit_error(write); \
return (retfail); \
} while (0)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 045/197] Input: ff-core - prefer struct_size over open coded arithmetic
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (43 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 044/197] kunit/fortify: Do not spam logs with fortify WARNs Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 046/197] usb: xhci: prevent potential failure in handle_tx_event() for Transfer events without TRB Greg Kroah-Hartman
` (165 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Erick Archer, Kees Cook,
Dmitry Torokhov, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Erick Archer <erick.archer@outlook.com>
[ Upstream commit a08b8f8557ad88ffdff8905e5da972afe52e3307 ]
This is an effort to get rid of all multiplications from allocation
functions in order to prevent integer overflows [1][2].
As the "ff" variable is a pointer to "struct ff_device" and this
structure ends in a flexible array:
struct ff_device {
[...]
struct file *effect_owners[] __counted_by(max_effects);
};
the preferred way in the kernel is to use the struct_size() helper to
do the arithmetic instead of the calculation "size + count * size" in
the kzalloc() function.
The struct_size() helper returns SIZE_MAX on overflow. So, refactor
the comparison to take advantage of this.
This way, the code is more readable and safer.
This code was detected with the help of Coccinelle, and audited and
modified manually.
Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#open-coded-arithmetic-in-allocator-arguments [1]
Link: https://github.com/KSPP/linux/issues/160 [2]
Signed-off-by: Erick Archer <erick.archer@outlook.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/AS8PR02MB72371E646714BAE2E51A6A378B152@AS8PR02MB7237.eurprd02.prod.outlook.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/input/ff-core.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/input/ff-core.c b/drivers/input/ff-core.c
index 16231fe080b00..609a5f01761bd 100644
--- a/drivers/input/ff-core.c
+++ b/drivers/input/ff-core.c
@@ -9,8 +9,10 @@
/* #define DEBUG */
#include <linux/input.h>
+#include <linux/limits.h>
#include <linux/module.h>
#include <linux/mutex.h>
+#include <linux/overflow.h>
#include <linux/sched.h>
#include <linux/slab.h>
@@ -315,9 +317,8 @@ int input_ff_create(struct input_dev *dev, unsigned int max_effects)
return -EINVAL;
}
- ff_dev_size = sizeof(struct ff_device) +
- max_effects * sizeof(struct file *);
- if (ff_dev_size < max_effects) /* overflow */
+ ff_dev_size = struct_size(ff, effect_owners, max_effects);
+ if (ff_dev_size == SIZE_MAX) /* overflow */
return -EINVAL;
ff = kzalloc(ff_dev_size, GFP_KERNEL);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 046/197] usb: xhci: prevent potential failure in handle_tx_event() for Transfer events without TRB
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (44 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 045/197] Input: ff-core - prefer struct_size over open coded arithmetic Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 047/197] wifi: mt76: replace skb_put with skb_put_zero Greg Kroah-Hartman
` (164 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Niklas Neronin, Mathias Nyman,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Niklas Neronin <niklas.neronin@linux.intel.com>
[ Upstream commit 66cb618bf0bb82859875b00eeffaf223557cb416 ]
Some transfer events don't always point to a TRB, and consequently don't
have a endpoint ring. In these cases, function handle_tx_event() should
not proceed, because if 'ep->skip' is set, the pointer to the endpoint
ring is used.
To prevent a potential failure and make the code logical, return after
checking the completion code for a Transfer event without TRBs.
Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20240429140245.3955523-11-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/usb/host/xhci-ring.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 48d745e9f9730..48028bab57e34 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -2658,16 +2658,17 @@ static int handle_tx_event(struct xhci_hcd *xhci,
else
xhci_handle_halted_endpoint(xhci, ep, NULL,
EP_SOFT_RESET);
- goto cleanup;
+ break;
case COMP_RING_UNDERRUN:
case COMP_RING_OVERRUN:
case COMP_STOPPED_LENGTH_INVALID:
- goto cleanup;
+ break;
default:
xhci_err(xhci, "ERROR Transfer event for unknown stream ring slot %u ep %u\n",
slot_id, ep_index);
goto err_out;
}
+ return 0;
}
/* Count current td numbers if ep->skip is set */
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 047/197] wifi: mt76: replace skb_put with skb_put_zero
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (45 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 046/197] usb: xhci: prevent potential failure in handle_tx_event() for Transfer events without TRB Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 048/197] wifi: mt76: mt7996: add sanity checks for background radar trigger Greg Kroah-Hartman
` (163 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Felix Fietkau, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felix Fietkau <nbd@nbd.name>
[ Upstream commit 7f819a2f4fbc510e088b49c79addcf1734503578 ]
Avoid potentially reusing uninitialized data
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c | 10 +++++-----
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
index fb8bd50eb7de8..5521c0ea5b261 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
@@ -257,7 +257,7 @@ mt76_connac_mcu_add_nested_tlv(struct sk_buff *skb, int tag, int len,
};
u16 ntlv;
- ptlv = skb_put(skb, len);
+ ptlv = skb_put_zero(skb, len);
memcpy(ptlv, &tlv, sizeof(tlv));
ntlv = le16_to_cpu(ntlv_hdr->tlv_num);
@@ -1670,7 +1670,7 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
set_bit(MT76_HW_SCANNING, &phy->state);
mvif->scan_seq_num = (mvif->scan_seq_num + 1) & 0x7f;
- req = (struct mt76_connac_hw_scan_req *)skb_put(skb, sizeof(*req));
+ req = (struct mt76_connac_hw_scan_req *)skb_put_zero(skb, sizeof(*req));
req->seq_num = mvif->scan_seq_num | mvif->band_idx << 7;
req->bss_idx = mvif->idx;
@@ -1798,7 +1798,7 @@ int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
mvif->scan_seq_num = (mvif->scan_seq_num + 1) & 0x7f;
- req = (struct mt76_connac_sched_scan_req *)skb_put(skb, sizeof(*req));
+ req = (struct mt76_connac_sched_scan_req *)skb_put_zero(skb, sizeof(*req));
req->version = 1;
req->seq_num = mvif->scan_seq_num | mvif->band_idx << 7;
@@ -2321,7 +2321,7 @@ int mt76_connac_mcu_update_gtk_rekey(struct ieee80211_hw *hw,
return -ENOMEM;
skb_put_data(skb, &hdr, sizeof(hdr));
- gtk_tlv = (struct mt76_connac_gtk_rekey_tlv *)skb_put(skb,
+ gtk_tlv = (struct mt76_connac_gtk_rekey_tlv *)skb_put_zero(skb,
sizeof(*gtk_tlv));
gtk_tlv->tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_GTK_REKEY);
gtk_tlv->len = cpu_to_le16(sizeof(*gtk_tlv));
@@ -2446,7 +2446,7 @@ mt76_connac_mcu_set_wow_pattern(struct mt76_dev *dev,
return -ENOMEM;
skb_put_data(skb, &hdr, sizeof(hdr));
- ptlv = (struct mt76_connac_wow_pattern_tlv *)skb_put(skb, sizeof(*ptlv));
+ ptlv = (struct mt76_connac_wow_pattern_tlv *)skb_put_zero(skb, sizeof(*ptlv));
ptlv->tag = cpu_to_le16(UNI_SUSPEND_WOW_PATTERN);
ptlv->len = cpu_to_le16(sizeof(*ptlv));
ptlv->data_len = pattern->pattern_len;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index d90f98c500399..b7157bdb3103f 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -424,7 +424,7 @@ mt7915_mcu_add_nested_subtlv(struct sk_buff *skb, int sub_tag, int sub_len,
.len = cpu_to_le16(sub_len),
};
- ptlv = skb_put(skb, sub_len);
+ ptlv = skb_put_zero(skb, sub_len);
memcpy(ptlv, &tlv, sizeof(tlv));
le16_add_cpu(sub_ntlv, 1);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 048/197] wifi: mt76: mt7996: add sanity checks for background radar trigger
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (46 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 047/197] wifi: mt76: replace skb_put with skb_put_zero Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 049/197] thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data Greg Kroah-Hartman
` (162 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, StanleyYP Wang, Shayne Chen,
Felix Fietkau, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
[ Upstream commit ec55d8e7dfea92daff87f5c01689633f8c4e6a62 ]
Check if background radar is enabled or not before manually triggering it,
and also add more checks in radar detected event.
Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c | 5 +++++
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c | 5 ++++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
index 9bd953586b041..62c03d088925c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
@@ -225,6 +225,11 @@ mt7996_radar_trigger(void *data, u64 val)
if (val > MT_RX_SEL2)
return -EINVAL;
+ if (val == MT_RX_SEL2 && !dev->rdd2_phy) {
+ dev_err(dev->mt76.dev, "Background radar is not enabled\n");
+ return -EINVAL;
+ }
+
return mt7996_mcu_rdd_cmd(dev, RDD_RADAR_EMULATE,
val, 0, 0);
}
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index e86c05d0eecc9..bc3b2babb094d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -355,7 +355,10 @@ mt7996_mcu_rx_radar_detected(struct mt7996_dev *dev, struct sk_buff *skb)
if (r->band_idx >= ARRAY_SIZE(dev->mt76.phys))
return;
- if (dev->rdd2_phy && r->band_idx == MT_RX_SEL2)
+ if (r->band_idx == MT_RX_SEL2 && !dev->rdd2_phy)
+ return;
+
+ if (r->band_idx == MT_RX_SEL2)
mphy = dev->rdd2_phy->mt76;
else
mphy = dev->mt76.phys[r->band_idx];
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 049/197] thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (47 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 048/197] wifi: mt76: mt7996: add sanity checks for background radar trigger Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 050/197] net: dsa: mv88e6xxx: Correct check for empty list Greg Kroah-Hartman
` (161 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Julien Panis, Daniel Lezcano,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Julien Panis <jpanis@baylibre.com>
[ Upstream commit a1191a77351e25ddf091bb1a231cae12ee598b5d ]
Verify that lvts_data is not NULL before using it.
Signed-off-by: Julien Panis <jpanis@baylibre.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20240502-mtk-thermal-lvts-data-v1-1-65f1b0bfad37@baylibre.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/thermal/mediatek/lvts_thermal.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index 6b9422bd8795d..25f836c00e226 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -1250,6 +1250,8 @@ static int lvts_probe(struct platform_device *pdev)
return -ENOMEM;
lvts_data = of_device_get_match_data(dev);
+ if (!lvts_data)
+ return -ENODEV;
lvts_td->clk = devm_clk_get_enabled(dev, NULL);
if (IS_ERR(lvts_td->clk))
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 050/197] net: dsa: mv88e6xxx: Correct check for empty list
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (48 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 049/197] thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 051/197] media: dvb-frontends: tda18271c2dd: Remove casting during div Greg Kroah-Hartman
` (160 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Andrew Lunn, Simon Horman,
Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Simon Horman <horms@kernel.org>
[ Upstream commit 4c7f3950a9fd53a62b156c0fe7c3a2c43b0ba19b ]
Since commit a3c53be55c95 ("net: dsa: mv88e6xxx: Support multiple MDIO
busses") mv88e6xxx_default_mdio_bus() has checked that the
return value of list_first_entry() is non-NULL.
This appears to be intended to guard against the list chip->mdios being
empty. However, it is not the correct check as the implementation of
list_first_entry is not designed to return NULL for empty lists.
Instead, use list_first_entry_or_null() which does return NULL if the
list is empty.
Flagged by Smatch.
Compile tested only.
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20240430-mv88e6xx-list_empty-v3-1-c35c69d88d2e@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/dsa/mv88e6xxx/chip.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 5a202edfec371..80741e506f422 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -131,8 +131,8 @@ struct mii_bus *mv88e6xxx_default_mdio_bus(struct mv88e6xxx_chip *chip)
{
struct mv88e6xxx_mdio_bus *mdio_bus;
- mdio_bus = list_first_entry(&chip->mdios, struct mv88e6xxx_mdio_bus,
- list);
+ mdio_bus = list_first_entry_or_null(&chip->mdios,
+ struct mv88e6xxx_mdio_bus, list);
if (!mdio_bus)
return NULL;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 051/197] media: dvb-frontends: tda18271c2dd: Remove casting during div
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (49 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 050/197] net: dsa: mv88e6xxx: Correct check for empty list Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 052/197] media: s2255: Use refcount_t instead of atomic_t for num_channels Greg Kroah-Hartman
` (159 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ricardo Ribalda,
Mauro Carvalho Chehab, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ricardo Ribalda <ribalda@chromium.org>
[ Upstream commit e9a844632630e18ed0671a7e3467431bd719952e ]
do_div() divides 64 bits by 32. We were adding a casting to the divider
to 64 bits, for a number that fits perfectly in 32 bits. Remove it.
Found by cocci:
drivers/media/dvb-frontends/tda18271c2dd.c:355:1-7: WARNING: do_div() does a 64-by-32 division, please consider using div64_u64 instead.
drivers/media/dvb-frontends/tda18271c2dd.c:331:1-7: WARNING: do_div() does a 64-by-32 division, please consider using div64_u64 instead.
Link: https://lore.kernel.org/linux-media/20240429-fix-cocci-v3-8-3c4865f5a4b0@chromium.org
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/dvb-frontends/tda18271c2dd.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/dvb-frontends/tda18271c2dd.c b/drivers/media/dvb-frontends/tda18271c2dd.c
index a348344879433..fd928787207ed 100644
--- a/drivers/media/dvb-frontends/tda18271c2dd.c
+++ b/drivers/media/dvb-frontends/tda18271c2dd.c
@@ -328,7 +328,7 @@ static int CalcMainPLL(struct tda_state *state, u32 freq)
OscFreq = (u64) freq * (u64) Div;
OscFreq *= (u64) 16384;
- do_div(OscFreq, (u64)16000000);
+ do_div(OscFreq, 16000000);
MainDiv = OscFreq;
state->m_Regs[MPD] = PostDiv & 0x77;
@@ -352,7 +352,7 @@ static int CalcCalPLL(struct tda_state *state, u32 freq)
OscFreq = (u64)freq * (u64)Div;
/* CalDiv = u32( OscFreq * 16384 / 16000000 ); */
OscFreq *= (u64)16384;
- do_div(OscFreq, (u64)16000000);
+ do_div(OscFreq, 16000000);
CalDiv = OscFreq;
state->m_Regs[CPD] = PostDiv;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 052/197] media: s2255: Use refcount_t instead of atomic_t for num_channels
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (50 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 051/197] media: dvb-frontends: tda18271c2dd: Remove casting during div Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 053/197] media: i2c: st-mipid02: Use the correct div function Greg Kroah-Hartman
` (158 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ricardo Ribalda,
Mauro Carvalho Chehab, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ricardo Ribalda <ribalda@chromium.org>
[ Upstream commit 6cff72f6bcee89228a662435b7c47e21a391c8d0 ]
Use an API that resembles more the actual use of num_channels.
Found by cocci:
drivers/media/usb/s2255/s2255drv.c:2362:5-24: WARNING: atomic_dec_and_test variation before object free at line 2363.
drivers/media/usb/s2255/s2255drv.c:1557:5-24: WARNING: atomic_dec_and_test variation before object free at line 1558.
Link: https://lore.kernel.org/linux-media/20240429-fix-cocci-v3-11-3c4865f5a4b0@chromium.org
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/usb/s2255/s2255drv.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/media/usb/s2255/s2255drv.c b/drivers/media/usb/s2255/s2255drv.c
index 8e1de1e8bd127..a6e450181fd01 100644
--- a/drivers/media/usb/s2255/s2255drv.c
+++ b/drivers/media/usb/s2255/s2255drv.c
@@ -247,7 +247,7 @@ struct s2255_vc {
struct s2255_dev {
struct s2255_vc vc[MAX_CHANNELS];
struct v4l2_device v4l2_dev;
- atomic_t num_channels;
+ refcount_t num_channels;
int frames;
struct mutex lock; /* channels[].vdev.lock */
struct mutex cmdlock; /* protects cmdbuf */
@@ -1550,11 +1550,11 @@ static void s2255_video_device_release(struct video_device *vdev)
container_of(vdev, struct s2255_vc, vdev);
dprintk(dev, 4, "%s, chnls: %d\n", __func__,
- atomic_read(&dev->num_channels));
+ refcount_read(&dev->num_channels));
v4l2_ctrl_handler_free(&vc->hdl);
- if (atomic_dec_and_test(&dev->num_channels))
+ if (refcount_dec_and_test(&dev->num_channels))
s2255_destroy(dev);
return;
}
@@ -1659,7 +1659,7 @@ static int s2255_probe_v4l(struct s2255_dev *dev)
"failed to register video device!\n");
break;
}
- atomic_inc(&dev->num_channels);
+ refcount_inc(&dev->num_channels);
v4l2_info(&dev->v4l2_dev, "V4L2 device registered as %s\n",
video_device_node_name(&vc->vdev));
@@ -1667,11 +1667,11 @@ static int s2255_probe_v4l(struct s2255_dev *dev)
pr_info("Sensoray 2255 V4L driver Revision: %s\n",
S2255_VERSION);
/* if no channels registered, return error and probe will fail*/
- if (atomic_read(&dev->num_channels) == 0) {
+ if (refcount_read(&dev->num_channels) == 0) {
v4l2_device_unregister(&dev->v4l2_dev);
return ret;
}
- if (atomic_read(&dev->num_channels) != MAX_CHANNELS)
+ if (refcount_read(&dev->num_channels) != MAX_CHANNELS)
pr_warn("s2255: Not all channels available.\n");
return 0;
}
@@ -2221,7 +2221,7 @@ static int s2255_probe(struct usb_interface *interface,
goto errorFWDATA1;
}
- atomic_set(&dev->num_channels, 0);
+ refcount_set(&dev->num_channels, 0);
dev->pid = id->idProduct;
dev->fw_data = kzalloc(sizeof(struct s2255_fw), GFP_KERNEL);
if (!dev->fw_data)
@@ -2341,12 +2341,12 @@ static void s2255_disconnect(struct usb_interface *interface)
{
struct s2255_dev *dev = to_s2255_dev(usb_get_intfdata(interface));
int i;
- int channels = atomic_read(&dev->num_channels);
+ int channels = refcount_read(&dev->num_channels);
mutex_lock(&dev->lock);
v4l2_device_disconnect(&dev->v4l2_dev);
mutex_unlock(&dev->lock);
/*see comments in the uvc_driver.c usb disconnect function */
- atomic_inc(&dev->num_channels);
+ refcount_inc(&dev->num_channels);
/* unregister each video device. */
for (i = 0; i < channels; i++)
video_unregister_device(&dev->vc[i].vdev);
@@ -2359,7 +2359,7 @@ static void s2255_disconnect(struct usb_interface *interface)
dev->vc[i].vidstatus_ready = 1;
wake_up(&dev->vc[i].wait_vidstatus);
}
- if (atomic_dec_and_test(&dev->num_channels))
+ if (refcount_dec_and_test(&dev->num_channels))
s2255_destroy(dev);
dev_info(&interface->dev, "%s\n", __func__);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 053/197] media: i2c: st-mipid02: Use the correct div function
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (51 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 052/197] media: s2255: Use refcount_t instead of atomic_t for num_channels Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 054/197] media: tc358746: Use the correct div_ function Greg Kroah-Hartman
` (157 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Benjamin Mugnier, Sakari Ailus,
Ricardo Ribalda, Mauro Carvalho Chehab, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ricardo Ribalda <ribalda@chromium.org>
[ Upstream commit 22dccf029e4a67ad5aa62537c47ece9f24c8f970 ]
link_freq does not fit in 32 bits.
Found by cocci:
drivers/media/i2c/st-mipid02.c:329:1-7: WARNING: do_div() does a 64-by-32 division, please consider using div64_s64 instead.
Link: https://lore.kernel.org/linux-media/20240429-fix-cocci-v3-21-3c4865f5a4b0@chromium.org
Reviewed-by: Benjamin Mugnier <benjamin.mugnier@foss.st.com>
Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/i2c/st-mipid02.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/i2c/st-mipid02.c b/drivers/media/i2c/st-mipid02.c
index f250640729ca4..b947a55281f0e 100644
--- a/drivers/media/i2c/st-mipid02.c
+++ b/drivers/media/i2c/st-mipid02.c
@@ -326,7 +326,7 @@ static int mipid02_configure_from_rx_speed(struct mipid02_dev *bridge,
}
dev_dbg(&client->dev, "detect link_freq = %lld Hz", link_freq);
- do_div(ui_4, link_freq);
+ ui_4 = div64_u64(ui_4, link_freq);
bridge->r.clk_lane_reg1 |= ui_4 << 2;
return 0;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 054/197] media: tc358746: Use the correct div_ function
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (52 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 053/197] media: i2c: st-mipid02: Use the correct div function Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 055/197] media: dvb-frontends: tda10048: Fix integer overflow Greg Kroah-Hartman
` (156 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ricardo Ribalda,
Mauro Carvalho Chehab, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ricardo Ribalda <ribalda@chromium.org>
[ Upstream commit d77731382f57b9c18664a13c7e197285060ebf93 ]
fin does not fit in 32 bits in some arches.
Found by cocci:
drivers/media/i2c/tc358746.c:847:2-8: WARNING: do_div() does a 64-by-32 division, please consider using div64_ul instead.
Link: https://lore.kernel.org/linux-media/20240429-fix-cocci-v3-22-3c4865f5a4b0@chromium.org
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/i2c/tc358746.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/media/i2c/tc358746.c b/drivers/media/i2c/tc358746.c
index d676adc4401bb..edf79107adc51 100644
--- a/drivers/media/i2c/tc358746.c
+++ b/drivers/media/i2c/tc358746.c
@@ -844,8 +844,7 @@ static unsigned long tc358746_find_pll_settings(struct tc358746 *tc358746,
continue;
tmp = fout * postdiv;
- do_div(tmp, fin);
- mul = tmp;
+ mul = div64_ul(tmp, fin);
if (mul > 511)
continue;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 055/197] media: dvb-frontends: tda10048: Fix integer overflow
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (53 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 054/197] media: tc358746: Use the correct div_ function Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 056/197] crypto: hisilicon/sec2 - fix for register offset Greg Kroah-Hartman
` (155 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dan Carpenter, Ricardo Ribalda,
Mauro Carvalho Chehab, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ricardo Ribalda <ribalda@chromium.org>
[ Upstream commit 1aa1329a67cc214c3b7bd2a14d1301a795760b07 ]
state->xtal_hz can be up to 16M, so it can overflow a 32 bit integer
when multiplied by pll_mfactor.
Create a new 64 bit variable to hold the calculations.
Link: https://lore.kernel.org/linux-media/20240429-fix-cocci-v3-25-3c4865f5a4b0@chromium.org
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/dvb-frontends/tda10048.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/media/dvb-frontends/tda10048.c b/drivers/media/dvb-frontends/tda10048.c
index 5d5e4e9e4422e..3e725cdcc66bd 100644
--- a/drivers/media/dvb-frontends/tda10048.c
+++ b/drivers/media/dvb-frontends/tda10048.c
@@ -410,6 +410,7 @@ static int tda10048_set_if(struct dvb_frontend *fe, u32 bw)
struct tda10048_config *config = &state->config;
int i;
u32 if_freq_khz;
+ u64 sample_freq;
dprintk(1, "%s(bw = %d)\n", __func__, bw);
@@ -451,9 +452,11 @@ static int tda10048_set_if(struct dvb_frontend *fe, u32 bw)
dprintk(1, "- pll_pfactor = %d\n", state->pll_pfactor);
/* Calculate the sample frequency */
- state->sample_freq = state->xtal_hz * (state->pll_mfactor + 45);
- state->sample_freq /= (state->pll_nfactor + 1);
- state->sample_freq /= (state->pll_pfactor + 4);
+ sample_freq = state->xtal_hz;
+ sample_freq *= state->pll_mfactor + 45;
+ do_div(sample_freq, state->pll_nfactor + 1);
+ do_div(sample_freq, state->pll_pfactor + 4);
+ state->sample_freq = sample_freq;
dprintk(1, "- sample_freq = %d\n", state->sample_freq);
/* Update the I/F */
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 056/197] crypto: hisilicon/sec2 - fix for register offset
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (54 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 055/197] media: dvb-frontends: tda10048: Fix integer overflow Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 057/197] powerpc/dexcr: Track the DEXCR per-process Greg Kroah-Hartman
` (154 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Wenkai Lin, Herbert Xu, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wenkai Lin <linwenkai6@hisilicon.com>
[ Upstream commit 6117af86365916e4202b5a709c155f7e6e5df810 ]
The offset of SEC_CORE_ENABLE_BITMAP should be 0 instead of 32,
it cause a kasan shift-out-bounds warning, fix it.
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/crypto/hisilicon/sec2/sec_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/crypto/hisilicon/sec2/sec_main.c b/drivers/crypto/hisilicon/sec2/sec_main.c
index c290d8937b19c..fabea0d650297 100644
--- a/drivers/crypto/hisilicon/sec2/sec_main.c
+++ b/drivers/crypto/hisilicon/sec2/sec_main.c
@@ -152,7 +152,7 @@ static const struct hisi_qm_cap_info sec_basic_info[] = {
{SEC_CORE_TYPE_NUM_CAP, 0x313c, 16, GENMASK(3, 0), 0x1, 0x1, 0x1},
{SEC_CORE_NUM_CAP, 0x313c, 8, GENMASK(7, 0), 0x4, 0x4, 0x4},
{SEC_CORES_PER_CLUSTER_NUM_CAP, 0x313c, 0, GENMASK(7, 0), 0x4, 0x4, 0x4},
- {SEC_CORE_ENABLE_BITMAP, 0x3140, 32, GENMASK(31, 0), 0x17F, 0x17F, 0xF},
+ {SEC_CORE_ENABLE_BITMAP, 0x3140, 0, GENMASK(31, 0), 0x17F, 0x17F, 0xF},
{SEC_DRV_ALG_BITMAP_LOW, 0x3144, 0, GENMASK(31, 0), 0x18050CB, 0x18050CB, 0x18670CF},
{SEC_DRV_ALG_BITMAP_HIGH, 0x3148, 0, GENMASK(31, 0), 0x395C, 0x395C, 0x395C},
{SEC_DEV_ALG_BITMAP_LOW, 0x314c, 0, GENMASK(31, 0), 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 057/197] powerpc/dexcr: Track the DEXCR per-process
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (55 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 056/197] crypto: hisilicon/sec2 - fix for register offset Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 12:27 ` Michael Ellerman
2024-07-09 11:08 ` [PATCH 6.9 058/197] gve: Account for stopped queues when reading NIC stats Greg Kroah-Hartman
` (153 subsequent siblings)
210 siblings, 1 reply; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Benjamin Gray, Michael Ellerman,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Gray <bgray@linux.ibm.com>
[ Upstream commit 75171f06c4507c3b6b5a69d793879fb20d108bb1 ]
Add capability to make the DEXCR act as a per-process SPR.
We do not yet have an interface for changing the values per task. We
also expect the kernel to use a single DEXCR value across all tasks
while in privileged state, so there is no need to synchronize after
changing it (the userspace aspects will synchronize upon returning to
userspace).
Signed-off-by: Benjamin Gray <bgray@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240417112325.728010-3-bgray@linux.ibm.com
Stable-dep-of: bbd99922d0f4 ("powerpc/dexcr: Reset DEXCR value across exec")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/powerpc/include/asm/processor.h | 1 +
arch/powerpc/kernel/process.c | 10 ++++++++++
arch/powerpc/kernel/ptrace/ptrace-view.c | 7 +------
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
index b2c51d337e60c..882e31296ea6b 100644
--- a/arch/powerpc/include/asm/processor.h
+++ b/arch/powerpc/include/asm/processor.h
@@ -260,6 +260,7 @@ struct thread_struct {
unsigned long sier2;
unsigned long sier3;
unsigned long hashkeyr;
+ unsigned long dexcr;
#endif
};
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 9452a54d356c9..d482c3fd81d7a 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1185,6 +1185,9 @@ static inline void save_sprs(struct thread_struct *t)
if (cpu_has_feature(CPU_FTR_DEXCR_NPHIE))
t->hashkeyr = mfspr(SPRN_HASHKEYR);
+
+ if (cpu_has_feature(CPU_FTR_ARCH_31))
+ t->dexcr = mfspr(SPRN_DEXCR);
#endif
}
@@ -1267,6 +1270,10 @@ static inline void restore_sprs(struct thread_struct *old_thread,
if (cpu_has_feature(CPU_FTR_DEXCR_NPHIE) &&
old_thread->hashkeyr != new_thread->hashkeyr)
mtspr(SPRN_HASHKEYR, new_thread->hashkeyr);
+
+ if (cpu_has_feature(CPU_FTR_ARCH_31) &&
+ old_thread->dexcr != new_thread->dexcr)
+ mtspr(SPRN_DEXCR, new_thread->dexcr);
#endif
}
@@ -1878,6 +1885,9 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
#ifdef CONFIG_PPC_BOOK3S_64
if (cpu_has_feature(CPU_FTR_DEXCR_NPHIE))
p->thread.hashkeyr = current->thread.hashkeyr;
+
+ if (cpu_has_feature(CPU_FTR_ARCH_31))
+ p->thread.dexcr = mfspr(SPRN_DEXCR);
#endif
return 0;
}
diff --git a/arch/powerpc/kernel/ptrace/ptrace-view.c b/arch/powerpc/kernel/ptrace/ptrace-view.c
index 584cf5c3df509..c1819e0a66842 100644
--- a/arch/powerpc/kernel/ptrace/ptrace-view.c
+++ b/arch/powerpc/kernel/ptrace/ptrace-view.c
@@ -469,12 +469,7 @@ static int dexcr_get(struct task_struct *target, const struct user_regset *regse
if (!cpu_has_feature(CPU_FTR_ARCH_31))
return -ENODEV;
- /*
- * The DEXCR is currently static across all CPUs, so we don't
- * store the target's value anywhere, but the static value
- * will also be correct.
- */
- membuf_store(&to, (u64)lower_32_bits(DEXCR_INIT));
+ membuf_store(&to, (u64)lower_32_bits(target->thread.dexcr));
/*
* Technically the HDEXCR is per-cpu, but a hypervisor can't reasonably
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 058/197] gve: Account for stopped queues when reading NIC stats
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (56 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 057/197] powerpc/dexcr: Track the DEXCR per-process Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 059/197] i2c: i801: Annotate apanel_addr as __ro_after_init Greg Kroah-Hartman
` (152 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mina Almasry, Praveen Kaligineedi,
Harshitha Ramamurthy, Shailend Chand, David S. Miller,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shailend Chand <shailend@google.com>
[ Upstream commit af9bcf910b1f86244f39e15e701b2dc564b469a6 ]
We now account for the fact that the NIC might send us stats for a
subset of queues. Without this change, gve_get_ethtool_stats might make
an invalid access on the priv->stats_report->stats array.
Tested-by: Mina Almasry <almasrymina@google.com>
Reviewed-by: Praveen Kaligineedi <pkaligineedi@google.com>
Reviewed-by: Harshitha Ramamurthy <hramamurthy@google.com>
Signed-off-by: Shailend Chand <shailend@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/google/gve/gve_ethtool.c | 41 ++++++++++++++++---
1 file changed, 35 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/ethernet/google/gve/gve_ethtool.c
index 9aebfb843d9d1..ae90c09c56a89 100644
--- a/drivers/net/ethernet/google/gve/gve_ethtool.c
+++ b/drivers/net/ethernet/google/gve/gve_ethtool.c
@@ -8,6 +8,7 @@
#include "gve.h"
#include "gve_adminq.h"
#include "gve_dqo.h"
+#include "gve_utils.h"
static void gve_get_drvinfo(struct net_device *netdev,
struct ethtool_drvinfo *info)
@@ -165,6 +166,8 @@ gve_get_ethtool_stats(struct net_device *netdev,
struct stats *report_stats;
int *rx_qid_to_stats_idx;
int *tx_qid_to_stats_idx;
+ int num_stopped_rxqs = 0;
+ int num_stopped_txqs = 0;
struct gve_priv *priv;
bool skip_nic_stats;
unsigned int start;
@@ -181,12 +184,23 @@ gve_get_ethtool_stats(struct net_device *netdev,
sizeof(int), GFP_KERNEL);
if (!rx_qid_to_stats_idx)
return;
+ for (ring = 0; ring < priv->rx_cfg.num_queues; ring++) {
+ rx_qid_to_stats_idx[ring] = -1;
+ if (!gve_rx_was_added_to_block(priv, ring))
+ num_stopped_rxqs++;
+ }
tx_qid_to_stats_idx = kmalloc_array(num_tx_queues,
sizeof(int), GFP_KERNEL);
if (!tx_qid_to_stats_idx) {
kfree(rx_qid_to_stats_idx);
return;
}
+ for (ring = 0; ring < num_tx_queues; ring++) {
+ tx_qid_to_stats_idx[ring] = -1;
+ if (!gve_tx_was_added_to_block(priv, ring))
+ num_stopped_txqs++;
+ }
+
for (rx_pkts = 0, rx_bytes = 0, rx_hsplit_pkt = 0,
rx_skb_alloc_fail = 0, rx_buf_alloc_fail = 0,
rx_desc_err_dropped_pkt = 0, rx_hsplit_unsplit_pkt = 0,
@@ -260,7 +274,13 @@ gve_get_ethtool_stats(struct net_device *netdev,
/* For rx cross-reporting stats, start from nic rx stats in report */
base_stats_idx = GVE_TX_STATS_REPORT_NUM * num_tx_queues +
GVE_RX_STATS_REPORT_NUM * priv->rx_cfg.num_queues;
- max_stats_idx = NIC_RX_STATS_REPORT_NUM * priv->rx_cfg.num_queues +
+ /* The boundary between driver stats and NIC stats shifts if there are
+ * stopped queues.
+ */
+ base_stats_idx += NIC_RX_STATS_REPORT_NUM * num_stopped_rxqs +
+ NIC_TX_STATS_REPORT_NUM * num_stopped_txqs;
+ max_stats_idx = NIC_RX_STATS_REPORT_NUM *
+ (priv->rx_cfg.num_queues - num_stopped_rxqs) +
base_stats_idx;
/* Preprocess the stats report for rx, map queue id to start index */
skip_nic_stats = false;
@@ -274,6 +294,10 @@ gve_get_ethtool_stats(struct net_device *netdev,
skip_nic_stats = true;
break;
}
+ if (queue_id < 0 || queue_id >= priv->rx_cfg.num_queues) {
+ net_err_ratelimited("Invalid rxq id in NIC stats\n");
+ continue;
+ }
rx_qid_to_stats_idx[queue_id] = stats_idx;
}
/* walk RX rings */
@@ -308,11 +332,11 @@ gve_get_ethtool_stats(struct net_device *netdev,
data[i++] = rx->rx_copybreak_pkt;
data[i++] = rx->rx_copied_pkt;
/* stats from NIC */
- if (skip_nic_stats) {
+ stats_idx = rx_qid_to_stats_idx[ring];
+ if (skip_nic_stats || stats_idx < 0) {
/* skip NIC rx stats */
i += NIC_RX_STATS_REPORT_NUM;
} else {
- stats_idx = rx_qid_to_stats_idx[ring];
for (j = 0; j < NIC_RX_STATS_REPORT_NUM; j++) {
u64 value =
be64_to_cpu(report_stats[stats_idx + j].value);
@@ -338,7 +362,8 @@ gve_get_ethtool_stats(struct net_device *netdev,
/* For tx cross-reporting stats, start from nic tx stats in report */
base_stats_idx = max_stats_idx;
- max_stats_idx = NIC_TX_STATS_REPORT_NUM * num_tx_queues +
+ max_stats_idx = NIC_TX_STATS_REPORT_NUM *
+ (num_tx_queues - num_stopped_txqs) +
max_stats_idx;
/* Preprocess the stats report for tx, map queue id to start index */
skip_nic_stats = false;
@@ -352,6 +377,10 @@ gve_get_ethtool_stats(struct net_device *netdev,
skip_nic_stats = true;
break;
}
+ if (queue_id < 0 || queue_id >= num_tx_queues) {
+ net_err_ratelimited("Invalid txq id in NIC stats\n");
+ continue;
+ }
tx_qid_to_stats_idx[queue_id] = stats_idx;
}
/* walk TX rings */
@@ -383,11 +412,11 @@ gve_get_ethtool_stats(struct net_device *netdev,
data[i++] = gve_tx_load_event_counter(priv, tx);
data[i++] = tx->dma_mapping_error;
/* stats from NIC */
- if (skip_nic_stats) {
+ stats_idx = tx_qid_to_stats_idx[ring];
+ if (skip_nic_stats || stats_idx < 0) {
/* skip NIC tx stats */
i += NIC_TX_STATS_REPORT_NUM;
} else {
- stats_idx = tx_qid_to_stats_idx[ring];
for (j = 0; j < NIC_TX_STATS_REPORT_NUM; j++) {
u64 value =
be64_to_cpu(report_stats[stats_idx + j].value);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 059/197] i2c: i801: Annotate apanel_addr as __ro_after_init
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (57 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 058/197] gve: Account for stopped queues when reading NIC stats Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 060/197] powerpc/64: Set _IO_BASE to POISON_POINTER_DELTA not 0 for CONFIG_PCI=n Greg Kroah-Hartman
` (151 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Heiner Kallweit, Andi Shyti,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiner Kallweit <hkallweit1@gmail.com>
[ Upstream commit 355b1513b1e97b6cef84b786c6480325dfd3753d ]
Annotate this variable as __ro_after_init to protect it from being
overwritten later.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/i2c/busses/i2c-i801.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
index 79870dd7a0146..fafd999b4bcb2 100644
--- a/drivers/i2c/busses/i2c-i801.c
+++ b/drivers/i2c/busses/i2c-i801.c
@@ -1059,7 +1059,7 @@ static const struct pci_device_id i801_ids[] = {
MODULE_DEVICE_TABLE(pci, i801_ids);
#if defined CONFIG_X86 && defined CONFIG_DMI
-static unsigned char apanel_addr;
+static unsigned char apanel_addr __ro_after_init;
/* Scan the system ROM for the signature "FJKEYINF" */
static __init const void __iomem *bios_signature(const void __iomem *bios)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 060/197] powerpc/64: Set _IO_BASE to POISON_POINTER_DELTA not 0 for CONFIG_PCI=n
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (58 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 059/197] i2c: i801: Annotate apanel_addr as __ro_after_init Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 061/197] orangefs: fix out-of-bounds fsid access Greg Kroah-Hartman
` (150 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Michael Ellerman, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Ellerman <mpe@ellerman.id.au>
[ Upstream commit be140f1732b523947425aaafbe2e37b41b622d96 ]
There is code that builds with calls to IO accessors even when
CONFIG_PCI=n, but the actual calls are guarded by runtime checks.
If not those calls would be faulting, because the page at virtual
address zero is (usually) not mapped into the kernel. As Arnd pointed
out, it is possible a large port value could cause the address to be
above mmap_min_addr which would then access userspace, which would be
a bug.
To avoid any such issues, set _IO_BASE to POISON_POINTER_DELTA. That
is a value chosen to point into unmapped space between the kernel and
userspace, so any access will always fault.
Note that on 32-bit POISON_POINTER_DELTA is 0, so the patch only has an
effect on 64-bit.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240503075619.394467-2-mpe@ellerman.id.au
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/powerpc/include/asm/io.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/include/asm/io.h b/arch/powerpc/include/asm/io.h
index ba2e13bb879dc..048e3705af20b 100644
--- a/arch/powerpc/include/asm/io.h
+++ b/arch/powerpc/include/asm/io.h
@@ -37,7 +37,7 @@ extern struct pci_dev *isa_bridge_pcidev;
* define properly based on the platform
*/
#ifndef CONFIG_PCI
-#define _IO_BASE 0
+#define _IO_BASE POISON_POINTER_DELTA
#define _ISA_MEM_BASE 0
#define PCI_DRAM_OFFSET 0
#elif defined(CONFIG_PPC32)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 061/197] orangefs: fix out-of-bounds fsid access
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (59 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 060/197] powerpc/64: Set _IO_BASE to POISON_POINTER_DELTA not 0 for CONFIG_PCI=n Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 062/197] kunit: Fix timeout message Greg Kroah-Hartman
` (149 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Mike Marshall, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Marshall <hubcap@omnibond.com>
[ Upstream commit 53e4efa470d5fc6a96662d2d3322cfc925818517 ]
Arnd Bergmann sent a patch to fsdevel, he says:
"orangefs_statfs() copies two consecutive fields of the superblock into
the statfs structure, which triggers a warning from the string fortification
helpers"
Jan Kara suggested an alternate way to do the patch to make it more readable.
I ran both ideas through xfstests and both seem fine. This patch
is based on Jan Kara's suggestion.
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/orangefs/super.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/orangefs/super.c b/fs/orangefs/super.c
index 34849b4a3243c..907765673765c 100644
--- a/fs/orangefs/super.c
+++ b/fs/orangefs/super.c
@@ -201,7 +201,8 @@ static int orangefs_statfs(struct dentry *dentry, struct kstatfs *buf)
(long)new_op->downcall.resp.statfs.files_avail);
buf->f_type = sb->s_magic;
- memcpy(&buf->f_fsid, &ORANGEFS_SB(sb)->fs_id, sizeof(buf->f_fsid));
+ buf->f_fsid.val[0] = ORANGEFS_SB(sb)->fs_id;
+ buf->f_fsid.val[1] = ORANGEFS_SB(sb)->id;
buf->f_bsize = new_op->downcall.resp.statfs.block_size;
buf->f_namelen = ORANGEFS_NAME_MAX;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 062/197] kunit: Fix timeout message
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (60 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 061/197] orangefs: fix out-of-bounds fsid access Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 063/197] kunit: Handle test faults Greg Kroah-Hartman
` (148 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Brendan Higgins, Shuah Khan,
Kees Cook, David Gow, Rae Moar, Mickaël Salaün,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mickaël Salaün <mic@digikod.net>
[ Upstream commit 53026ff63bb07c04a0e962a74723eb10ff6f9dc7 ]
The exit code is always checked, so let's properly handle the -ETIMEDOUT
error code.
Cc: Brendan Higgins <brendanhiggins@google.com>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: David Gow <davidgow@google.com>
Reviewed-by: Rae Moar <rmoar@google.com>
Signed-off-by: Mickaël Salaün <mic@digikod.net>
Link: https://lore.kernel.org/r/20240408074625.65017-4-mic@digikod.net
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Stable-dep-of: 3a35c13007de ("kunit: Handle test faults")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
lib/kunit/try-catch.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/kunit/try-catch.c b/lib/kunit/try-catch.c
index d9d1df28cc52e..9c9e4dcf06d96 100644
--- a/lib/kunit/try-catch.c
+++ b/lib/kunit/try-catch.c
@@ -78,7 +78,6 @@ void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context)
time_remaining = wait_for_completion_timeout(&try_completion,
kunit_test_timeout());
if (time_remaining == 0) {
- kunit_err(test, "try timed out\n");
try_catch->try_result = -ETIMEDOUT;
kthread_stop(task_struct);
}
@@ -93,6 +92,8 @@ void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context)
try_catch->try_result = 0;
else if (exit_code == -EINTR)
kunit_err(test, "wake_up_process() was never called\n");
+ else if (exit_code == -ETIMEDOUT)
+ kunit_err(test, "try timed out\n");
else if (exit_code)
kunit_err(test, "Unknown error: %d\n", exit_code);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 063/197] kunit: Handle test faults
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (61 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 062/197] kunit: Fix timeout message Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 064/197] powerpc/xmon: Check cpu id in commands "c#", "dp#" and "dx#" Greg Kroah-Hartman
` (147 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Brendan Higgins, Eric W. Biederman,
Shuah Khan, Kees Cook, David Gow, Rae Moar,
Mickaël Salaün, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mickaël Salaün <mic@digikod.net>
[ Upstream commit 3a35c13007dea132a65f07de05c26b87837fadc2 ]
Previously, when a kernel test thread crashed (e.g. NULL pointer
dereference, general protection fault), the KUnit test hanged for 30
seconds and exited with a timeout error.
Fix this issue by waiting on task_struct->vfork_done instead of the
custom kunit_try_catch.try_completion, and track the execution state by
initially setting try_result with -EINTR and only setting it to 0 if
the test passed.
Fix kunit_generic_run_threadfn_adapter() signature by returning 0
instead of calling kthread_complete_and_exit(). Because thread's exit
code is never checked, always set it to 0 to make it clear. To make
this explicit, export kthread_exit() for KUnit tests built as module.
Fix the -EINTR error message, which couldn't be reached until now.
This is tested with a following patch.
Cc: Brendan Higgins <brendanhiggins@google.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: David Gow <davidgow@google.com>
Tested-by: Rae Moar <rmoar@google.com>
Signed-off-by: Mickaël Salaün <mic@digikod.net>
Link: https://lore.kernel.org/r/20240408074625.65017-5-mic@digikod.net
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/kunit/try-catch.h | 3 ---
kernel/kthread.c | 1 +
lib/kunit/try-catch.c | 19 ++++++++++++-------
3 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/include/kunit/try-catch.h b/include/kunit/try-catch.h
index c507dd43119d5..7c966a1adbd30 100644
--- a/include/kunit/try-catch.h
+++ b/include/kunit/try-catch.h
@@ -14,13 +14,11 @@
typedef void (*kunit_try_catch_func_t)(void *);
-struct completion;
struct kunit;
/**
* struct kunit_try_catch - provides a generic way to run code which might fail.
* @test: The test case that is currently being executed.
- * @try_completion: Completion that the control thread waits on while test runs.
* @try_result: Contains any errno obtained while running test case.
* @try: The function, the test case, to attempt to run.
* @catch: The function called if @try bails out.
@@ -46,7 +44,6 @@ struct kunit;
struct kunit_try_catch {
/* private: internal use only. */
struct kunit *test;
- struct completion *try_completion;
int try_result;
kunit_try_catch_func_t try;
kunit_try_catch_func_t catch;
diff --git a/kernel/kthread.c b/kernel/kthread.c
index c5e40830c1f2d..f7be976ff88af 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -315,6 +315,7 @@ void __noreturn kthread_exit(long result)
kthread->result = result;
do_exit(0);
}
+EXPORT_SYMBOL(kthread_exit);
/**
* kthread_complete_and_exit - Exit the current kthread.
diff --git a/lib/kunit/try-catch.c b/lib/kunit/try-catch.c
index 9c9e4dcf06d96..34d30a6f23054 100644
--- a/lib/kunit/try-catch.c
+++ b/lib/kunit/try-catch.c
@@ -18,7 +18,7 @@
void __noreturn kunit_try_catch_throw(struct kunit_try_catch *try_catch)
{
try_catch->try_result = -EFAULT;
- kthread_complete_and_exit(try_catch->try_completion, -EFAULT);
+ kthread_exit(0);
}
EXPORT_SYMBOL_GPL(kunit_try_catch_throw);
@@ -26,9 +26,12 @@ static int kunit_generic_run_threadfn_adapter(void *data)
{
struct kunit_try_catch *try_catch = data;
+ try_catch->try_result = -EINTR;
try_catch->try(try_catch->context);
+ if (try_catch->try_result == -EINTR)
+ try_catch->try_result = 0;
- kthread_complete_and_exit(try_catch->try_completion, 0);
+ return 0;
}
static unsigned long kunit_test_timeout(void)
@@ -58,13 +61,11 @@ static unsigned long kunit_test_timeout(void)
void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context)
{
- DECLARE_COMPLETION_ONSTACK(try_completion);
struct kunit *test = try_catch->test;
struct task_struct *task_struct;
int exit_code, time_remaining;
try_catch->context = context;
- try_catch->try_completion = &try_completion;
try_catch->try_result = 0;
task_struct = kthread_create(kunit_generic_run_threadfn_adapter,
try_catch, "kunit_try_catch_thread");
@@ -74,8 +75,12 @@ void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context)
}
get_task_struct(task_struct);
wake_up_process(task_struct);
-
- time_remaining = wait_for_completion_timeout(&try_completion,
+ /*
+ * As for a vfork(2), task_struct->vfork_done (pointing to the
+ * underlying kthread->exited) can be used to wait for the end of a
+ * kernel thread.
+ */
+ time_remaining = wait_for_completion_timeout(task_struct->vfork_done,
kunit_test_timeout());
if (time_remaining == 0) {
try_catch->try_result = -ETIMEDOUT;
@@ -91,7 +96,7 @@ void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context)
if (exit_code == -EFAULT)
try_catch->try_result = 0;
else if (exit_code == -EINTR)
- kunit_err(test, "wake_up_process() was never called\n");
+ kunit_err(test, "try faulted\n");
else if (exit_code == -ETIMEDOUT)
kunit_err(test, "try timed out\n");
else if (exit_code)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 064/197] powerpc/xmon: Check cpu id in commands "c#", "dp#" and "dx#"
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (62 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 063/197] kunit: Handle test faults Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 065/197] selftests/net: fix uninitialized variables Greg Kroah-Hartman
` (146 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Greg Kurz, Cédric Le Goater,
Michael Ellerman, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kurz <groug@kaod.org>
[ Upstream commit 8873aab8646194a4446117bb617cc71bddda2dee ]
All these commands end up peeking into the PACA using the user
originated cpu id as an index. Check the cpu id is valid in order
to prevent xmon to crash. Instead of printing an error, this follows
the same behavior as the "lp s #" command : ignore the buggy cpu id
parameter and fall back to the #-less version of the command.
Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/161531347060.252863.10490063933688958044.stgit@bahia.lan
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/powerpc/xmon/xmon.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index d79d6633f3336..bd4813bad317e 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -1350,7 +1350,7 @@ static int cpu_cmd(void)
}
termch = cpu;
- if (!scanhex(&cpu)) {
+ if (!scanhex(&cpu) || cpu >= num_possible_cpus()) {
/* print cpus waiting or in xmon */
printf("cpus stopped:");
last_cpu = first_cpu = NR_CPUS;
@@ -2772,7 +2772,7 @@ static void dump_pacas(void)
termch = c; /* Put c back, it wasn't 'a' */
- if (scanhex(&num))
+ if (scanhex(&num) && num < num_possible_cpus())
dump_one_paca(num);
else
dump_one_paca(xmon_owner);
@@ -2845,7 +2845,7 @@ static void dump_xives(void)
termch = c; /* Put c back, it wasn't 'a' */
- if (scanhex(&num))
+ if (scanhex(&num) && num < num_possible_cpus())
dump_one_xive(num);
else
dump_one_xive(xmon_owner);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 065/197] selftests/net: fix uninitialized variables
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (63 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 064/197] powerpc/xmon: Check cpu id in commands "c#", "dp#" and "dx#" Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 066/197] igc: fix a log entry using uninitialized netdev Greg Kroah-Hartman
` (145 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, John Hubbard, Willem de Bruijn,
Mat Martineau, Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Hubbard <jhubbard@nvidia.com>
[ Upstream commit eb709b5f6536636dfb87b85ded0b2af9bb6cd9e6 ]
When building with clang, via:
make LLVM=1 -C tools/testing/selftest
...clang warns about three variables that are not initialized in all
cases:
1) The opt_ipproto_off variable is used uninitialized if "testname" is
not "ip". Willem de Bruijn pointed out that this is an actual bug, and
suggested the fix that I'm using here (thanks!).
2) The addr_len is used uninitialized, but only in the assert case,
which bails out, so this is harmless.
3) The family variable in add_listener() is only used uninitialized in
the error case (neither IPv4 nor IPv6 is specified), so it's also
harmless.
Fix by initializing each variable.
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Mat Martineau <martineau@kernel.org>
Link: https://lore.kernel.org/r/20240506190204.28497-1-jhubbard@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/net/gro.c | 3 +++
tools/testing/selftests/net/ip_local_port_range.c | 2 +-
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/net/gro.c b/tools/testing/selftests/net/gro.c
index 353e1e867fbb2..6038b96ecee88 100644
--- a/tools/testing/selftests/net/gro.c
+++ b/tools/testing/selftests/net/gro.c
@@ -119,6 +119,9 @@ static void setup_sock_filter(int fd)
next_off = offsetof(struct ipv6hdr, nexthdr);
ipproto_off = ETH_HLEN + next_off;
+ /* Overridden later if exthdrs are used: */
+ opt_ipproto_off = ipproto_off;
+
if (strcmp(testname, "ip") == 0) {
if (proto == PF_INET)
optlen = sizeof(struct ip_timestamp);
diff --git a/tools/testing/selftests/net/ip_local_port_range.c b/tools/testing/selftests/net/ip_local_port_range.c
index 193b82745fd87..29451d2244b75 100644
--- a/tools/testing/selftests/net/ip_local_port_range.c
+++ b/tools/testing/selftests/net/ip_local_port_range.c
@@ -359,7 +359,7 @@ TEST_F(ip_local_port_range, late_bind)
struct sockaddr_in v4;
struct sockaddr_in6 v6;
} addr;
- socklen_t addr_len;
+ socklen_t addr_len = 0;
const int one = 1;
int fd, err;
__u32 range;
diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
index 7426a2cbd4a03..7ad5a59adff2b 100644
--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
@@ -1276,7 +1276,7 @@ int add_listener(int argc, char *argv[])
struct sockaddr_storage addr;
struct sockaddr_in6 *a6;
struct sockaddr_in *a4;
- u_int16_t family;
+ u_int16_t family = AF_UNSPEC;
int enable = 1;
int sock;
int err;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 066/197] igc: fix a log entry using uninitialized netdev
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (64 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 065/197] selftests/net: fix uninitialized variables Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 067/197] bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD Greg Kroah-Hartman
` (144 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Corinna Vinschen, Hariprasad Kelam,
Vinicius Costa Gomes, Naama Meir, Tony Nguyen, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Corinna Vinschen <vinschen@redhat.com>
[ Upstream commit 86167183a17e03ec77198897975e9fdfbd53cb0b ]
During successful probe, igc logs this:
[ 5.133667] igc 0000:01:00.0 (unnamed net_device) (uninitialized): PHC added
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The reason is that igc_ptp_init() is called very early, even before
register_netdev() has been called. So the netdev_info() call works
on a partially uninitialized netdev.
Fix this by calling igc_ptp_init() after register_netdev(), right
after the media autosense check, just as in igb. Add a comment,
just as in igb.
Now the log message is fine:
[ 5.200987] igc 0000:01:00.0 eth0: PHC added
Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
Reviewed-by: Hariprasad Kelam <hkelam@marvell.com>
Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Tested-by: Naama Meir <naamax.meir@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/intel/igc/igc_main.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index 58bc96021bb4c..07feb951be749 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -6932,8 +6932,6 @@ static int igc_probe(struct pci_dev *pdev,
device_set_wakeup_enable(&adapter->pdev->dev,
adapter->flags & IGC_FLAG_WOL_SUPPORTED);
- igc_ptp_init(adapter);
-
igc_tsn_clear_schedule(adapter);
/* reset the hardware with the new settings */
@@ -6955,6 +6953,9 @@ static int igc_probe(struct pci_dev *pdev,
/* Check if Media Autosense is enabled */
adapter->ei = *ei;
+ /* do hw tstamp init after resetting */
+ igc_ptp_init(adapter);
+
/* print pcie link status and MAC address */
pcie_print_link_status(pdev);
netdev_info(netdev, "MAC: %pM\n", netdev->dev_addr);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 067/197] bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (65 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 066/197] igc: fix a log entry using uninitialized netdev Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 068/197] f2fs: check validation of fault attrs in f2fs_build_fault_attr() Greg Kroah-Hartman
` (143 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jose E. Marchesi, Andrii Nakryiko,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jose E. Marchesi <jose.marchesi@oracle.com>
[ Upstream commit 009367099eb61a4fc2af44d4eb06b6b4de7de6db ]
[Changes from V1:
- Use a default branch in the switch statement to initialize `val'.]
GCC warns that `val' may be used uninitialized in the
BPF_CRE_READ_BITFIELD macro, defined in bpf_core_read.h as:
[...]
unsigned long long val; \
[...] \
switch (__CORE_RELO(s, field, BYTE_SIZE)) { \
case 1: val = *(const unsigned char *)p; break; \
case 2: val = *(const unsigned short *)p; break; \
case 4: val = *(const unsigned int *)p; break; \
case 8: val = *(const unsigned long long *)p; break; \
} \
[...]
val; \
} \
This patch adds a default entry in the switch statement that sets
`val' to zero in order to avoid the warning, and random values to be
used in case __builtin_preserve_field_info returns unexpected values
for BPF_FIELD_BYTE_SIZE.
Tested in bpf-next master.
No regressions.
Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20240508101313.16662-1-jose.marchesi@oracle.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/lib/bpf/bpf_core_read.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/lib/bpf/bpf_core_read.h b/tools/lib/bpf/bpf_core_read.h
index 1ce738d91685a..670726353aa50 100644
--- a/tools/lib/bpf/bpf_core_read.h
+++ b/tools/lib/bpf/bpf_core_read.h
@@ -104,6 +104,7 @@ enum bpf_enum_value_kind {
case 2: val = *(const unsigned short *)p; break; \
case 4: val = *(const unsigned int *)p; break; \
case 8: val = *(const unsigned long long *)p; break; \
+ default: val = 0; break; \
} \
val <<= __CORE_RELO(s, field, LSHIFT_U64); \
if (__CORE_RELO(s, field, SIGNED)) \
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 068/197] f2fs: check validation of fault attrs in f2fs_build_fault_attr()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (66 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 067/197] bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 069/197] scsi: mpi3mr: Sanitise num_phys Greg Kroah-Hartman
` (142 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Chao Yu, Jaegeuk Kim, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <chao@kernel.org>
[ Upstream commit 4ed886b187f47447ad559619c48c086f432d2b77 ]
- It missed to check validation of fault attrs in parse_options(),
let's fix to add check condition in f2fs_build_fault_attr().
- Use f2fs_build_fault_attr() in __sbi_store() to clean up code.
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/f2fs/f2fs.h | 12 ++++++++----
fs/f2fs/super.c | 27 ++++++++++++++++++++-------
fs/f2fs/sysfs.c | 14 ++++++++++----
3 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 07b3675ea1694..f5adb9942c4c4 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -72,7 +72,7 @@ enum {
struct f2fs_fault_info {
atomic_t inject_ops;
- unsigned int inject_rate;
+ int inject_rate;
unsigned int inject_type;
};
@@ -4597,10 +4597,14 @@ static inline bool f2fs_need_verity(const struct inode *inode, pgoff_t idx)
}
#ifdef CONFIG_F2FS_FAULT_INJECTION
-extern void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate,
- unsigned int type);
+extern int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
+ unsigned long type);
#else
-#define f2fs_build_fault_attr(sbi, rate, type) do { } while (0)
+static int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
+ unsigned long type)
+{
+ return 0;
+}
#endif
static inline bool is_journalled_quota(struct f2fs_sb_info *sbi)
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 2f75a7dfc311d..0c3ebe4d9026d 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -66,21 +66,31 @@ const char *f2fs_fault_name[FAULT_MAX] = {
[FAULT_NO_SEGMENT] = "no free segment",
};
-void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate,
- unsigned int type)
+int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
+ unsigned long type)
{
struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info;
if (rate) {
+ if (rate > INT_MAX)
+ return -EINVAL;
atomic_set(&ffi->inject_ops, 0);
- ffi->inject_rate = rate;
+ ffi->inject_rate = (int)rate;
}
- if (type)
- ffi->inject_type = type;
+ if (type) {
+ if (type >= BIT(FAULT_MAX))
+ return -EINVAL;
+ ffi->inject_type = (unsigned int)type;
+ }
if (!rate && !type)
memset(ffi, 0, sizeof(struct f2fs_fault_info));
+ else
+ f2fs_info(sbi,
+ "build fault injection attr: rate: %lu, type: 0x%lx",
+ rate, type);
+ return 0;
}
#endif
@@ -886,14 +896,17 @@ static int parse_options(struct super_block *sb, char *options, bool is_remount)
case Opt_fault_injection:
if (args->from && match_int(args, &arg))
return -EINVAL;
- f2fs_build_fault_attr(sbi, arg, F2FS_ALL_FAULT_TYPE);
+ if (f2fs_build_fault_attr(sbi, arg,
+ F2FS_ALL_FAULT_TYPE))
+ return -EINVAL;
set_opt(sbi, FAULT_INJECTION);
break;
case Opt_fault_type:
if (args->from && match_int(args, &arg))
return -EINVAL;
- f2fs_build_fault_attr(sbi, 0, arg);
+ if (f2fs_build_fault_attr(sbi, 0, arg))
+ return -EINVAL;
set_opt(sbi, FAULT_INJECTION);
break;
#else
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index a568ce96cf563..7aa3844e7a808 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -484,10 +484,16 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
if (ret < 0)
return ret;
#ifdef CONFIG_F2FS_FAULT_INJECTION
- if (a->struct_type == FAULT_INFO_TYPE && t >= BIT(FAULT_MAX))
- return -EINVAL;
- if (a->struct_type == FAULT_INFO_RATE && t >= UINT_MAX)
- return -EINVAL;
+ if (a->struct_type == FAULT_INFO_TYPE) {
+ if (f2fs_build_fault_attr(sbi, 0, t))
+ return -EINVAL;
+ return count;
+ }
+ if (a->struct_type == FAULT_INFO_RATE) {
+ if (f2fs_build_fault_attr(sbi, t, 0))
+ return -EINVAL;
+ return count;
+ }
#endif
if (a->struct_type == RESERVED_BLOCKS) {
spin_lock(&sbi->stat_lock);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 069/197] scsi: mpi3mr: Sanitise num_phys
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (67 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 068/197] f2fs: check validation of fault attrs in f2fs_build_fault_attr() Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 070/197] serial: imx: Raise TX trigger level to 8 Greg Kroah-Hartman
` (141 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Tomas Henzl,
Sathya Prakash Veerichetty, Martin K. Petersen, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomas Henzl <thenzl@redhat.com>
[ Upstream commit 3668651def2c1622904e58b0280ee93121f2b10b ]
Information is stored in mr_sas_port->phy_mask, values larger then size of
this field shouldn't be allowed.
Signed-off-by: Tomas Henzl <thenzl@redhat.com>
Link: https://lore.kernel.org/r/20240226151013.8653-1-thenzl@redhat.com
Acked-by: Sathya Prakash Veerichetty <sathya.prakash@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/scsi/mpi3mr/mpi3mr_transport.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/scsi/mpi3mr/mpi3mr_transport.c b/drivers/scsi/mpi3mr/mpi3mr_transport.c
index d32ad46318cb0..7ca9a7c2709cf 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_transport.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_transport.c
@@ -1355,11 +1355,21 @@ static struct mpi3mr_sas_port *mpi3mr_sas_port_add(struct mpi3mr_ioc *mrioc,
mpi3mr_sas_port_sanity_check(mrioc, mr_sas_node,
mr_sas_port->remote_identify.sas_address, hba_port);
+ if (mr_sas_node->num_phys > sizeof(mr_sas_port->phy_mask) * 8)
+ ioc_info(mrioc, "max port count %u could be too high\n",
+ mr_sas_node->num_phys);
+
for (i = 0; i < mr_sas_node->num_phys; i++) {
if ((mr_sas_node->phy[i].remote_identify.sas_address !=
mr_sas_port->remote_identify.sas_address) ||
(mr_sas_node->phy[i].hba_port != hba_port))
continue;
+
+ if (i > sizeof(mr_sas_port->phy_mask) * 8) {
+ ioc_warn(mrioc, "skipping port %u, max allowed value is %lu\n",
+ i, sizeof(mr_sas_port->phy_mask) * 8);
+ goto out_fail;
+ }
list_add_tail(&mr_sas_node->phy[i].port_siblings,
&mr_sas_port->phy_list);
mr_sas_port->num_phys++;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 070/197] serial: imx: Raise TX trigger level to 8
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (68 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 069/197] scsi: mpi3mr: Sanitise num_phys Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 071/197] jffs2: Fix potential illegal address access in jffs2_free_inode Greg Kroah-Hartman
` (140 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Michael Krummsdorf,
Matthias Schiffer, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
[ Upstream commit a3d8728ab079951741efa11360df43dbfacba7ab ]
At the default TX trigger level of 2 in non-DMA mode (meaning that an
interrupt is generated when less than 2 characters are left in the
FIFO), we have observed frequent buffer underruns at 115200 Baud on an
i.MX8M Nano. This can cause communication issues if the receiving side
expects a continuous transfer.
Increasing the level to 8 makes the UART trigger an interrupt earlier,
giving the kernel enough time to refill the FIFO, at the cost of
triggering one interrupt per ~24 instead of ~30 bytes of transmitted
data (as the i.MX UART has a 32 byte FIFO).
Signed-off-by: Michael Krummsdorf <michael.krummsdorf@tq-group.com>
Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Link: https://lore.kernel.org/r/20240508133744.35858-1-matthias.schiffer@ew.tq-group.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/tty/serial/imx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 9552228d21614..f63cdd6794419 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -1314,7 +1314,7 @@ static void imx_uart_clear_rx_errors(struct imx_port *sport)
}
-#define TXTL_DEFAULT 2 /* reset default */
+#define TXTL_DEFAULT 8
#define RXTL_DEFAULT 8 /* 8 characters or aging timer */
#define TXTL_DMA 8 /* DMA burst setting */
#define RXTL_DMA 9 /* DMA burst setting */
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 071/197] jffs2: Fix potential illegal address access in jffs2_free_inode
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (69 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 070/197] serial: imx: Raise TX trigger level to 8 Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 072/197] s390: Mark psw in __load_psw_mask() as __unitialized Greg Kroah-Hartman
` (139 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Wang Yong, Lu Zhongjun, Yang Tao,
Xu Xin, Yang Yang, Richard Weinberger, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wang Yong <wang.yong12@zte.com.cn>
[ Upstream commit af9a8730ddb6a4b2edd779ccc0aceb994d616830 ]
During the stress testing of the jffs2 file system,the following
abnormal printouts were found:
[ 2430.649000] Unable to handle kernel paging request at virtual address 0069696969696948
[ 2430.649622] Mem abort info:
[ 2430.649829] ESR = 0x96000004
[ 2430.650115] EC = 0x25: DABT (current EL), IL = 32 bits
[ 2430.650564] SET = 0, FnV = 0
[ 2430.650795] EA = 0, S1PTW = 0
[ 2430.651032] FSC = 0x04: level 0 translation fault
[ 2430.651446] Data abort info:
[ 2430.651683] ISV = 0, ISS = 0x00000004
[ 2430.652001] CM = 0, WnR = 0
[ 2430.652558] [0069696969696948] address between user and kernel address ranges
[ 2430.653265] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[ 2430.654512] CPU: 2 PID: 20919 Comm: cat Not tainted 5.15.25-g512f31242bf6 #33
[ 2430.655008] Hardware name: linux,dummy-virt (DT)
[ 2430.655517] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 2430.656142] pc : kfree+0x78/0x348
[ 2430.656630] lr : jffs2_free_inode+0x24/0x48
[ 2430.657051] sp : ffff800009eebd10
[ 2430.657355] x29: ffff800009eebd10 x28: 0000000000000001 x27: 0000000000000000
[ 2430.658327] x26: ffff000038f09d80 x25: 0080000000000000 x24: ffff800009d38000
[ 2430.658919] x23: 5a5a5a5a5a5a5a5a x22: ffff000038f09d80 x21: ffff8000084f0d14
[ 2430.659434] x20: ffff0000bf9a6ac0 x19: 0169696969696940 x18: 0000000000000000
[ 2430.659969] x17: ffff8000b6506000 x16: ffff800009eec000 x15: 0000000000004000
[ 2430.660637] x14: 0000000000000000 x13: 00000001000820a1 x12: 00000000000d1b19
[ 2430.661345] x11: 0004000800000000 x10: 0000000000000001 x9 : ffff8000084f0d14
[ 2430.662025] x8 : ffff0000bf9a6b40 x7 : ffff0000bf9a6b48 x6 : 0000000003470302
[ 2430.662695] x5 : ffff00002e41dcc0 x4 : ffff0000bf9aa3b0 x3 : 0000000003470342
[ 2430.663486] x2 : 0000000000000000 x1 : ffff8000084f0d14 x0 : fffffc0000000000
[ 2430.664217] Call trace:
[ 2430.664528] kfree+0x78/0x348
[ 2430.664855] jffs2_free_inode+0x24/0x48
[ 2430.665233] i_callback+0x24/0x50
[ 2430.665528] rcu_do_batch+0x1ac/0x448
[ 2430.665892] rcu_core+0x28c/0x3c8
[ 2430.666151] rcu_core_si+0x18/0x28
[ 2430.666473] __do_softirq+0x138/0x3cc
[ 2430.666781] irq_exit+0xf0/0x110
[ 2430.667065] handle_domain_irq+0x6c/0x98
[ 2430.667447] gic_handle_irq+0xac/0xe8
[ 2430.667739] call_on_irq_stack+0x28/0x54
The parameter passed to kfree was 5a5a5a5a, which corresponds to the target field of
the jffs_inode_info structure. It was found that all variables in the jffs_inode_info
structure were 5a5a5a5a, except for the first member sem. It is suspected that these
variables are not initialized because they were set to 5a5a5a5a during memory testing,
which is meant to detect uninitialized memory.The sem variable is initialized in the
function jffs2_i_init_once, while other members are initialized in
the function jffs2_init_inode_info.
The function jffs2_init_inode_info is called after iget_locked,
but in the iget_locked function, the destroy_inode process is triggered,
which releases the inode and consequently, the target member of the inode
is not initialized.In concurrent high pressure scenarios, iget_locked
may enter the destroy_inode branch as described in the code.
Since the destroy_inode functionality of jffs2 only releases the target,
the fix method is to set target to NULL in jffs2_i_init_once.
Signed-off-by: Wang Yong <wang.yong12@zte.com.cn>
Reviewed-by: Lu Zhongjun <lu.zhongjun@zte.com.cn>
Reviewed-by: Yang Tao <yang.tao172@zte.com.cn>
Cc: Xu Xin <xu.xin16@zte.com.cn>
Cc: Yang Yang <yang.yang29@zte.com.cn>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/jffs2/super.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
index aede1be4dc0cd..4545f885c41ef 100644
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
@@ -58,6 +58,7 @@ static void jffs2_i_init_once(void *foo)
struct jffs2_inode_info *f = foo;
mutex_init(&f->sem);
+ f->target = NULL;
inode_init_once(&f->vfs_inode);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 072/197] s390: Mark psw in __load_psw_mask() as __unitialized
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (70 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 071/197] jffs2: Fix potential illegal address access in jffs2_free_inode Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 073/197] s390/pkey: Use kfree_sensitive() to fix Coccinelle warnings Greg Kroah-Hartman
` (138 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Heiko Carstens, Sven Schnelle,
Alexander Gordeev, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Schnelle <svens@linux.ibm.com>
[ Upstream commit 7278a8fb8d032dfdc03d9b5d17e0bc451cdc1492 ]
Without __unitialized, the following code is generated when
INIT_STACK_ALL_ZERO is enabled:
86: d7 0f f0 a0 f0 a0 xc 160(16,%r15), 160(%r15)
8c: e3 40 f0 a0 00 24 stg %r4, 160(%r15)
92: c0 10 00 00 00 08 larl %r1, 0xa2
98: e3 10 f0 a8 00 24 stg %r1, 168(%r15)
9e: b2 b2 f0 a0 lpswe 160(%r15)
The xc is not adding any security because psw is fully initialized
with the following instructions. Add __unitialized to the psw
definitiation to avoid the superfluous clearing of psw.
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/s390/include/asm/processor.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
index bbbdc5abe2b2c..a589547ee0200 100644
--- a/arch/s390/include/asm/processor.h
+++ b/arch/s390/include/asm/processor.h
@@ -305,8 +305,8 @@ static inline void __load_psw(psw_t psw)
*/
static __always_inline void __load_psw_mask(unsigned long mask)
{
+ psw_t psw __uninitialized;
unsigned long addr;
- psw_t psw;
psw.mask = mask;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 073/197] s390/pkey: Use kfree_sensitive() to fix Coccinelle warnings
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (71 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 072/197] s390: Mark psw in __load_psw_mask() as __unitialized Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 074/197] s390/pkey: Wipe sensitive data on failure Greg Kroah-Hartman
` (137 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jules Irenge, Holger Dengler,
Heiko Carstens, Alexander Gordeev, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jules Irenge <jbi.octave@gmail.com>
[ Upstream commit 22e6824622e8a8889df0f8fc4ed5aea0e702a694 ]
Replace memzero_explicit() and kfree() with kfree_sensitive() to fix
warnings reported by Coccinelle:
WARNING opportunity for kfree_sensitive/kvfree_sensitive (line 1506)
WARNING opportunity for kfree_sensitive/kvfree_sensitive (line 1643)
WARNING opportunity for kfree_sensitive/kvfree_sensitive (line 1770)
Signed-off-by: Jules Irenge <jbi.octave@gmail.com>
Reviewed-by: Holger Dengler <dengler@linux.ibm.com>
Link: https://lore.kernel.org/r/ZjqZkNi_JUJu73Rg@octinomon.home
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/s390/crypto/pkey_api.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/s390/crypto/pkey_api.c b/drivers/s390/crypto/pkey_api.c
index dccf664a3d957..933894065623e 100644
--- a/drivers/s390/crypto/pkey_api.c
+++ b/drivers/s390/crypto/pkey_api.c
@@ -1503,8 +1503,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
rc = pkey_keyblob2pkey(kkey, ktp.keylen, ktp.protkey.protkey,
&ktp.protkey.len, &ktp.protkey.type);
pr_debug("%s pkey_keyblob2pkey()=%d\n", __func__, rc);
- memzero_explicit(kkey, ktp.keylen);
- kfree(kkey);
+ kfree_sensitive(kkey);
if (rc)
break;
if (copy_to_user(utp, &ktp, sizeof(ktp)))
@@ -1640,8 +1639,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
&ktp.protkey.type);
pr_debug("%s pkey_keyblob2pkey2()=%d\n", __func__, rc);
kfree(apqns);
- memzero_explicit(kkey, ktp.keylen);
- kfree(kkey);
+ kfree_sensitive(kkey);
if (rc)
break;
if (copy_to_user(utp, &ktp, sizeof(ktp)))
@@ -1767,8 +1765,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
protkey, &protkeylen, &ktp.pkeytype);
pr_debug("%s pkey_keyblob2pkey3()=%d\n", __func__, rc);
kfree(apqns);
- memzero_explicit(kkey, ktp.keylen);
- kfree(kkey);
+ kfree_sensitive(kkey);
if (rc) {
kfree(protkey);
break;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 074/197] s390/pkey: Wipe sensitive data on failure
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (72 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 073/197] s390/pkey: Use kfree_sensitive() to fix Coccinelle warnings Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 075/197] s390/pkey: Wipe copies of clear-key structures " Greg Kroah-Hartman
` (136 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Heiko Carstens, Harald Freudenberger,
Ingo Franzki, Holger Dengler, Alexander Gordeev, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Holger Dengler <dengler@linux.ibm.com>
[ Upstream commit 1d8c270de5eb74245d72325d285894a577a945d9 ]
Wipe sensitive data from stack also if the copy_to_user() fails.
Suggested-by: Heiko Carstens <hca@linux.ibm.com>
Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Ingo Franzki <ifranzki@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/s390/crypto/pkey_api.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/s390/crypto/pkey_api.c b/drivers/s390/crypto/pkey_api.c
index 933894065623e..179287157c2fe 100644
--- a/drivers/s390/crypto/pkey_api.c
+++ b/drivers/s390/crypto/pkey_api.c
@@ -1377,7 +1377,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
if (rc)
break;
if (copy_to_user(ucs, &kcs, sizeof(kcs)))
- return -EFAULT;
+ rc = -EFAULT;
memzero_explicit(&kcs, sizeof(kcs));
break;
}
@@ -1412,7 +1412,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
if (rc)
break;
if (copy_to_user(ucp, &kcp, sizeof(kcp)))
- return -EFAULT;
+ rc = -EFAULT;
memzero_explicit(&kcp, sizeof(kcp));
break;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 075/197] s390/pkey: Wipe copies of clear-key structures on failure
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (73 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 074/197] s390/pkey: Wipe sensitive data on failure Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 076/197] s390/pkey: Wipe copies of protected- and secure-keys Greg Kroah-Hartman
` (135 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harald Freudenberger, Ingo Franzki,
Heiko Carstens, Holger Dengler, Alexander Gordeev, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Holger Dengler <dengler@linux.ibm.com>
[ Upstream commit d65d76a44ffe74c73298ada25b0f578680576073 ]
Wipe all sensitive data from stack for all IOCTLs, which convert a
clear-key into a protected- or secure-key.
Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Ingo Franzki <ifranzki@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/s390/crypto/pkey_api.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/s390/crypto/pkey_api.c b/drivers/s390/crypto/pkey_api.c
index 179287157c2fe..1aa78a74fbade 100644
--- a/drivers/s390/crypto/pkey_api.c
+++ b/drivers/s390/crypto/pkey_api.c
@@ -1374,9 +1374,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
rc = cca_clr2seckey(kcs.cardnr, kcs.domain, kcs.keytype,
kcs.clrkey.clrkey, kcs.seckey.seckey);
pr_debug("%s cca_clr2seckey()=%d\n", __func__, rc);
- if (rc)
- break;
- if (copy_to_user(ucs, &kcs, sizeof(kcs)))
+ if (!rc && copy_to_user(ucs, &kcs, sizeof(kcs)))
rc = -EFAULT;
memzero_explicit(&kcs, sizeof(kcs));
break;
@@ -1409,9 +1407,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
kcp.protkey.protkey,
&kcp.protkey.len, &kcp.protkey.type);
pr_debug("%s pkey_clr2protkey()=%d\n", __func__, rc);
- if (rc)
- break;
- if (copy_to_user(ucp, &kcp, sizeof(kcp)))
+ if (!rc && copy_to_user(ucp, &kcp, sizeof(kcp)))
rc = -EFAULT;
memzero_explicit(&kcp, sizeof(kcp));
break;
@@ -1562,11 +1558,14 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
if (copy_from_user(&kcs, ucs, sizeof(kcs)))
return -EFAULT;
apqns = _copy_apqns_from_user(kcs.apqns, kcs.apqn_entries);
- if (IS_ERR(apqns))
+ if (IS_ERR(apqns)) {
+ memzero_explicit(&kcs, sizeof(kcs));
return PTR_ERR(apqns);
+ }
kkey = kzalloc(klen, GFP_KERNEL);
if (!kkey) {
kfree(apqns);
+ memzero_explicit(&kcs, sizeof(kcs));
return -ENOMEM;
}
rc = pkey_clr2seckey2(apqns, kcs.apqn_entries,
@@ -1576,15 +1575,18 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
kfree(apqns);
if (rc) {
kfree(kkey);
+ memzero_explicit(&kcs, sizeof(kcs));
break;
}
if (kcs.key) {
if (kcs.keylen < klen) {
kfree(kkey);
+ memzero_explicit(&kcs, sizeof(kcs));
return -EINVAL;
}
if (copy_to_user(kcs.key, kkey, klen)) {
kfree(kkey);
+ memzero_explicit(&kcs, sizeof(kcs));
return -EFAULT;
}
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 076/197] s390/pkey: Wipe copies of protected- and secure-keys
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (74 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 075/197] s390/pkey: Wipe copies of clear-key structures " Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 077/197] btrfs: scrub: initialize ret in scrub_simple_mirror() to fix compilation warning Greg Kroah-Hartman
` (134 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harald Freudenberger, Ingo Franzki,
Heiko Carstens, Holger Dengler, Alexander Gordeev, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Holger Dengler <dengler@linux.ibm.com>
[ Upstream commit f2ebdadd85af4f4d0cae1e5d009c70eccc78c207 ]
Although the clear-key of neither protected- nor secure-keys is
accessible, this key material should only be visible to the calling
process. So wipe all copies of protected- or secure-keys from stack,
even in case of an error.
Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Ingo Franzki <ifranzki@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/s390/crypto/pkey_api.c | 80 ++++++++++++++++------------------
1 file changed, 37 insertions(+), 43 deletions(-)
diff --git a/drivers/s390/crypto/pkey_api.c b/drivers/s390/crypto/pkey_api.c
index 1aa78a74fbade..ffc0b5db55c29 100644
--- a/drivers/s390/crypto/pkey_api.c
+++ b/drivers/s390/crypto/pkey_api.c
@@ -1359,10 +1359,9 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
rc = cca_genseckey(kgs.cardnr, kgs.domain,
kgs.keytype, kgs.seckey.seckey);
pr_debug("%s cca_genseckey()=%d\n", __func__, rc);
- if (rc)
- break;
- if (copy_to_user(ugs, &kgs, sizeof(kgs)))
- return -EFAULT;
+ if (!rc && copy_to_user(ugs, &kgs, sizeof(kgs)))
+ rc = -EFAULT;
+ memzero_explicit(&kgs, sizeof(kgs));
break;
}
case PKEY_CLR2SECK: {
@@ -1390,10 +1389,9 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
ksp.seckey.seckey, ksp.protkey.protkey,
&ksp.protkey.len, &ksp.protkey.type);
pr_debug("%s cca_sec2protkey()=%d\n", __func__, rc);
- if (rc)
- break;
- if (copy_to_user(usp, &ksp, sizeof(ksp)))
- return -EFAULT;
+ if (!rc && copy_to_user(usp, &ksp, sizeof(ksp)))
+ rc = -EFAULT;
+ memzero_explicit(&ksp, sizeof(ksp));
break;
}
case PKEY_CLR2PROTK: {
@@ -1437,10 +1435,9 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
rc = pkey_skey2pkey(ksp.seckey.seckey, ksp.protkey.protkey,
&ksp.protkey.len, &ksp.protkey.type);
pr_debug("%s pkey_skey2pkey()=%d\n", __func__, rc);
- if (rc)
- break;
- if (copy_to_user(usp, &ksp, sizeof(ksp)))
- return -EFAULT;
+ if (!rc && copy_to_user(usp, &ksp, sizeof(ksp)))
+ rc = -EFAULT;
+ memzero_explicit(&ksp, sizeof(ksp));
break;
}
case PKEY_VERIFYKEY: {
@@ -1452,10 +1449,9 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
rc = pkey_verifykey(&kvk.seckey, &kvk.cardnr, &kvk.domain,
&kvk.keysize, &kvk.attributes);
pr_debug("%s pkey_verifykey()=%d\n", __func__, rc);
- if (rc)
- break;
- if (copy_to_user(uvk, &kvk, sizeof(kvk)))
- return -EFAULT;
+ if (!rc && copy_to_user(uvk, &kvk, sizeof(kvk)))
+ rc = -EFAULT;
+ memzero_explicit(&kvk, sizeof(kvk));
break;
}
case PKEY_GENPROTK: {
@@ -1468,10 +1464,9 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
rc = pkey_genprotkey(kgp.keytype, kgp.protkey.protkey,
&kgp.protkey.len, &kgp.protkey.type);
pr_debug("%s pkey_genprotkey()=%d\n", __func__, rc);
- if (rc)
- break;
- if (copy_to_user(ugp, &kgp, sizeof(kgp)))
- return -EFAULT;
+ if (!rc && copy_to_user(ugp, &kgp, sizeof(kgp)))
+ rc = -EFAULT;
+ memzero_explicit(&kgp, sizeof(kgp));
break;
}
case PKEY_VERIFYPROTK: {
@@ -1483,6 +1478,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
rc = pkey_verifyprotkey(kvp.protkey.protkey,
kvp.protkey.len, kvp.protkey.type);
pr_debug("%s pkey_verifyprotkey()=%d\n", __func__, rc);
+ memzero_explicit(&kvp, sizeof(kvp));
break;
}
case PKEY_KBLOB2PROTK: {
@@ -1500,10 +1496,9 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
&ktp.protkey.len, &ktp.protkey.type);
pr_debug("%s pkey_keyblob2pkey()=%d\n", __func__, rc);
kfree_sensitive(kkey);
- if (rc)
- break;
- if (copy_to_user(utp, &ktp, sizeof(ktp)))
- return -EFAULT;
+ if (!rc && copy_to_user(utp, &ktp, sizeof(ktp)))
+ rc = -EFAULT;
+ memzero_explicit(&ktp, sizeof(ktp));
break;
}
case PKEY_GENSECK2: {
@@ -1529,23 +1524,23 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
pr_debug("%s pkey_genseckey2()=%d\n", __func__, rc);
kfree(apqns);
if (rc) {
- kfree(kkey);
+ kfree_sensitive(kkey);
break;
}
if (kgs.key) {
if (kgs.keylen < klen) {
- kfree(kkey);
+ kfree_sensitive(kkey);
return -EINVAL;
}
if (copy_to_user(kgs.key, kkey, klen)) {
- kfree(kkey);
+ kfree_sensitive(kkey);
return -EFAULT;
}
}
kgs.keylen = klen;
if (copy_to_user(ugs, &kgs, sizeof(kgs)))
rc = -EFAULT;
- kfree(kkey);
+ kfree_sensitive(kkey);
break;
}
case PKEY_CLR2SECK2: {
@@ -1574,18 +1569,18 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
pr_debug("%s pkey_clr2seckey2()=%d\n", __func__, rc);
kfree(apqns);
if (rc) {
- kfree(kkey);
+ kfree_sensitive(kkey);
memzero_explicit(&kcs, sizeof(kcs));
break;
}
if (kcs.key) {
if (kcs.keylen < klen) {
- kfree(kkey);
+ kfree_sensitive(kkey);
memzero_explicit(&kcs, sizeof(kcs));
return -EINVAL;
}
if (copy_to_user(kcs.key, kkey, klen)) {
- kfree(kkey);
+ kfree_sensitive(kkey);
memzero_explicit(&kcs, sizeof(kcs));
return -EFAULT;
}
@@ -1594,7 +1589,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
if (copy_to_user(ucs, &kcs, sizeof(kcs)))
rc = -EFAULT;
memzero_explicit(&kcs, sizeof(kcs));
- kfree(kkey);
+ kfree_sensitive(kkey);
break;
}
case PKEY_VERIFYKEY2: {
@@ -1611,7 +1606,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
&kvk.cardnr, &kvk.domain,
&kvk.type, &kvk.size, &kvk.flags);
pr_debug("%s pkey_verifykey2()=%d\n", __func__, rc);
- kfree(kkey);
+ kfree_sensitive(kkey);
if (rc)
break;
if (copy_to_user(uvk, &kvk, sizeof(kvk)))
@@ -1642,10 +1637,9 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
pr_debug("%s pkey_keyblob2pkey2()=%d\n", __func__, rc);
kfree(apqns);
kfree_sensitive(kkey);
- if (rc)
- break;
- if (copy_to_user(utp, &ktp, sizeof(ktp)))
- return -EFAULT;
+ if (!rc && copy_to_user(utp, &ktp, sizeof(ktp)))
+ rc = -EFAULT;
+ memzero_explicit(&ktp, sizeof(ktp));
break;
}
case PKEY_APQNS4K: {
@@ -1673,7 +1667,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
rc = pkey_apqns4key(kkey, kak.keylen, kak.flags,
apqns, &nr_apqns);
pr_debug("%s pkey_apqns4key()=%d\n", __func__, rc);
- kfree(kkey);
+ kfree_sensitive(kkey);
if (rc && rc != -ENOSPC) {
kfree(apqns);
break;
@@ -1759,7 +1753,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
protkey = kmalloc(protkeylen, GFP_KERNEL);
if (!protkey) {
kfree(apqns);
- kfree(kkey);
+ kfree_sensitive(kkey);
return -ENOMEM;
}
rc = pkey_keyblob2pkey3(apqns, ktp.apqn_entries,
@@ -1769,20 +1763,20 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
kfree(apqns);
kfree_sensitive(kkey);
if (rc) {
- kfree(protkey);
+ kfree_sensitive(protkey);
break;
}
if (ktp.pkey && ktp.pkeylen) {
if (protkeylen > ktp.pkeylen) {
- kfree(protkey);
+ kfree_sensitive(protkey);
return -EINVAL;
}
if (copy_to_user(ktp.pkey, protkey, protkeylen)) {
- kfree(protkey);
+ kfree_sensitive(protkey);
return -EFAULT;
}
}
- kfree(protkey);
+ kfree_sensitive(protkey);
ktp.pkeylen = protkeylen;
if (copy_to_user(utp, &ktp, sizeof(ktp)))
return -EFAULT;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 077/197] btrfs: scrub: initialize ret in scrub_simple_mirror() to fix compilation warning
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (75 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 076/197] s390/pkey: Wipe copies of protected- and secure-keys Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 078/197] cdrom: rearrange last_media_change check to avoid unintentional overflow Greg Kroah-Hartman
` (133 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Boris Burkov, Lu Yao, David Sterba,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lu Yao <yaolu@kylinos.cn>
[ Upstream commit b4e585fffc1cf877112ed231a91f089e85688c2a ]
The following error message is displayed:
../fs/btrfs/scrub.c:2152:9: error: ‘ret’ may be used uninitialized
in this function [-Werror=maybe-uninitialized]"
Compiler version: gcc version: (Debian 10.2.1-6) 10.2.1 20210110
Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: Lu Yao <yaolu@kylinos.cn>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/btrfs/scrub.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 4b22cfe9a98cb..afd6932f5e895 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -2100,7 +2100,7 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx,
struct btrfs_fs_info *fs_info = sctx->fs_info;
const u64 logical_end = logical_start + logical_length;
u64 cur_logical = logical_start;
- int ret;
+ int ret = 0;
/* The range must be inside the bg */
ASSERT(logical_start >= bg->start && logical_end <= bg->start + bg->length);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 078/197] cdrom: rearrange last_media_change check to avoid unintentional overflow
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (76 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 077/197] btrfs: scrub: initialize ret in scrub_simple_mirror() to fix compilation warning Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 079/197] tools/power turbostat: Remember global max_die_id Greg Kroah-Hartman
` (132 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, linux-hardening, Justin Stitt,
Phillip Potter, Jens Axboe, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Justin Stitt <justinstitt@google.com>
[ Upstream commit efb905aeb44b0e99c0e6b07865b1885ae0471ebf ]
When running syzkaller with the newly reintroduced signed integer wrap
sanitizer we encounter this splat:
[ 366.015950] UBSAN: signed-integer-overflow in ../drivers/cdrom/cdrom.c:2361:33
[ 366.021089] -9223372036854775808 - 346321 cannot be represented in type '__s64' (aka 'long long')
[ 366.025894] program syz-executor.4 is using a deprecated SCSI ioctl, please convert it to SG_IO
[ 366.027502] CPU: 5 PID: 28472 Comm: syz-executor.7 Not tainted 6.8.0-rc2-00035-gb3ef86b5a957 #1
[ 366.027512] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 366.027518] Call Trace:
[ 366.027523] <TASK>
[ 366.027533] dump_stack_lvl+0x93/0xd0
[ 366.027899] handle_overflow+0x171/0x1b0
[ 366.038787] ata1.00: invalid multi_count 32 ignored
[ 366.043924] cdrom_ioctl+0x2c3f/0x2d10
[ 366.063932] ? __pm_runtime_resume+0xe6/0x130
[ 366.071923] sr_block_ioctl+0x15d/0x1d0
[ 366.074624] ? __pfx_sr_block_ioctl+0x10/0x10
[ 366.077642] blkdev_ioctl+0x419/0x500
[ 366.080231] ? __pfx_blkdev_ioctl+0x10/0x10
...
Historically, the signed integer overflow sanitizer did not work in the
kernel due to its interaction with `-fwrapv` but this has since been
changed [1] in the newest version of Clang. It was re-enabled in the
kernel with Commit 557f8c582a9ba8ab ("ubsan: Reintroduce signed overflow
sanitizer").
Let's rearrange the check to not perform any arithmetic, thus not
tripping the sanitizer.
Link: https://github.com/llvm/llvm-project/pull/82432 [1]
Closes: https://github.com/KSPP/linux/issues/354
Cc: linux-hardening@vger.kernel.org
Signed-off-by: Justin Stitt <justinstitt@google.com>
Link: https://lore.kernel.org/lkml/20240507-b4-sio-ata1-v1-1-810ffac6080a@google.com
Reviewed-by: Phillip Potter <phil@philpotter.co.uk>
Link: https://lore.kernel.org/lkml/ZjqU0fbzHrlnad8D@equinox
Signed-off-by: Phillip Potter <phil@philpotter.co.uk>
Link: https://lore.kernel.org/r/20240507222520.1445-2-phil@philpotter.co.uk
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/cdrom/cdrom.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index a5e07270e0d41..20c90ebb3a3f6 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -2358,7 +2358,7 @@ static int cdrom_ioctl_timed_media_change(struct cdrom_device_info *cdi,
return -EFAULT;
tmp_info.media_flags = 0;
- if (tmp_info.last_media_change - cdi->last_media_change_ms < 0)
+ if (cdi->last_media_change_ms > tmp_info.last_media_change)
tmp_info.media_flags |= MEDIA_CHANGED_FLAG;
tmp_info.last_media_change = cdi->last_media_change_ms;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 079/197] tools/power turbostat: Remember global max_die_id
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (77 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 078/197] cdrom: rearrange last_media_change check to avoid unintentional overflow Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 080/197] tools/power turbostat: Avoid possible memory corruption due to sparse topology IDs Greg Kroah-Hartman
` (131 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Len Brown, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Len Brown <len.brown@intel.com>
[ Upstream commit cda203388687aa075db6f8996c3c4549fa518ea8 ]
This is necessary to gracefully handle sparse die_id's.
no functional change
Signed-off-by: Len Brown <len.brown@intel.com>
Stable-dep-of: 3559ea813ad3 ("tools/power turbostat: Avoid possible memory corruption due to sparse topology IDs")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/power/x86/turbostat/turbostat.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index 8071a3ef2a2e8..25417c3a47ab6 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -1415,6 +1415,7 @@ struct topo_params {
int allowed_cpus;
int allowed_cores;
int max_cpu_num;
+ int max_die_id;
int max_node_num;
int nodes_per_pkg;
int cores_per_node;
@@ -6967,7 +6968,6 @@ void topology_probe(bool startup)
int i;
int max_core_id = 0;
int max_package_id = 0;
- int max_die_id = 0;
int max_siblings = 0;
/* Initialize num_cpus, max_cpu_num */
@@ -7084,8 +7084,8 @@ void topology_probe(bool startup)
/* get die information */
cpus[i].die_id = get_die_id(i);
- if (cpus[i].die_id > max_die_id)
- max_die_id = cpus[i].die_id;
+ if (cpus[i].die_id > topo.max_die_id)
+ topo.max_die_id = cpus[i].die_id;
/* get numa node information */
cpus[i].physical_node_id = get_physical_node_id(&cpus[i]);
@@ -7111,9 +7111,9 @@ void topology_probe(bool startup)
if (!summary_only && topo.cores_per_node > 1)
BIC_PRESENT(BIC_Core);
- topo.num_die = max_die_id + 1;
+ topo.num_die = topo.max_die_id + 1;
if (debug > 1)
- fprintf(outf, "max_die_id %d, sizing for %d die\n", max_die_id, topo.num_die);
+ fprintf(outf, "max_die_id %d, sizing for %d die\n", topo.max_die_id, topo.num_die);
if (!summary_only && topo.num_die > 1)
BIC_PRESENT(BIC_Die);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 080/197] tools/power turbostat: Avoid possible memory corruption due to sparse topology IDs
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (78 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 079/197] tools/power turbostat: Remember global max_die_id Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 081/197] vhost: Use virtqueue mutex for swapping worker Greg Kroah-Hartman
` (130 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Patryk Wlazlyn, Len Brown,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Patryk Wlazlyn <patryk.wlazlyn@linux.intel.com>
[ Upstream commit 3559ea813ad3a9627934325c68ad05b18008a077 ]
Save the highest core and package id when parsing topology to
allocate enough memory when get_rapl_counters() is called with a core or
a package id as a domain.
Note that RAPL domains are per-package on Intel, but per-core on AMD.
Thus, the RAPL code effectively runs in different modes on those two
product lines.
Signed-off-by: Patryk Wlazlyn <patryk.wlazlyn@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/power/x86/turbostat/turbostat.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index 25417c3a47ab6..5d80d193e5bee 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -1022,6 +1022,7 @@ struct rapl_counter_info_t {
/* struct rapl_counter_info_t for each RAPL domain */
struct rapl_counter_info_t *rapl_counter_info_perdomain;
+unsigned int rapl_counter_info_perdomain_size;
#define RAPL_COUNTER_FLAG_USE_MSR_SUM (1u << 1)
@@ -1415,6 +1416,8 @@ struct topo_params {
int allowed_cpus;
int allowed_cores;
int max_cpu_num;
+ int max_core_id;
+ int max_package_id;
int max_die_id;
int max_node_num;
int nodes_per_pkg;
@@ -3369,15 +3372,18 @@ void write_rapl_counter(struct rapl_counter *rc, struct rapl_counter_info_t *rci
rc->scale = rci->scale[idx];
}
-int get_rapl_counters(int cpu, int domain, struct core_data *c, struct pkg_data *p)
+int get_rapl_counters(int cpu, unsigned int domain, struct core_data *c, struct pkg_data *p)
{
unsigned long long perf_data[NUM_RAPL_COUNTERS + 1];
- struct rapl_counter_info_t *rci = &rapl_counter_info_perdomain[domain];
+ struct rapl_counter_info_t *rci;
if (debug)
fprintf(stderr, "%s: cpu%d domain%d\n", __func__, cpu, domain);
assert(rapl_counter_info_perdomain);
+ assert(domain < rapl_counter_info_perdomain_size);
+
+ rci = &rapl_counter_info_perdomain[domain];
/*
* If we have any perf counters to read, read them all now, in bulk
@@ -4181,7 +4187,7 @@ void free_fd_rapl_percpu(void)
if (!rapl_counter_info_perdomain)
return;
- const int num_domains = platform->has_per_core_rapl ? topo.num_cores : topo.num_packages;
+ const int num_domains = rapl_counter_info_perdomain_size;
for (int domain_id = 0; domain_id < num_domains; ++domain_id) {
if (rapl_counter_info_perdomain[domain_id].fd_perf != -1)
@@ -4189,6 +4195,8 @@ void free_fd_rapl_percpu(void)
}
free(rapl_counter_info_perdomain);
+ rapl_counter_info_perdomain = NULL;
+ rapl_counter_info_perdomain_size = 0;
}
void free_all_buffers(void)
@@ -6479,17 +6487,18 @@ void linux_perf_init(void)
void rapl_perf_init(void)
{
- const int num_domains = platform->has_per_core_rapl ? topo.num_cores : topo.num_packages;
+ const unsigned int num_domains = (platform->has_per_core_rapl ? topo.max_core_id : topo.max_package_id) + 1;
bool *domain_visited = calloc(num_domains, sizeof(bool));
rapl_counter_info_perdomain = calloc(num_domains, sizeof(*rapl_counter_info_perdomain));
if (rapl_counter_info_perdomain == NULL)
err(-1, "calloc rapl_counter_info_percpu");
+ rapl_counter_info_perdomain_size = num_domains;
/*
* Initialize rapl_counter_info_percpu
*/
- for (int domain_id = 0; domain_id < num_domains; ++domain_id) {
+ for (unsigned int domain_id = 0; domain_id < num_domains; ++domain_id) {
struct rapl_counter_info_t *rci = &rapl_counter_info_perdomain[domain_id];
rci->fd_perf = -1;
@@ -6509,7 +6518,7 @@ void rapl_perf_init(void)
bool has_counter = 0;
double scale;
enum rapl_unit unit;
- int next_domain;
+ unsigned int next_domain;
memset(domain_visited, 0, num_domains * sizeof(*domain_visited));
@@ -6522,6 +6531,8 @@ void rapl_perf_init(void)
next_domain =
platform->has_per_core_rapl ? cpus[cpu].physical_core_id : cpus[cpu].physical_package_id;
+ assert(next_domain < num_domains);
+
if (domain_visited[next_domain])
continue;
@@ -7104,6 +7115,8 @@ void topology_probe(bool startup)
if (cpus[i].thread_id == 0)
topo.num_cores++;
}
+ topo.max_core_id = max_core_id;
+ topo.max_package_id = max_package_id;
topo.cores_per_node = max_core_id + 1;
if (debug > 1)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 081/197] vhost: Use virtqueue mutex for swapping worker
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (79 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 080/197] tools/power turbostat: Avoid possible memory corruption due to sparse topology IDs Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 082/197] vhost: Release worker mutex during flushes Greg Kroah-Hartman
` (129 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mike Christie, Michael S. Tsirkin,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Christie <michael.christie@oracle.com>
[ Upstream commit 34cf9ba5f00a222dddd9fc71de7c68fdaac7fb97 ]
__vhost_vq_attach_worker uses the vhost_dev mutex to serialize the
swapping of a virtqueue's worker. This was done for simplicity because
we are already holding that mutex.
In the next patches where the worker can be killed while in use, we need
finer grained locking because some drivers will hold the vhost_dev mutex
while flushing. However in the SIGKILL handler in the next patches, we
will need to be able to swap workers (set current one to NULL), kill
queued works and stop new flushes while flushes are in progress.
To prepare us, this has us use the virtqueue mutex for swapping workers
instead of the vhost_dev one.
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Message-Id: <20240316004707.45557-7-michael.christie@oracle.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Stable-dep-of: db5247d9bf5c ("vhost_task: Handle SIGKILL by flushing work and exiting")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/vhost/vhost.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 8995730ce0bfc..113b6a42719b7 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -664,16 +664,22 @@ static void __vhost_vq_attach_worker(struct vhost_virtqueue *vq,
{
struct vhost_worker *old_worker;
- old_worker = rcu_dereference_check(vq->worker,
- lockdep_is_held(&vq->dev->mutex));
-
mutex_lock(&worker->mutex);
- worker->attachment_cnt++;
- mutex_unlock(&worker->mutex);
+ mutex_lock(&vq->mutex);
+
+ old_worker = rcu_dereference_check(vq->worker,
+ lockdep_is_held(&vq->mutex));
rcu_assign_pointer(vq->worker, worker);
+ worker->attachment_cnt++;
- if (!old_worker)
+ if (!old_worker) {
+ mutex_unlock(&vq->mutex);
+ mutex_unlock(&worker->mutex);
return;
+ }
+ mutex_unlock(&vq->mutex);
+ mutex_unlock(&worker->mutex);
+
/*
* Take the worker mutex to make sure we see the work queued from
* device wide flushes which doesn't use RCU for execution.
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 082/197] vhost: Release worker mutex during flushes
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (80 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 081/197] vhost: Use virtqueue mutex for swapping worker Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 083/197] vhost_task: Handle SIGKILL by flushing work and exiting Greg Kroah-Hartman
` (128 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mike Christie, Michael S. Tsirkin,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Christie <michael.christie@oracle.com>
[ Upstream commit ba704ff4e142fd3cfaf3379dd3b3b946754e06e3 ]
In the next patches where the worker can be killed while in use, we
need to be able to take the worker mutex and kill queued works for
new IO and flushes, and set some new flags to prevent new
__vhost_vq_attach_worker calls from swapping in/out killed workers.
If we are holding the worker mutex during a flush and the flush's work
is still in the queue, the worker code that will handle the SIGKILL
cleanup won't be able to take the mutex and perform it's cleanup. So
this patch has us drop the worker mutex while waiting for the flush
to complete.
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Message-Id: <20240316004707.45557-8-michael.christie@oracle.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Stable-dep-of: db5247d9bf5c ("vhost_task: Handle SIGKILL by flushing work and exiting")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/vhost/vhost.c | 44 +++++++++++++++++++++++++++++--------------
1 file changed, 30 insertions(+), 14 deletions(-)
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 113b6a42719b7..5580b24934015 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -276,21 +276,36 @@ void vhost_vq_flush(struct vhost_virtqueue *vq)
EXPORT_SYMBOL_GPL(vhost_vq_flush);
/**
- * vhost_worker_flush - flush a worker
+ * __vhost_worker_flush - flush a worker
* @worker: worker to flush
*
- * This does not use RCU to protect the worker, so the device or worker
- * mutex must be held.
+ * The worker's flush_mutex must be held.
*/
-static void vhost_worker_flush(struct vhost_worker *worker)
+static void __vhost_worker_flush(struct vhost_worker *worker)
{
struct vhost_flush_struct flush;
+ if (!worker->attachment_cnt)
+ return;
+
init_completion(&flush.wait_event);
vhost_work_init(&flush.work, vhost_flush_work);
vhost_worker_queue(worker, &flush.work);
+ /*
+ * Drop mutex in case our worker is killed and it needs to take the
+ * mutex to force cleanup.
+ */
+ mutex_unlock(&worker->mutex);
wait_for_completion(&flush.wait_event);
+ mutex_lock(&worker->mutex);
+}
+
+static void vhost_worker_flush(struct vhost_worker *worker)
+{
+ mutex_lock(&worker->mutex);
+ __vhost_worker_flush(worker);
+ mutex_unlock(&worker->mutex);
}
void vhost_dev_flush(struct vhost_dev *dev)
@@ -298,15 +313,8 @@ void vhost_dev_flush(struct vhost_dev *dev)
struct vhost_worker *worker;
unsigned long i;
- xa_for_each(&dev->worker_xa, i, worker) {
- mutex_lock(&worker->mutex);
- if (!worker->attachment_cnt) {
- mutex_unlock(&worker->mutex);
- continue;
- }
+ xa_for_each(&dev->worker_xa, i, worker)
vhost_worker_flush(worker);
- mutex_unlock(&worker->mutex);
- }
}
EXPORT_SYMBOL_GPL(vhost_dev_flush);
@@ -685,7 +693,6 @@ static void __vhost_vq_attach_worker(struct vhost_virtqueue *vq,
* device wide flushes which doesn't use RCU for execution.
*/
mutex_lock(&old_worker->mutex);
- old_worker->attachment_cnt--;
/*
* We don't want to call synchronize_rcu for every vq during setup
* because it will slow down VM startup. If we haven't done
@@ -696,6 +703,8 @@ static void __vhost_vq_attach_worker(struct vhost_virtqueue *vq,
mutex_lock(&vq->mutex);
if (!vhost_vq_get_backend(vq) && !vq->kick) {
mutex_unlock(&vq->mutex);
+
+ old_worker->attachment_cnt--;
mutex_unlock(&old_worker->mutex);
/*
* vsock can queue anytime after VHOST_VSOCK_SET_GUEST_CID.
@@ -711,7 +720,8 @@ static void __vhost_vq_attach_worker(struct vhost_virtqueue *vq,
/* Make sure new vq queue/flush/poll calls see the new worker */
synchronize_rcu();
/* Make sure whatever was queued gets run */
- vhost_worker_flush(old_worker);
+ __vhost_worker_flush(old_worker);
+ old_worker->attachment_cnt--;
mutex_unlock(&old_worker->mutex);
}
@@ -764,6 +774,12 @@ static int vhost_free_worker(struct vhost_dev *dev,
mutex_unlock(&worker->mutex);
return -EBUSY;
}
+ /*
+ * A flush might have raced and snuck in before attachment_cnt was set
+ * to zero. Make sure flushes are flushed from the queue before
+ * freeing.
+ */
+ __vhost_worker_flush(worker);
mutex_unlock(&worker->mutex);
vhost_worker_destroy(dev, worker);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 083/197] vhost_task: Handle SIGKILL by flushing work and exiting
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (81 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 082/197] vhost: Release worker mutex during flushes Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 084/197] virtio-pci: Check if is_avq is NULL Greg Kroah-Hartman
` (127 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Edward Adam Davis, Mike Christie,
Michael S. Tsirkin, Sasha Levin, syzbot+98edc2df894917b3431f
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Christie <michael.christie@oracle.com>
[ Upstream commit db5247d9bf5c6ade9fd70b4e4897441e0269b233 ]
Instead of lingering until the device is closed, this has us handle
SIGKILL by:
1. marking the worker as killed so we no longer try to use it with
new virtqueues and new flush operations.
2. setting the virtqueue to worker mapping so no new works are queued.
3. running all the exiting works.
Suggested-by: Edward Adam Davis <eadavis@qq.com>
Reported-and-tested-by: syzbot+98edc2df894917b3431f@syzkaller.appspotmail.com
Message-Id: <tencent_546DA49414E876EEBECF2C78D26D242EE50A@qq.com>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Message-Id: <20240316004707.45557-9-michael.christie@oracle.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/vhost/vhost.c | 54 +++++++++++++++++++++++++++++---
drivers/vhost/vhost.h | 2 ++
include/linux/sched/vhost_task.h | 3 +-
kernel/vhost_task.c | 53 ++++++++++++++++++++-----------
4 files changed, 88 insertions(+), 24 deletions(-)
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 5580b24934015..1740a5f1f35e7 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -285,7 +285,7 @@ static void __vhost_worker_flush(struct vhost_worker *worker)
{
struct vhost_flush_struct flush;
- if (!worker->attachment_cnt)
+ if (!worker->attachment_cnt || worker->killed)
return;
init_completion(&flush.wait_event);
@@ -400,7 +400,7 @@ static void vhost_vq_reset(struct vhost_dev *dev,
__vhost_vq_meta_reset(vq);
}
-static bool vhost_worker(void *data)
+static bool vhost_run_work_list(void *data)
{
struct vhost_worker *worker = data;
struct vhost_work *work, *work_next;
@@ -425,6 +425,40 @@ static bool vhost_worker(void *data)
return !!node;
}
+static void vhost_worker_killed(void *data)
+{
+ struct vhost_worker *worker = data;
+ struct vhost_dev *dev = worker->dev;
+ struct vhost_virtqueue *vq;
+ int i, attach_cnt = 0;
+
+ mutex_lock(&worker->mutex);
+ worker->killed = true;
+
+ for (i = 0; i < dev->nvqs; i++) {
+ vq = dev->vqs[i];
+
+ mutex_lock(&vq->mutex);
+ if (worker ==
+ rcu_dereference_check(vq->worker,
+ lockdep_is_held(&vq->mutex))) {
+ rcu_assign_pointer(vq->worker, NULL);
+ attach_cnt++;
+ }
+ mutex_unlock(&vq->mutex);
+ }
+
+ worker->attachment_cnt -= attach_cnt;
+ if (attach_cnt)
+ synchronize_rcu();
+ /*
+ * Finish vhost_worker_flush calls and any other works that snuck in
+ * before the synchronize_rcu.
+ */
+ vhost_run_work_list(worker);
+ mutex_unlock(&worker->mutex);
+}
+
static void vhost_vq_free_iovecs(struct vhost_virtqueue *vq)
{
kfree(vq->indirect);
@@ -639,9 +673,11 @@ static struct vhost_worker *vhost_worker_create(struct vhost_dev *dev)
if (!worker)
return NULL;
+ worker->dev = dev;
snprintf(name, sizeof(name), "vhost-%d", current->pid);
- vtsk = vhost_task_create(vhost_worker, worker, name);
+ vtsk = vhost_task_create(vhost_run_work_list, vhost_worker_killed,
+ worker, name);
if (!vtsk)
goto free_worker;
@@ -673,6 +709,11 @@ static void __vhost_vq_attach_worker(struct vhost_virtqueue *vq,
struct vhost_worker *old_worker;
mutex_lock(&worker->mutex);
+ if (worker->killed) {
+ mutex_unlock(&worker->mutex);
+ return;
+ }
+
mutex_lock(&vq->mutex);
old_worker = rcu_dereference_check(vq->worker,
@@ -693,6 +734,11 @@ static void __vhost_vq_attach_worker(struct vhost_virtqueue *vq,
* device wide flushes which doesn't use RCU for execution.
*/
mutex_lock(&old_worker->mutex);
+ if (old_worker->killed) {
+ mutex_unlock(&old_worker->mutex);
+ return;
+ }
+
/*
* We don't want to call synchronize_rcu for every vq during setup
* because it will slow down VM startup. If we haven't done
@@ -770,7 +816,7 @@ static int vhost_free_worker(struct vhost_dev *dev,
return -ENODEV;
mutex_lock(&worker->mutex);
- if (worker->attachment_cnt) {
+ if (worker->attachment_cnt || worker->killed) {
mutex_unlock(&worker->mutex);
return -EBUSY;
}
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index 9e942fcda5c3f..dc94e6a7d3c22 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -28,12 +28,14 @@ struct vhost_work {
struct vhost_worker {
struct vhost_task *vtsk;
+ struct vhost_dev *dev;
/* Used to serialize device wide flushing with worker swapping. */
struct mutex mutex;
struct llist_head work_list;
u64 kcov_handle;
u32 id;
int attachment_cnt;
+ bool killed;
};
/* Poll a file (eventfd or socket) */
diff --git a/include/linux/sched/vhost_task.h b/include/linux/sched/vhost_task.h
index bc60243d43b36..25446c5d35081 100644
--- a/include/linux/sched/vhost_task.h
+++ b/include/linux/sched/vhost_task.h
@@ -4,7 +4,8 @@
struct vhost_task;
-struct vhost_task *vhost_task_create(bool (*fn)(void *), void *arg,
+struct vhost_task *vhost_task_create(bool (*fn)(void *),
+ void (*handle_kill)(void *), void *arg,
const char *name);
void vhost_task_start(struct vhost_task *vtsk);
void vhost_task_stop(struct vhost_task *vtsk);
diff --git a/kernel/vhost_task.c b/kernel/vhost_task.c
index da35e5b7f0473..8800f5acc0071 100644
--- a/kernel/vhost_task.c
+++ b/kernel/vhost_task.c
@@ -10,38 +10,32 @@
enum vhost_task_flags {
VHOST_TASK_FLAGS_STOP,
+ VHOST_TASK_FLAGS_KILLED,
};
struct vhost_task {
bool (*fn)(void *data);
+ void (*handle_sigkill)(void *data);
void *data;
struct completion exited;
unsigned long flags;
struct task_struct *task;
+ /* serialize SIGKILL and vhost_task_stop calls */
+ struct mutex exit_mutex;
};
static int vhost_task_fn(void *data)
{
struct vhost_task *vtsk = data;
- bool dead = false;
for (;;) {
bool did_work;
- if (!dead && signal_pending(current)) {
+ if (signal_pending(current)) {
struct ksignal ksig;
- /*
- * Calling get_signal will block in SIGSTOP,
- * or clear fatal_signal_pending, but remember
- * what was set.
- *
- * This thread won't actually exit until all
- * of the file descriptors are closed, and
- * the release function is called.
- */
- dead = get_signal(&ksig);
- if (dead)
- clear_thread_flag(TIF_SIGPENDING);
+
+ if (get_signal(&ksig))
+ break;
}
/* mb paired w/ vhost_task_stop */
@@ -57,7 +51,19 @@ static int vhost_task_fn(void *data)
schedule();
}
+ mutex_lock(&vtsk->exit_mutex);
+ /*
+ * If a vhost_task_stop and SIGKILL race, we can ignore the SIGKILL.
+ * When the vhost layer has called vhost_task_stop it's already stopped
+ * new work and flushed.
+ */
+ if (!test_bit(VHOST_TASK_FLAGS_STOP, &vtsk->flags)) {
+ set_bit(VHOST_TASK_FLAGS_KILLED, &vtsk->flags);
+ vtsk->handle_sigkill(vtsk->data);
+ }
+ mutex_unlock(&vtsk->exit_mutex);
complete(&vtsk->exited);
+
do_exit(0);
}
@@ -78,12 +84,17 @@ EXPORT_SYMBOL_GPL(vhost_task_wake);
* @vtsk: vhost_task to stop
*
* vhost_task_fn ensures the worker thread exits after
- * VHOST_TASK_FLAGS_SOP becomes true.
+ * VHOST_TASK_FLAGS_STOP becomes true.
*/
void vhost_task_stop(struct vhost_task *vtsk)
{
- set_bit(VHOST_TASK_FLAGS_STOP, &vtsk->flags);
- vhost_task_wake(vtsk);
+ mutex_lock(&vtsk->exit_mutex);
+ if (!test_bit(VHOST_TASK_FLAGS_KILLED, &vtsk->flags)) {
+ set_bit(VHOST_TASK_FLAGS_STOP, &vtsk->flags);
+ vhost_task_wake(vtsk);
+ }
+ mutex_unlock(&vtsk->exit_mutex);
+
/*
* Make sure vhost_task_fn is no longer accessing the vhost_task before
* freeing it below.
@@ -96,14 +107,16 @@ EXPORT_SYMBOL_GPL(vhost_task_stop);
/**
* vhost_task_create - create a copy of a task to be used by the kernel
* @fn: vhost worker function
- * @arg: data to be passed to fn
+ * @handle_sigkill: vhost function to handle when we are killed
+ * @arg: data to be passed to fn and handled_kill
* @name: the thread's name
*
* This returns a specialized task for use by the vhost layer or NULL on
* failure. The returned task is inactive, and the caller must fire it up
* through vhost_task_start().
*/
-struct vhost_task *vhost_task_create(bool (*fn)(void *), void *arg,
+struct vhost_task *vhost_task_create(bool (*fn)(void *),
+ void (*handle_sigkill)(void *), void *arg,
const char *name)
{
struct kernel_clone_args args = {
@@ -122,8 +135,10 @@ struct vhost_task *vhost_task_create(bool (*fn)(void *), void *arg,
if (!vtsk)
return NULL;
init_completion(&vtsk->exited);
+ mutex_init(&vtsk->exit_mutex);
vtsk->data = arg;
vtsk->fn = fn;
+ vtsk->handle_sigkill = handle_sigkill;
args.fn_arg = vtsk;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 084/197] virtio-pci: Check if is_avq is NULL
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (82 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 083/197] vhost_task: Handle SIGKILL by flushing work and exiting Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 085/197] mac802154: fix time calculation in ieee802154_configure_durations() Greg Kroah-Hartman
` (126 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Li Zhang, Michael S. Tsirkin,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Zhang <zhanglikernel@gmail.com>
[ Upstream commit c8fae27d141a32a1624d0d0d5419d94252824498 ]
[bug]
In the virtio_pci_common.c function vp_del_vqs, vp_dev->is_avq is involved
to determine whether it is admin virtqueue, but this function vp_dev->is_avq
may be empty. For installations, virtio_pci_legacy does not assign a value
to vp_dev->is_avq.
[fix]
Check whether it is vp_dev->is_avq before use.
[test]
Test with virsh Attach device
Before this patch, the following command would crash the guest system
After applying the patch, everything seems to be working fine.
Signed-off-by: Li Zhang <zhanglikernel@gmail.com>
Message-Id: <1710566754-3532-1-git-send-email-zhanglikernel@gmail.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/virtio/virtio_pci_common.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index 584af7816532b..f6b0b00e4599f 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -236,7 +236,7 @@ void vp_del_vqs(struct virtio_device *vdev)
int i;
list_for_each_entry_safe(vq, n, &vdev->vqs, list) {
- if (vp_dev->is_avq(vdev, vq->index))
+ if (vp_dev->is_avq && vp_dev->is_avq(vdev, vq->index))
continue;
if (vp_dev->per_vq_vectors) {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 085/197] mac802154: fix time calculation in ieee802154_configure_durations()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (83 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 084/197] virtio-pci: Check if is_avq is NULL Greg Kroah-Hartman
@ 2024-07-09 11:08 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 086/197] wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values Greg Kroah-Hartman
` (125 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:08 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dmitry Antipov, Miquel Raynal,
Stefan Schmidt, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Antipov <dmantipov@yandex.ru>
[ Upstream commit 07aa33988ad92fef79056f5ec30b9a0e4364b616 ]
Since 'symbol_duration' of 'struct wpan_phy' is in nanoseconds but
'lifs_period' and 'sifs_period' are both in microseconds, fix time
calculation in 'ieee802154_configure_durations()' and use convenient
'NSEC_PER_USEC' in 'ieee802154_setup_wpan_phy_pib()' as well.
Compile tested only.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: 781830c800dd ("net: mac802154: Set durations automatically")
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Acked-by: Miquel Raynal <miquel.raynal@bootlin.com>
Message-ID: <20240508114010.219527-1-dmantipov@yandex.ru>
Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/mac802154/main.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/net/mac802154/main.c b/net/mac802154/main.c
index 9ab7396668d22..21b7c3b280b45 100644
--- a/net/mac802154/main.c
+++ b/net/mac802154/main.c
@@ -161,8 +161,10 @@ void ieee802154_configure_durations(struct wpan_phy *phy,
}
phy->symbol_duration = duration;
- phy->lifs_period = (IEEE802154_LIFS_PERIOD * phy->symbol_duration) / NSEC_PER_SEC;
- phy->sifs_period = (IEEE802154_SIFS_PERIOD * phy->symbol_duration) / NSEC_PER_SEC;
+ phy->lifs_period =
+ (IEEE802154_LIFS_PERIOD * phy->symbol_duration) / NSEC_PER_USEC;
+ phy->sifs_period =
+ (IEEE802154_SIFS_PERIOD * phy->symbol_duration) / NSEC_PER_USEC;
}
EXPORT_SYMBOL(ieee802154_configure_durations);
@@ -184,10 +186,10 @@ static void ieee802154_setup_wpan_phy_pib(struct wpan_phy *wpan_phy)
* Should be done when all drivers sets this value.
*/
- wpan_phy->lifs_period =
- (IEEE802154_LIFS_PERIOD * wpan_phy->symbol_duration) / 1000;
- wpan_phy->sifs_period =
- (IEEE802154_SIFS_PERIOD * wpan_phy->symbol_duration) / 1000;
+ wpan_phy->lifs_period = (IEEE802154_LIFS_PERIOD *
+ wpan_phy->symbol_duration) / NSEC_PER_USEC;
+ wpan_phy->sifs_period = (IEEE802154_SIFS_PERIOD *
+ wpan_phy->symbol_duration) / NSEC_PER_USEC;
}
int ieee802154_register_hw(struct ieee802154_hw *hw)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 086/197] wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (84 preceding siblings ...)
2024-07-09 11:08 ` [PATCH 6.9 085/197] mac802154: fix time calculation in ieee802154_configure_durations() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 087/197] net: phy: phy_device: Fix PHY LED blinking code comment Greg Kroah-Hartman
` (124 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Eric Dumazet, Johannes Berg,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <edumazet@google.com>
[ Upstream commit d1cba2ea8121e7fdbe1328cea782876b1dd80993 ]
syzbot is able to trigger softlockups, setting NL80211_ATTR_TXQ_QUANTUM
to 2^31.
We had a similar issue in sch_fq, fixed with commit
d9e15a273306 ("pkt_sched: fq: do not accept silly TCA_FQ_QUANTUM")
watchdog: BUG: soft lockup - CPU#1 stuck for 26s! [kworker/1:0:24]
Modules linked in:
irq event stamp: 131135
hardirqs last enabled at (131134): [<ffff80008ae8778c>] __exit_to_kernel_mode arch/arm64/kernel/entry-common.c:85 [inline]
hardirqs last enabled at (131134): [<ffff80008ae8778c>] exit_to_kernel_mode+0xdc/0x10c arch/arm64/kernel/entry-common.c:95
hardirqs last disabled at (131135): [<ffff80008ae85378>] __el1_irq arch/arm64/kernel/entry-common.c:533 [inline]
hardirqs last disabled at (131135): [<ffff80008ae85378>] el1_interrupt+0x24/0x68 arch/arm64/kernel/entry-common.c:551
softirqs last enabled at (125892): [<ffff80008907e82c>] neigh_hh_init net/core/neighbour.c:1538 [inline]
softirqs last enabled at (125892): [<ffff80008907e82c>] neigh_resolve_output+0x268/0x658 net/core/neighbour.c:1553
softirqs last disabled at (125896): [<ffff80008904166c>] local_bh_disable+0x10/0x34 include/linux/bottom_half.h:19
CPU: 1 PID: 24 Comm: kworker/1:0 Not tainted 6.9.0-rc7-syzkaller-gfda5695d692c #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
Workqueue: mld mld_ifc_work
pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : __list_del include/linux/list.h:195 [inline]
pc : __list_del_entry include/linux/list.h:218 [inline]
pc : list_move_tail include/linux/list.h:310 [inline]
pc : fq_tin_dequeue include/net/fq_impl.h:112 [inline]
pc : ieee80211_tx_dequeue+0x6b8/0x3b4c net/mac80211/tx.c:3854
lr : __list_del_entry include/linux/list.h:218 [inline]
lr : list_move_tail include/linux/list.h:310 [inline]
lr : fq_tin_dequeue include/net/fq_impl.h:112 [inline]
lr : ieee80211_tx_dequeue+0x67c/0x3b4c net/mac80211/tx.c:3854
sp : ffff800093d36700
x29: ffff800093d36a60 x28: ffff800093d36960 x27: dfff800000000000
x26: ffff0000d800ad50 x25: ffff0000d800abe0 x24: ffff0000d800abf0
x23: ffff0000e0032468 x22: ffff0000e00324d4 x21: ffff0000d800abf0
x20: ffff0000d800abf8 x19: ffff0000d800abf0 x18: ffff800093d363c0
x17: 000000000000d476 x16: ffff8000805519dc x15: ffff7000127a6cc8
x14: 1ffff000127a6cc8 x13: 0000000000000004 x12: ffffffffffffffff
x11: ffff7000127a6cc8 x10: 0000000000ff0100 x9 : 0000000000000000
x8 : 0000000000000000 x7 : 0000000000000000 x6 : 0000000000000000
x5 : ffff80009287aa08 x4 : 0000000000000008 x3 : ffff80008034c7fc
x2 : ffff0000e0032468 x1 : 00000000da0e46b8 x0 : ffff0000e0032470
Call trace:
__list_del include/linux/list.h:195 [inline]
__list_del_entry include/linux/list.h:218 [inline]
list_move_tail include/linux/list.h:310 [inline]
fq_tin_dequeue include/net/fq_impl.h:112 [inline]
ieee80211_tx_dequeue+0x6b8/0x3b4c net/mac80211/tx.c:3854
wake_tx_push_queue net/mac80211/util.c:294 [inline]
ieee80211_handle_wake_tx_queue+0x118/0x274 net/mac80211/util.c:315
drv_wake_tx_queue net/mac80211/driver-ops.h:1350 [inline]
schedule_and_wake_txq net/mac80211/driver-ops.h:1357 [inline]
ieee80211_queue_skb+0x18e8/0x2244 net/mac80211/tx.c:1664
ieee80211_tx+0x260/0x400 net/mac80211/tx.c:1966
ieee80211_xmit+0x278/0x354 net/mac80211/tx.c:2062
__ieee80211_subif_start_xmit+0xab8/0x122c net/mac80211/tx.c:4338
ieee80211_subif_start_xmit+0xe0/0x438 net/mac80211/tx.c:4532
__netdev_start_xmit include/linux/netdevice.h:4903 [inline]
netdev_start_xmit include/linux/netdevice.h:4917 [inline]
xmit_one net/core/dev.c:3531 [inline]
dev_hard_start_xmit+0x27c/0x938 net/core/dev.c:3547
__dev_queue_xmit+0x1678/0x33fc net/core/dev.c:4341
dev_queue_xmit include/linux/netdevice.h:3091 [inline]
neigh_resolve_output+0x558/0x658 net/core/neighbour.c:1563
neigh_output include/net/neighbour.h:542 [inline]
ip6_finish_output2+0x104c/0x1ee8 net/ipv6/ip6_output.c:137
ip6_finish_output+0x428/0x7a0 net/ipv6/ip6_output.c:222
NF_HOOK_COND include/linux/netfilter.h:303 [inline]
ip6_output+0x270/0x594 net/ipv6/ip6_output.c:243
dst_output include/net/dst.h:450 [inline]
NF_HOOK+0x160/0x4f0 include/linux/netfilter.h:314
mld_sendpack+0x7b4/0x10f4 net/ipv6/mcast.c:1818
mld_send_cr net/ipv6/mcast.c:2119 [inline]
mld_ifc_work+0x840/0xd0c net/ipv6/mcast.c:2650
process_one_work+0x7b8/0x15d4 kernel/workqueue.c:3267
process_scheduled_works kernel/workqueue.c:3348 [inline]
worker_thread+0x938/0xef4 kernel/workqueue.c:3429
kthread+0x288/0x310 kernel/kthread.c:388
ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:860
Fixes: 52539ca89f36 ("cfg80211: Expose TXQ stats and parameters to userspace")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20240615160800.250667-1-edumazet@google.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/wireless/nl80211.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 65c416e8d25eb..c9866db2ea468 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -468,6 +468,10 @@ static const struct netlink_range_validation nl80211_punct_bitmap_range = {
.max = 0xffff,
};
+static const struct netlink_range_validation q_range = {
+ .max = INT_MAX,
+};
+
static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
[0] = { .strict_start_type = NL80211_ATTR_HE_OBSS_PD },
[NL80211_ATTR_WIPHY] = { .type = NLA_U32 },
@@ -754,7 +758,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
[NL80211_ATTR_TXQ_LIMIT] = { .type = NLA_U32 },
[NL80211_ATTR_TXQ_MEMORY_LIMIT] = { .type = NLA_U32 },
- [NL80211_ATTR_TXQ_QUANTUM] = { .type = NLA_U32 },
+ [NL80211_ATTR_TXQ_QUANTUM] = NLA_POLICY_FULL_RANGE(NLA_U32, &q_range),
[NL80211_ATTR_HE_CAPABILITY] =
NLA_POLICY_VALIDATE_FN(NLA_BINARY, validate_he_capa,
NL80211_HE_MAX_CAPABILITY_LEN),
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 087/197] net: phy: phy_device: Fix PHY LED blinking code comment
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (85 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 086/197] wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 088/197] wifi: mac80211: fix BSS_CHANGED_UNSOL_BCAST_PROBE_RESP Greg Kroah-Hartman
` (123 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Marek Vasut, Andrew Lunn,
Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Vasut <marex@denx.de>
[ Upstream commit d3dcb084c70727be4a2f61bd94796e66147cfa35 ]
Fix copy-paste error in the code comment. The code refers to
LED blinking configuration, not brightness configuration. It
was likely copied from comment above this one which does
refer to brightness configuration.
Fixes: 4e901018432e ("net: phy: phy_device: Call into the PHY driver to set LED blinking")
Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20240626030638.512069-1-marex@denx.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/linux/phy.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 3f68b8239bb11..a62d86bce1b63 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -1121,7 +1121,7 @@ struct phy_driver {
u8 index, enum led_brightness value);
/**
- * @led_blink_set: Set a PHY LED brightness. Index indicates
+ * @led_blink_set: Set a PHY LED blinking. Index indicates
* which of the PHYs led should be configured to blink. Delays
* are in milliseconds and if both are zero then a sensible
* default should be chosen. The call should adjust the
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 088/197] wifi: mac80211: fix BSS_CHANGED_UNSOL_BCAST_PROBE_RESP
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (86 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 087/197] net: phy: phy_device: Fix PHY LED blinking code comment Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 089/197] UPSTREAM: tcp: fix DSACK undo in fast recovery to call tcp_try_to_open() Greg Kroah-Hartman
` (122 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Miriam Rachel Korenblit,
Johannes Berg, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Berg <johannes.berg@intel.com>
[ Upstream commit 816c6bec09ed5b90a58a1e12d5a606c5b6e23f47 ]
Fix the definition of BSS_CHANGED_UNSOL_BCAST_PROBE_RESP so that
not all higher bits get set, 1<<31 is a signed variable, so when
we do
u64 changed = BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
we get sign expansion, so the value is 0xffff'ffff'8000'0000 and
that's clearly not desired. Use BIT_ULL() to make it unsigned as
well as the right type for the change flags.
Fixes: 178e9d6adc43 ("wifi: mac80211: fix unsolicited broadcast probe config")
Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20240627104257.06174d291db2.Iba0d642916eb78a61f8ab2cc5ca9280783d9c1db@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/net/mac80211.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 2d7f87bc5324b..baaff7bc09119 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -395,7 +395,7 @@ enum ieee80211_bss_change {
BSS_CHANGED_HE_OBSS_PD = 1<<28,
BSS_CHANGED_HE_BSS_COLOR = 1<<29,
BSS_CHANGED_FILS_DISCOVERY = 1<<30,
- BSS_CHANGED_UNSOL_BCAST_PROBE_RESP = 1<<31,
+ BSS_CHANGED_UNSOL_BCAST_PROBE_RESP = BIT_ULL(31),
BSS_CHANGED_MLD_VALID_LINKS = BIT_ULL(33),
BSS_CHANGED_MLD_TTLM = BIT_ULL(34),
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 089/197] UPSTREAM: tcp: fix DSACK undo in fast recovery to call tcp_try_to_open()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (87 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 088/197] wifi: mac80211: fix BSS_CHANGED_UNSOL_BCAST_PROBE_RESP Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 090/197] net/mlx5: E-switch, Create ingress ACL when needed Greg Kroah-Hartman
` (121 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Neal Cardwell, Yuchung Cheng,
Eric Dumazet, David S. Miller, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Neal Cardwell <ncardwell@google.com>
[ Upstream commit a6458ab7fd4f427d4f6f54380453ad255b7fde83 ]
In some production workloads we noticed that connections could
sometimes close extremely prematurely with ETIMEDOUT after
transmitting only 1 TLP and RTO retransmission (when we would normally
expect roughly tcp_retries2 = TCP_RETR2 = 15 RTOs before a connection
closes with ETIMEDOUT).
>From tracing we determined that these workloads can suffer from a
scenario where in fast recovery, after some retransmits, a DSACK undo
can happen at a point where the scoreboard is totally clear (we have
retrans_out == sacked_out == lost_out == 0). In such cases, calling
tcp_try_keep_open() means that we do not execute any code path that
clears tp->retrans_stamp to 0. That means that tp->retrans_stamp can
remain erroneously set to the start time of the undone fast recovery,
even after the fast recovery is undone. If minutes or hours elapse,
and then a TLP/RTO/RTO sequence occurs, then the start_ts value in
retransmits_timed_out() (which is from tp->retrans_stamp) will be
erroneously ancient (left over from the fast recovery undone via
DSACKs). Thus this ancient tp->retrans_stamp value can cause the
connection to die very prematurely with ETIMEDOUT via
tcp_write_err().
The fix: we change DSACK undo in fast recovery (TCP_CA_Recovery) to
call tcp_try_to_open() instead of tcp_try_keep_open(). This ensures
that if no retransmits are in flight at the time of DSACK undo in fast
recovery then we properly zero retrans_stamp. Note that calling
tcp_try_to_open() is more consistent with other loss recovery
behavior, since normal fast recovery (CA_Recovery) and RTO recovery
(CA_Loss) both normally end when tp->snd_una meets or exceeds
tp->high_seq and then in tcp_fastretrans_alert() the "default" switch
case executes tcp_try_to_open(). Also note that by inspection this
change to call tcp_try_to_open() implies at least one other nice bug
fix, where now an ECE-marked DSACK that causes an undo will properly
invoke tcp_enter_cwr() rather than ignoring the ECE mark.
Fixes: c7d9d6a185a7 ("tcp: undo on DSACK during recovery")
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/ipv4/tcp_input.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 0953c915bb4de..77109976fe836 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3074,7 +3074,7 @@ static void tcp_fastretrans_alert(struct sock *sk, const u32 prior_snd_una,
return;
if (tcp_try_undo_dsack(sk))
- tcp_try_keep_open(sk);
+ tcp_try_to_open(sk, flag);
tcp_identify_packet_loss(sk, ack_flag);
if (icsk->icsk_ca_state != TCP_CA_Recovery) {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 090/197] net/mlx5: E-switch, Create ingress ACL when needed
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (88 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 089/197] UPSTREAM: tcp: fix DSACK undo in fast recovery to call tcp_try_to_open() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 091/197] net/mlx5e: Add mqprio_rl cleanup and free in mlx5e_priv_cleanup() Greg Kroah-Hartman
` (120 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Chris Mi, Tariq Toukan,
David S. Miller, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Mi <cmi@nvidia.com>
[ Upstream commit b20c2fb45470d0c7a603613c9cfa5d45720e17f2 ]
Currently, ingress acl is used for three features. It is created only
when vport metadata match and prio tag are enabled. But active-backup
lag mode also uses it. It is independent of vport metadata match and
prio tag. And vport metadata match can be disabled using the
following devlink command:
# devlink dev param set pci/0000:08:00.0 name esw_port_metadata \
value false cmode runtime
If ingress acl is not created, will hit panic when creating drop rule
for active-backup lag mode. If always create it, there will be about
5% performance degradation.
Fix it by creating ingress acl when needed. If esw_port_metadata is
true, ingress acl exists, then create drop rule using existing
ingress acl. If esw_port_metadata is false, create ingress acl and
then create drop rule.
Fixes: 1749c4c51c16 ("net/mlx5: E-switch, add drop rule support to ingress ACL")
Signed-off-by: Chris Mi <cmi@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../mellanox/mlx5/core/esw/acl/ingress_ofld.c | 37 +++++++++++++++----
1 file changed, 29 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c
index 50d2ea3239798..a436ce895e45a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c
@@ -6,6 +6,9 @@
#include "helper.h"
#include "ofld.h"
+static int
+acl_ingress_ofld_setup(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
+
static bool
esw_acl_ingress_prio_tag_enabled(struct mlx5_eswitch *esw,
const struct mlx5_vport *vport)
@@ -123,18 +126,31 @@ static int esw_acl_ingress_src_port_drop_create(struct mlx5_eswitch *esw,
{
struct mlx5_flow_act flow_act = {};
struct mlx5_flow_handle *flow_rule;
+ bool created = false;
int err = 0;
+ if (!vport->ingress.acl) {
+ err = acl_ingress_ofld_setup(esw, vport);
+ if (err)
+ return err;
+ created = true;
+ }
+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_DROP;
flow_act.fg = vport->ingress.offloads.drop_grp;
flow_rule = mlx5_add_flow_rules(vport->ingress.acl, NULL, &flow_act, NULL, 0);
if (IS_ERR(flow_rule)) {
err = PTR_ERR(flow_rule);
- goto out;
+ goto err_out;
}
vport->ingress.offloads.drop_rule = flow_rule;
-out:
+
+ return 0;
+err_out:
+ /* Only destroy ingress acl created in this function. */
+ if (created)
+ esw_acl_ingress_ofld_cleanup(esw, vport);
return err;
}
@@ -299,16 +315,12 @@ static void esw_acl_ingress_ofld_groups_destroy(struct mlx5_vport *vport)
}
}
-int esw_acl_ingress_ofld_setup(struct mlx5_eswitch *esw,
- struct mlx5_vport *vport)
+static int
+acl_ingress_ofld_setup(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
{
int num_ftes = 0;
int err;
- if (!mlx5_eswitch_vport_match_metadata_enabled(esw) &&
- !esw_acl_ingress_prio_tag_enabled(esw, vport))
- return 0;
-
esw_acl_ingress_allow_rule_destroy(vport);
if (mlx5_eswitch_vport_match_metadata_enabled(esw))
@@ -347,6 +359,15 @@ int esw_acl_ingress_ofld_setup(struct mlx5_eswitch *esw,
return err;
}
+int esw_acl_ingress_ofld_setup(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
+{
+ if (!mlx5_eswitch_vport_match_metadata_enabled(esw) &&
+ !esw_acl_ingress_prio_tag_enabled(esw, vport))
+ return 0;
+
+ return acl_ingress_ofld_setup(esw, vport);
+}
+
void esw_acl_ingress_ofld_cleanup(struct mlx5_eswitch *esw,
struct mlx5_vport *vport)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 091/197] net/mlx5e: Add mqprio_rl cleanup and free in mlx5e_priv_cleanup()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (89 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 090/197] net/mlx5: E-switch, Create ingress ACL when needed Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 092/197] net/mlx5e: Present succeeded IPsec SA bytes and packet Greg Kroah-Hartman
` (119 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jianbo Liu, Dragos Tatulea,
Tariq Toukan, David S. Miller, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jianbo Liu <jianbol@nvidia.com>
[ Upstream commit 1da839eab6dbc26b95bfcd1ed1a4d1aaa5c144a3 ]
In the cited commit, mqprio_rl cleanup and free are mistakenly removed
in mlx5e_priv_cleanup(), and it causes the leakage of host memory and
firmware SCHEDULING_ELEMENT objects while changing eswitch mode. So,
add them back.
Fixes: 0bb7228f7096 ("net/mlx5e: Fix mqprio_rl handling on devlink reload")
Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 981a3e058840d..cab1770aa476c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -5732,6 +5732,11 @@ void mlx5e_priv_cleanup(struct mlx5e_priv *priv)
kfree(priv->htb_qos_sq_stats[i]);
kvfree(priv->htb_qos_sq_stats);
+ if (priv->mqprio_rl) {
+ mlx5e_mqprio_rl_cleanup(priv->mqprio_rl);
+ mlx5e_mqprio_rl_free(priv->mqprio_rl);
+ }
+
memset(priv, 0, sizeof(*priv));
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 092/197] net/mlx5e: Present succeeded IPsec SA bytes and packet
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (90 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 091/197] net/mlx5e: Add mqprio_rl cleanup and free in mlx5e_priv_cleanup() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 093/197] net/mlx5e: Approximate IPsec per-SA payload data bytes count Greg Kroah-Hartman
` (118 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Leon Romanovsky, Tariq Toukan,
David S. Miller, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <leonro@nvidia.com>
[ Upstream commit 2d9dac5559f8cc4318e6b0d3c5b71984f462620b ]
IPsec SA statistics presents successfully decrypted and encrypted
packet and bytes, and not total handled by this SA. So update the
calculation logic to take into account failures.
Fixes: 6fb7f9408779 ("net/mlx5e: Connect mlx5 IPsec statistics with XFRM core")
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../mellanox/mlx5/core/en_accel/ipsec.c | 36 ++++++++++++-------
1 file changed, 23 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
index c54fd01ea635a..2a10428d820ae 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
@@ -989,6 +989,10 @@ static void mlx5e_xfrm_update_stats(struct xfrm_state *x)
struct mlx5e_ipsec_sa_entry *sa_entry = to_ipsec_sa_entry(x);
struct mlx5e_ipsec_rule *ipsec_rule = &sa_entry->ipsec_rule;
struct net *net = dev_net(x->xso.dev);
+ u64 trailer_packets = 0, trailer_bytes = 0;
+ u64 replay_packets = 0, replay_bytes = 0;
+ u64 auth_packets = 0, auth_bytes = 0;
+ u64 success_packets, success_bytes;
u64 packets, bytes, lastuse;
lockdep_assert(lockdep_is_held(&x->lock) ||
@@ -999,26 +1003,32 @@ static void mlx5e_xfrm_update_stats(struct xfrm_state *x)
return;
if (sa_entry->attrs.dir == XFRM_DEV_OFFLOAD_IN) {
- mlx5_fc_query_cached(ipsec_rule->auth.fc, &bytes, &packets, &lastuse);
- x->stats.integrity_failed += packets;
- XFRM_ADD_STATS(net, LINUX_MIB_XFRMINSTATEPROTOERROR, packets);
-
- mlx5_fc_query_cached(ipsec_rule->trailer.fc, &bytes, &packets, &lastuse);
- XFRM_ADD_STATS(net, LINUX_MIB_XFRMINHDRERROR, packets);
+ mlx5_fc_query_cached(ipsec_rule->auth.fc, &auth_bytes,
+ &auth_packets, &lastuse);
+ x->stats.integrity_failed += auth_packets;
+ XFRM_ADD_STATS(net, LINUX_MIB_XFRMINSTATEPROTOERROR, auth_packets);
+
+ mlx5_fc_query_cached(ipsec_rule->trailer.fc, &trailer_bytes,
+ &trailer_packets, &lastuse);
+ XFRM_ADD_STATS(net, LINUX_MIB_XFRMINHDRERROR, trailer_packets);
}
if (x->xso.type != XFRM_DEV_OFFLOAD_PACKET)
return;
- mlx5_fc_query_cached(ipsec_rule->fc, &bytes, &packets, &lastuse);
- x->curlft.packets += packets;
- x->curlft.bytes += bytes;
-
if (sa_entry->attrs.dir == XFRM_DEV_OFFLOAD_IN) {
- mlx5_fc_query_cached(ipsec_rule->replay.fc, &bytes, &packets, &lastuse);
- x->stats.replay += packets;
- XFRM_ADD_STATS(net, LINUX_MIB_XFRMINSTATESEQERROR, packets);
+ mlx5_fc_query_cached(ipsec_rule->replay.fc, &replay_bytes,
+ &replay_packets, &lastuse);
+ x->stats.replay += replay_packets;
+ XFRM_ADD_STATS(net, LINUX_MIB_XFRMINSTATESEQERROR, replay_packets);
}
+
+ mlx5_fc_query_cached(ipsec_rule->fc, &bytes, &packets, &lastuse);
+ success_packets = packets - auth_packets - trailer_packets - replay_packets;
+ x->curlft.packets += success_packets;
+
+ success_bytes = bytes - auth_bytes - trailer_bytes - replay_bytes;
+ x->curlft.bytes += success_bytes;
}
static int mlx5e_xfrm_validate_policy(struct mlx5_core_dev *mdev,
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 093/197] net/mlx5e: Approximate IPsec per-SA payload data bytes count
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (91 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 092/197] net/mlx5e: Present succeeded IPsec SA bytes and packet Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 094/197] Bluetooth: hci_event: Fix setting of unicast qos interval Greg Kroah-Hartman
` (117 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Leon Romanovsky, Tariq Toukan,
David S. Miller, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <leonro@nvidia.com>
[ Upstream commit e562f2d46d27576dd4108c1c4a67d501a5936e31 ]
ConnectX devices lack ability to count payload data byte size which is
needed for SA to return to libreswan for rekeying.
As a solution let's approximate that by decreasing headers size from
total size counted by flow steering. The calculation doesn't take into
account any other headers which can be in the packet (e.g. IP extensions).
Fixes: 5a6cddb89b51 ("net/mlx5e: Update IPsec per SA packets/bytes count")
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
index 2a10428d820ae..3d274599015be 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
@@ -994,6 +994,7 @@ static void mlx5e_xfrm_update_stats(struct xfrm_state *x)
u64 auth_packets = 0, auth_bytes = 0;
u64 success_packets, success_bytes;
u64 packets, bytes, lastuse;
+ size_t headers;
lockdep_assert(lockdep_is_held(&x->lock) ||
lockdep_is_held(&dev_net(x->xso.real_dev)->xfrm.xfrm_cfg_mutex) ||
@@ -1026,9 +1027,20 @@ static void mlx5e_xfrm_update_stats(struct xfrm_state *x)
mlx5_fc_query_cached(ipsec_rule->fc, &bytes, &packets, &lastuse);
success_packets = packets - auth_packets - trailer_packets - replay_packets;
x->curlft.packets += success_packets;
+ /* NIC counts all bytes passed through flow steering and doesn't have
+ * an ability to count payload data size which is needed for SA.
+ *
+ * To overcome HW limitestion, let's approximate the payload size
+ * by removing always available headers.
+ */
+ headers = sizeof(struct ethhdr);
+ if (sa_entry->attrs.family == AF_INET)
+ headers += sizeof(struct iphdr);
+ else
+ headers += sizeof(struct ipv6hdr);
success_bytes = bytes - auth_bytes - trailer_bytes - replay_bytes;
- x->curlft.bytes += success_bytes;
+ x->curlft.bytes += success_bytes - headers * success_packets;
}
static int mlx5e_xfrm_validate_policy(struct mlx5_core_dev *mdev,
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 094/197] Bluetooth: hci_event: Fix setting of unicast qos interval
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (92 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 093/197] net/mlx5e: Approximate IPsec per-SA payload data bytes count Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 095/197] Bluetooth: Ignore too large handle values in BIG Greg Kroah-Hartman
` (116 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Luiz Augusto von Dentz, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
[ Upstream commit ac65ecccae802417ce42e857defacad60e4b8329 ]
qos->ucast interval reffers to the SDU interval, and should not
be set to the interval value reported by the LE CIS Established
event since the latter reffers to the ISO interval. These two
interval are not the same thing:
BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 6, Part G
Isochronous interval:
The time between two consecutive BIS or CIS events (designated
ISO_Interval in the Link Layer)
SDU interval:
The nominal time between two consecutive SDUs that are sent or
received by the upper layer.
So this instead uses the following formula from the spec to calculate
the resulting SDU interface:
BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 6, Part G
page 3075:
Transport_Latency_C_To_P = CIG_Sync_Delay + (FT_C_To_P) ×
ISO_Interval + SDU_Interval_C_To_P
Transport_Latency_P_To_C = CIG_Sync_Delay + (FT_P_To_C) ×
ISO_Interval + SDU_Interval_P_To_C
Link: https://github.com/bluez/bluez/issues/823
Fixes: 2be22f1941d5 ("Bluetooth: hci_event: Fix parsing of CIS Established Event")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/bluetooth/hci_event.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 1ed734a7fb313..0b3a76fcfedf5 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -6661,6 +6661,7 @@ static void hci_le_cis_estabilished_evt(struct hci_dev *hdev, void *data,
struct bt_iso_qos *qos;
bool pending = false;
u16 handle = __le16_to_cpu(ev->handle);
+ u32 c_sdu_interval, p_sdu_interval;
bt_dev_dbg(hdev, "status 0x%2.2x", ev->status);
@@ -6685,12 +6686,25 @@ static void hci_le_cis_estabilished_evt(struct hci_dev *hdev, void *data,
pending = test_and_clear_bit(HCI_CONN_CREATE_CIS, &conn->flags);
- /* Convert ISO Interval (1.25 ms slots) to SDU Interval (us) */
- qos->ucast.in.interval = le16_to_cpu(ev->interval) * 1250;
- qos->ucast.out.interval = qos->ucast.in.interval;
+ /* BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 6, Part G
+ * page 3075:
+ * Transport_Latency_C_To_P = CIG_Sync_Delay + (FT_C_To_P) ×
+ * ISO_Interval + SDU_Interval_C_To_P
+ * ...
+ * SDU_Interval = (CIG_Sync_Delay + (FT) x ISO_Interval) -
+ * Transport_Latency
+ */
+ c_sdu_interval = (get_unaligned_le24(ev->cig_sync_delay) +
+ (ev->c_ft * le16_to_cpu(ev->interval) * 1250)) -
+ get_unaligned_le24(ev->c_latency);
+ p_sdu_interval = (get_unaligned_le24(ev->cig_sync_delay) +
+ (ev->p_ft * le16_to_cpu(ev->interval) * 1250)) -
+ get_unaligned_le24(ev->p_latency);
switch (conn->role) {
case HCI_ROLE_SLAVE:
+ qos->ucast.in.interval = c_sdu_interval;
+ qos->ucast.out.interval = p_sdu_interval;
/* Convert Transport Latency (us) to Latency (msec) */
qos->ucast.in.latency =
DIV_ROUND_CLOSEST(get_unaligned_le24(ev->c_latency),
@@ -6704,6 +6718,8 @@ static void hci_le_cis_estabilished_evt(struct hci_dev *hdev, void *data,
qos->ucast.out.phy = ev->p_phy;
break;
case HCI_ROLE_MASTER:
+ qos->ucast.in.interval = p_sdu_interval;
+ qos->ucast.out.interval = c_sdu_interval;
/* Convert Transport Latency (us) to Latency (msec) */
qos->ucast.out.latency =
DIV_ROUND_CLOSEST(get_unaligned_le24(ev->c_latency),
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 095/197] Bluetooth: Ignore too large handle values in BIG
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (93 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 094/197] Bluetooth: hci_event: Fix setting of unicast qos interval Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 096/197] Bluetooth: ISO: Check socket flag instead of hcon Greg Kroah-Hartman
` (115 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot+b2545b087a01a7319474,
Edward Adam Davis, Luiz Augusto von Dentz, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Edward Adam Davis <eadavis@qq.com>
[ Upstream commit 015d79c96d62cd8a4a359fcf5be40d58088c936b ]
hci_le_big_sync_established_evt is necessary to filter out cases where the
handle value is belonging to ida id range, otherwise ida will be erroneously
released in hci_conn_cleanup.
Fixes: 181a42edddf5 ("Bluetooth: Make handle of hci_conn be unique")
Reported-by: syzbot+b2545b087a01a7319474@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=b2545b087a01a7319474
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/bluetooth/hci_event.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 0b3a76fcfedf5..eb59f418eb6dc 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -6910,6 +6910,10 @@ static void hci_le_big_sync_established_evt(struct hci_dev *hdev, void *data,
bis = hci_conn_hash_lookup_handle(hdev, handle);
if (!bis) {
+ if (handle > HCI_CONN_HANDLE_MAX) {
+ bt_dev_dbg(hdev, "ignore too large handle %u", handle);
+ continue;
+ }
bis = hci_conn_add(hdev, ISO_LINK, BDADDR_ANY,
HCI_ROLE_SLAVE, handle);
if (IS_ERR(bis))
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 096/197] Bluetooth: ISO: Check socket flag instead of hcon
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (94 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 095/197] Bluetooth: Ignore too large handle values in BIG Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 097/197] bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX Greg Kroah-Hartman
` (114 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Iulia Tanasescu,
Luiz Augusto von Dentz, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Iulia Tanasescu <iulia.tanasescu@nxp.com>
[ Upstream commit 596b6f081336e77764ca35cfeab66d0fcdbe544e ]
This fixes the following Smatch static checker warning:
net/bluetooth/iso.c:1364 iso_sock_recvmsg()
error: we previously assumed 'pi->conn->hcon' could be null (line 1359)
net/bluetooth/iso.c
1347 static int iso_sock_recvmsg(struct socket *sock, struct msghdr *msg,
1348 size_t len, int flags)
1349 {
1350 struct sock *sk = sock->sk;
1351 struct iso_pinfo *pi = iso_pi(sk);
1352
1353 BT_DBG("sk %p", sk);
1354
1355 if (test_and_clear_bit(BT_SK_DEFER_SETUP,
&bt_sk(sk)->flags)) {
1356 lock_sock(sk);
1357 switch (sk->sk_state) {
1358 case BT_CONNECT2:
1359 if (pi->conn->hcon &&
^^^^^^^^^^^^^^ If ->hcon is NULL
1360 test_bit(HCI_CONN_PA_SYNC,
&pi->conn->hcon->flags)) {
1361 iso_conn_big_sync(sk);
1362 sk->sk_state = BT_LISTEN;
1363 } else {
--> 1364 iso_conn_defer_accept(pi->conn->hcon);
^^^^^^^^^^^^^^
then we're toast
1365 sk->sk_state = BT_CONFIG;
1366 }
1367 release_sock(sk);
1368 return 0;
1369 case BT_CONNECTED:
1370 if (test_bit(BT_SK_PA_SYNC,
Fixes: fbdc4bc47268 ("Bluetooth: ISO: Use defer setup to separate PA sync and BIG sync")
Signed-off-by: Iulia Tanasescu <iulia.tanasescu@nxp.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/bluetooth/iso.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c
index 00c0d8413c638..dd33400c21822 100644
--- a/net/bluetooth/iso.c
+++ b/net/bluetooth/iso.c
@@ -1356,8 +1356,7 @@ static int iso_sock_recvmsg(struct socket *sock, struct msghdr *msg,
lock_sock(sk);
switch (sk->sk_state) {
case BT_CONNECT2:
- if (pi->conn->hcon &&
- test_bit(HCI_CONN_PA_SYNC, &pi->conn->hcon->flags)) {
+ if (test_bit(BT_SK_PA_SYNC, &pi->flags)) {
iso_conn_big_sync(sk);
sk->sk_state = BT_LISTEN;
} else {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 097/197] bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (95 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 096/197] Bluetooth: ISO: Check socket flag instead of hcon Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 098/197] tcp_metrics: validate source addr length Greg Kroah-Hartman
` (113 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot+b2545b087a01a7319474,
Pavel Skripkin, Luiz Augusto von Dentz, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pavel Skripkin <paskripkin@gmail.com>
[ Upstream commit 1cc18c2ab2e8c54c355ea7c0423a636e415a0c23 ]
Syzbot hit warning in hci_conn_del() caused by freeing handle that was
not allocated using ida allocator.
This is caused by handle bigger than HCI_CONN_HANDLE_MAX passed by
hci_le_big_sync_established_evt(), which makes code think it's unset
connection.
Add same check for handle upper bound as in hci_conn_set_handle() to
prevent warning.
Link: https://syzkaller.appspot.com/bug?extid=b2545b087a01a7319474
Reported-by: syzbot+b2545b087a01a7319474@syzkaller.appspotmail.com
Fixes: 181a42edddf5 ("Bluetooth: Make handle of hci_conn be unique")
Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/bluetooth/hci_conn.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
index 08ae30fd31551..baca48ce8d0c6 100644
--- a/net/bluetooth/hci_conn.c
+++ b/net/bluetooth/hci_conn.c
@@ -904,8 +904,8 @@ static int hci_conn_hash_alloc_unset(struct hci_dev *hdev)
U16_MAX, GFP_ATOMIC);
}
-struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
- u8 role, u16 handle)
+static struct hci_conn *__hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
+ u8 role, u16 handle)
{
struct hci_conn *conn;
@@ -1046,7 +1046,16 @@ struct hci_conn *hci_conn_add_unset(struct hci_dev *hdev, int type,
if (unlikely(handle < 0))
return ERR_PTR(-ECONNREFUSED);
- return hci_conn_add(hdev, type, dst, role, handle);
+ return __hci_conn_add(hdev, type, dst, role, handle);
+}
+
+struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
+ u8 role, u16 handle)
+{
+ if (handle > HCI_CONN_HANDLE_MAX)
+ return ERR_PTR(-EINVAL);
+
+ return __hci_conn_add(hdev, type, dst, role, handle);
}
static void hci_conn_cleanup_child(struct hci_conn *conn, u8 reason)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 098/197] tcp_metrics: validate source addr length
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (96 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 097/197] bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 099/197] KVM: s390: fix LPSWEY handling Greg Kroah-Hartman
` (112 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Eric Dumazet, Jakub Kicinski,
David S. Miller, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jakub Kicinski <kuba@kernel.org>
[ Upstream commit 66be40e622e177316ae81717aa30057ba9e61dff ]
I don't see anything checking that TCP_METRICS_ATTR_SADDR_IPV4
is at least 4 bytes long, and the policy doesn't have an entry
for this attribute at all (neither does it for IPv6 but v6 is
manually validated).
Reviewed-by: Eric Dumazet <edumazet@google.com>
Fixes: 3e7013ddf55a ("tcp: metrics: Allow selective get/del of tcp-metrics based on src IP")
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/ipv4/tcp_metrics.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
index c2a925538542b..e0883ba709b0b 100644
--- a/net/ipv4/tcp_metrics.c
+++ b/net/ipv4/tcp_metrics.c
@@ -619,6 +619,7 @@ static const struct nla_policy tcp_metrics_nl_policy[TCP_METRICS_ATTR_MAX + 1] =
[TCP_METRICS_ATTR_ADDR_IPV4] = { .type = NLA_U32, },
[TCP_METRICS_ATTR_ADDR_IPV6] = { .type = NLA_BINARY,
.len = sizeof(struct in6_addr), },
+ [TCP_METRICS_ATTR_SADDR_IPV4] = { .type = NLA_U32, },
/* Following attributes are not received for GET/DEL,
* we keep them for reference
*/
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 099/197] KVM: s390: fix LPSWEY handling
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (97 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 098/197] tcp_metrics: validate source addr length Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 100/197] e1000e: Fix S0ix residency on corporate systems Greg Kroah-Hartman
` (111 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Marc Hartmayer, Sven Schnelle,
Claudio Imbrenda, Christian Borntraeger, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Borntraeger <borntraeger@linux.ibm.com>
[ Upstream commit 4c6abb7f7b349f00c0f7ed5045bf67759c012892 ]
in rare cases, e.g. for injecting a machine check we do intercept all
load PSW instructions via ICTL_LPSW. With facility 193 a new variant
LPSWEY was added. KVM needs to handle that as well.
Fixes: a3efa8429266 ("KVM: s390: gen_facilities: allow facilities 165, 193, 194 and 196")
Reported-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Message-ID: <20240628163547.2314-1-borntraeger@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/s390/include/asm/kvm_host.h | 1 +
arch/s390/kvm/kvm-s390.c | 1 +
arch/s390/kvm/kvm-s390.h | 15 +++++++++++++++
arch/s390/kvm/priv.c | 32 ++++++++++++++++++++++++++++++++
4 files changed, 49 insertions(+)
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index 95990461888fc..9281063636a73 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -427,6 +427,7 @@ struct kvm_vcpu_stat {
u64 instruction_io_other;
u64 instruction_lpsw;
u64 instruction_lpswe;
+ u64 instruction_lpswey;
u64 instruction_pfmf;
u64 instruction_ptff;
u64 instruction_sck;
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 82e9631cd9efb..54b5b2565df8d 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -132,6 +132,7 @@ const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
STATS_DESC_COUNTER(VCPU, instruction_io_other),
STATS_DESC_COUNTER(VCPU, instruction_lpsw),
STATS_DESC_COUNTER(VCPU, instruction_lpswe),
+ STATS_DESC_COUNTER(VCPU, instruction_lpswey),
STATS_DESC_COUNTER(VCPU, instruction_pfmf),
STATS_DESC_COUNTER(VCPU, instruction_ptff),
STATS_DESC_COUNTER(VCPU, instruction_sck),
diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h
index 111eb5c747840..bf8534218af3d 100644
--- a/arch/s390/kvm/kvm-s390.h
+++ b/arch/s390/kvm/kvm-s390.h
@@ -138,6 +138,21 @@ static inline u64 kvm_s390_get_base_disp_s(struct kvm_vcpu *vcpu, u8 *ar)
return (base2 ? vcpu->run->s.regs.gprs[base2] : 0) + disp2;
}
+static inline u64 kvm_s390_get_base_disp_siy(struct kvm_vcpu *vcpu, u8 *ar)
+{
+ u32 base1 = vcpu->arch.sie_block->ipb >> 28;
+ s64 disp1;
+
+ /* The displacement is a 20bit _SIGNED_ value */
+ disp1 = sign_extend64(((vcpu->arch.sie_block->ipb & 0x0fff0000) >> 16) +
+ ((vcpu->arch.sie_block->ipb & 0xff00) << 4), 19);
+
+ if (ar)
+ *ar = base1;
+
+ return (base1 ? vcpu->run->s.regs.gprs[base1] : 0) + disp1;
+}
+
static inline void kvm_s390_get_base_disp_sse(struct kvm_vcpu *vcpu,
u64 *address1, u64 *address2,
u8 *ar_b1, u8 *ar_b2)
diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
index 1be19cc9d73c1..1a49b89706f86 100644
--- a/arch/s390/kvm/priv.c
+++ b/arch/s390/kvm/priv.c
@@ -797,6 +797,36 @@ static int handle_lpswe(struct kvm_vcpu *vcpu)
return 0;
}
+static int handle_lpswey(struct kvm_vcpu *vcpu)
+{
+ psw_t new_psw;
+ u64 addr;
+ int rc;
+ u8 ar;
+
+ vcpu->stat.instruction_lpswey++;
+
+ if (!test_kvm_facility(vcpu->kvm, 193))
+ return kvm_s390_inject_program_int(vcpu, PGM_OPERATION);
+
+ if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE)
+ return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
+
+ addr = kvm_s390_get_base_disp_siy(vcpu, &ar);
+ if (addr & 7)
+ return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
+
+ rc = read_guest(vcpu, addr, ar, &new_psw, sizeof(new_psw));
+ if (rc)
+ return kvm_s390_inject_prog_cond(vcpu, rc);
+
+ vcpu->arch.sie_block->gpsw = new_psw;
+ if (!is_valid_psw(&vcpu->arch.sie_block->gpsw))
+ return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
+
+ return 0;
+}
+
static int handle_stidp(struct kvm_vcpu *vcpu)
{
u64 stidp_data = vcpu->kvm->arch.model.cpuid;
@@ -1462,6 +1492,8 @@ int kvm_s390_handle_eb(struct kvm_vcpu *vcpu)
case 0x61:
case 0x62:
return handle_ri(vcpu);
+ case 0x71:
+ return handle_lpswey(vcpu);
default:
return -EOPNOTSUPP;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 100/197] e1000e: Fix S0ix residency on corporate systems
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (98 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 099/197] KVM: s390: fix LPSWEY handling Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 101/197] gpiolib: of: fix lookup quirk for MIPS Lantiq Greg Kroah-Hartman
` (110 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dima Ruinskiy, Vitaly Lifshits,
Tony Nguyen, Simon Horman, Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dima Ruinskiy <dima.ruinskiy@intel.com>
[ Upstream commit c93a6f62cb1bd097aef2e4588648a420d175eee2 ]
On vPro systems, the configuration of the I219-LM to achieve power
gating and S0ix residency is split between the driver and the CSME FW.
It was discovered that in some scenarios, where the network cable is
connected and then disconnected, S0ix residency is not always reached.
This was root-caused to a subset of I219-LM register writes that are not
performed by the CSME FW. Therefore, the driver should perform these
register writes on corporate setups, regardless of the CSME FW state.
This was discovered on Meteor Lake systems; however it is likely to
appear on other platforms as well.
Fixes: cc23f4f0b6b9 ("e1000e: Add support for Meteor Lake")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=218589
Signed-off-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
Signed-off-by: Vitaly Lifshits <vitaly.lifshits@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20240628201754.2744221-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/intel/e1000e/netdev.c | 132 ++++++++++-----------
1 file changed, 66 insertions(+), 66 deletions(-)
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 3692fce201959..334f652c60601 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -6363,49 +6363,49 @@ static void e1000e_s0ix_entry_flow(struct e1000_adapter *adapter)
mac_data |= E1000_EXTCNF_CTRL_GATE_PHY_CFG;
ew32(EXTCNF_CTRL, mac_data);
- /* Enable the Dynamic Power Gating in the MAC */
- mac_data = er32(FEXTNVM7);
- mac_data |= BIT(22);
- ew32(FEXTNVM7, mac_data);
-
/* Disable disconnected cable conditioning for Power Gating */
mac_data = er32(DPGFR);
mac_data |= BIT(2);
ew32(DPGFR, mac_data);
- /* Don't wake from dynamic Power Gating with clock request */
- mac_data = er32(FEXTNVM12);
- mac_data |= BIT(12);
- ew32(FEXTNVM12, mac_data);
-
- /* Ungate PGCB clock */
- mac_data = er32(FEXTNVM9);
- mac_data &= ~BIT(28);
- ew32(FEXTNVM9, mac_data);
-
- /* Enable K1 off to enable mPHY Power Gating */
- mac_data = er32(FEXTNVM6);
- mac_data |= BIT(31);
- ew32(FEXTNVM6, mac_data);
-
- /* Enable mPHY power gating for any link and speed */
- mac_data = er32(FEXTNVM8);
- mac_data |= BIT(9);
- ew32(FEXTNVM8, mac_data);
-
/* Enable the Dynamic Clock Gating in the DMA and MAC */
mac_data = er32(CTRL_EXT);
mac_data |= E1000_CTRL_EXT_DMA_DYN_CLK_EN;
ew32(CTRL_EXT, mac_data);
-
- /* No MAC DPG gating SLP_S0 in modern standby
- * Switch the logic of the lanphypc to use PMC counter
- */
- mac_data = er32(FEXTNVM5);
- mac_data |= BIT(7);
- ew32(FEXTNVM5, mac_data);
}
+ /* Enable the Dynamic Power Gating in the MAC */
+ mac_data = er32(FEXTNVM7);
+ mac_data |= BIT(22);
+ ew32(FEXTNVM7, mac_data);
+
+ /* Don't wake from dynamic Power Gating with clock request */
+ mac_data = er32(FEXTNVM12);
+ mac_data |= BIT(12);
+ ew32(FEXTNVM12, mac_data);
+
+ /* Ungate PGCB clock */
+ mac_data = er32(FEXTNVM9);
+ mac_data &= ~BIT(28);
+ ew32(FEXTNVM9, mac_data);
+
+ /* Enable K1 off to enable mPHY Power Gating */
+ mac_data = er32(FEXTNVM6);
+ mac_data |= BIT(31);
+ ew32(FEXTNVM6, mac_data);
+
+ /* Enable mPHY power gating for any link and speed */
+ mac_data = er32(FEXTNVM8);
+ mac_data |= BIT(9);
+ ew32(FEXTNVM8, mac_data);
+
+ /* No MAC DPG gating SLP_S0 in modern standby
+ * Switch the logic of the lanphypc to use PMC counter
+ */
+ mac_data = er32(FEXTNVM5);
+ mac_data |= BIT(7);
+ ew32(FEXTNVM5, mac_data);
+
/* Disable the time synchronization clock */
mac_data = er32(FEXTNVM7);
mac_data |= BIT(31);
@@ -6498,33 +6498,6 @@ static void e1000e_s0ix_exit_flow(struct e1000_adapter *adapter)
} else {
/* Request driver unconfigure the device from S0ix */
- /* Disable the Dynamic Power Gating in the MAC */
- mac_data = er32(FEXTNVM7);
- mac_data &= 0xFFBFFFFF;
- ew32(FEXTNVM7, mac_data);
-
- /* Disable mPHY power gating for any link and speed */
- mac_data = er32(FEXTNVM8);
- mac_data &= ~BIT(9);
- ew32(FEXTNVM8, mac_data);
-
- /* Disable K1 off */
- mac_data = er32(FEXTNVM6);
- mac_data &= ~BIT(31);
- ew32(FEXTNVM6, mac_data);
-
- /* Disable Ungate PGCB clock */
- mac_data = er32(FEXTNVM9);
- mac_data |= BIT(28);
- ew32(FEXTNVM9, mac_data);
-
- /* Cancel not waking from dynamic
- * Power Gating with clock request
- */
- mac_data = er32(FEXTNVM12);
- mac_data &= ~BIT(12);
- ew32(FEXTNVM12, mac_data);
-
/* Cancel disable disconnected cable conditioning
* for Power Gating
*/
@@ -6537,13 +6510,6 @@ static void e1000e_s0ix_exit_flow(struct e1000_adapter *adapter)
mac_data &= 0xFFF7FFFF;
ew32(CTRL_EXT, mac_data);
- /* Revert the lanphypc logic to use the internal Gbe counter
- * and not the PMC counter
- */
- mac_data = er32(FEXTNVM5);
- mac_data &= 0xFFFFFF7F;
- ew32(FEXTNVM5, mac_data);
-
/* Enable the periodic inband message,
* Request PCIe clock in K1 page770_17[10:9] =01b
*/
@@ -6581,6 +6547,40 @@ static void e1000e_s0ix_exit_flow(struct e1000_adapter *adapter)
mac_data &= ~BIT(31);
mac_data |= BIT(0);
ew32(FEXTNVM7, mac_data);
+
+ /* Disable the Dynamic Power Gating in the MAC */
+ mac_data = er32(FEXTNVM7);
+ mac_data &= 0xFFBFFFFF;
+ ew32(FEXTNVM7, mac_data);
+
+ /* Disable mPHY power gating for any link and speed */
+ mac_data = er32(FEXTNVM8);
+ mac_data &= ~BIT(9);
+ ew32(FEXTNVM8, mac_data);
+
+ /* Disable K1 off */
+ mac_data = er32(FEXTNVM6);
+ mac_data &= ~BIT(31);
+ ew32(FEXTNVM6, mac_data);
+
+ /* Disable Ungate PGCB clock */
+ mac_data = er32(FEXTNVM9);
+ mac_data |= BIT(28);
+ ew32(FEXTNVM9, mac_data);
+
+ /* Cancel not waking from dynamic
+ * Power Gating with clock request
+ */
+ mac_data = er32(FEXTNVM12);
+ mac_data &= ~BIT(12);
+ ew32(FEXTNVM12, mac_data);
+
+ /* Revert the lanphypc logic to use the internal Gbe counter
+ * and not the PMC counter
+ */
+ mac_data = er32(FEXTNVM5);
+ mac_data &= 0xFFFFFF7F;
+ ew32(FEXTNVM5, mac_data);
}
static int e1000e_pm_freeze(struct device *dev)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 101/197] gpiolib: of: fix lookup quirk for MIPS Lantiq
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (99 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 100/197] e1000e: Fix S0ix residency on corporate systems Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 102/197] net: allow skb_datagram_iter to be called from any context Greg Kroah-Hartman
` (109 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Martin Schiller, Dmitry Torokhov,
Bartosz Golaszewski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
[ Upstream commit 3645ffaf2b334abaf5f53e5ca0f47465d91e69d2 ]
As it turns out, there is a large number of out-of-tree DTSes (in
OpenWrt project) that used to specify incorrect (active high) polarity
for the Lantiq reset GPIO, so to keep compatibility while they are
being updated a quirk for force the polarity low is needed. Luckily
these old DTSes used nonstandard name for the property ("gpio-reset" vs
"reset-gpios") so the quirk will not hurt if there are any new devices
that need inverted polarity as they can specify the right polarity in
their DTS when using the standard "reset-gpios" property.
Additionally the condition to enable the transition from standard to
non-standard reset GPIO property name was inverted and the replacement
name for the property was not correct. Fix this as well.
Fixes: fbbbcd177a27 ("gpiolib: of: add quirk for locating reset lines with legacy bindings")
Fixes: 90c2d2eb7ab5 ("MIPS: pci: lantiq: switch to using gpiod API")
Reported-by: Martin Schiller <ms@dev.tdt.de>
Acked-by: Martin Schiller <ms@dev.tdt.de>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Link: https://lore.kernel.org/r/ZoLpqv1PN08xHioh@google.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpio/gpiolib-of.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
index cb0cefaec37e8..7db35cbde8e92 100644
--- a/drivers/gpio/gpiolib-of.c
+++ b/drivers/gpio/gpiolib-of.c
@@ -202,6 +202,16 @@ static void of_gpio_try_fixup_polarity(const struct device_node *np,
* helper, and be consistent with what other drivers do.
*/
{ "qi,lb60", "rb-gpios", true },
+#endif
+#if IS_ENABLED(CONFIG_PCI_LANTIQ)
+ /*
+ * According to the PCI specification, the RST# pin is an
+ * active-low signal. However, most of the device trees that
+ * have been widely used for a long time incorrectly describe
+ * reset GPIO as active-high, and were also using wrong name
+ * for the property.
+ */
+ { "lantiq,pci-xway", "gpio-reset", false },
#endif
};
unsigned int i;
@@ -504,9 +514,9 @@ static struct gpio_desc *of_find_gpio_rename(struct device_node *np,
{ "reset", "reset-n-io", "marvell,nfc-uart" },
{ "reset", "reset-n-io", "mrvl,nfc-uart" },
#endif
-#if !IS_ENABLED(CONFIG_PCI_LANTIQ)
+#if IS_ENABLED(CONFIG_PCI_LANTIQ)
/* MIPS Lantiq PCI */
- { "reset", "gpios-reset", "lantiq,pci-xway" },
+ { "reset", "gpio-reset", "lantiq,pci-xway" },
#endif
/*
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 102/197] net: allow skb_datagram_iter to be called from any context
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (100 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 101/197] gpiolib: of: fix lookup quirk for MIPS Lantiq Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 103/197] net: txgbe: initialize num_q_vectors for MSI/INTx interrupts Greg Kroah-Hartman
` (108 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, kernel test robot, Sagi Grimberg,
Paolo Abeni, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sagi Grimberg <sagi@grimberg.me>
[ Upstream commit d2d30a376d9cc94c6fb730c58b3e5b7426ecb6de ]
We only use the mapping in a single context, so kmap_local is sufficient
and cheaper. Make sure to use skb_frag_foreach_page as skb frags may
contain compound pages and we need to map page by page.
Reported-by: kernel test robot <oliver.sang@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202406161539.b5ff7b20-oliver.sang@intel.com
Fixes: 950fcaecd5cc ("datagram: consolidate datagram copy to iter helpers")
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Link: https://patch.msgid.link/20240626100008.831849-1-sagi@grimberg.me
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/core/datagram.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/net/core/datagram.c b/net/core/datagram.c
index a8b625abe242c..cb72923acc21c 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
@@ -435,15 +435,22 @@ static int __skb_datagram_iter(const struct sk_buff *skb, int offset,
end = start + skb_frag_size(frag);
if ((copy = end - offset) > 0) {
- struct page *page = skb_frag_page(frag);
- u8 *vaddr = kmap(page);
+ u32 p_off, p_len, copied;
+ struct page *p;
+ u8 *vaddr;
if (copy > len)
copy = len;
- n = INDIRECT_CALL_1(cb, simple_copy_to_iter,
- vaddr + skb_frag_off(frag) + offset - start,
- copy, data, to);
- kunmap(page);
+
+ skb_frag_foreach_page(frag,
+ skb_frag_off(frag) + offset - start,
+ copy, p, p_off, p_len, copied) {
+ vaddr = kmap_local_page(p);
+ n = INDIRECT_CALL_1(cb, simple_copy_to_iter,
+ vaddr + p_off, p_len, data, to);
+ kunmap_local(vaddr);
+ }
+
offset += n;
if (n != copy)
goto short_copy;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 103/197] net: txgbe: initialize num_q_vectors for MSI/INTx interrupts
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (101 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 102/197] net: allow skb_datagram_iter to be called from any context Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 104/197] net: txgbe: remove separate irq request for MSI and INTx Greg Kroah-Hartman
` (107 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jiawen Wu, Paolo Abeni, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiawen Wu <jiawenwu@trustnetic.com>
[ Upstream commit 7c36711a2cd8059c2d24f5e5c1d76e8ea2d5613c ]
When using MSI/INTx interrupts, wx->num_q_vectors is uninitialized.
Thus there will be kernel panic in wx_alloc_q_vectors() to allocate
queue vectors.
Fixes: 3f703186113f ("net: libwx: Add irq flow functions")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/wangxun/libwx/wx_lib.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.c b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
index 07ba3a270a14f..b62b191cc146a 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_lib.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
@@ -1686,6 +1686,7 @@ static int wx_set_interrupt_capability(struct wx *wx)
}
pdev->irq = pci_irq_vector(pdev, 0);
+ wx->num_q_vectors = 1;
return 0;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 104/197] net: txgbe: remove separate irq request for MSI and INTx
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (102 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 103/197] net: txgbe: initialize num_q_vectors for MSI/INTx interrupts Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 105/197] net: txgbe: add extra handle for MSI/INTx into thread irq handle Greg Kroah-Hartman
` (106 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jiawen Wu, Paolo Abeni, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiawen Wu <jiawenwu@trustnetic.com>
[ Upstream commit bd07a98178462e7a02ed2bf7dec90a00944c1da5 ]
When using MSI or INTx interrupts, request_irq() for pdev->irq will
conflict with request_threaded_irq() for txgbe->misc.irq, to cause
system crash. So remove txgbe_request_irq() for MSI/INTx case, and
rename txgbe_request_msix_irqs() since it only request for queue irqs.
Add wx->misc_irq_domain to determine whether the driver creates an IRQ
domain and threaded request the IRQs.
Fixes: aefd013624a1 ("net: txgbe: use irq_domain for interrupt controller")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/wangxun/libwx/wx_hw.c | 1 +
drivers/net/ethernet/wangxun/libwx/wx_lib.c | 5 +-
drivers/net/ethernet/wangxun/libwx/wx_type.h | 1 +
.../net/ethernet/wangxun/txgbe/txgbe_irq.c | 80 ++-----------------
.../net/ethernet/wangxun/txgbe/txgbe_irq.h | 2 +-
.../net/ethernet/wangxun/txgbe/txgbe_main.c | 2 +-
6 files changed, 15 insertions(+), 76 deletions(-)
diff --git a/drivers/net/ethernet/wangxun/libwx/wx_hw.c b/drivers/net/ethernet/wangxun/libwx/wx_hw.c
index c09a6f7445754..db640ea63f034 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_hw.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_hw.c
@@ -1959,6 +1959,7 @@ int wx_sw_init(struct wx *wx)
}
bitmap_zero(wx->state, WX_STATE_NBITS);
+ wx->misc_irq_domain = false;
return 0;
}
diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.c b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
index b62b191cc146a..bf02bd0f08407 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_lib.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
@@ -1997,7 +1997,8 @@ void wx_free_irq(struct wx *wx)
int vector;
if (!(pdev->msix_enabled)) {
- free_irq(pdev->irq, wx);
+ if (!wx->misc_irq_domain)
+ free_irq(pdev->irq, wx);
return;
}
@@ -2012,7 +2013,7 @@ void wx_free_irq(struct wx *wx)
free_irq(entry->vector, q_vector);
}
- if (wx->mac.type == wx_mac_em)
+ if (!wx->misc_irq_domain)
free_irq(wx->msix_entry->vector, wx);
}
EXPORT_SYMBOL(wx_free_irq);
diff --git a/drivers/net/ethernet/wangxun/libwx/wx_type.h b/drivers/net/ethernet/wangxun/libwx/wx_type.h
index 5aaf7b1fa2db9..0df7f5712b6f7 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_type.h
+++ b/drivers/net/ethernet/wangxun/libwx/wx_type.h
@@ -1058,6 +1058,7 @@ struct wx {
dma_addr_t isb_dma;
u32 *isb_mem;
u32 isb_tag[WX_ISB_MAX];
+ bool misc_irq_domain;
#define WX_MAX_RETA_ENTRIES 128
#define WX_RSS_INDIR_TBL_MAX 64
diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c
index b3e3605d1edb3..1490fd6ddbdf9 100644
--- a/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c
+++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c
@@ -27,57 +27,19 @@ void txgbe_irq_enable(struct wx *wx, bool queues)
}
/**
- * txgbe_intr - msi/legacy mode Interrupt Handler
- * @irq: interrupt number
- * @data: pointer to a network interface device structure
- **/
-static irqreturn_t txgbe_intr(int __always_unused irq, void *data)
-{
- struct wx_q_vector *q_vector;
- struct wx *wx = data;
- struct pci_dev *pdev;
- u32 eicr;
-
- q_vector = wx->q_vector[0];
- pdev = wx->pdev;
-
- eicr = wx_misc_isb(wx, WX_ISB_VEC0);
- if (!eicr) {
- /* shared interrupt alert!
- * the interrupt that we masked before the ICR read.
- */
- if (netif_running(wx->netdev))
- txgbe_irq_enable(wx, true);
- return IRQ_NONE; /* Not our interrupt */
- }
- wx->isb_mem[WX_ISB_VEC0] = 0;
- if (!(pdev->msi_enabled))
- wr32(wx, WX_PX_INTA, 1);
-
- wx->isb_mem[WX_ISB_MISC] = 0;
- /* would disable interrupts here but it is auto disabled */
- napi_schedule_irqoff(&q_vector->napi);
-
- /* re-enable link(maybe) and non-queue interrupts, no flush.
- * txgbe_poll will re-enable the queue interrupts
- */
- if (netif_running(wx->netdev))
- txgbe_irq_enable(wx, false);
-
- return IRQ_HANDLED;
-}
-
-/**
- * txgbe_request_msix_irqs - Initialize MSI-X interrupts
+ * txgbe_request_queue_irqs - Initialize MSI-X queue interrupts
* @wx: board private structure
*
- * Allocate MSI-X vectors and request interrupts from the kernel.
+ * Allocate MSI-X queue vectors and request interrupts from the kernel.
**/
-static int txgbe_request_msix_irqs(struct wx *wx)
+int txgbe_request_queue_irqs(struct wx *wx)
{
struct net_device *netdev = wx->netdev;
int vector, err;
+ if (!wx->pdev->msix_enabled)
+ return 0;
+
for (vector = 0; vector < wx->num_q_vectors; vector++) {
struct wx_q_vector *q_vector = wx->q_vector[vector];
struct msix_entry *entry = &wx->msix_q_entries[vector];
@@ -110,34 +72,6 @@ static int txgbe_request_msix_irqs(struct wx *wx)
return err;
}
-/**
- * txgbe_request_irq - initialize interrupts
- * @wx: board private structure
- *
- * Attempt to configure interrupts using the best available
- * capabilities of the hardware and kernel.
- **/
-int txgbe_request_irq(struct wx *wx)
-{
- struct net_device *netdev = wx->netdev;
- struct pci_dev *pdev = wx->pdev;
- int err;
-
- if (pdev->msix_enabled)
- err = txgbe_request_msix_irqs(wx);
- else if (pdev->msi_enabled)
- err = request_irq(wx->pdev->irq, &txgbe_intr, 0,
- netdev->name, wx);
- else
- err = request_irq(wx->pdev->irq, &txgbe_intr, IRQF_SHARED,
- netdev->name, wx);
-
- if (err)
- wx_err(wx, "request_irq failed, Error %d\n", err);
-
- return err;
-}
-
static int txgbe_request_gpio_irq(struct txgbe *txgbe)
{
txgbe->gpio_irq = irq_find_mapping(txgbe->misc.domain, TXGBE_IRQ_GPIO);
@@ -256,6 +190,8 @@ int txgbe_setup_misc_irq(struct txgbe *txgbe)
if (err)
goto free_gpio_irq;
+ wx->misc_irq_domain = true;
+
return 0;
free_gpio_irq:
diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.h b/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.h
index b77945e7a0f26..e6285b94625ea 100644
--- a/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.h
+++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.h
@@ -2,6 +2,6 @@
/* Copyright (c) 2015 - 2024 Beijing WangXun Technology Co., Ltd. */
void txgbe_irq_enable(struct wx *wx, bool queues);
-int txgbe_request_irq(struct wx *wx);
+int txgbe_request_queue_irqs(struct wx *wx);
void txgbe_free_misc_irq(struct txgbe *txgbe);
int txgbe_setup_misc_irq(struct txgbe *txgbe);
diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
index 8c7a74981b907..76b5672c0a177 100644
--- a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
+++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
@@ -294,7 +294,7 @@ static int txgbe_open(struct net_device *netdev)
wx_configure(wx);
- err = txgbe_request_irq(wx);
+ err = txgbe_request_queue_irqs(wx);
if (err)
goto err_free_isb;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 105/197] net: txgbe: add extra handle for MSI/INTx into thread irq handle
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (103 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 104/197] net: txgbe: remove separate irq request for MSI and INTx Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 106/197] net: txgbe: free isb resources at the right time Greg Kroah-Hartman
` (105 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jiawen Wu, Paolo Abeni, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiawen Wu <jiawenwu@trustnetic.com>
[ Upstream commit 1e1fa1723eb3a293d7d0b1c1a9ad8774c1ef0aa0 ]
Rename original txgbe_misc_irq_handle() to txgbe_misc_irq_thread_fn()
since it is the handle thread to wake up. And add the primary handler
to deal the case of MSI/INTx, because there is a schedule NAPI poll.
Fixes: aefd013624a1 ("net: txgbe: use irq_domain for interrupt controller")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../net/ethernet/wangxun/txgbe/txgbe_irq.c | 44 ++++++++++++++++---
1 file changed, 39 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c
index 1490fd6ddbdf9..a4cf682dca650 100644
--- a/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c
+++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_irq.c
@@ -111,6 +111,36 @@ static const struct irq_domain_ops txgbe_misc_irq_domain_ops = {
};
static irqreturn_t txgbe_misc_irq_handle(int irq, void *data)
+{
+ struct wx_q_vector *q_vector;
+ struct txgbe *txgbe = data;
+ struct wx *wx = txgbe->wx;
+ u32 eicr;
+
+ if (wx->pdev->msix_enabled)
+ return IRQ_WAKE_THREAD;
+
+ eicr = wx_misc_isb(wx, WX_ISB_VEC0);
+ if (!eicr) {
+ /* shared interrupt alert!
+ * the interrupt that we masked before the ICR read.
+ */
+ if (netif_running(wx->netdev))
+ txgbe_irq_enable(wx, true);
+ return IRQ_NONE; /* Not our interrupt */
+ }
+ wx->isb_mem[WX_ISB_VEC0] = 0;
+ if (!(wx->pdev->msi_enabled))
+ wr32(wx, WX_PX_INTA, 1);
+
+ /* would disable interrupts here but it is auto disabled */
+ q_vector = wx->q_vector[0];
+ napi_schedule_irqoff(&q_vector->napi);
+
+ return IRQ_WAKE_THREAD;
+}
+
+static irqreturn_t txgbe_misc_irq_thread_fn(int irq, void *data)
{
struct txgbe *txgbe = data;
struct wx *wx = txgbe->wx;
@@ -157,6 +187,7 @@ void txgbe_free_misc_irq(struct txgbe *txgbe)
int txgbe_setup_misc_irq(struct txgbe *txgbe)
{
+ unsigned long flags = IRQF_ONESHOT;
struct wx *wx = txgbe->wx;
int hwirq, err;
@@ -170,14 +201,17 @@ int txgbe_setup_misc_irq(struct txgbe *txgbe)
irq_create_mapping(txgbe->misc.domain, hwirq);
txgbe->misc.chip = txgbe_irq_chip;
- if (wx->pdev->msix_enabled)
+ if (wx->pdev->msix_enabled) {
txgbe->misc.irq = wx->msix_entry->vector;
- else
+ } else {
txgbe->misc.irq = wx->pdev->irq;
+ if (!wx->pdev->msi_enabled)
+ flags |= IRQF_SHARED;
+ }
- err = request_threaded_irq(txgbe->misc.irq, NULL,
- txgbe_misc_irq_handle,
- IRQF_ONESHOT,
+ err = request_threaded_irq(txgbe->misc.irq, txgbe_misc_irq_handle,
+ txgbe_misc_irq_thread_fn,
+ flags,
wx->netdev->name, txgbe);
if (err)
goto del_misc_irq;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 106/197] net: txgbe: free isb resources at the right time
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (104 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 105/197] net: txgbe: add extra handle for MSI/INTx into thread irq handle Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 107/197] btrfs: always do the basic checks for btrfs_qgroup_inherit structure Greg Kroah-Hartman
` (104 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jiawen Wu, Paolo Abeni, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiawen Wu <jiawenwu@trustnetic.com>
[ Upstream commit 935124dd5883b5de68dc5a94f582480a10643dc9 ]
When using MSI/INTx interrupt, the shared interrupts are still being
handled in the device remove routine, before free IRQs. So isb memory
is still read after it is freed. Thus move wx_free_isb_resources()
from txgbe_close() to txgbe_remove(). And fix the improper isb free
action in txgbe_open() error handling path.
Fixes: aefd013624a1 ("net: txgbe: use irq_domain for interrupt controller")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/wangxun/libwx/wx_lib.c | 4 +++-
drivers/net/ethernet/wangxun/ngbe/ngbe_main.c | 2 ++
drivers/net/ethernet/wangxun/txgbe/txgbe_main.c | 7 ++++---
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.c b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
index bf02bd0f08407..88e5e390770b5 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_lib.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
@@ -2028,6 +2028,9 @@ int wx_setup_isb_resources(struct wx *wx)
{
struct pci_dev *pdev = wx->pdev;
+ if (wx->isb_mem)
+ return 0;
+
wx->isb_mem = dma_alloc_coherent(&pdev->dev,
sizeof(u32) * 4,
&wx->isb_dma,
@@ -2387,7 +2390,6 @@ static void wx_free_all_tx_resources(struct wx *wx)
void wx_free_resources(struct wx *wx)
{
- wx_free_isb_resources(wx);
wx_free_all_rx_resources(wx);
wx_free_all_tx_resources(wx);
}
diff --git a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
index e894e01d030d1..af30ca0312b81 100644
--- a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
+++ b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
@@ -387,6 +387,7 @@ static int ngbe_open(struct net_device *netdev)
err_free_irq:
wx_free_irq(wx);
err_free_resources:
+ wx_free_isb_resources(wx);
wx_free_resources(wx);
return err;
}
@@ -408,6 +409,7 @@ static int ngbe_close(struct net_device *netdev)
ngbe_down(wx);
wx_free_irq(wx);
+ wx_free_isb_resources(wx);
wx_free_resources(wx);
phylink_disconnect_phy(wx->phylink);
wx_control_hw(wx, false);
diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
index 76b5672c0a177..ca74d9422065a 100644
--- a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
+++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
@@ -296,7 +296,7 @@ static int txgbe_open(struct net_device *netdev)
err = txgbe_request_queue_irqs(wx);
if (err)
- goto err_free_isb;
+ goto err_free_resources;
/* Notify the stack of the actual queue counts. */
err = netif_set_real_num_tx_queues(netdev, wx->num_tx_queues);
@@ -313,8 +313,8 @@ static int txgbe_open(struct net_device *netdev)
err_free_irq:
wx_free_irq(wx);
-err_free_isb:
- wx_free_isb_resources(wx);
+err_free_resources:
+ wx_free_resources(wx);
err_reset:
txgbe_reset(wx);
@@ -729,6 +729,7 @@ static void txgbe_remove(struct pci_dev *pdev)
txgbe_remove_phy(txgbe);
txgbe_free_misc_irq(txgbe);
+ wx_free_isb_resources(wx);
pci_release_selected_regions(pdev,
pci_select_bars(pdev, IORESOURCE_MEM));
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 107/197] btrfs: always do the basic checks for btrfs_qgroup_inherit structure
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (105 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 106/197] net: txgbe: free isb resources at the right time Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 108/197] net: phy: aquantia: add missing include guards Greg Kroah-Hartman
` (103 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot+a0d1f7e26910be4dc171,
Boris Burkov, Jeongjun Park, Qu Wenruo, David Sterba, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <wqu@suse.com>
[ Upstream commit 724d8042cef84496ddb4492dc120291f997ae26b ]
[BUG]
Syzbot reports the following regression detected by KASAN:
BUG: KASAN: slab-out-of-bounds in btrfs_qgroup_inherit+0x42e/0x2e20 fs/btrfs/qgroup.c:3277
Read of size 8 at addr ffff88814628ca50 by task syz-executor318/5171
CPU: 0 PID: 5171 Comm: syz-executor318 Not tainted 6.10.0-rc2-syzkaller-00010-g2ab795141095 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
print_address_description mm/kasan/report.c:377 [inline]
print_report+0x169/0x550 mm/kasan/report.c:488
kasan_report+0x143/0x180 mm/kasan/report.c:601
btrfs_qgroup_inherit+0x42e/0x2e20 fs/btrfs/qgroup.c:3277
create_pending_snapshot+0x1359/0x29b0 fs/btrfs/transaction.c:1854
create_pending_snapshots+0x195/0x1d0 fs/btrfs/transaction.c:1922
btrfs_commit_transaction+0xf20/0x3740 fs/btrfs/transaction.c:2382
create_snapshot+0x6a1/0x9e0 fs/btrfs/ioctl.c:875
btrfs_mksubvol+0x58f/0x710 fs/btrfs/ioctl.c:1029
btrfs_mksnapshot+0xb5/0xf0 fs/btrfs/ioctl.c:1075
__btrfs_ioctl_snap_create+0x387/0x4b0 fs/btrfs/ioctl.c:1340
btrfs_ioctl_snap_create_v2+0x1f2/0x3a0 fs/btrfs/ioctl.c:1422
btrfs_ioctl+0x99e/0xc60
vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:907 [inline]
__se_sys_ioctl+0xfc/0x170 fs/ioctl.c:893
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fcbf1992509
RSP: 002b:00007fcbf1928218 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00007fcbf1a1f618 RCX: 00007fcbf1992509
RDX: 0000000020000280 RSI: 0000000050009417 RDI: 0000000000000003
RBP: 00007fcbf1a1f610 R08: 00007ffea1298e97 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 00007fcbf19eb660
R13: 00000000200002b8 R14: 00007fcbf19e60c0 R15: 0030656c69662f2e
</TASK>
And it also pinned it down to commit b5357cb268c4 ("btrfs: qgroup: do not
check qgroup inherit if qgroup is disabled").
[CAUSE]
That offending commit skips the whole qgroup inherit check if qgroup is
not enabled.
But that also skips the very basic checks like
num_ref_copies/num_excl_copies and the structure size checks.
Meaning if a qgroup enable/disable race is happening at the background,
and we pass a btrfs_qgroup_inherit structure when the qgroup is
disabled, the check would be completely skipped.
Then at the time of transaction commitment, qgroup is re-enabled and
btrfs_qgroup_inherit() is going to use the incorrect structure and
causing the above KASAN error.
[FIX]
Make btrfs_qgroup_check_inherit() only skip the source qgroup checks.
So that even if invalid btrfs_qgroup_inherit structure is passed in, we
can still reject invalid ones no matter if qgroup is enabled or not.
Furthermore we do already have an extra safety inside
btrfs_qgroup_inherit(), which would just ignore invalid qgroup sources,
so even if we only skip the qgroup source check we're still safe.
Reported-by: syzbot+a0d1f7e26910be4dc171@syzkaller.appspotmail.com
Fixes: b5357cb268c4 ("btrfs: qgroup: do not check qgroup inherit if qgroup is disabled")
Reviewed-by: Boris Burkov <boris@bur.io>
Reviewed-by: Jeongjun Park <aha310510@gmail.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/btrfs/qgroup.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 1167899a16d05..4caa078d972a3 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -3065,8 +3065,6 @@ int btrfs_qgroup_check_inherit(struct btrfs_fs_info *fs_info,
struct btrfs_qgroup_inherit *inherit,
size_t size)
{
- if (!btrfs_qgroup_enabled(fs_info))
- return 0;
if (inherit->flags & ~BTRFS_QGROUP_INHERIT_FLAGS_SUPP)
return -EOPNOTSUPP;
if (size < sizeof(*inherit) || size > PAGE_SIZE)
@@ -3090,6 +3088,14 @@ int btrfs_qgroup_check_inherit(struct btrfs_fs_info *fs_info,
if (size != struct_size(inherit, qgroups, inherit->num_qgroups))
return -EINVAL;
+ /*
+ * Skip the inherit source qgroups check if qgroup is not enabled.
+ * Qgroup can still be later enabled causing problems, but in that case
+ * btrfs_qgroup_inherit() would just ignore those invalid ones.
+ */
+ if (!btrfs_qgroup_enabled(fs_info))
+ return 0;
+
/*
* Now check all the remaining qgroups, they should all:
*
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 108/197] net: phy: aquantia: add missing include guards
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (106 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 107/197] btrfs: always do the basic checks for btrfs_qgroup_inherit structure Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 109/197] net: ntb_netdev: Move ntb_netdev_rx_handler() to call netif_rx() from __netif_rx() Greg Kroah-Hartman
` (102 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Andrew Lunn, Bartosz Golaszewski,
Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
[ Upstream commit 219343755eae6536d1fcb9184e6253ade4906aac ]
The header is missing the include guards so add them.
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Fixes: fb470f70fea7 ("net: phy: aquantia: add hwmon support")
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Link: https://patch.msgid.link/20240701080322.9569-1-brgl@bgdev.pl
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/phy/aquantia/aquantia.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/phy/aquantia/aquantia.h b/drivers/net/phy/aquantia/aquantia.h
index 1c19ae74ad2b4..4830b25e6c7d3 100644
--- a/drivers/net/phy/aquantia/aquantia.h
+++ b/drivers/net/phy/aquantia/aquantia.h
@@ -6,6 +6,9 @@
* Author: Heiner Kallweit <hkallweit1@gmail.com>
*/
+#ifndef AQUANTIA_H
+#define AQUANTIA_H
+
#include <linux/device.h>
#include <linux/phy.h>
@@ -120,3 +123,5 @@ static inline int aqr_hwmon_probe(struct phy_device *phydev) { return 0; }
#endif
int aqr_firmware_load(struct phy_device *phydev);
+
+#endif /* AQUANTIA_H */
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 109/197] net: ntb_netdev: Move ntb_netdev_rx_handler() to call netif_rx() from __netif_rx()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (107 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 108/197] net: phy: aquantia: add missing include guards Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 110/197] drm/fbdev-generic: Fix framebuffer on big endian devices Greg Kroah-Hartman
` (101 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jerry Dai, Dave Jiang,
Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Jiang <dave.jiang@intel.com>
[ Upstream commit e15a5d821e5192a3769d846079bc9aa380139baf ]
The following is emitted when using idxd (DSA) dmanegine as the data
mover for ntb_transport that ntb_netdev uses.
[74412.546922] BUG: using smp_processor_id() in preemptible [00000000] code: irq/52-idxd-por/14526
[74412.556784] caller is netif_rx_internal+0x42/0x130
[74412.562282] CPU: 6 PID: 14526 Comm: irq/52-idxd-por Not tainted 6.9.5 #5
[74412.569870] Hardware name: Intel Corporation ArcherCity/ArcherCity, BIOS EGSDCRB1.E9I.1752.P05.2402080856 02/08/2024
[74412.581699] Call Trace:
[74412.584514] <TASK>
[74412.586933] dump_stack_lvl+0x55/0x70
[74412.591129] check_preemption_disabled+0xc8/0xf0
[74412.596374] netif_rx_internal+0x42/0x130
[74412.600957] __netif_rx+0x20/0xd0
[74412.604743] ntb_netdev_rx_handler+0x66/0x150 [ntb_netdev]
[74412.610985] ntb_complete_rxc+0xed/0x140 [ntb_transport]
[74412.617010] ntb_rx_copy_callback+0x53/0x80 [ntb_transport]
[74412.623332] idxd_dma_complete_txd+0xe3/0x160 [idxd]
[74412.628963] idxd_wq_thread+0x1a6/0x2b0 [idxd]
[74412.634046] irq_thread_fn+0x21/0x60
[74412.638134] ? irq_thread+0xa8/0x290
[74412.642218] irq_thread+0x1a0/0x290
[74412.646212] ? __pfx_irq_thread_fn+0x10/0x10
[74412.651071] ? __pfx_irq_thread_dtor+0x10/0x10
[74412.656117] ? __pfx_irq_thread+0x10/0x10
[74412.660686] kthread+0x100/0x130
[74412.664384] ? __pfx_kthread+0x10/0x10
[74412.668639] ret_from_fork+0x31/0x50
[74412.672716] ? __pfx_kthread+0x10/0x10
[74412.676978] ret_from_fork_asm+0x1a/0x30
[74412.681457] </TASK>
The cause is due to the idxd driver interrupt completion handler uses
threaded interrupt and the threaded handler is not hard or soft interrupt
context. However __netif_rx() can only be called from interrupt context.
Change the call to netif_rx() in order to allow completion via normal
context for dmaengine drivers that utilize threaded irq handling.
While the following commit changed from netif_rx() to __netif_rx(),
baebdf48c360 ("net: dev: Makes sure netif_rx() can be invoked in any context."),
the change should've been a noop instead. However, the code precedes this
fix should've been using netif_rx_ni() or netif_rx_any_context().
Fixes: 548c237c0a99 ("net: Add support for NTB virtual ethernet device")
Reported-by: Jerry Dai <jerry.dai@intel.com>
Tested-by: Jerry Dai <jerry.dai@intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://patch.msgid.link/20240701181538.3799546-1-dave.jiang@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ntb_netdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c
index 536bd6564f8b8..dade51cf599c6 100644
--- a/drivers/net/ntb_netdev.c
+++ b/drivers/net/ntb_netdev.c
@@ -119,7 +119,7 @@ static void ntb_netdev_rx_handler(struct ntb_transport_qp *qp, void *qp_data,
skb->protocol = eth_type_trans(skb, ndev);
skb->ip_summed = CHECKSUM_NONE;
- if (__netif_rx(skb) == NET_RX_DROP) {
+ if (netif_rx(skb) == NET_RX_DROP) {
ndev->stats.rx_errors++;
ndev->stats.rx_dropped++;
} else {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 110/197] drm/fbdev-generic: Fix framebuffer on big endian devices
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (108 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 109/197] net: ntb_netdev: Move ntb_netdev_rx_handler() to call netif_rx() from __netif_rx() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 111/197] net: stmmac: enable HW-accelerated VLAN stripping for gmac4 only Greg Kroah-Hartman
` (100 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Thomas Huth,
Javier Martinez Canillas, Thomas Zimmermann, Geert Uytterhoeven,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Huth <thuth@redhat.com>
[ Upstream commit 740b8dad05bee39e1e3b926f05bb4a8274b8ba49 ]
Starting with kernel 6.7, the framebuffer text console is not working
anymore with the virtio-gpu device on s390x hosts. Such big endian fb
devices are usinga different pixel ordering than little endian devices,
e.g. DRM_FORMAT_BGRX8888 instead of DRM_FORMAT_XRGB8888.
This used to work fine as long as drm_client_buffer_addfb() was still
calling drm_mode_addfb() which called drm_driver_legacy_fb_format()
internally to get the right format. But drm_client_buffer_addfb() has
recently been reworked to call drm_mode_addfb2() instead with the
format value that has been passed to it as a parameter (see commit
6ae2ff23aa43 ("drm/client: Convert drm_client_buffer_addfb() to drm_mode_addfb2()").
That format parameter is determined in drm_fbdev_generic_helper_fb_probe()
via the drm_mode_legacy_fb_format() function - which only generates
formats suitable for little endian devices. So to fix this issue
switch to drm_driver_legacy_fb_format() here instead to take the
device endianness into consideration.
Fixes: 6ae2ff23aa43 ("drm/client: Convert drm_client_buffer_addfb() to drm_mode_addfb2()")
Closes: https://issues.redhat.com/browse/RHEL-45158
Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20240627173530.460615-1-thuth@redhat.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/drm_fbdev_generic.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/drm_fbdev_generic.c b/drivers/gpu/drm/drm_fbdev_generic.c
index b4659cd6285ab..cbb7418b789f8 100644
--- a/drivers/gpu/drm/drm_fbdev_generic.c
+++ b/drivers/gpu/drm/drm_fbdev_generic.c
@@ -84,7 +84,8 @@ static int drm_fbdev_generic_helper_fb_probe(struct drm_fb_helper *fb_helper,
sizes->surface_width, sizes->surface_height,
sizes->surface_bpp);
- format = drm_mode_legacy_fb_format(sizes->surface_bpp, sizes->surface_depth);
+ format = drm_driver_legacy_fb_format(dev, sizes->surface_bpp,
+ sizes->surface_depth);
buffer = drm_client_framebuffer_create(client, sizes->surface_width,
sizes->surface_height, format);
if (IS_ERR(buffer))
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 111/197] net: stmmac: enable HW-accelerated VLAN stripping for gmac4 only
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (109 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 110/197] drm/fbdev-generic: Fix framebuffer on big endian devices Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 112/197] s390/vfio_ccw: Fix target addresses of TIC CCWs Greg Kroah-Hartman
` (99 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Furong Xu, David S. Miller,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Furong Xu <0x1207@gmail.com>
[ Upstream commit 8eb301bd7b0f45d36e663ecbe59b7c80b9863950 ]
Commit 750011e239a5 ("net: stmmac: Add support for HW-accelerated VLAN
stripping") enables MAC level VLAN tag stripping for all MAC cores, but
leaves set_hw_vlan_mode() and rx_hw_vlan() un-implemented for both gmac
and xgmac.
On gmac and xgmac, ethtool reports rx-vlan-offload is on, both MAC and
driver do nothing about VLAN packets actually, although VLAN works well.
Driver level stripping should be used on gmac and xgmac for now.
Fixes: 750011e239a5 ("net: stmmac: Add support for HW-accelerated VLAN stripping")
Signed-off-by: Furong Xu <0x1207@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 7c6fb14b55550..39e8340446c71 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -7662,9 +7662,10 @@ int stmmac_dvr_probe(struct device *device,
#ifdef STMMAC_VLAN_TAG_USED
/* Both mac100 and gmac support receive VLAN tag detection */
ndev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX;
- ndev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX;
- priv->hw->hw_vlan_en = true;
-
+ if (priv->plat->has_gmac4) {
+ ndev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX;
+ priv->hw->hw_vlan_en = true;
+ }
if (priv->dma_cap.vlhash) {
ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
ndev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 112/197] s390/vfio_ccw: Fix target addresses of TIC CCWs
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (110 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 111/197] net: stmmac: enable HW-accelerated VLAN stripping for gmac4 only Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 113/197] gpio: mmio: do not calculate bgpio_bits via "ngpios" Greg Kroah-Hartman
` (98 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Eric Farman, Heiko Carstens,
Alexander Gordeev, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Farman <farman@linux.ibm.com>
[ Upstream commit 2ae157ec497d93c639a60e730e21ec9c66fa9a6e ]
The processing of a Transfer-In-Channel (TIC) CCW requires locating
the target of the CCW in the channel program, and updating the
address to reflect what will actually be sent to hardware.
An error exists where the 64-bit virtual address is truncated to
32-bits (variable "cda") when performing this math. Since s390
addresses of that size are 31-bits, this leaves that additional
bit enabled such that the resulting I/O triggers a channel
program check. This shows up occasionally when booting a KVM
guest from a passthrough DASD device:
..snip...
Interrupt Response Block Data:
: 0x0000000000003990
Function Ctrl : [Start]
Activity Ctrl :
Status Ctrl : [Alert] [Primary] [Secondary] [Status-Pending]
Device Status :
Channel Status : [Program-Check]
cpa=: 0x00000000008d0018
prev_ccw=: 0x0000000000000000
this_ccw=: 0x0000000000000000
...snip...
dasd-ipl: Failed to run IPL1 channel program
The channel program address of "0x008d0018" in the IRB doesn't
look wrong, but tracing the CCWs shows the offending bit enabled:
ccw=0x0000012e808d0000 cda=00a0b030
ccw=0x0000012e808d0008 cda=00a0b038
ccw=0x0000012e808d0010 cda=808d0008
ccw=0x0000012e808d0018 cda=00a0b040
Fix the calculation of the TIC CCW's data address such that it points
to a valid 31-bit address regardless of the input address.
Fixes: bd36cfbbb9e1 ("s390/vfio_ccw_cp: use new address translation helpers")
Signed-off-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Link: https://lore.kernel.org/r/20240628163738.3643513-1-farman@linux.ibm.com
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/s390/cio/vfio_ccw_cp.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index 6e5c508b1e07c..5f6e102256276 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -490,13 +490,14 @@ static int ccwchain_fetch_tic(struct ccw1 *ccw,
struct channel_program *cp)
{
struct ccwchain *iter;
- u32 cda, ccw_head;
+ u32 offset, ccw_head;
list_for_each_entry(iter, &cp->ccwchain_list, next) {
ccw_head = iter->ch_iova;
if (is_cpa_within_range(ccw->cda, ccw_head, iter->ch_len)) {
- cda = (u64)iter->ch_ccw + dma32_to_u32(ccw->cda) - ccw_head;
- ccw->cda = u32_to_dma32(cda);
+ /* Calculate offset of TIC target */
+ offset = dma32_to_u32(ccw->cda) - ccw_head;
+ ccw->cda = virt_to_dma32((void *)iter->ch_ccw + offset);
return 0;
}
}
@@ -914,7 +915,7 @@ void cp_update_scsw(struct channel_program *cp, union scsw *scsw)
* in the ioctl directly. Path status changes etc.
*/
list_for_each_entry(chain, &cp->ccwchain_list, next) {
- ccw_head = (u32)(u64)chain->ch_ccw;
+ ccw_head = dma32_to_u32(virt_to_dma32(chain->ch_ccw));
/*
* On successful execution, cpa points just beyond the end
* of the chain.
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 113/197] gpio: mmio: do not calculate bgpio_bits via "ngpios"
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (111 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 112/197] s390/vfio_ccw: Fix target addresses of TIC CCWs Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 114/197] wifi: wilc1000: fix ies_len type in connect path Greg Kroah-Hartman
` (97 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mark Mentovai, Shiji Yang,
Jonas Gorski, Lóránd Horváth, Linus Walleij,
Bartosz Golaszewski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shiji Yang <yangshiji66@outlook.com>
[ Upstream commit f07798d7bb9c46d17d80103fb772fd2c75d47919 ]
bgpio_bits must be aligned with the data bus width. For example, on a
32 bit big endian system and we only have 16 GPIOs. If we only assume
bgpio_bits=16 we can never control the GPIO because the base address
is the lowest address.
low address high address
-------------------------------------------------
| byte3 | byte2 | byte1 | byte0 |
-------------------------------------------------
| NaN | NaN | gpio8-15 | gpio0-7 |
-------------------------------------------------
Fixes: 55b2395e4e92 ("gpio: mmio: handle "ngpios" properly in bgpio_init()")
Fixes: https://github.com/openwrt/openwrt/issues/15739
Reported-by: Mark Mentovai <mark@mentovai.com>
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Suggested-By: Mark Mentovai <mark@mentovai.com>
Reviewed-by: Jonas Gorski <jonas.gorski@gmail.com>
Tested-by: Lóránd Horváth <lorand.horvath82@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/TYCP286MB089577B47D70F0AB25ABA6F5BCD52@TYCP286MB0895.JPNP286.PROD.OUTLOOK.COM
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpio/gpio-mmio.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/gpio/gpio-mmio.c b/drivers/gpio/gpio-mmio.c
index 71e1af7c21847..d89e78f0ead31 100644
--- a/drivers/gpio/gpio-mmio.c
+++ b/drivers/gpio/gpio-mmio.c
@@ -619,8 +619,6 @@ int bgpio_init(struct gpio_chip *gc, struct device *dev,
ret = gpiochip_get_ngpios(gc, dev);
if (ret)
gc->ngpio = gc->bgpio_bits;
- else
- gc->bgpio_bits = roundup_pow_of_two(round_up(gc->ngpio, 8));
ret = bgpio_setup_io(gc, dat, set, clr, flags);
if (ret)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 114/197] wifi: wilc1000: fix ies_len type in connect path
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (112 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 113/197] gpio: mmio: do not calculate bgpio_bits via "ngpios" Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 115/197] riscv: kexec: Avoid deadlock in kexec crash path Greg Kroah-Hartman
` (96 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jozef Hopko, Alexis Lothoré,
Ajay Singh, Kalle Valo, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jozef Hopko <jozef.hopko@altana.com>
[ Upstream commit 39ab8fff623053a50951b659e5f6b72343d7d78c ]
Commit 205c50306acf ("wifi: wilc1000: fix RCU usage in connect path")
made sure that the IEs data was manipulated under the relevant RCU section.
Unfortunately, while doing so, the commit brought a faulty implicit cast
from int to u8 on the ies_len variable, making the parsing fail to be
performed correctly if the IEs block is larger than 255 bytes. This failure
can be observed with Access Points appending a lot of IEs TLVs in their
beacon frames (reproduced with a Pixel phone acting as an Access Point,
which brough 273 bytes of IE data in my testing environment).
Fix IEs parsing by removing this undesired implicit cast.
Fixes: 205c50306acf ("wifi: wilc1000: fix RCU usage in connect path")
Signed-off-by: Jozef Hopko <jozef.hopko@altana.com>
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
Acked-by: Ajay Singh <ajay.kathat@microchip.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://patch.msgid.link/20240701-wilc_fix_ies_data-v1-1-7486cbacf98a@bootlin.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/wireless/microchip/wilc1000/hif.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/microchip/wilc1000/hif.c b/drivers/net/wireless/microchip/wilc1000/hif.c
index f1085ccb7eedc..7719e4f3e2a23 100644
--- a/drivers/net/wireless/microchip/wilc1000/hif.c
+++ b/drivers/net/wireless/microchip/wilc1000/hif.c
@@ -382,7 +382,8 @@ wilc_parse_join_bss_param(struct cfg80211_bss *bss,
struct ieee80211_p2p_noa_attr noa_attr;
const struct cfg80211_bss_ies *ies;
struct wilc_join_bss_param *param;
- u8 rates_len = 0, ies_len;
+ u8 rates_len = 0;
+ int ies_len;
int ret;
param = kzalloc(sizeof(*param), GFP_KERNEL);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 115/197] riscv: kexec: Avoid deadlock in kexec crash path
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (113 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 114/197] wifi: wilc1000: fix ies_len type in connect path Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 116/197] netfilter: nf_tables: unconditionally flush pending work before notifier Greg Kroah-Hartman
` (95 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Song Shuai, Ryo Takakura,
Palmer Dabbelt, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Song Shuai <songshuaishuai@tinylab.org>
[ Upstream commit c562ba719df570c986caf0941fea2449150bcbc4 ]
If the kexec crash code is called in the interrupt context, the
machine_kexec_mask_interrupts() function will trigger a deadlock while
trying to acquire the irqdesc spinlock and then deactivate irqchip in
irq_set_irqchip_state() function.
Unlike arm64, riscv only requires irq_eoi handler to complete EOI and
keeping irq_set_irqchip_state() will only leave this possible deadlock
without any use. So we simply remove it.
Link: https://lore.kernel.org/linux-riscv/20231208111015.173237-1-songshuaishuai@tinylab.org/
Fixes: b17d19a5314a ("riscv: kexec: Fixup irq controller broken in kexec crash path")
Signed-off-by: Song Shuai <songshuaishuai@tinylab.org>
Reviewed-by: Ryo Takakura <takakura@valinux.co.jp>
Link: https://lore.kernel.org/r/20240626023316.539971-1-songshuaishuai@tinylab.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/riscv/kernel/machine_kexec.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/arch/riscv/kernel/machine_kexec.c b/arch/riscv/kernel/machine_kexec.c
index ed9cad20c039d..3c830a6f7ef46 100644
--- a/arch/riscv/kernel/machine_kexec.c
+++ b/arch/riscv/kernel/machine_kexec.c
@@ -121,20 +121,12 @@ static void machine_kexec_mask_interrupts(void)
for_each_irq_desc(i, desc) {
struct irq_chip *chip;
- int ret;
chip = irq_desc_get_chip(desc);
if (!chip)
continue;
- /*
- * First try to remove the active state. If this
- * fails, try to EOI the interrupt.
- */
- ret = irq_set_irqchip_state(i, IRQCHIP_STATE_ACTIVE, false);
-
- if (ret && irqd_irq_inprogress(&desc->irq_data) &&
- chip->irq_eoi)
+ if (chip->irq_eoi && irqd_irq_inprogress(&desc->irq_data))
chip->irq_eoi(&desc->irq_data);
if (chip->irq_mask)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 116/197] netfilter: nf_tables: unconditionally flush pending work before notifier
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (114 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 115/197] riscv: kexec: Avoid deadlock in kexec crash path Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 117/197] net: rswitch: Avoid use-after-free in rswitch_poll() Greg Kroah-Hartman
` (94 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Florian Westphal, Pablo Neira Ayuso,
Sasha Levin, syzbot+4fd66a69358fc15ae2ad
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <fw@strlen.de>
[ Upstream commit 9f6958ba2e902f9820c594869bd710ba74b7c4c0 ]
syzbot reports:
KASAN: slab-uaf in nft_ctx_update include/net/netfilter/nf_tables.h:1831
KASAN: slab-uaf in nft_commit_release net/netfilter/nf_tables_api.c:9530
KASAN: slab-uaf int nf_tables_trans_destroy_work+0x152b/0x1750 net/netfilter/nf_tables_api.c:9597
Read of size 2 at addr ffff88802b0051c4 by task kworker/1:1/45
[..]
Workqueue: events nf_tables_trans_destroy_work
Call Trace:
nft_ctx_update include/net/netfilter/nf_tables.h:1831 [inline]
nft_commit_release net/netfilter/nf_tables_api.c:9530 [inline]
nf_tables_trans_destroy_work+0x152b/0x1750 net/netfilter/nf_tables_api.c:9597
Problem is that the notifier does a conditional flush, but its possible
that the table-to-be-removed is still referenced by transactions being
processed by the worker, so we need to flush unconditionally.
We could make the flush_work depend on whether we found a table to delete
in nf-next to avoid the flush for most cases.
AFAICS this problem is only exposed in nf-next, with
commit e169285f8c56 ("netfilter: nf_tables: do not store nft_ctx in transaction objects"),
with this commit applied there is an unconditional fetch of
table->family which is whats triggering the above splat.
Fixes: 2c9f0293280e ("netfilter: nf_tables: flush pending destroy work before netlink notifier")
Reported-and-tested-by: syzbot+4fd66a69358fc15ae2ad@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=4fd66a69358fc15ae2ad
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/netfilter/nf_tables_api.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index faa77b031d1f3..0f77ba3306c23 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -11479,8 +11479,7 @@ static int nft_rcv_nl_event(struct notifier_block *this, unsigned long event,
gc_seq = nft_gc_seq_begin(nft_net);
- if (!list_empty(&nf_tables_destroy_list))
- nf_tables_trans_destroy_flush_work();
+ nf_tables_trans_destroy_flush_work();
again:
list_for_each_entry(table, &nft_net->tables, list) {
if (nft_table_has_owner(table) &&
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 117/197] net: rswitch: Avoid use-after-free in rswitch_poll()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (115 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 116/197] netfilter: nf_tables: unconditionally flush pending work before notifier Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 118/197] bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set() Greg Kroah-Hartman
` (93 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Radu Rendec, Yoshihiro Shimoda,
Niklas Söderlund, Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Radu Rendec <rrendec@redhat.com>
[ Upstream commit 9a0c28efeec6383ef22e97437616b920e7320b67 ]
The use-after-free is actually in rswitch_tx_free(), which is inlined in
rswitch_poll(). Since `skb` and `gq->skbs[gq->dirty]` are in fact the
same pointer, the skb is first freed using dev_kfree_skb_any(), then the
value in skb->len is used to update the interface statistics.
Let's move around the instructions to use skb->len before the skb is
freed.
This bug is trivial to reproduce using KFENCE. It will trigger a splat
every few packets. A simple ARP request or ICMP echo request is enough.
Fixes: 271e015b9153 ("net: rswitch: Add unmap_addrs instead of dma address in each desc")
Signed-off-by: Radu Rendec <rrendec@redhat.com>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Link: https://patch.msgid.link/20240702210838.2703228-1-rrendec@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/rswitch.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c
index dcab638c57fe8..24c90d8f5a442 100644
--- a/drivers/net/ethernet/renesas/rswitch.c
+++ b/drivers/net/ethernet/renesas/rswitch.c
@@ -871,13 +871,13 @@ static void rswitch_tx_free(struct net_device *ndev)
dma_rmb();
skb = gq->skbs[gq->dirty];
if (skb) {
+ rdev->ndev->stats.tx_packets++;
+ rdev->ndev->stats.tx_bytes += skb->len;
dma_unmap_single(ndev->dev.parent,
gq->unmap_addrs[gq->dirty],
skb->len, DMA_TO_DEVICE);
dev_kfree_skb_any(gq->skbs[gq->dirty]);
gq->skbs[gq->dirty] = NULL;
- rdev->ndev->stats.tx_packets++;
- rdev->ndev->stats.tx_bytes += skb->len;
}
desc->desc.die_dt = DT_EEMPTY;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 118/197] bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (116 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 117/197] net: rswitch: Avoid use-after-free in rswitch_poll() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 119/197] ice: Fix improper extts handling Greg Kroah-Hartman
` (92 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yue Sun, Simon Horman, Jay Vosburgh,
Hangbin Liu, Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sam Sun <samsun1006219@gmail.com>
[ Upstream commit e271ff53807e8f2c628758290f0e499dbe51cb3d ]
In function bond_option_arp_ip_targets_set(), if newval->string is an
empty string, newval->string+1 will point to the byte after the
string, causing an out-of-bound read.
BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
print_address_description mm/kasan/report.c:364 [inline]
print_report+0xc1/0x5e0 mm/kasan/report.c:475
kasan_report+0xbe/0xf0 mm/kasan/report.c:588
strlen+0x7d/0xa0 lib/string.c:418
__fortify_strlen include/linux/fortify-string.h:210 [inline]
in4_pton+0xa3/0x3f0 net/core/utils.c:130
bond_option_arp_ip_targets_set+0xc2/0x910
drivers/net/bonding/bond_options.c:1201
__bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
__bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
dev_attr_store+0x54/0x80 drivers/base/core.c:2366
sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
call_write_iter include/linux/fs.h:2020 [inline]
new_sync_write fs/read_write.c:491 [inline]
vfs_write+0x96a/0xd80 fs/read_write.c:584
ksys_write+0x122/0x250 fs/read_write.c:637
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
---[ end trace ]---
Fix it by adding a check of string length before using it.
Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
Signed-off-by: Yue Sun <samsun1006219@gmail.com>
Signed-off-by: Simon Horman <horms@kernel.org>
Acked-by: Jay Vosburgh <jay.vosburgh@canonical.com>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Link: https://patch.msgid.link/20240702-bond-oob-v6-1-2dfdba195c19@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/bonding/bond_options.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
index 4cdbc7e084f4b..fea1d87a97539 100644
--- a/drivers/net/bonding/bond_options.c
+++ b/drivers/net/bonding/bond_options.c
@@ -1214,9 +1214,9 @@ static int bond_option_arp_ip_targets_set(struct bonding *bond,
__be32 target;
if (newval->string) {
- if (!in4_pton(newval->string+1, -1, (u8 *)&target, -1, NULL)) {
- netdev_err(bond->dev, "invalid ARP target %pI4 specified\n",
- &target);
+ if (strlen(newval->string) < 1 ||
+ !in4_pton(newval->string + 1, -1, (u8 *)&target, -1, NULL)) {
+ netdev_err(bond->dev, "invalid ARP target specified\n");
return ret;
}
if (newval->string[0] == '+')
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 119/197] ice: Fix improper extts handling
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (117 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 118/197] bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 120/197] ice: Dont process extts if PTP is disabled Greg Kroah-Hartman
` (91 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Przemek Kitszel, Jacob Keller,
Milena Olech, Karol Kolacinski, Simon Horman, Tony Nguyen,
Jakub Kicinski, Sasha Levin, Pucha Himasekhar Reddy
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Milena Olech <milena.olech@intel.com>
[ Upstream commit 00d3b4f54582d4e4a02cda5886bb336eeab268cc ]
Extts events are disabled and enabled by the application ts2phc.
However, in case where the driver is removed when the application is
running, a specific extts event remains enabled and can cause a kernel
crash.
As a side effect, when the driver is reloaded and application is started
again, remaining extts event for the channel from a previous run will
keep firing and the message "extts on unexpected channel" might be
printed to the user.
To avoid that, extts events shall be disabled when PTP is released.
Fixes: 172db5f91d5f ("ice: add support for auxiliary input/output pins")
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Co-developed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Milena Olech <milena.olech@intel.com>
Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://patch.msgid.link/20240702171459.2606611-2-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/intel/ice/ice_ptp.c | 105 ++++++++++++++++++-----
drivers/net/ethernet/intel/ice/ice_ptp.h | 8 ++
2 files changed, 91 insertions(+), 22 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index c11eba07283c6..ee741a1d13cf0 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -1603,27 +1603,24 @@ void ice_ptp_extts_event(struct ice_pf *pf)
/**
* ice_ptp_cfg_extts - Configure EXTTS pin and channel
* @pf: Board private structure
- * @ena: true to enable; false to disable
* @chan: GPIO channel (0-3)
- * @gpio_pin: GPIO pin
- * @extts_flags: request flags from the ptp_extts_request.flags
+ * @config: desired EXTTS configuration.
+ * @store: If set to true, the values will be stored
+ *
+ * Configure an external timestamp event on the requested channel.
*/
-static int
-ice_ptp_cfg_extts(struct ice_pf *pf, bool ena, unsigned int chan, u32 gpio_pin,
- unsigned int extts_flags)
+static void ice_ptp_cfg_extts(struct ice_pf *pf, unsigned int chan,
+ struct ice_extts_channel *config, bool store)
{
u32 func, aux_reg, gpio_reg, irq_reg;
struct ice_hw *hw = &pf->hw;
u8 tmr_idx;
- if (chan > (unsigned int)pf->ptp.info.n_ext_ts)
- return -EINVAL;
-
tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
irq_reg = rd32(hw, PFINT_OICR_ENA);
- if (ena) {
+ if (config->ena) {
/* Enable the interrupt */
irq_reg |= PFINT_OICR_TSYN_EVNT_M;
aux_reg = GLTSYN_AUX_IN_0_INT_ENA_M;
@@ -1632,9 +1629,9 @@ ice_ptp_cfg_extts(struct ice_pf *pf, bool ena, unsigned int chan, u32 gpio_pin,
#define GLTSYN_AUX_IN_0_EVNTLVL_FALLING_EDGE BIT(1)
/* set event level to requested edge */
- if (extts_flags & PTP_FALLING_EDGE)
+ if (config->flags & PTP_FALLING_EDGE)
aux_reg |= GLTSYN_AUX_IN_0_EVNTLVL_FALLING_EDGE;
- if (extts_flags & PTP_RISING_EDGE)
+ if (config->flags & PTP_RISING_EDGE)
aux_reg |= GLTSYN_AUX_IN_0_EVNTLVL_RISING_EDGE;
/* Write GPIO CTL reg.
@@ -1655,9 +1652,47 @@ ice_ptp_cfg_extts(struct ice_pf *pf, bool ena, unsigned int chan, u32 gpio_pin,
wr32(hw, PFINT_OICR_ENA, irq_reg);
wr32(hw, GLTSYN_AUX_IN(chan, tmr_idx), aux_reg);
- wr32(hw, GLGEN_GPIO_CTL(gpio_pin), gpio_reg);
+ wr32(hw, GLGEN_GPIO_CTL(config->gpio_pin), gpio_reg);
- return 0;
+ if (store)
+ memcpy(&pf->ptp.extts_channels[chan], config, sizeof(*config));
+}
+
+/**
+ * ice_ptp_disable_all_extts - Disable all EXTTS channels
+ * @pf: Board private structure
+ */
+static void ice_ptp_disable_all_extts(struct ice_pf *pf)
+{
+ struct ice_extts_channel extts_cfg = {};
+ int i;
+
+ for (i = 0; i < pf->ptp.info.n_ext_ts; i++) {
+ if (pf->ptp.extts_channels[i].ena) {
+ extts_cfg.gpio_pin = pf->ptp.extts_channels[i].gpio_pin;
+ extts_cfg.ena = false;
+ ice_ptp_cfg_extts(pf, i, &extts_cfg, false);
+ }
+ }
+
+ synchronize_irq(pf->oicr_irq.virq);
+}
+
+/**
+ * ice_ptp_enable_all_extts - Enable all EXTTS channels
+ * @pf: Board private structure
+ *
+ * Called during reset to restore user configuration.
+ */
+static void ice_ptp_enable_all_extts(struct ice_pf *pf)
+{
+ int i;
+
+ for (i = 0; i < pf->ptp.info.n_ext_ts; i++) {
+ if (pf->ptp.extts_channels[i].ena)
+ ice_ptp_cfg_extts(pf, i, &pf->ptp.extts_channels[i],
+ false);
+ }
}
/**
@@ -1814,7 +1849,6 @@ ice_ptp_gpio_enable_e810(struct ptp_clock_info *info,
struct ptp_clock_request *rq, int on)
{
struct ice_pf *pf = ptp_info_to_pf(info);
- struct ice_perout_channel clk_cfg = {0};
bool sma_pres = false;
unsigned int chan;
u32 gpio_pin;
@@ -1825,6 +1859,9 @@ ice_ptp_gpio_enable_e810(struct ptp_clock_info *info,
switch (rq->type) {
case PTP_CLK_REQ_PEROUT:
+ {
+ struct ice_perout_channel clk_cfg = {};
+
chan = rq->perout.index;
if (sma_pres) {
if (chan == ice_pin_desc_e810t[SMA1].chan)
@@ -1852,7 +1889,11 @@ ice_ptp_gpio_enable_e810(struct ptp_clock_info *info,
err = ice_ptp_cfg_clkout(pf, chan, &clk_cfg, true);
break;
+ }
case PTP_CLK_REQ_EXTTS:
+ {
+ struct ice_extts_channel extts_cfg = {};
+
chan = rq->extts.index;
if (sma_pres) {
if (chan < ice_pin_desc_e810t[SMA2].chan)
@@ -1868,9 +1909,13 @@ ice_ptp_gpio_enable_e810(struct ptp_clock_info *info,
gpio_pin = chan;
}
- err = ice_ptp_cfg_extts(pf, !!on, chan, gpio_pin,
- rq->extts.flags);
- break;
+ extts_cfg.flags = rq->extts.flags;
+ extts_cfg.gpio_pin = gpio_pin;
+ extts_cfg.ena = !!on;
+
+ ice_ptp_cfg_extts(pf, chan, &extts_cfg, true);
+ return 0;
+ }
default:
return -EOPNOTSUPP;
}
@@ -1888,21 +1933,31 @@ static int ice_ptp_gpio_enable_e823(struct ptp_clock_info *info,
struct ptp_clock_request *rq, int on)
{
struct ice_pf *pf = ptp_info_to_pf(info);
- struct ice_perout_channel clk_cfg = {0};
int err;
switch (rq->type) {
case PTP_CLK_REQ_PPS:
+ {
+ struct ice_perout_channel clk_cfg = {};
+
clk_cfg.gpio_pin = PPS_PIN_INDEX;
clk_cfg.period = NSEC_PER_SEC;
clk_cfg.ena = !!on;
err = ice_ptp_cfg_clkout(pf, PPS_CLK_GEN_CHAN, &clk_cfg, true);
break;
+ }
case PTP_CLK_REQ_EXTTS:
- err = ice_ptp_cfg_extts(pf, !!on, rq->extts.index,
- TIME_SYNC_PIN_INDEX, rq->extts.flags);
- break;
+ {
+ struct ice_extts_channel extts_cfg = {};
+
+ extts_cfg.flags = rq->extts.flags;
+ extts_cfg.gpio_pin = TIME_SYNC_PIN_INDEX;
+ extts_cfg.ena = !!on;
+
+ ice_ptp_cfg_extts(pf, rq->extts.index, &extts_cfg, true);
+ return 0;
+ }
default:
return -EOPNOTSUPP;
}
@@ -2745,6 +2800,10 @@ static int ice_ptp_rebuild_owner(struct ice_pf *pf)
ice_ptp_restart_all_phy(pf);
}
+ /* Re-enable all periodic outputs and external timestamp events */
+ ice_ptp_enable_all_clkout(pf);
+ ice_ptp_enable_all_extts(pf);
+
return 0;
}
@@ -3300,6 +3359,8 @@ void ice_ptp_release(struct ice_pf *pf)
ice_ptp_release_tx_tracker(pf, &pf->ptp.port.tx);
+ ice_ptp_disable_all_extts(pf);
+
kthread_cancel_delayed_work_sync(&pf->ptp.work);
ice_ptp_port_phy_stop(&pf->ptp.port);
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.h b/drivers/net/ethernet/intel/ice/ice_ptp.h
index 3af20025043a6..f1171cdd93c86 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.h
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.h
@@ -33,6 +33,12 @@ struct ice_perout_channel {
u64 start_time;
};
+struct ice_extts_channel {
+ bool ena;
+ u32 gpio_pin;
+ u32 flags;
+};
+
/* The ice hardware captures Tx hardware timestamps in the PHY. The timestamp
* is stored in a buffer of registers. Depending on the specific hardware,
* this buffer might be shared across multiple PHY ports.
@@ -226,6 +232,7 @@ enum ice_ptp_state {
* @ext_ts_irq: the external timestamp IRQ in use
* @kworker: kwork thread for handling periodic work
* @perout_channels: periodic output data
+ * @extts_channels: channels for external timestamps
* @info: structure defining PTP hardware capabilities
* @clock: pointer to registered PTP clock device
* @tstamp_config: hardware timestamping configuration
@@ -249,6 +256,7 @@ struct ice_ptp {
u8 ext_ts_irq;
struct kthread_worker *kworker;
struct ice_perout_channel perout_channels[GLTSYN_TGT_H_IDX_MAX];
+ struct ice_extts_channel extts_channels[GLTSYN_TGT_H_IDX_MAX];
struct ptp_clock_info info;
struct ptp_clock *clock;
struct hwtstamp_config tstamp_config;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 120/197] ice: Dont process extts if PTP is disabled
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (118 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 119/197] ice: Fix improper extts handling Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 121/197] ice: Reject pin requests with unsupported flags Greg Kroah-Hartman
` (90 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Przemek Kitszel, Jacob Keller,
Karol Kolacinski, Simon Horman, Tony Nguyen, Jakub Kicinski,
Sasha Levin, Pucha Himasekhar Reddy
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jacob Keller <jacob.e.keller@intel.com>
[ Upstream commit 996422e3230e41468f652d754fefd1bdbcd4604e ]
The ice_ptp_extts_event() function can race with ice_ptp_release() and
result in a NULL pointer dereference which leads to a kernel panic.
Panic occurs because the ice_ptp_extts_event() function calls
ptp_clock_event() with a NULL pointer. The ice driver has already
released the PTP clock by the time the interrupt for the next external
timestamp event occurs.
To fix this, modify the ice_ptp_extts_event() function to check the
PTP state and bail early if PTP is not ready.
Fixes: 172db5f91d5f ("ice: add support for auxiliary input/output pins")
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://patch.msgid.link/20240702171459.2606611-3-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/intel/ice/ice_ptp.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index ee741a1d13cf0..e983e56b342b7 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -1578,6 +1578,10 @@ void ice_ptp_extts_event(struct ice_pf *pf)
u8 chan, tmr_idx;
u32 hi, lo;
+ /* Don't process timestamp events if PTP is not ready */
+ if (pf->ptp.state != ICE_PTP_READY)
+ return;
+
tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
/* Event time is captured by one of the two matched registers
* GLTSYN_EVNT_L: 32 LSB of sampled time event
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 121/197] ice: Reject pin requests with unsupported flags
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (119 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 120/197] ice: Dont process extts if PTP is disabled Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 122/197] ice: use proper macro for testing bit Greg Kroah-Hartman
` (89 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Przemek Kitszel, Jacob Keller,
Karol Kolacinski, Simon Horman, Tony Nguyen, Jakub Kicinski,
Sasha Levin, Pucha Himasekhar Reddy
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jacob Keller <jacob.e.keller@intel.com>
[ Upstream commit be2a9d12e6dad894b27361c06ea3752d67a45b49 ]
The driver receives requests for configuring pins via the .enable
callback of the PTP clock object. These requests come into the driver
with flags which modify the requested behavior from userspace. Current
implementation in ice does not reject flags that it doesn't support.
This causes the driver to incorrectly apply requests with such flags as
PTP_PEROUT_DUTY_CYCLE, or any future flags added by the kernel which it
is not yet aware of.
Fix this by properly validating flags in both ice_ptp_cfg_perout and
ice_ptp_cfg_extts. Ensure that we check by bit-wise negating supported
flags rather than just checking and rejecting known un-supported flags.
This is preferable, as it ensures better compatibility with future
kernels.
Fixes: 172db5f91d5f ("ice: add support for auxiliary input/output pins")
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://patch.msgid.link/20240702171459.2606611-4-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/intel/ice/ice_ptp.c | 38 ++++++++++++++----------
drivers/net/ethernet/intel/ice/ice_ptp.h | 1 +
2 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index e983e56b342b7..f46d879c62d26 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -1612,14 +1612,23 @@ void ice_ptp_extts_event(struct ice_pf *pf)
* @store: If set to true, the values will be stored
*
* Configure an external timestamp event on the requested channel.
+ *
+ * Return: 0 on success, -EOPNOTUSPP on unsupported flags
*/
-static void ice_ptp_cfg_extts(struct ice_pf *pf, unsigned int chan,
- struct ice_extts_channel *config, bool store)
+static int ice_ptp_cfg_extts(struct ice_pf *pf, unsigned int chan,
+ struct ice_extts_channel *config, bool store)
{
u32 func, aux_reg, gpio_reg, irq_reg;
struct ice_hw *hw = &pf->hw;
u8 tmr_idx;
+ /* Reject requests with unsupported flags */
+ if (config->flags & ~(PTP_ENABLE_FEATURE |
+ PTP_RISING_EDGE |
+ PTP_FALLING_EDGE |
+ PTP_STRICT_FLAGS))
+ return -EOPNOTSUPP;
+
tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
irq_reg = rd32(hw, PFINT_OICR_ENA);
@@ -1660,6 +1669,8 @@ static void ice_ptp_cfg_extts(struct ice_pf *pf, unsigned int chan,
if (store)
memcpy(&pf->ptp.extts_channels[chan], config, sizeof(*config));
+
+ return 0;
}
/**
@@ -1717,6 +1728,9 @@ static int ice_ptp_cfg_clkout(struct ice_pf *pf, unsigned int chan,
u32 func, val, gpio_pin;
u8 tmr_idx;
+ if (config && config->flags & ~PTP_PEROUT_PHASE)
+ return -EOPNOTSUPP;
+
tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
/* 0. Reset mode & out_en in AUX_OUT */
@@ -1856,7 +1870,6 @@ ice_ptp_gpio_enable_e810(struct ptp_clock_info *info,
bool sma_pres = false;
unsigned int chan;
u32 gpio_pin;
- int err;
if (ice_is_feature_supported(pf, ICE_F_SMA_CTRL))
sma_pres = true;
@@ -1885,14 +1898,14 @@ ice_ptp_gpio_enable_e810(struct ptp_clock_info *info,
clk_cfg.gpio_pin = chan;
}
+ clk_cfg.flags = rq->perout.flags;
clk_cfg.period = ((rq->perout.period.sec * NSEC_PER_SEC) +
rq->perout.period.nsec);
clk_cfg.start_time = ((rq->perout.start.sec * NSEC_PER_SEC) +
rq->perout.start.nsec);
clk_cfg.ena = !!on;
- err = ice_ptp_cfg_clkout(pf, chan, &clk_cfg, true);
- break;
+ return ice_ptp_cfg_clkout(pf, chan, &clk_cfg, true);
}
case PTP_CLK_REQ_EXTTS:
{
@@ -1917,14 +1930,11 @@ ice_ptp_gpio_enable_e810(struct ptp_clock_info *info,
extts_cfg.gpio_pin = gpio_pin;
extts_cfg.ena = !!on;
- ice_ptp_cfg_extts(pf, chan, &extts_cfg, true);
- return 0;
+ return ice_ptp_cfg_extts(pf, chan, &extts_cfg, true);
}
default:
return -EOPNOTSUPP;
}
-
- return err;
}
/**
@@ -1937,19 +1947,18 @@ static int ice_ptp_gpio_enable_e823(struct ptp_clock_info *info,
struct ptp_clock_request *rq, int on)
{
struct ice_pf *pf = ptp_info_to_pf(info);
- int err;
switch (rq->type) {
case PTP_CLK_REQ_PPS:
{
struct ice_perout_channel clk_cfg = {};
+ clk_cfg.flags = rq->perout.flags;
clk_cfg.gpio_pin = PPS_PIN_INDEX;
clk_cfg.period = NSEC_PER_SEC;
clk_cfg.ena = !!on;
- err = ice_ptp_cfg_clkout(pf, PPS_CLK_GEN_CHAN, &clk_cfg, true);
- break;
+ return ice_ptp_cfg_clkout(pf, PPS_CLK_GEN_CHAN, &clk_cfg, true);
}
case PTP_CLK_REQ_EXTTS:
{
@@ -1959,14 +1968,11 @@ static int ice_ptp_gpio_enable_e823(struct ptp_clock_info *info,
extts_cfg.gpio_pin = TIME_SYNC_PIN_INDEX;
extts_cfg.ena = !!on;
- ice_ptp_cfg_extts(pf, rq->extts.index, &extts_cfg, true);
- return 0;
+ return ice_ptp_cfg_extts(pf, rq->extts.index, &extts_cfg, true);
}
default:
return -EOPNOTSUPP;
}
-
- return err;
}
/**
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.h b/drivers/net/ethernet/intel/ice/ice_ptp.h
index f1171cdd93c86..e2af9749061ca 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.h
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.h
@@ -29,6 +29,7 @@ enum ice_ptp_pin_e810t {
struct ice_perout_channel {
bool ena;
u32 gpio_pin;
+ u32 flags;
u64 period;
u64 start_time;
};
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 122/197] ice: use proper macro for testing bit
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (120 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 121/197] ice: Reject pin requests with unsupported flags Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 123/197] selftests: fix OOM in msg_zerocopy selftest Greg Kroah-Hartman
` (88 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ivan Vecera, Alexander Lobakin,
Petr Oros, Jiri Pirko, Tony Nguyen, Jakub Kicinski, Sasha Levin,
Pucha Himasekhar Reddy
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Petr Oros <poros@redhat.com>
[ Upstream commit 7829ee78490ddb29993cc7893384a04b8cc7436c ]
Do not use _test_bit() macro for testing bit. The proper macro for this
is one without underline.
_test_bit() is what test_bit() was prior to const-optimization. It
directly calls arch_test_bit(), i.e. the arch-specific implementation
(or the generic one). It's strictly _internal_ and shouldn't be used
anywhere outside the actual test_bit() macro.
test_bit() is a wrapper which checks whether the bitmap and the bit
number are compile-time constants and if so, it calls the optimized
function which evaluates this call to a compile-time constant as well.
If either of them is not a compile-time constant, it just calls _test_bit().
test_bit() is the actual function to use anywhere in the kernel.
IOW, calling _test_bit() avoids potential compile-time optimizations.
The sensors is not a compile-time constant, thus most probably there
are no object code changes before and after the patch.
But anyway, we shouldn't call internal wrappers instead of
the actual API.
Fixes: 4da71a77fc3b ("ice: read internal temperature sensor")
Acked-by: Ivan Vecera <ivecera@redhat.com>
Reviewed-by: Alexander Lobakin <aleksander.lobakin@intel.com>
Signed-off-by: Petr Oros <poros@redhat.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://patch.msgid.link/20240702171459.2606611-5-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/intel/ice/ice_hwmon.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_hwmon.c b/drivers/net/ethernet/intel/ice/ice_hwmon.c
index e4c2c1bff6c08..b7aa6812510a4 100644
--- a/drivers/net/ethernet/intel/ice/ice_hwmon.c
+++ b/drivers/net/ethernet/intel/ice/ice_hwmon.c
@@ -96,7 +96,7 @@ static bool ice_is_internal_reading_supported(struct ice_pf *pf)
unsigned long sensors = pf->hw.dev_caps.supported_sensors;
- return _test_bit(ICE_SENSOR_SUPPORT_E810_INT_TEMP_BIT, &sensors);
+ return test_bit(ICE_SENSOR_SUPPORT_E810_INT_TEMP_BIT, &sensors);
};
void ice_hwmon_init(struct ice_pf *pf)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 123/197] selftests: fix OOM in msg_zerocopy selftest
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (121 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 122/197] ice: use proper macro for testing bit Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 124/197] selftests: make order checking verbose " Greg Kroah-Hartman
` (87 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Zijian Zhang, Xiaochun Lu,
Willem de Bruijn, Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zijian Zhang <zijianzhang@bytedance.com>
[ Upstream commit af2b7e5b741aaae9ffbba2c660def434e07aa241 ]
In selftests/net/msg_zerocopy.c, it has a while loop keeps calling sendmsg
on a socket with MSG_ZEROCOPY flag, and it will recv the notifications
until the socket is not writable. Typically, it will start the receiving
process after around 30+ sendmsgs. However, as the introduction of commit
dfa2f0483360 ("tcp: get rid of sysctl_tcp_adv_win_scale"), the sender is
always writable and does not get any chance to run recv notifications.
The selftest always exits with OUT_OF_MEMORY because the memory used by
opt_skb exceeds the net.core.optmem_max. Meanwhile, it could be set to a
different value to trigger OOM on older kernels too.
Thus, we introduce "cfg_notification_limit" to force sender to receive
notifications after some number of sendmsgs.
Fixes: 07b65c5b31ce ("test: add msg_zerocopy test")
Signed-off-by: Zijian Zhang <zijianzhang@bytedance.com>
Signed-off-by: Xiaochun Lu <xiaochun.lu@bytedance.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20240701225349.3395580-2-zijianzhang@bytedance.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/net/msg_zerocopy.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/net/msg_zerocopy.c b/tools/testing/selftests/net/msg_zerocopy.c
index bdc03a2097e85..926556febc83c 100644
--- a/tools/testing/selftests/net/msg_zerocopy.c
+++ b/tools/testing/selftests/net/msg_zerocopy.c
@@ -85,6 +85,7 @@ static bool cfg_rx;
static int cfg_runtime_ms = 4200;
static int cfg_verbose;
static int cfg_waittime_ms = 500;
+static int cfg_notification_limit = 32;
static bool cfg_zerocopy;
static socklen_t cfg_alen;
@@ -95,6 +96,7 @@ static char payload[IP_MAXPACKET];
static long packets, bytes, completions, expected_completions;
static int zerocopied = -1;
static uint32_t next_completion;
+static uint32_t sends_since_notify;
static unsigned long gettimeofday_ms(void)
{
@@ -208,6 +210,7 @@ static bool do_sendmsg(int fd, struct msghdr *msg, bool do_zerocopy, int domain)
error(1, errno, "send");
if (cfg_verbose && ret != len)
fprintf(stderr, "send: ret=%u != %u\n", ret, len);
+ sends_since_notify++;
if (len) {
packets++;
@@ -460,6 +463,7 @@ static bool do_recv_completion(int fd, int domain)
static void do_recv_completions(int fd, int domain)
{
while (do_recv_completion(fd, domain)) {}
+ sends_since_notify = 0;
}
/* Wait for all remaining completions on the errqueue */
@@ -549,6 +553,9 @@ static void do_tx(int domain, int type, int protocol)
else
do_sendmsg(fd, &msg, cfg_zerocopy, domain);
+ if (cfg_zerocopy && sends_since_notify >= cfg_notification_limit)
+ do_recv_completions(fd, domain);
+
while (!do_poll(fd, POLLOUT)) {
if (cfg_zerocopy)
do_recv_completions(fd, domain);
@@ -708,7 +715,7 @@ static void parse_opts(int argc, char **argv)
cfg_payload_len = max_payload_len;
- while ((c = getopt(argc, argv, "46c:C:D:i:mp:rs:S:t:vz")) != -1) {
+ while ((c = getopt(argc, argv, "46c:C:D:i:l:mp:rs:S:t:vz")) != -1) {
switch (c) {
case '4':
if (cfg_family != PF_UNSPEC)
@@ -736,6 +743,9 @@ static void parse_opts(int argc, char **argv)
if (cfg_ifindex == 0)
error(1, errno, "invalid iface: %s", optarg);
break;
+ case 'l':
+ cfg_notification_limit = strtoul(optarg, NULL, 0);
+ break;
case 'm':
cfg_cork_mixed = true;
break;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 124/197] selftests: make order checking verbose in msg_zerocopy selftest
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (122 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 123/197] selftests: fix OOM in msg_zerocopy selftest Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 125/197] drm/xe/mcr: Avoid clobbering DSS steering Greg Kroah-Hartman
` (86 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Zijian Zhang, Xiaochun Lu,
Willem de Bruijn, Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zijian Zhang <zijianzhang@bytedance.com>
[ Upstream commit 7d6d8f0c8b700c9493f2839abccb6d29028b4219 ]
We find that when lock debugging is on, notifications may not come in
order. Thus, we have order checking outputs managed by cfg_verbose, to
avoid too many outputs in this case.
Fixes: 07b65c5b31ce ("test: add msg_zerocopy test")
Signed-off-by: Zijian Zhang <zijianzhang@bytedance.com>
Signed-off-by: Xiaochun Lu <xiaochun.lu@bytedance.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20240701225349.3395580-3-zijianzhang@bytedance.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/net/msg_zerocopy.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/net/msg_zerocopy.c b/tools/testing/selftests/net/msg_zerocopy.c
index 926556febc83c..7ea5fb28c93db 100644
--- a/tools/testing/selftests/net/msg_zerocopy.c
+++ b/tools/testing/selftests/net/msg_zerocopy.c
@@ -438,7 +438,7 @@ static bool do_recv_completion(int fd, int domain)
/* Detect notification gaps. These should not happen often, if at all.
* Gaps can occur due to drops, reordering and retransmissions.
*/
- if (lo != next_completion)
+ if (cfg_verbose && lo != next_completion)
fprintf(stderr, "gap: %u..%u does not append to %u\n",
lo, hi, next_completion);
next_completion = hi + 1;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 125/197] drm/xe/mcr: Avoid clobbering DSS steering
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (123 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 124/197] selftests: make order checking verbose " Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 126/197] tcp: Dont flag tcp_sk(sk)->rx_opt.saw_unknown for TCP AO Greg Kroah-Hartman
` (85 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Matt Roper, Lucas De Marchi,
Thomas Hellström, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Roper <matthew.d.roper@intel.com>
[ Upstream commit 1f006470284598060ca1307355352934400b37ca ]
A couple copy/paste mistakes in the code that selects steering targets
for OADDRM and INSTANCE0 unintentionally clobbered the steering target
for DSS ranges in some cases.
The OADDRM/INSTANCE0 values were also not assigned as intended, although
that mistake wound up being harmless since the desired values for those
specific ranges were '0' which the kzalloc of the GT structure should
have already taken care of implicitly.
Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240626210536.1620176-2-matthew.d.roper@intel.com
(cherry picked from commit 4f82ac6102788112e599a6074d2c1f2afce923df)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/xe/xe_gt_mcr.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_mcr.c b/drivers/gpu/drm/xe/xe_gt_mcr.c
index a7ab9ba645f99..c78fbb9bc5fc7 100644
--- a/drivers/gpu/drm/xe/xe_gt_mcr.c
+++ b/drivers/gpu/drm/xe/xe_gt_mcr.c
@@ -315,7 +315,7 @@ static void init_steering_oaddrm(struct xe_gt *gt)
else
gt->steering[OADDRM].group_target = 1;
- gt->steering[DSS].instance_target = 0; /* unused */
+ gt->steering[OADDRM].instance_target = 0; /* unused */
}
static void init_steering_sqidi_psmi(struct xe_gt *gt)
@@ -330,8 +330,8 @@ static void init_steering_sqidi_psmi(struct xe_gt *gt)
static void init_steering_inst0(struct xe_gt *gt)
{
- gt->steering[DSS].group_target = 0; /* unused */
- gt->steering[DSS].instance_target = 0; /* unused */
+ gt->steering[INSTANCE0].group_target = 0; /* unused */
+ gt->steering[INSTANCE0].instance_target = 0; /* unused */
}
static const struct {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 126/197] tcp: Dont flag tcp_sk(sk)->rx_opt.saw_unknown for TCP AO.
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (124 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 125/197] drm/xe/mcr: Avoid clobbering DSS steering Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 127/197] inet_diag: Initialize pad field in struct inet_diag_req_v2 Greg Kroah-Hartman
` (84 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Kuniyuki Iwashima, Eric Dumazet,
Dmitry Safonov, Paolo Abeni, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuniyuki Iwashima <kuniyu@amazon.com>
[ Upstream commit 4b74726c01b7a0b5e1029e1e9247fd81590da726 ]
When we process segments with TCP AO, we don't check it in
tcp_parse_options(). Thus, opt_rx->saw_unknown is set to 1,
which unconditionally triggers the BPF TCP option parser.
Let's avoid the unnecessary BPF invocation.
Fixes: 0a3a809089eb ("net/tcp: Verify inbound TCP-AO signed segments")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Dmitry Safonov <0x7f454c46@gmail.com>
Link: https://patch.msgid.link/20240703033508.6321-1-kuniyu@amazon.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/ipv4/tcp_input.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 77109976fe836..7b692bcb61d4a 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -4220,6 +4220,13 @@ void tcp_parse_options(const struct net *net,
* checked (see tcp_v{4,6}_rcv()).
*/
break;
+#endif
+#ifdef CONFIG_TCP_AO
+ case TCPOPT_AO:
+ /* TCP AO has already been checked
+ * (see tcp_inbound_ao_hash()).
+ */
+ break;
#endif
case TCPOPT_FASTOPEN:
tcp_parse_fastopen_option(
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 127/197] inet_diag: Initialize pad field in struct inet_diag_req_v2
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (125 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 126/197] tcp: Dont flag tcp_sk(sk)->rx_opt.saw_unknown for TCP AO Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 128/197] mlxsw: core_linecards: Fix double memory deallocation in case of invalid INI file Greg Kroah-Hartman
` (83 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzkaller, Shigeru Yoshida,
Eric Dumazet, Paolo Abeni, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shigeru Yoshida <syoshida@redhat.com>
[ Upstream commit 61cf1c739f08190a4cbf047b9fbb192a94d87e3f ]
KMSAN reported uninit-value access in raw_lookup() [1]. Diag for raw
sockets uses the pad field in struct inet_diag_req_v2 for the
underlying protocol. This field corresponds to the sdiag_raw_protocol
field in struct inet_diag_req_raw.
inet_diag_get_exact_compat() converts inet_diag_req to
inet_diag_req_v2, but leaves the pad field uninitialized. So the issue
occurs when raw_lookup() accesses the sdiag_raw_protocol field.
Fix this by initializing the pad field in
inet_diag_get_exact_compat(). Also, do the same fix in
inet_diag_dump_compat() to avoid the similar issue in the future.
[1]
BUG: KMSAN: uninit-value in raw_lookup net/ipv4/raw_diag.c:49 [inline]
BUG: KMSAN: uninit-value in raw_sock_get+0x657/0x800 net/ipv4/raw_diag.c:71
raw_lookup net/ipv4/raw_diag.c:49 [inline]
raw_sock_get+0x657/0x800 net/ipv4/raw_diag.c:71
raw_diag_dump_one+0xa1/0x660 net/ipv4/raw_diag.c:99
inet_diag_cmd_exact+0x7d9/0x980
inet_diag_get_exact_compat net/ipv4/inet_diag.c:1404 [inline]
inet_diag_rcv_msg_compat+0x469/0x530 net/ipv4/inet_diag.c:1426
sock_diag_rcv_msg+0x23d/0x740 net/core/sock_diag.c:282
netlink_rcv_skb+0x537/0x670 net/netlink/af_netlink.c:2564
sock_diag_rcv+0x35/0x40 net/core/sock_diag.c:297
netlink_unicast_kernel net/netlink/af_netlink.c:1335 [inline]
netlink_unicast+0xe74/0x1240 net/netlink/af_netlink.c:1361
netlink_sendmsg+0x10c6/0x1260 net/netlink/af_netlink.c:1905
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg+0x332/0x3d0 net/socket.c:745
____sys_sendmsg+0x7f0/0xb70 net/socket.c:2585
___sys_sendmsg+0x271/0x3b0 net/socket.c:2639
__sys_sendmsg net/socket.c:2668 [inline]
__do_sys_sendmsg net/socket.c:2677 [inline]
__se_sys_sendmsg net/socket.c:2675 [inline]
__x64_sys_sendmsg+0x27e/0x4a0 net/socket.c:2675
x64_sys_call+0x135e/0x3ce0 arch/x86/include/generated/asm/syscalls_64.h:47
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xd9/0x1e0 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
Uninit was stored to memory at:
raw_sock_get+0x650/0x800 net/ipv4/raw_diag.c:71
raw_diag_dump_one+0xa1/0x660 net/ipv4/raw_diag.c:99
inet_diag_cmd_exact+0x7d9/0x980
inet_diag_get_exact_compat net/ipv4/inet_diag.c:1404 [inline]
inet_diag_rcv_msg_compat+0x469/0x530 net/ipv4/inet_diag.c:1426
sock_diag_rcv_msg+0x23d/0x740 net/core/sock_diag.c:282
netlink_rcv_skb+0x537/0x670 net/netlink/af_netlink.c:2564
sock_diag_rcv+0x35/0x40 net/core/sock_diag.c:297
netlink_unicast_kernel net/netlink/af_netlink.c:1335 [inline]
netlink_unicast+0xe74/0x1240 net/netlink/af_netlink.c:1361
netlink_sendmsg+0x10c6/0x1260 net/netlink/af_netlink.c:1905
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg+0x332/0x3d0 net/socket.c:745
____sys_sendmsg+0x7f0/0xb70 net/socket.c:2585
___sys_sendmsg+0x271/0x3b0 net/socket.c:2639
__sys_sendmsg net/socket.c:2668 [inline]
__do_sys_sendmsg net/socket.c:2677 [inline]
__se_sys_sendmsg net/socket.c:2675 [inline]
__x64_sys_sendmsg+0x27e/0x4a0 net/socket.c:2675
x64_sys_call+0x135e/0x3ce0 arch/x86/include/generated/asm/syscalls_64.h:47
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xd9/0x1e0 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
Local variable req.i created at:
inet_diag_get_exact_compat net/ipv4/inet_diag.c:1396 [inline]
inet_diag_rcv_msg_compat+0x2a6/0x530 net/ipv4/inet_diag.c:1426
sock_diag_rcv_msg+0x23d/0x740 net/core/sock_diag.c:282
CPU: 1 PID: 8888 Comm: syz-executor.6 Not tainted 6.10.0-rc4-00217-g35bb670d65fc #32
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014
Fixes: 432490f9d455 ("net: ip, diag -- Add diag interface for raw sockets")
Reported-by: syzkaller <syzkaller@googlegroups.com>
Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20240703091649.111773-1-syoshida@redhat.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/ipv4/inet_diag.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
index 7adace541fe29..9712cdb8087c2 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
@@ -1383,6 +1383,7 @@ static int inet_diag_dump_compat(struct sk_buff *skb,
req.sdiag_family = AF_UNSPEC; /* compatibility */
req.sdiag_protocol = inet_diag_type2proto(cb->nlh->nlmsg_type);
req.idiag_ext = rc->idiag_ext;
+ req.pad = 0;
req.idiag_states = rc->idiag_states;
req.id = rc->id;
@@ -1398,6 +1399,7 @@ static int inet_diag_get_exact_compat(struct sk_buff *in_skb,
req.sdiag_family = rc->idiag_family;
req.sdiag_protocol = inet_diag_type2proto(nlh->nlmsg_type);
req.idiag_ext = rc->idiag_ext;
+ req.pad = 0;
req.idiag_states = rc->idiag_states;
req.id = rc->id;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 128/197] mlxsw: core_linecards: Fix double memory deallocation in case of invalid INI file
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (126 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 127/197] inet_diag: Initialize pad field in struct inet_diag_req_v2 Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 129/197] bnxt_en: Fix the resource check condition for RSS contexts Greg Kroah-Hartman
` (82 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Aleksandr Mishin, Przemek Kitszel,
Ido Schimmel, Michal Kubiak, Jakub Kicinski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aleksandr Mishin <amishin@t-argos.ru>
[ Upstream commit 8ce34dccbe8fa7d2ef86f2d8e7db2a9b67cabfc3 ]
In case of invalid INI file mlxsw_linecard_types_init() deallocates memory
but doesn't reset pointer to NULL and returns 0. In case of any error
occurred after mlxsw_linecard_types_init() call, mlxsw_linecards_init()
calls mlxsw_linecard_types_fini() which performs memory deallocation again.
Add pointer reset to NULL.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: b217127e5e4e ("mlxsw: core_linecards: Add line card objects and implement provisioning")
Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
Link: https://patch.msgid.link/20240703203251.8871-1-amishin@t-argos.ru
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/mellanox/mlxsw/core_linecards.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c
index 025e0db983feb..b032d5a4b3b84 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c
@@ -1484,6 +1484,7 @@ static int mlxsw_linecard_types_init(struct mlxsw_core *mlxsw_core,
vfree(types_info->data);
err_data_alloc:
kfree(types_info);
+ linecards->types_info = NULL;
return err;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 129/197] bnxt_en: Fix the resource check condition for RSS contexts
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (127 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 128/197] mlxsw: core_linecards: Fix double memory deallocation in case of invalid INI file Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 130/197] gpiolib: of: add polarity quirk for TSC2005 Greg Kroah-Hartman
` (81 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jakub Kicinski, Andy Gospodarek,
Pavan Chebbi, Michael Chan, Simon Horman, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pavan Chebbi <pavan.chebbi@broadcom.com>
[ Upstream commit 5d350dc3429b3eb6f2b1b8ccb78ed4ec6c4d4a4f ]
While creating a new RSS context, bnxt_rfs_capable() currently
makes a strict check to see if the required VNICs are already
available. If the current VNICs are not what is required,
either too many or not enough, it will call the firmware to
reserve the exact number required.
There is a bug in the firmware when the driver tries to
relinquish some reserved VNICs and RSS contexts. It will
cause the default VNIC to lose its RSS configuration and
cause receive packets to be placed incorrectly.
Workaround this problem by skipping the resource reduction.
The driver will not reduce the VNIC and RSS context reservations
when a context is deleted. The resources will be available for
use when new contexts are created later.
Potentially, this workaround can cause us to run out of VNIC
and RSS contexts if there are a lot of VF functions creating
and deleting RSS contexts. In the future, we will conditionally
disable this workaround when the firmware fix is available.
Fixes: 438ba39b25fe ("bnxt_en: Improve RSS context reservation infrastructure")
Reported-by: Jakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/netdev/20240625010210.2002310-1-kuba@kernel.org/
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20240703180112.78590-1-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 0fab62a56f3b3..2b7936b3fb3ef 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -12436,7 +12436,11 @@ static bool bnxt_rfs_capable(struct bnxt *bp)
if (!BNXT_NEW_RM(bp))
return true;
- if (hwr.vnic == bp->hw_resc.resv_vnics &&
+ /* Do not reduce VNIC and RSS ctx reservations. There is a FW
+ * issue that will mess up the default VNIC if we reduce the
+ * reservations.
+ */
+ if (hwr.vnic <= bp->hw_resc.resv_vnics &&
hwr.rss_ctx <= bp->hw_resc.resv_rsscos_ctxs)
return true;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 130/197] gpiolib: of: add polarity quirk for TSC2005
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (128 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 129/197] bnxt_en: Fix the resource check condition for RSS contexts Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 131/197] platform/x86: toshiba_acpi: Fix quickstart quirk handling Greg Kroah-Hartman
` (80 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dmitry Torokhov, Linus Walleij,
Bartosz Golaszewski, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
[ Upstream commit f8d76c2c313c56d5cb894a243dff4550f048278d ]
DTS for Nokia N900 incorrectly specifies "active high" polarity for
the reset line, while the chip documentation actually specifies it as
"active low". In the past the driver fudged gpiod API and inverted
the logic internally, but it was changed in d0d89493bff8.
Fixes: d0d89493bff8 ("Input: tsc2004/5 - switch to using generic device properties")
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/ZoWXwYtwgJIxi-hD@google.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpio/gpiolib-of.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
index 7db35cbde8e92..5c4442200118a 100644
--- a/drivers/gpio/gpiolib-of.c
+++ b/drivers/gpio/gpiolib-of.c
@@ -212,6 +212,14 @@ static void of_gpio_try_fixup_polarity(const struct device_node *np,
* for the property.
*/
{ "lantiq,pci-xway", "gpio-reset", false },
+#endif
+#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2005)
+ /*
+ * DTS for Nokia N900 incorrectly specified "active high"
+ * polarity for the reset line, while the chip actually
+ * treats it as "active low".
+ */
+ { "ti,tsc2005", "reset-gpios", false },
#endif
};
unsigned int i;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 131/197] platform/x86: toshiba_acpi: Fix quickstart quirk handling
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (129 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 130/197] gpiolib: of: add polarity quirk for TSC2005 Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 132/197] Revert "igc: fix a log entry using uninitialized netdev" Greg Kroah-Hartman
` (79 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, kemal, Armin Wolf, Hans de Goede
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Armin Wolf <W_Armin@gmx.de>
commit e527a6127223b644e0a27b44f4b16e16eb6c7f0a upstream.
The global hci_hotkey_quickstart quirk flag is tested in
toshiba_acpi_enable_hotkeys() before the quirk flag is properly
initialized based on SMBIOS data. This causes the quirk to be
applied to all models, some of which behave erratically as a
result.
Fix this by initializing the global quirk flags during module
initialization before registering the ACPI driver. This also
allows us to mark toshiba_dmi_quirks[] as __initconst.
Fixes: 23f1d8b47d12 ("platform/x86: toshiba_acpi: Add quirk for buttons on Z830")
Reported-by: kemal <kmal@cock.li>
Closes: https://lore.kernel.org/platform-driver-x86/R4CYFS.TWB8QUU2SHWI1@cock.li/
Tested-by: kemal <kmal@cock.li>
Cc: stable@vger.kernel.org
Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Link: https://lore.kernel.org/r/20240701194539.348937-1-W_Armin@gmx.de
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/platform/x86/toshiba_acpi.c | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
--- a/drivers/platform/x86/toshiba_acpi.c
+++ b/drivers/platform/x86/toshiba_acpi.c
@@ -3276,7 +3276,7 @@ static const char *find_hci_method(acpi_
*/
#define QUIRK_HCI_HOTKEY_QUICKSTART BIT(1)
-static const struct dmi_system_id toshiba_dmi_quirks[] = {
+static const struct dmi_system_id toshiba_dmi_quirks[] __initconst = {
{
/* Toshiba Portégé R700 */
/* https://bugzilla.kernel.org/show_bug.cgi?id=21012 */
@@ -3311,8 +3311,6 @@ static int toshiba_acpi_add(struct acpi_
struct toshiba_acpi_dev *dev;
const char *hci_method;
u32 dummy;
- const struct dmi_system_id *dmi_id;
- long quirks = 0;
int ret = 0;
if (toshiba_acpi)
@@ -3465,16 +3463,6 @@ iio_error:
}
#endif
- dmi_id = dmi_first_match(toshiba_dmi_quirks);
- if (dmi_id)
- quirks = (long)dmi_id->driver_data;
-
- if (turn_on_panel_on_resume == -1)
- turn_on_panel_on_resume = !!(quirks & QUIRK_TURN_ON_PANEL_ON_RESUME);
-
- if (hci_hotkey_quickstart == -1)
- hci_hotkey_quickstart = !!(quirks & QUIRK_HCI_HOTKEY_QUICKSTART);
-
toshiba_wwan_available(dev);
if (dev->wwan_supported)
toshiba_acpi_setup_wwan_rfkill(dev);
@@ -3624,10 +3612,27 @@ static struct acpi_driver toshiba_acpi_d
.drv.pm = &toshiba_acpi_pm,
};
+static void __init toshiba_dmi_init(void)
+{
+ const struct dmi_system_id *dmi_id;
+ long quirks = 0;
+
+ dmi_id = dmi_first_match(toshiba_dmi_quirks);
+ if (dmi_id)
+ quirks = (long)dmi_id->driver_data;
+
+ if (turn_on_panel_on_resume == -1)
+ turn_on_panel_on_resume = !!(quirks & QUIRK_TURN_ON_PANEL_ON_RESUME);
+
+ if (hci_hotkey_quickstart == -1)
+ hci_hotkey_quickstart = !!(quirks & QUIRK_HCI_HOTKEY_QUICKSTART);
+}
+
static int __init toshiba_acpi_init(void)
{
int ret;
+ toshiba_dmi_init();
toshiba_proc_dir = proc_mkdir(PROC_TOSHIBA, acpi_root_dir);
if (!toshiba_proc_dir) {
pr_err("Unable to create proc dir " PROC_TOSHIBA "\n");
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 132/197] Revert "igc: fix a log entry using uninitialized netdev"
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (130 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 131/197] platform/x86: toshiba_acpi: Fix quickstart quirk handling Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 133/197] nilfs2: fix inode number range checks Greg Kroah-Hartman
` (78 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sasha Neftin, Naama Meir,
Tony Nguyen, Jakub Kicinski
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sasha Neftin <sasha.neftin@intel.com>
commit 8eef5c3cea65f248c99cd9dcb3f84c6509b78162 upstream.
This reverts commit 86167183a17e03ec77198897975e9fdfbd53cb0b.
igc_ptp_init() needs to be called before igc_reset(), otherwise kernel
crash could be observed. Following the corresponding discussion [1] and
[2] revert this commit.
Link: https://lore.kernel.org/all/8fb634f8-7330-4cf4-a8ce-485af9c0a61a@intel.com/ [1]
Link: https://lore.kernel.org/all/87o78rmkhu.fsf@intel.com/ [2]
Fixes: 86167183a17e ("igc: fix a log entry using uninitialized netdev")
Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
Tested-by: Naama Meir <naamax.meir@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://lore.kernel.org/r/20240611162456.961631-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/intel/igc/igc_main.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -6932,6 +6932,8 @@ static int igc_probe(struct pci_dev *pde
device_set_wakeup_enable(&adapter->pdev->dev,
adapter->flags & IGC_FLAG_WOL_SUPPORTED);
+ igc_ptp_init(adapter);
+
igc_tsn_clear_schedule(adapter);
/* reset the hardware with the new settings */
@@ -6953,9 +6955,6 @@ static int igc_probe(struct pci_dev *pde
/* Check if Media Autosense is enabled */
adapter->ei = *ei;
- /* do hw tstamp init after resetting */
- igc_ptp_init(adapter);
-
/* print pcie link status and MAC address */
pcie_print_link_status(pdev);
netdev_info(netdev, "MAC: %pM\n", netdev->dev_addr);
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 133/197] nilfs2: fix inode number range checks
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (131 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 132/197] Revert "igc: fix a log entry using uninitialized netdev" Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 134/197] nilfs2: add missing check for inode numbers on directory entries Greg Kroah-Hartman
` (77 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ryusuke Konishi, Hillf Danton,
Jan Kara, Matthew Wilcox (Oracle), Andrew Morton
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ryusuke Konishi <konishi.ryusuke@gmail.com>
commit e2fec219a36e0993642844be0f345513507031f4 upstream.
Patch series "nilfs2: fix potential issues related to reserved inodes".
This series fixes one use-after-free issue reported by syzbot, caused by
nilfs2's internal inode being exposed in the namespace on a corrupted
filesystem, and a couple of flaws that cause problems if the starting
number of non-reserved inodes written in the on-disk super block is
intentionally (or corruptly) changed from its default value.
This patch (of 3):
In the current implementation of nilfs2, "nilfs->ns_first_ino", which
gives the first non-reserved inode number, is read from the superblock,
but its lower limit is not checked.
As a result, if a number that overlaps with the inode number range of
reserved inodes such as the root directory or metadata files is set in the
super block parameter, the inode number test macros (NILFS_MDT_INODE and
NILFS_VALID_INODE) will not function properly.
In addition, these test macros use left bit-shift calculations using with
the inode number as the shift count via the BIT macro, but the result of a
shift calculation that exceeds the bit width of an integer is undefined in
the C specification, so if "ns_first_ino" is set to a large value other
than the default value NILFS_USER_INO (=11), the macros may potentially
malfunction depending on the environment.
Fix these issues by checking the lower bound of "nilfs->ns_first_ino" and
by preventing bit shifts equal to or greater than the NILFS_USER_INO
constant in the inode number test macros.
Also, change the type of "ns_first_ino" from signed integer to unsigned
integer to avoid the need for type casting in comparisons such as the
lower bound check introduced this time.
Link: https://lkml.kernel.org/r/20240623051135.4180-1-konishi.ryusuke@gmail.com
Link: https://lkml.kernel.org/r/20240623051135.4180-2-konishi.ryusuke@gmail.com
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Cc: Hillf Danton <hdanton@sina.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/nilfs2/nilfs.h | 5 +++--
fs/nilfs2/the_nilfs.c | 6 ++++++
fs/nilfs2/the_nilfs.h | 2 +-
3 files changed, 10 insertions(+), 3 deletions(-)
--- a/fs/nilfs2/nilfs.h
+++ b/fs/nilfs2/nilfs.h
@@ -116,9 +116,10 @@ enum {
#define NILFS_FIRST_INO(sb) (((struct the_nilfs *)sb->s_fs_info)->ns_first_ino)
#define NILFS_MDT_INODE(sb, ino) \
- ((ino) < NILFS_FIRST_INO(sb) && (NILFS_MDT_INO_BITS & BIT(ino)))
+ ((ino) < NILFS_USER_INO && (NILFS_MDT_INO_BITS & BIT(ino)))
#define NILFS_VALID_INODE(sb, ino) \
- ((ino) >= NILFS_FIRST_INO(sb) || (NILFS_SYS_INO_BITS & BIT(ino)))
+ ((ino) >= NILFS_FIRST_INO(sb) || \
+ ((ino) < NILFS_USER_INO && (NILFS_SYS_INO_BITS & BIT(ino))))
/**
* struct nilfs_transaction_info: context information for synchronization
--- a/fs/nilfs2/the_nilfs.c
+++ b/fs/nilfs2/the_nilfs.c
@@ -452,6 +452,12 @@ static int nilfs_store_disk_layout(struc
}
nilfs->ns_first_ino = le32_to_cpu(sbp->s_first_ino);
+ if (nilfs->ns_first_ino < NILFS_USER_INO) {
+ nilfs_err(nilfs->ns_sb,
+ "too small lower limit for non-reserved inode numbers: %u",
+ nilfs->ns_first_ino);
+ return -EINVAL;
+ }
nilfs->ns_blocks_per_segment = le32_to_cpu(sbp->s_blocks_per_segment);
if (nilfs->ns_blocks_per_segment < NILFS_SEG_MIN_BLOCKS) {
--- a/fs/nilfs2/the_nilfs.h
+++ b/fs/nilfs2/the_nilfs.h
@@ -182,7 +182,7 @@ struct the_nilfs {
unsigned long ns_nrsvsegs;
unsigned long ns_first_data_block;
int ns_inode_size;
- int ns_first_ino;
+ unsigned int ns_first_ino;
u32 ns_crc_seed;
/* /sys/fs/<nilfs>/<device> */
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 134/197] nilfs2: add missing check for inode numbers on directory entries
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (132 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 133/197] nilfs2: fix inode number range checks Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 135/197] nilfs2: fix incorrect inode allocation from reserved inodes Greg Kroah-Hartman
` (76 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ryusuke Konishi,
syzbot+d79afb004be235636ee8, Jan Kara, Hillf Danton,
Matthew Wilcox (Oracle), Andrew Morton
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ryusuke Konishi <konishi.ryusuke@gmail.com>
commit bb76c6c274683c8570ad788f79d4b875bde0e458 upstream.
Syzbot reported that mounting and unmounting a specific pattern of
corrupted nilfs2 filesystem images causes a use-after-free of metadata
file inodes, which triggers a kernel bug in lru_add_fn().
As Jan Kara pointed out, this is because the link count of a metadata file
gets corrupted to 0, and nilfs_evict_inode(), which is called from iput(),
tries to delete that inode (ifile inode in this case).
The inconsistency occurs because directories containing the inode numbers
of these metadata files that should not be visible in the namespace are
read without checking.
Fix this issue by treating the inode numbers of these internal files as
errors in the sanity check helper when reading directory folios/pages.
Also thanks to Hillf Danton and Matthew Wilcox for their initial mm-layer
analysis.
Link: https://lkml.kernel.org/r/20240623051135.4180-3-konishi.ryusuke@gmail.com
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Reported-by: syzbot+d79afb004be235636ee8@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=d79afb004be235636ee8
Reported-by: Jan Kara <jack@suse.cz>
Closes: https://lkml.kernel.org/r/20240617075758.wewhukbrjod5fp5o@quack3
Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Cc: Hillf Danton <hdanton@sina.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/nilfs2/dir.c | 6 ++++++
fs/nilfs2/nilfs.h | 5 +++++
2 files changed, 11 insertions(+)
--- a/fs/nilfs2/dir.c
+++ b/fs/nilfs2/dir.c
@@ -135,6 +135,9 @@ static bool nilfs_check_folio(struct fol
goto Enamelen;
if (((offs + rec_len - 1) ^ offs) & ~(chunk_size-1))
goto Espan;
+ if (unlikely(p->inode &&
+ NILFS_PRIVATE_INODE(le64_to_cpu(p->inode))))
+ goto Einumber;
}
if (offs != limit)
goto Eend;
@@ -160,6 +163,9 @@ Enamelen:
goto bad_entry;
Espan:
error = "directory entry across blocks";
+ goto bad_entry;
+Einumber:
+ error = "disallowed inode number";
bad_entry:
nilfs_error(sb,
"bad entry in directory #%lu: %s - offset=%lu, inode=%lu, rec_len=%zd, name_len=%d",
--- a/fs/nilfs2/nilfs.h
+++ b/fs/nilfs2/nilfs.h
@@ -121,6 +121,11 @@ enum {
((ino) >= NILFS_FIRST_INO(sb) || \
((ino) < NILFS_USER_INO && (NILFS_SYS_INO_BITS & BIT(ino))))
+#define NILFS_PRIVATE_INODE(ino) ({ \
+ ino_t __ino = (ino); \
+ ((__ino) < NILFS_USER_INO && (__ino) != NILFS_ROOT_INO && \
+ (__ino) != NILFS_SKETCH_INO); })
+
/**
* struct nilfs_transaction_info: context information for synchronization
* @ti_magic: Magic number
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 135/197] nilfs2: fix incorrect inode allocation from reserved inodes
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (133 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 134/197] nilfs2: add missing check for inode numbers on directory entries Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 136/197] mm: optimize the redundant loop of mm_update_owner_next() Greg Kroah-Hartman
` (75 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ryusuke Konishi, Hillf Danton,
Jan Kara, Matthew Wilcox (Oracle), Andrew Morton
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ryusuke Konishi <konishi.ryusuke@gmail.com>
commit 93aef9eda1cea9e84ab2453fcceb8addad0e46f1 upstream.
If the bitmap block that manages the inode allocation status is corrupted,
nilfs_ifile_create_inode() may allocate a new inode from the reserved
inode area where it should not be allocated.
Previous fix commit d325dc6eb763 ("nilfs2: fix use-after-free bug of
struct nilfs_root"), fixed the problem that reserved inodes with inode
numbers less than NILFS_USER_INO (=11) were incorrectly reallocated due to
bitmap corruption, but since the start number of non-reserved inodes is
read from the super block and may change, in which case inode allocation
may occur from the extended reserved inode area.
If that happens, access to that inode will cause an IO error, causing the
file system to degrade to an error state.
Fix this potential issue by adding a wraparound option to the common
metadata object allocation routine and by modifying
nilfs_ifile_create_inode() to disable the option so that it only allocates
inodes with inode numbers greater than or equal to the inode number read
in "nilfs->ns_first_ino", regardless of the bitmap status of reserved
inodes.
Link: https://lkml.kernel.org/r/20240623051135.4180-4-konishi.ryusuke@gmail.com
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Cc: Hillf Danton <hdanton@sina.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/nilfs2/alloc.c | 19 +++++++++++++++----
fs/nilfs2/alloc.h | 4 ++--
fs/nilfs2/dat.c | 2 +-
fs/nilfs2/ifile.c | 7 ++-----
4 files changed, 20 insertions(+), 12 deletions(-)
--- a/fs/nilfs2/alloc.c
+++ b/fs/nilfs2/alloc.c
@@ -377,11 +377,12 @@ void *nilfs_palloc_block_get_entry(const
* @target: offset number of an entry in the group (start point)
* @bsize: size in bits
* @lock: spin lock protecting @bitmap
+ * @wrap: whether to wrap around
*/
static int nilfs_palloc_find_available_slot(unsigned char *bitmap,
unsigned long target,
unsigned int bsize,
- spinlock_t *lock)
+ spinlock_t *lock, bool wrap)
{
int pos, end = bsize;
@@ -397,6 +398,8 @@ static int nilfs_palloc_find_available_s
end = target;
}
+ if (!wrap)
+ return -ENOSPC;
/* wrap around */
for (pos = 0; pos < end; pos++) {
@@ -495,9 +498,10 @@ int nilfs_palloc_count_max_entries(struc
* nilfs_palloc_prepare_alloc_entry - prepare to allocate a persistent object
* @inode: inode of metadata file using this allocator
* @req: nilfs_palloc_req structure exchanged for the allocation
+ * @wrap: whether to wrap around
*/
int nilfs_palloc_prepare_alloc_entry(struct inode *inode,
- struct nilfs_palloc_req *req)
+ struct nilfs_palloc_req *req, bool wrap)
{
struct buffer_head *desc_bh, *bitmap_bh;
struct nilfs_palloc_group_desc *desc;
@@ -516,7 +520,7 @@ int nilfs_palloc_prepare_alloc_entry(str
entries_per_group = nilfs_palloc_entries_per_group(inode);
for (i = 0; i < ngroups; i += n) {
- if (group >= ngroups) {
+ if (group >= ngroups && wrap) {
/* wrap around */
group = 0;
maxgroup = nilfs_palloc_group(inode, req->pr_entry_nr,
@@ -550,7 +554,14 @@ int nilfs_palloc_prepare_alloc_entry(str
bitmap_kaddr = kmap_local_page(bitmap_bh->b_page);
bitmap = bitmap_kaddr + bh_offset(bitmap_bh);
pos = nilfs_palloc_find_available_slot(
- bitmap, group_offset, entries_per_group, lock);
+ bitmap, group_offset, entries_per_group, lock,
+ wrap);
+ /*
+ * Since the search for a free slot in the second and
+ * subsequent bitmap blocks always starts from the
+ * beginning, the wrap flag only has an effect on the
+ * first search.
+ */
kunmap_local(bitmap_kaddr);
if (pos >= 0)
goto found;
--- a/fs/nilfs2/alloc.h
+++ b/fs/nilfs2/alloc.h
@@ -50,8 +50,8 @@ struct nilfs_palloc_req {
struct buffer_head *pr_entry_bh;
};
-int nilfs_palloc_prepare_alloc_entry(struct inode *,
- struct nilfs_palloc_req *);
+int nilfs_palloc_prepare_alloc_entry(struct inode *inode,
+ struct nilfs_palloc_req *req, bool wrap);
void nilfs_palloc_commit_alloc_entry(struct inode *,
struct nilfs_palloc_req *);
void nilfs_palloc_abort_alloc_entry(struct inode *, struct nilfs_palloc_req *);
--- a/fs/nilfs2/dat.c
+++ b/fs/nilfs2/dat.c
@@ -75,7 +75,7 @@ int nilfs_dat_prepare_alloc(struct inode
{
int ret;
- ret = nilfs_palloc_prepare_alloc_entry(dat, req);
+ ret = nilfs_palloc_prepare_alloc_entry(dat, req, true);
if (ret < 0)
return ret;
--- a/fs/nilfs2/ifile.c
+++ b/fs/nilfs2/ifile.c
@@ -56,13 +56,10 @@ int nilfs_ifile_create_inode(struct inod
struct nilfs_palloc_req req;
int ret;
- req.pr_entry_nr = 0; /*
- * 0 says find free inode from beginning
- * of a group. dull code!!
- */
+ req.pr_entry_nr = NILFS_FIRST_INO(ifile->i_sb);
req.pr_entry_bh = NULL;
- ret = nilfs_palloc_prepare_alloc_entry(ifile, &req);
+ ret = nilfs_palloc_prepare_alloc_entry(ifile, &req, false);
if (!ret) {
ret = nilfs_palloc_get_entry_block(ifile, req.pr_entry_nr, 1,
&req.pr_entry_bh);
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 136/197] mm: optimize the redundant loop of mm_update_owner_next()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (134 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 135/197] nilfs2: fix incorrect inode allocation from reserved inodes Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 137/197] mm: avoid overflows in dirty throttling logic Greg Kroah-Hartman
` (74 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jinliang Zheng, Michal Hocko,
Christian Brauner, Jens Axboe, Mateusz Guzik,
Matthew Wilcox (Oracle), Oleg Nesterov, Tycho Andersen,
Andrew Morton
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinliang Zheng <alexjlzheng@tencent.com>
commit cf3f9a593dab87a032d2b6a6fb205e7f3de4f0a1 upstream.
When mm_update_owner_next() is racing with swapoff (try_to_unuse()) or
/proc or ptrace or page migration (get_task_mm()), it is impossible to
find an appropriate task_struct in the loop whose mm_struct is the same as
the target mm_struct.
If the above race condition is combined with the stress-ng-zombie and
stress-ng-dup tests, such a long loop can easily cause a Hard Lockup in
write_lock_irq() for tasklist_lock.
Recognize this situation in advance and exit early.
Link: https://lkml.kernel.org/r/20240620122123.3877432-1-alexjlzheng@tencent.com
Signed-off-by: Jinliang Zheng <alexjlzheng@tencent.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Mateusz Guzik <mjguzik@gmail.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Tycho Andersen <tandersen@netflix.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
kernel/exit.c | 2 ++
1 file changed, 2 insertions(+)
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -488,6 +488,8 @@ retry:
* Search through everything else, we should not get here often.
*/
for_each_process(g) {
+ if (atomic_read(&mm->mm_users) <= 1)
+ break;
if (g->flags & PF_KTHREAD)
continue;
for_each_thread(g, c) {
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 137/197] mm: avoid overflows in dirty throttling logic
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (135 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 136/197] mm: optimize the redundant loop of mm_update_owner_next() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 138/197] btrfs: zoned: fix calc_available_free_space() for zoned mode Greg Kroah-Hartman
` (73 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jan Kara, Zach OKeefe, Andrew Morton
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <jack@suse.cz>
commit 385d838df280eba6c8680f9777bfa0d0bfe7e8b2 upstream.
The dirty throttling logic is interspersed with assumptions that dirty
limits in PAGE_SIZE units fit into 32-bit (so that various multiplications
fit into 64-bits). If limits end up being larger, we will hit overflows,
possible divisions by 0 etc. Fix these problems by never allowing so
large dirty limits as they have dubious practical value anyway. For
dirty_bytes / dirty_background_bytes interfaces we can just refuse to set
so large limits. For dirty_ratio / dirty_background_ratio it isn't so
simple as the dirty limit is computed from the amount of available memory
which can change due to memory hotplug etc. So when converting dirty
limits from ratios to numbers of pages, we just don't allow the result to
exceed UINT_MAX.
This is root-only triggerable problem which occurs when the operator
sets dirty limits to >16 TB.
Link: https://lkml.kernel.org/r/20240621144246.11148-2-jack@suse.cz
Signed-off-by: Jan Kara <jack@suse.cz>
Reported-by: Zach O'Keefe <zokeefe@google.com>
Reviewed-By: Zach O'Keefe <zokeefe@google.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
mm/page-writeback.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -415,13 +415,20 @@ static void domain_dirty_limits(struct d
else
bg_thresh = (bg_ratio * available_memory) / PAGE_SIZE;
- if (bg_thresh >= thresh)
- bg_thresh = thresh / 2;
tsk = current;
if (rt_task(tsk)) {
bg_thresh += bg_thresh / 4 + global_wb_domain.dirty_limit / 32;
thresh += thresh / 4 + global_wb_domain.dirty_limit / 32;
}
+ /*
+ * Dirty throttling logic assumes the limits in page units fit into
+ * 32-bits. This gives 16TB dirty limits max which is hopefully enough.
+ */
+ if (thresh > UINT_MAX)
+ thresh = UINT_MAX;
+ /* This makes sure bg_thresh is within 32-bits as well */
+ if (bg_thresh >= thresh)
+ bg_thresh = thresh / 2;
dtc->thresh = thresh;
dtc->bg_thresh = bg_thresh;
@@ -471,7 +478,11 @@ static unsigned long node_dirty_limit(st
if (rt_task(tsk))
dirty += dirty / 4;
- return dirty;
+ /*
+ * Dirty throttling logic assumes the limits in page units fit into
+ * 32-bits. This gives 16TB dirty limits max which is hopefully enough.
+ */
+ return min_t(unsigned long, dirty, UINT_MAX);
}
/**
@@ -508,10 +519,17 @@ static int dirty_background_bytes_handle
void *buffer, size_t *lenp, loff_t *ppos)
{
int ret;
+ unsigned long old_bytes = dirty_background_bytes;
ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
- if (ret == 0 && write)
+ if (ret == 0 && write) {
+ if (DIV_ROUND_UP(dirty_background_bytes, PAGE_SIZE) >
+ UINT_MAX) {
+ dirty_background_bytes = old_bytes;
+ return -ERANGE;
+ }
dirty_background_ratio = 0;
+ }
return ret;
}
@@ -537,6 +555,10 @@ static int dirty_bytes_handler(struct ct
ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
if (ret == 0 && write && vm_dirty_bytes != old_bytes) {
+ if (DIV_ROUND_UP(vm_dirty_bytes, PAGE_SIZE) > UINT_MAX) {
+ vm_dirty_bytes = old_bytes;
+ return -ERANGE;
+ }
writeback_set_ratelimit();
vm_dirty_ratio = 0;
}
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 138/197] btrfs: zoned: fix calc_available_free_space() for zoned mode
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (136 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 137/197] mm: avoid overflows in dirty throttling logic Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 139/197] btrfs: fix adding block group to a reclaim list and the unused list during reclaim Greg Kroah-Hartman
` (72 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Naohiro Aota, Boris Burkov,
David Sterba
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naohiro Aota <naohiro.aota@wdc.com>
commit 64d2c847ba380e07b9072d65a50aa6469d2aa43f upstream.
calc_available_free_space() returns the total size of metadata (or
system) block groups, which can be allocated from unallocated disk
space. The logic is wrong on zoned mode in two places.
First, the calculation of data_chunk_size is wrong. We always allocate
one zone as one chunk, and no partial allocation of a zone. So, we
should use zone_size (= data_sinfo->chunk_size) as it is.
Second, the result "avail" may not be zone aligned. Since we always
allocate one zone as one chunk on zoned mode, returning non-zone size
aligned bytes will result in less pressure on the async metadata reclaim
process.
This is serious for the nearly full state with a large zone size device.
Allowing over-commit too much will result in less async reclaim work and
end up in ENOSPC. We can align down to the zone size to avoid that.
Fixes: cb6cbab79055 ("btrfs: adjust overcommit logic when very close to full")
CC: stable@vger.kernel.org # 6.9
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/space-info.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c
index d620323d08ea..ae8c56442549 100644
--- a/fs/btrfs/space-info.c
+++ b/fs/btrfs/space-info.c
@@ -373,11 +373,18 @@ static u64 calc_available_free_space(struct btrfs_fs_info *fs_info,
* "optimal" chunk size based on the fs size. However when we actually
* allocate the chunk we will strip this down further, making it no more
* than 10% of the disk or 1G, whichever is smaller.
+ *
+ * On the zoned mode, we need to use zone_size (=
+ * data_sinfo->chunk_size) as it is.
*/
data_sinfo = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_DATA);
- data_chunk_size = min(data_sinfo->chunk_size,
- mult_perc(fs_info->fs_devices->total_rw_bytes, 10));
- data_chunk_size = min_t(u64, data_chunk_size, SZ_1G);
+ if (!btrfs_is_zoned(fs_info)) {
+ data_chunk_size = min(data_sinfo->chunk_size,
+ mult_perc(fs_info->fs_devices->total_rw_bytes, 10));
+ data_chunk_size = min_t(u64, data_chunk_size, SZ_1G);
+ } else {
+ data_chunk_size = data_sinfo->chunk_size;
+ }
/*
* Since data allocations immediately use block groups as part of the
@@ -405,6 +412,17 @@ static u64 calc_available_free_space(struct btrfs_fs_info *fs_info,
avail >>= 3;
else
avail >>= 1;
+
+ /*
+ * On the zoned mode, we always allocate one zone as one chunk.
+ * Returning non-zone size alingned bytes here will result in
+ * less pressure for the async metadata reclaim process, and it
+ * will over-commit too much leading to ENOSPC. Align down to the
+ * zone size to avoid that.
+ */
+ if (btrfs_is_zoned(fs_info))
+ avail = ALIGN_DOWN(avail, fs_info->zone_size);
+
return avail;
}
--
2.45.2
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 139/197] btrfs: fix adding block group to a reclaim list and the unused list during reclaim
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (137 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 138/197] btrfs: zoned: fix calc_available_free_space() for zoned mode Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 140/197] btrfs: fix folio refcount in __alloc_dummy_extent_buffer() Greg Kroah-Hartman
` (71 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Shinichiro Kawasaki,
Johannes Thumshirn, Filipe Manana, Johannes Thumshirn, Qu Wenruo,
Naohiro Aota, David Sterba
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naohiro Aota <naohiro.aota@wdc.com>
commit 48f091fd50b2eb33ae5eaea9ed3c4f81603acf38 upstream.
There is a potential parallel list adding for retrying in
btrfs_reclaim_bgs_work and adding to the unused list. Since the block
group is removed from the reclaim list and it is on a relocation work,
it can be added into the unused list in parallel. When that happens,
adding it to the reclaim list will corrupt the list head and trigger
list corruption like below.
Fix it by taking fs_info->unused_bgs_lock.
[177.504][T2585409] BTRFS error (device nullb1): error relocating ch= unk 2415919104
[177.514][T2585409] list_del corruption. next->prev should be ff1100= 0344b119c0, but was ff11000377e87c70. (next=3Dff110002390cd9c0)
[177.529][T2585409] ------------[ cut here ]------------
[177.537][T2585409] kernel BUG at lib/list_debug.c:65!
[177.545][T2585409] Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI
[177.555][T2585409] CPU: 9 PID: 2585409 Comm: kworker/u128:2 Tainted: G W 6.10.0-rc5-kts #1
[177.568][T2585409] Hardware name: Supermicro SYS-520P-WTR/X12SPW-TF, BIOS 1.2 02/14/2022
[177.579][T2585409] Workqueue: events_unbound btrfs_reclaim_bgs_work[btrfs]
[177.589][T2585409] RIP: 0010:__list_del_entry_valid_or_report.cold+0x70/0x72
[177.624][T2585409] RSP: 0018:ff11000377e87a70 EFLAGS: 00010286
[177.633][T2585409] RAX: 000000000000006d RBX: ff11000344b119c0 RCX:0000000000000000
[177.644][T2585409] RDX: 000000000000006d RSI: 0000000000000008 RDI:ffe21c006efd0f40
[177.655][T2585409] RBP: ff110002e0509f78 R08: 0000000000000001 R09:ffe21c006efd0f08
[177.665][T2585409] R10: ff11000377e87847 R11: 0000000000000000 R12:ff110002390cd9c0
[177.676][T2585409] R13: ff11000344b119c0 R14: ff110002e0508000 R15:dffffc0000000000
[177.687][T2585409] FS: 0000000000000000(0000) GS:ff11000fec880000(0000) knlGS:0000000000000000
[177.700][T2585409] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[177.709][T2585409] CR2: 00007f06bc7b1978 CR3: 0000001021e86005 CR4:0000000000771ef0
[177.720][T2585409] DR0: 0000000000000000 DR1: 0000000000000000 DR2:0000000000000000
[177.731][T2585409] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:0000000000000400
[177.742][T2585409] PKRU: 55555554
[177.748][T2585409] Call Trace:
[177.753][T2585409] <TASK>
[177.759][T2585409] ? __die_body.cold+0x19/0x27
[177.766][T2585409] ? die+0x2e/0x50
[177.772][T2585409] ? do_trap+0x1ea/0x2d0
[177.779][T2585409] ? __list_del_entry_valid_or_report.cold+0x70/0x72
[177.788][T2585409] ? do_error_trap+0xa3/0x160
[177.795][T2585409] ? __list_del_entry_valid_or_report.cold+0x70/0x72
[177.805][T2585409] ? handle_invalid_op+0x2c/0x40
[177.812][T2585409] ? __list_del_entry_valid_or_report.cold+0x70/0x72
[177.820][T2585409] ? exc_invalid_op+0x2d/0x40
[177.827][T2585409] ? asm_exc_invalid_op+0x1a/0x20
[177.834][T2585409] ? __list_del_entry_valid_or_report.cold+0x70/0x72
[177.843][T2585409] btrfs_delete_unused_bgs+0x3d9/0x14c0 [btrfs]
There is a similar retry_list code in btrfs_delete_unused_bgs(), but it is
safe, AFAICS. Since the block group was in the unused list, the used bytes
should be 0 when it was added to the unused list. Then, it checks
block_group->{used,reserved,pinned} are still 0 under the
block_group->lock. So, they should be still eligible for the unused list,
not the reclaim list.
The reason it is safe there it's because because we're holding
space_info->groups_sem in write mode.
That means no other task can allocate from the block group, so while we
are at deleted_unused_bgs() it's not possible for other tasks to
allocate and deallocate extents from the block group, so it can't be
added to the unused list or the reclaim list by anyone else.
The bug can be reproduced by btrfs/166 after a few rounds. In practice
this can be hit when relocation cannot find more chunk space and ends
with ENOSPC.
Reported-by: Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Suggested-by: Johannes Thumshirn <Johannes.Thumshirn@wdc.com>
Fixes: 4eb4e85c4f81 ("btrfs: retry block group reclaim without infinite loop")
CC: stable@vger.kernel.org # 5.15+
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/block-group.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
--- a/fs/btrfs/block-group.c
+++ b/fs/btrfs/block-group.c
@@ -1924,8 +1924,17 @@ void btrfs_reclaim_bgs_work(struct work_
next:
if (ret) {
/* Refcount held by the reclaim_bgs list after splice. */
- btrfs_get_block_group(bg);
- list_add_tail(&bg->bg_list, &retry_list);
+ spin_lock(&fs_info->unused_bgs_lock);
+ /*
+ * This block group might be added to the unused list
+ * during the above process. Move it back to the
+ * reclaim list otherwise.
+ */
+ if (list_empty(&bg->bg_list)) {
+ btrfs_get_block_group(bg);
+ list_add_tail(&bg->bg_list, &retry_list);
+ }
+ spin_unlock(&fs_info->unused_bgs_lock);
}
btrfs_put_block_group(bg);
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 140/197] btrfs: fix folio refcount in __alloc_dummy_extent_buffer()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (138 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 139/197] btrfs: fix adding block group to a reclaim list and the unused list during reclaim Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 141/197] f2fs: Add inline to f2fs_build_fault_attr() stub Greg Kroah-Hartman
` (70 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ed Tomlinson, Filipe Manana,
Boris Burkov, David Sterba
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Burkov <boris@bur.io>
commit a56c85fa2d59ab0780514741550edf87989a66e9 upstream.
Another improper use of __folio_put() in an error path after freshly
allocating pages/folios which returns them with the refcount initialized
to 1. The refactor from __free_pages() -> __folio_put() (instead of
folio_put) removed a refcount decrement found in __free_pages() and
folio_put but absent from __folio_put().
Fixes: 13df3775efca ("btrfs: cleanup metadata page pointer usage")
CC: stable@vger.kernel.org # 6.8+
Tested-by: Ed Tomlinson <edtoml@gmail.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Boris Burkov <boris@bur.io>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/extent_io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -3526,7 +3526,7 @@ err:
for (int i = 0; i < num_folios; i++) {
if (eb->folios[i]) {
detach_extent_buffer_folio(eb, eb->folios[i]);
- __folio_put(eb->folios[i]);
+ folio_put(eb->folios[i]);
}
}
__free_extent_buffer(eb);
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 141/197] f2fs: Add inline to f2fs_build_fault_attr() stub
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (139 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 140/197] btrfs: fix folio refcount in __alloc_dummy_extent_buffer() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 142/197] scsi: mpi3mr: Use proper format specifier in mpi3mr_sas_port_add() Greg Kroah-Hartman
` (69 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Nathan Chancellor, Chao Yu,
Jaegeuk Kim
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nathan Chancellor <nathan@kernel.org>
commit 0d8968287a1cf7b03d07387dc871de3861b9f6b9 upstream.
When building without CONFIG_F2FS_FAULT_INJECTION, there is a warning
from each file that includes f2fs.h because the stub for
f2fs_build_fault_attr() is missing inline:
In file included from fs/f2fs/segment.c:21:
fs/f2fs/f2fs.h:4605:12: warning: 'f2fs_build_fault_attr' defined but not used [-Wunused-function]
4605 | static int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
| ^~~~~~~~~~~~~~~~~~~~~
Add the missing inline to resolve all of the warnings for this
configuration.
Fixes: 4ed886b187f4 ("f2fs: check validation of fault attrs in f2fs_build_fault_attr()")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/f2fs/f2fs.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4600,8 +4600,8 @@ static inline bool f2fs_need_verity(cons
extern int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
unsigned long type);
#else
-static int f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned long rate,
- unsigned long type)
+static inline int f2fs_build_fault_attr(struct f2fs_sb_info *sbi,
+ unsigned long rate, unsigned long type)
{
return 0;
}
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 142/197] scsi: mpi3mr: Use proper format specifier in mpi3mr_sas_port_add()
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (140 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 141/197] f2fs: Add inline to f2fs_build_fault_attr() stub Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 143/197] Bluetooth: hci_bcm4377: Fix msgid release Greg Kroah-Hartman
` (68 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Nathan Chancellor,
Martin K. Petersen
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nathan Chancellor <nathan@kernel.org>
commit 9f365cb8bbd0162963d6852651d7c9e30adcb7b5 upstream.
When building for a 32-bit platform such as ARM or i386, for which size_t
is unsigned int, there is a warning due to using an unsigned long format
specifier:
drivers/scsi/mpi3mr/mpi3mr_transport.c:1370:11: error: format specifies type 'unsigned long' but the argument has type 'unsigned int' [-Werror,-Wformat]
1369 | ioc_warn(mrioc, "skipping port %u, max allowed value is %lu\n",
| ~~~
| %u
1370 | i, sizeof(mr_sas_port->phy_mask) * 8);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Use the proper format specifier for size_t, %zu, to resolve the warning for
all platforms.
Fixes: 3668651def2c ("scsi: mpi3mr: Sanitise num_phys")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Link: https://lore.kernel.org/r/20240514-mpi3mr-fix-wformat-v1-1-f1ad49217e5e@kernel.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/mpi3mr/mpi3mr_transport.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/scsi/mpi3mr/mpi3mr_transport.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_transport.c
@@ -1366,7 +1366,7 @@ static struct mpi3mr_sas_port *mpi3mr_sa
continue;
if (i > sizeof(mr_sas_port->phy_mask) * 8) {
- ioc_warn(mrioc, "skipping port %u, max allowed value is %lu\n",
+ ioc_warn(mrioc, "skipping port %u, max allowed value is %zu\n",
i, sizeof(mr_sas_port->phy_mask) * 8);
goto out_fail;
}
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 143/197] Bluetooth: hci_bcm4377: Fix msgid release
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (141 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 142/197] scsi: mpi3mr: Use proper format specifier in mpi3mr_sas_port_add() Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 144/197] Bluetooth: Add quirk to ignore reserved PHY bits in LE Extended Adv Report Greg Kroah-Hartman
` (67 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Hector Martin, Sven Peter,
Neal Gompa, Luiz Augusto von Dentz
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hector Martin <marcan@marcan.st>
commit 897e6120566f1c108b85fefe78d1c1bddfbd5988 upstream.
We are releasing a single msgid, so the order argument to
bitmap_release_region must be zero.
Fixes: 8a06127602de ("Bluetooth: hci_bcm4377: Add new driver for BCM4377 PCIe boards")
Cc: stable@vger.kernel.org
Signed-off-by: Hector Martin <marcan@marcan.st>
Reviewed-by: Sven Peter <sven@svenpeter.dev>
Reviewed-by: Neal Gompa <neal@gompa.dev>
Signed-off-by: Sven Peter <sven@svenpeter.dev>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/bluetooth/hci_bcm4377.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/bluetooth/hci_bcm4377.c
+++ b/drivers/bluetooth/hci_bcm4377.c
@@ -716,7 +716,7 @@ static void bcm4377_handle_ack(struct bc
ring->events[msgid] = NULL;
}
- bitmap_release_region(ring->msgids, msgid, ring->n_entries);
+ bitmap_release_region(ring->msgids, msgid, 0);
unlock:
spin_unlock_irqrestore(&ring->lock, flags);
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 144/197] Bluetooth: Add quirk to ignore reserved PHY bits in LE Extended Adv Report
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (142 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 143/197] Bluetooth: hci_bcm4377: Fix msgid release Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 145/197] Bluetooth: qca: Fix BT enable failure again for QCA6390 after warm reboot Greg Kroah-Hartman
` (66 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Janne Grunau, Sven Peter,
Luiz Augusto von Dentz
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Peter <sven@svenpeter.dev>
commit ed2a2ef16a6b9197a0e452308bf6acee6e01f709 upstream.
Some Broadcom controllers found on Apple Silicon machines abuse the
reserved bits inside the PHY fields of LE Extended Advertising Report
events for additional flags. Add a quirk to drop these and correctly
extract the Primary/Secondary_PHY field.
The following excerpt from a btmon trace shows a report received with
"Reserved" for "Primary PHY" on a 4388 controller:
> HCI Event: LE Meta Event (0x3e) plen 26
LE Extended Advertising Report (0x0d)
Num reports: 1
Entry 0
Event type: 0x2515
Props: 0x0015
Connectable
Directed
Use legacy advertising PDUs
Data status: Complete
Reserved (0x2500)
Legacy PDU Type: Reserved (0x2515)
Address type: Random (0x01)
Address: 00:00:00:00:00:00 (Static)
Primary PHY: Reserved
Secondary PHY: No packets
SID: no ADI field (0xff)
TX power: 127 dBm
RSSI: -60 dBm (0xc4)
Periodic advertising interval: 0.00 msec (0x0000)
Direct address type: Public (0x00)
Direct address: 00:00:00:00:00:00 (Apple, Inc.)
Data length: 0x00
Cc: stable@vger.kernel.org
Fixes: 2e7ed5f5e69b ("Bluetooth: hci_sync: Use advertised PHYs on hci_le_ext_create_conn_sync")
Reported-by: Janne Grunau <j@jannau.net>
Closes: https://lore.kernel.org/all/Zjz0atzRhFykROM9@robin
Tested-by: Janne Grunau <j@jannau.net>
Signed-off-by: Sven Peter <sven@svenpeter.dev>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/bluetooth/hci_bcm4377.c | 8 ++++++++
include/net/bluetooth/hci.h | 11 +++++++++++
net/bluetooth/hci_event.c | 7 +++++++
3 files changed, 26 insertions(+)
--- a/drivers/bluetooth/hci_bcm4377.c
+++ b/drivers/bluetooth/hci_bcm4377.c
@@ -495,6 +495,10 @@ struct bcm4377_data;
* extended scanning
* broken_mws_transport_config: Set to true if the chip erroneously claims to
* support MWS Transport Configuration
+ * broken_le_ext_adv_report_phy: Set to true if this chip stuffs flags inside
+ * reserved bits of Primary/Secondary_PHY inside
+ * LE Extended Advertising Report events which
+ * have to be ignored
* send_calibration: Optional callback to send calibration data
* send_ptb: Callback to send "PTB" regulatory/calibration data
*/
@@ -513,6 +517,7 @@ struct bcm4377_hw {
unsigned long broken_ext_scan : 1;
unsigned long broken_mws_transport_config : 1;
unsigned long broken_le_coded : 1;
+ unsigned long broken_le_ext_adv_report_phy : 1;
int (*send_calibration)(struct bcm4377_data *bcm4377);
int (*send_ptb)(struct bcm4377_data *bcm4377,
@@ -2373,6 +2378,8 @@ static int bcm4377_probe(struct pci_dev
set_bit(HCI_QUIRK_BROKEN_EXT_SCAN, &hdev->quirks);
if (bcm4377->hw->broken_le_coded)
set_bit(HCI_QUIRK_BROKEN_LE_CODED, &hdev->quirks);
+ if (bcm4377->hw->broken_le_ext_adv_report_phy)
+ set_bit(HCI_QUIRK_FIXUP_LE_EXT_ADV_REPORT_PHY, &hdev->quirks);
pci_set_drvdata(pdev, bcm4377);
hci_set_drvdata(hdev, bcm4377);
@@ -2477,6 +2484,7 @@ static const struct bcm4377_hw bcm4377_h
.clear_pciecfg_subsystem_ctrl_bit19 = true,
.broken_mws_transport_config = true,
.broken_le_coded = true,
+ .broken_le_ext_adv_report_phy = true,
.send_calibration = bcm4387_send_calibration,
.send_ptb = bcm4378_send_ptb,
},
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -324,6 +324,17 @@ enum {
* claim to support it.
*/
HCI_QUIRK_BROKEN_READ_ENC_KEY_SIZE,
+
+ /*
+ * When this quirk is set, the reserved bits of Primary/Secondary_PHY
+ * inside the LE Extended Advertising Report events are discarded.
+ * This is required for some Apple/Broadcom controllers which
+ * abuse these reserved bits for unrelated flags.
+ *
+ * This quirk can be set before hci_register_dev is called or
+ * during the hdev->setup vendor callback.
+ */
+ HCI_QUIRK_FIXUP_LE_EXT_ADV_REPORT_PHY,
};
/* HCI device flags */
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -6312,6 +6312,13 @@ static void hci_le_ext_adv_report_evt(st
evt_type = __le16_to_cpu(info->type) & LE_EXT_ADV_EVT_TYPE_MASK;
legacy_evt_type = ext_evt_type_to_legacy(hdev, evt_type);
+
+ if (test_bit(HCI_QUIRK_FIXUP_LE_EXT_ADV_REPORT_PHY,
+ &hdev->quirks)) {
+ info->primary_phy &= 0x1f;
+ info->secondary_phy &= 0x1f;
+ }
+
if (legacy_evt_type != LE_ADV_INVALID) {
process_adv_report(hdev, legacy_evt_type, &info->bdaddr,
info->bdaddr_type, NULL, 0,
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 145/197] Bluetooth: qca: Fix BT enable failure again for QCA6390 after warm reboot
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (143 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 144/197] Bluetooth: Add quirk to ignore reserved PHY bits in LE Extended Adv Report Greg Kroah-Hartman
@ 2024-07-09 11:09 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 146/197] can: kvaser_usb: Explicitly initialize family in leafimx driver_info struct Greg Kroah-Hartman
` (65 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:09 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Wren Turkal, Zijun Hu,
Luiz Augusto von Dentz
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zijun Hu <quic_zijuhu@quicinc.com>
commit 88e72239ead9814b886db54fc4ee39ef3c2b8f26 upstream.
Commit 272970be3dab ("Bluetooth: hci_qca: Fix driver shutdown on closed
serdev") will cause below regression issue:
BT can't be enabled after below steps:
cold boot -> enable BT -> disable BT -> warm reboot -> BT enable failure
if property enable-gpios is not configured within DT|ACPI for QCA6390.
The commit is to fix a use-after-free issue within qca_serdev_shutdown()
by adding condition to avoid the serdev is flushed or wrote after closed
but also introduces this regression issue regarding above steps since the
VSC is not sent to reset controller during warm reboot.
Fixed by sending the VSC to reset controller within qca_serdev_shutdown()
once BT was ever enabled, and the use-after-free issue is also fixed by
this change since the serdev is still opened before it is flushed or wrote.
Verified by the reported machine Dell XPS 13 9310 laptop over below two
kernel commits:
commit e00fc2700a3f ("Bluetooth: btusb: Fix triggering coredump
implementation for QCA") of bluetooth-next tree.
commit b23d98d46d28 ("Bluetooth: btusb: Fix triggering coredump
implementation for QCA") of linus mainline tree.
Fixes: 272970be3dab ("Bluetooth: hci_qca: Fix driver shutdown on closed serdev")
Cc: stable@vger.kernel.org
Reported-by: Wren Turkal <wt@penguintechs.org>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218726
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
Tested-by: Wren Turkal <wt@penguintechs.org>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/bluetooth/hci_qca.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -2450,15 +2450,27 @@ static void qca_serdev_shutdown(struct d
struct qca_serdev *qcadev = serdev_device_get_drvdata(serdev);
struct hci_uart *hu = &qcadev->serdev_hu;
struct hci_dev *hdev = hu->hdev;
- struct qca_data *qca = hu->priv;
const u8 ibs_wake_cmd[] = { 0xFD };
const u8 edl_reset_soc_cmd[] = { 0x01, 0x00, 0xFC, 0x01, 0x05 };
if (qcadev->btsoc_type == QCA_QCA6390) {
- if (test_bit(QCA_BT_OFF, &qca->flags) ||
- !test_bit(HCI_RUNNING, &hdev->flags))
+ /* The purpose of sending the VSC is to reset SOC into a initial
+ * state and the state will ensure next hdev->setup() success.
+ * if HCI_QUIRK_NON_PERSISTENT_SETUP is set, it means that
+ * hdev->setup() can do its job regardless of SoC state, so
+ * don't need to send the VSC.
+ * if HCI_SETUP is set, it means that hdev->setup() was never
+ * invoked and the SOC is already in the initial state, so
+ * don't also need to send the VSC.
+ */
+ if (test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks) ||
+ hci_dev_test_flag(hdev, HCI_SETUP))
return;
+ /* The serdev must be in open state when conrol logic arrives
+ * here, so also fix the use-after-free issue caused by that
+ * the serdev is flushed or wrote after it is closed.
+ */
serdev_device_write_flush(serdev);
ret = serdev_device_write_buf(serdev, ibs_wake_cmd,
sizeof(ibs_wake_cmd));
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 146/197] can: kvaser_usb: Explicitly initialize family in leafimx driver_info struct
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (144 preceding siblings ...)
2024-07-09 11:09 ` [PATCH 6.9 145/197] Bluetooth: qca: Fix BT enable failure again for QCA6390 after warm reboot Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 147/197] fsnotify: Do not generate events for O_PATH file descriptors Greg Kroah-Hartman
` (64 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jimmy Assarsson, Marc Kleine-Budde
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jimmy Assarsson <extja@kvaser.com>
commit 19d5b2698c35b2132a355c67b4d429053804f8cc upstream.
Explicitly set the 'family' driver_info struct member for leafimx.
Previously, the correct operation relied on KVASER_LEAF being the first
defined value in enum kvaser_usb_leaf_family.
Fixes: e6c80e601053 ("can: kvaser_usb: kvaser_usb_leaf: fix CAN clock frequency regression")
Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Link: https://lore.kernel.org/all/20240628194529.312968-1-extja@kvaser.com
Cc: stable@vger.kernel.org
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 1 +
1 file changed, 1 insertion(+)
--- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
+++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
@@ -125,6 +125,7 @@ static const struct kvaser_usb_driver_in
static const struct kvaser_usb_driver_info kvaser_usb_driver_info_leafimx = {
.quirks = 0,
+ .family = KVASER_LEAF,
.ops = &kvaser_usb_leaf_dev_ops,
};
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 147/197] fsnotify: Do not generate events for O_PATH file descriptors
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (145 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 146/197] can: kvaser_usb: Explicitly initialize family in leafimx driver_info struct Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 148/197] Revert "mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again" Greg Kroah-Hartman
` (63 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jan Kara, Amir Goldstein,
Christian Brauner
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <jack@suse.cz>
commit 702eb71fd6501b3566283f8c96d7ccc6ddd662e9 upstream.
Currently we will not generate FS_OPEN events for O_PATH file
descriptors but we will generate FS_CLOSE events for them. This is
asymmetry is confusing. Arguably no fsnotify events should be generated
for O_PATH file descriptors as they cannot be used to access or modify
file content, they are just convenient handles to file objects like
paths. So fix the asymmetry by stopping to generate FS_CLOSE for O_PATH
file descriptors.
Cc: <stable@vger.kernel.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20240617162303.1596-1-jack@suse.cz
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/linux/fsnotify.h | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
--- a/include/linux/fsnotify.h
+++ b/include/linux/fsnotify.h
@@ -99,7 +99,13 @@ static inline int fsnotify_file(struct f
{
const struct path *path;
- if (file->f_mode & FMODE_NONOTIFY)
+ /*
+ * FMODE_NONOTIFY are fds generated by fanotify itself which should not
+ * generate new events. We also don't want to generate events for
+ * FMODE_PATH fds (involves open & close events) as they are just
+ * handle creation / destruction events and not "real" file events.
+ */
+ if (file->f_mode & (FMODE_NONOTIFY | FMODE_PATH))
return 0;
path = &file->f_path;
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 148/197] Revert "mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again"
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (146 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 147/197] fsnotify: Do not generate events for O_PATH file descriptors Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 149/197] drm/xe: fix error handling in xe_migrate_update_pgtables Greg Kroah-Hartman
` (62 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jan Kara, Zach OKeefe, Andrew Morton
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <jack@suse.cz>
commit 30139c702048f1097342a31302cbd3d478f50c63 upstream.
Patch series "mm: Avoid possible overflows in dirty throttling".
Dirty throttling logic assumes dirty limits in page units fit into
32-bits. This patch series makes sure this is true (see patch 2/2 for
more details).
This patch (of 2):
This reverts commit 9319b647902cbd5cc884ac08a8a6d54ce111fc78.
The commit is broken in several ways. Firstly, the removed (u64) cast
from the multiplication will introduce a multiplication overflow on 32-bit
archs if wb_thresh * bg_thresh >= 1<<32 (which is actually common - the
default settings with 4GB of RAM will trigger this). Secondly, the
div64_u64() is unnecessarily expensive on 32-bit archs. We have
div64_ul() in case we want to be safe & cheap. Thirdly, if dirty
thresholds are larger than 1<<32 pages, then dirty balancing is going to
blow up in many other spectacular ways anyway so trying to fix one
possible overflow is just moot.
Link: https://lkml.kernel.org/r/20240621144017.30993-1-jack@suse.cz
Link: https://lkml.kernel.org/r/20240621144246.11148-1-jack@suse.cz
Fixes: 9319b647902c ("mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again")
Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-By: Zach O'Keefe <zokeefe@google.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
mm/page-writeback.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -1660,7 +1660,7 @@ static inline void wb_dirty_limits(struc
*/
dtc->wb_thresh = __wb_calc_thresh(dtc);
dtc->wb_bg_thresh = dtc->thresh ?
- div64_u64(dtc->wb_thresh * dtc->bg_thresh, dtc->thresh) : 0;
+ div_u64((u64)dtc->wb_thresh * dtc->bg_thresh, dtc->thresh) : 0;
/*
* In order to avoid the stacked BDI deadlock we need
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 149/197] drm/xe: fix error handling in xe_migrate_update_pgtables
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (147 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 148/197] Revert "mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again" Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 150/197] drm/ttm: Always take the bo delayed cleanup path for imported bos Greg Kroah-Hartman
` (61 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Matthew Auld, Thomas Hellström,
Matthew Brost
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthew Auld <matthew.auld@intel.com>
commit fc932f51926698488f874ddf7d8f18483ca10271 upstream.
Don't call drm_suballoc_free with sa_bo pointing to PTR_ERR.
References: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2120
Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: <stable@vger.kernel.org> # v6.8+
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240620102025.127699-2-matthew.auld@intel.com
(cherry picked from commit ce6b63336f79ec5f3996de65f452330e395f99ae)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/xe/xe_migrate.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -1336,7 +1336,7 @@ xe_migrate_update_pgtables(struct xe_mig
GFP_KERNEL, true, 0);
if (IS_ERR(sa_bo)) {
err = PTR_ERR(sa_bo);
- goto err;
+ goto err_bb;
}
ppgtt_ofs = NUM_KERNEL_PDE +
@@ -1387,7 +1387,7 @@ xe_migrate_update_pgtables(struct xe_mig
update_idx);
if (IS_ERR(job)) {
err = PTR_ERR(job);
- goto err_bb;
+ goto err_sa;
}
/* Wait on BO move */
@@ -1436,12 +1436,12 @@ xe_migrate_update_pgtables(struct xe_mig
err_job:
xe_sched_job_put(job);
+err_sa:
+ drm_suballoc_free(sa_bo, NULL);
err_bb:
if (!q)
mutex_unlock(&m->job_mutex);
xe_bb_free(bb, NULL);
-err:
- drm_suballoc_free(sa_bo, NULL);
return ERR_PTR(err);
}
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 150/197] drm/ttm: Always take the bo delayed cleanup path for imported bos
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (148 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 149/197] drm/xe: fix error handling in xe_migrate_update_pgtables Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 151/197] drm/nouveau: fix null pointer dereference in nouveau_connector_get_modes Greg Kroah-Hartman
` (60 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christian König, Daniel Vetter,
dri-devel, intel-xe, Thomas Hellström, Matthew Brost,
Daniel Vetter
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Hellström <thomas.hellstrom@linux.intel.com>
commit d99fbd9aab624fc030934e21655389ab1765dc94 upstream.
Bos can be put with multiple unrelated dma-resv locks held. But
imported bos attempt to grab the bo dma-resv during dma-buf detach
that typically happens during cleanup. That leads to lockde splats
similar to the below and a potential ABBA deadlock.
Fix this by always taking the delayed workqueue cleanup path for
imported bos.
Requesting stable fixes from when the Xe driver was introduced,
since its usage of drm_exec and wide vm dma_resvs appear to be
the first reliable trigger of this.
[22982.116427] ============================================
[22982.116428] WARNING: possible recursive locking detected
[22982.116429] 6.10.0-rc2+ #10 Tainted: G U W
[22982.116430] --------------------------------------------
[22982.116430] glxgears:sh0/5785 is trying to acquire lock:
[22982.116431] ffff8c2bafa539a8 (reservation_ww_class_mutex){+.+.}-{3:3}, at: dma_buf_detach+0x3b/0xf0
[22982.116438]
but task is already holding lock:
[22982.116438] ffff8c2d9aba6da8 (reservation_ww_class_mutex){+.+.}-{3:3}, at: drm_exec_lock_obj+0x49/0x2b0 [drm_exec]
[22982.116442]
other info that might help us debug this:
[22982.116442] Possible unsafe locking scenario:
[22982.116443] CPU0
[22982.116444] ----
[22982.116444] lock(reservation_ww_class_mutex);
[22982.116445] lock(reservation_ww_class_mutex);
[22982.116447]
*** DEADLOCK ***
[22982.116447] May be due to missing lock nesting notation
[22982.116448] 5 locks held by glxgears:sh0/5785:
[22982.116449] #0: ffff8c2d9aba58c8 (&xef->vm.lock){+.+.}-{3:3}, at: xe_file_close+0xde/0x1c0 [xe]
[22982.116507] #1: ffff8c2e28cc8480 (&vm->lock){++++}-{3:3}, at: xe_vm_close_and_put+0x161/0x9b0 [xe]
[22982.116578] #2: ffff8c2e31982970 (&val->lock){.+.+}-{3:3}, at: xe_validation_ctx_init+0x6d/0x70 [xe]
[22982.116647] #3: ffffacdc469478a8 (reservation_ww_class_acquire){+.+.}-{0:0}, at: xe_vma_destroy_unlocked+0x7f/0xe0 [xe]
[22982.116716] #4: ffff8c2d9aba6da8 (reservation_ww_class_mutex){+.+.}-{3:3}, at: drm_exec_lock_obj+0x49/0x2b0 [drm_exec]
[22982.116719]
stack backtrace:
[22982.116720] CPU: 8 PID: 5785 Comm: glxgears:sh0 Tainted: G U W 6.10.0-rc2+ #10
[22982.116721] Hardware name: ASUS System Product Name/PRIME B560M-A AC, BIOS 2001 02/01/2023
[22982.116723] Call Trace:
[22982.116724] <TASK>
[22982.116725] dump_stack_lvl+0x77/0xb0
[22982.116727] __lock_acquire+0x1232/0x2160
[22982.116730] lock_acquire+0xcb/0x2d0
[22982.116732] ? dma_buf_detach+0x3b/0xf0
[22982.116734] ? __lock_acquire+0x417/0x2160
[22982.116736] __ww_mutex_lock.constprop.0+0xd0/0x13b0
[22982.116738] ? dma_buf_detach+0x3b/0xf0
[22982.116741] ? dma_buf_detach+0x3b/0xf0
[22982.116743] ? ww_mutex_lock+0x2b/0x90
[22982.116745] ww_mutex_lock+0x2b/0x90
[22982.116747] dma_buf_detach+0x3b/0xf0
[22982.116749] drm_prime_gem_destroy+0x2f/0x40 [drm]
[22982.116775] xe_ttm_bo_destroy+0x32/0x220 [xe]
[22982.116818] ? __mutex_unlock_slowpath+0x3a/0x290
[22982.116821] drm_exec_unlock_all+0xa1/0xd0 [drm_exec]
[22982.116823] drm_exec_fini+0x12/0xb0 [drm_exec]
[22982.116824] xe_validation_ctx_fini+0x15/0x40 [xe]
[22982.116892] xe_vma_destroy_unlocked+0xb1/0xe0 [xe]
[22982.116959] xe_vm_close_and_put+0x41a/0x9b0 [xe]
[22982.117025] ? xa_find+0xe3/0x1e0
[22982.117028] xe_file_close+0x10a/0x1c0 [xe]
[22982.117074] drm_file_free+0x22a/0x280 [drm]
[22982.117099] drm_release_noglobal+0x22/0x70 [drm]
[22982.117119] __fput+0xf1/0x2d0
[22982.117122] task_work_run+0x59/0x90
[22982.117125] do_exit+0x330/0xb40
[22982.117127] do_group_exit+0x36/0xa0
[22982.117129] get_signal+0xbd2/0xbe0
[22982.117131] arch_do_signal_or_restart+0x3e/0x240
[22982.117134] syscall_exit_to_user_mode+0x1e7/0x290
[22982.117137] do_syscall_64+0xa1/0x180
[22982.117139] ? lock_acquire+0xcb/0x2d0
[22982.117140] ? __set_task_comm+0x28/0x1e0
[22982.117141] ? find_held_lock+0x2b/0x80
[22982.117144] ? __set_task_comm+0xe1/0x1e0
[22982.117145] ? lock_release+0xca/0x290
[22982.117147] ? __do_sys_prctl+0x245/0xab0
[22982.117149] ? lockdep_hardirqs_on_prepare+0xde/0x190
[22982.117150] ? syscall_exit_to_user_mode+0xb0/0x290
[22982.117152] ? do_syscall_64+0xa1/0x180
[22982.117154] ? __lock_acquire+0x417/0x2160
[22982.117155] ? reacquire_held_locks+0xd1/0x1f0
[22982.117156] ? do_user_addr_fault+0x30c/0x790
[22982.117158] ? lock_acquire+0xcb/0x2d0
[22982.117160] ? find_held_lock+0x2b/0x80
[22982.117162] ? do_user_addr_fault+0x357/0x790
[22982.117163] ? lock_release+0xca/0x290
[22982.117164] ? do_user_addr_fault+0x361/0x790
[22982.117166] ? trace_hardirqs_off+0x4b/0xc0
[22982.117168] ? clear_bhb_loop+0x45/0xa0
[22982.117170] ? clear_bhb_loop+0x45/0xa0
[22982.117172] ? clear_bhb_loop+0x45/0xa0
[22982.117174] entry_SYSCALL_64_after_hwframe+0x76/0x7e
[22982.117176] RIP: 0033:0x7f943d267169
[22982.117192] Code: Unable to access opcode bytes at 0x7f943d26713f.
[22982.117193] RSP: 002b:00007f9430bffc80 EFLAGS: 00000246 ORIG_RAX: 00000000000000ca
[22982.117195] RAX: fffffffffffffe00 RBX: 0000000000000000 RCX: 00007f943d267169
[22982.117196] RDX: 0000000000000000 RSI: 0000000000000189 RDI: 00005622f89579d0
[22982.117197] RBP: 00007f9430bffcb0 R08: 0000000000000000 R09: 00000000ffffffff
[22982.117198] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
[22982.117199] R13: 0000000000000000 R14: 0000000000000000 R15: 00005622f89579d0
[22982.117202] </TASK>
Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
Cc: Christian König <christian.koenig@amd.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org
Cc: <stable@vger.kernel.org> # v6.8+
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Christian König <christian.koenig@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240628153848.4989-1-thomas.hellstrom@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/ttm/ttm_bo.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 6396dece0db1..2427be8bc97f 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -346,6 +346,7 @@ static void ttm_bo_release(struct kref *kref)
if (!dma_resv_test_signaled(bo->base.resv,
DMA_RESV_USAGE_BOOKKEEP) ||
(want_init_on_free() && (bo->ttm != NULL)) ||
+ bo->type == ttm_bo_type_sg ||
!dma_resv_trylock(bo->base.resv)) {
/* The BO is not idle, resurrect it for delayed destroy */
ttm_bo_flush_all_fences(bo);
--
2.45.2
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 151/197] drm/nouveau: fix null pointer dereference in nouveau_connector_get_modes
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (149 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 150/197] drm/ttm: Always take the bo delayed cleanup path for imported bos Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 152/197] drm/amdgpu/atomfirmware: silence UBSAN warning Greg Kroah-Hartman
` (59 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Ma Ke, Lyude Paul
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ma Ke <make24@iscas.ac.cn>
commit 80bec6825b19d95ccdfd3393cf8ec15ff2a749b4 upstream.
In nouveau_connector_get_modes(), the return value of drm_mode_duplicate()
is assigned to mode, which will lead to a possible NULL pointer
dereference on failure of drm_mode_duplicate(). Add a check to avoid npd.
Cc: stable@vger.kernel.org
Fixes: 6ee738610f41 ("drm/nouveau: Add DRM driver for NVIDIA GPUs")
Signed-off-by: Ma Ke <make24@iscas.ac.cn>
Signed-off-by: Lyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240627074204.3023776-1-make24@iscas.ac.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/nouveau/nouveau_connector.c | 3 +++
1 file changed, 3 insertions(+)
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -1001,6 +1001,9 @@ nouveau_connector_get_modes(struct drm_c
struct drm_display_mode *mode;
mode = drm_mode_duplicate(dev, nv_connector->native_mode);
+ if (!mode)
+ return 0;
+
drm_mode_probed_add(connector, mode);
ret = 1;
}
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 152/197] drm/amdgpu/atomfirmware: silence UBSAN warning
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (150 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 151/197] drm/nouveau: fix null pointer dereference in nouveau_connector_get_modes Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 153/197] drm: panel-orientation-quirks: Add quirk for Valve Galileo Greg Kroah-Hartman
` (58 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jeff Layton, Alex Deucher
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <alexander.deucher@amd.com>
commit d0417264437a8fa05f894cabba5a26715b32d78e upstream.
This is a variable sized array.
Link: https://lists.freedesktop.org/archives/amd-gfx/2024-June/110420.html
Tested-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/include/atomfirmware.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/gpu/drm/amd/include/atomfirmware.h
+++ b/drivers/gpu/drm/amd/include/atomfirmware.h
@@ -734,7 +734,7 @@ struct atom_gpio_pin_lut_v2_1
{
struct atom_common_table_header table_header;
/*the real number of this included in the structure is calcualted by using the (whole structure size - the header size)/size of atom_gpio_pin_lut */
- struct atom_gpio_pin_assignment gpio_pin[8];
+ struct atom_gpio_pin_assignment gpio_pin[];
};
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 153/197] drm: panel-orientation-quirks: Add quirk for Valve Galileo
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (151 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 152/197] drm/amdgpu/atomfirmware: silence UBSAN warning Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 154/197] clk: qcom: gcc-ipq9574: Add BRANCH_HALT_VOTED flag Greg Kroah-Hartman
` (57 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, John Schoenick, Matthew Schwartz,
Hamza Mahfooz
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Schoenick <johns@valvesoftware.com>
commit 26746ed40bb0e4ebe2b2bd61c04eaaa54e263c14 upstream.
Valve's Steam Deck Galileo revision has a 800x1280 OLED panel
Cc: stable@vger.kernel.org # 6.1+
Signed-off-by: John Schoenick <johns@valvesoftware.com>
Signed-off-by: Matthew Schwartz <mattschwartz@gwu.edu>
Signed-off-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240628205822.348402-2-mattschwartz@gwu.edu
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/drm_panel_orientation_quirks.c | 7 +++++++
1 file changed, 7 insertions(+)
--- a/drivers/gpu/drm/drm_panel_orientation_quirks.c
+++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c
@@ -421,6 +421,13 @@ static const struct dmi_system_id orient
DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "1"),
},
.driver_data = (void *)&lcd800x1280_rightside_up,
+ }, { /* Valve Steam Deck */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Valve"),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Galileo"),
+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "1"),
+ },
+ .driver_data = (void *)&lcd800x1280_rightside_up,
}, { /* VIOS LTH17 */
.matches = {
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VIOS"),
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 154/197] clk: qcom: gcc-ipq9574: Add BRANCH_HALT_VOTED flag
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (152 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 153/197] drm: panel-orientation-quirks: Add quirk for Valve Galileo Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 155/197] clk: sunxi-ng: common: Dont call hw_to_ccu_common on hw without common Greg Kroah-Hartman
` (56 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Md Sadre Alam, Bjorn Andersson
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Md Sadre Alam <quic_mdalam@quicinc.com>
commit 72ceafb587a56e26c905472418c7dc2033c294d3 upstream.
The crypto_ahb and crypto_axi clks are hardware voteable.
This means that the halt bit isn't reliable because some
other voter in the system, e.g. TrustZone, could be keeping
the clk enabled when the kernel turns it off from clk_disable().
Make these clks use voting mode by changing the halt check to
BRANCH_HALT_VOTED and toggle the voting bit in the voting register
instead of directly controlling the branch by writing to the branch
register. This fixes stuck clk warnings seen on ipq9574 and saves
power by actually turning the clk off.
Also changes the CRYPTO_AHB_CLK_ENA & CRYPTO_AXI_CLK_ENA
offset to 0xb004 from 0x16014.
Cc: stable@vger.kernel.org
Fixes: f6b2bd9cb29a ("clk: qcom: gcc-ipq9574: Enable crypto clocks")
Signed-off-by: Md Sadre Alam <quic_mdalam@quicinc.com>
Link: https://lore.kernel.org/r/20240509105405.1262369-1-quic_mdalam@quicinc.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/clk/qcom/gcc-ipq9574.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
--- a/drivers/clk/qcom/gcc-ipq9574.c
+++ b/drivers/clk/qcom/gcc-ipq9574.c
@@ -2140,9 +2140,10 @@ static struct clk_rcg2 pcnoc_bfdcd_clk_s
static struct clk_branch gcc_crypto_axi_clk = {
.halt_reg = 0x16010,
+ .halt_check = BRANCH_HALT_VOTED,
.clkr = {
- .enable_reg = 0x16010,
- .enable_mask = BIT(0),
+ .enable_reg = 0xb004,
+ .enable_mask = BIT(15),
.hw.init = &(const struct clk_init_data) {
.name = "gcc_crypto_axi_clk",
.parent_hws = (const struct clk_hw *[]) {
@@ -2156,9 +2157,10 @@ static struct clk_branch gcc_crypto_axi_
static struct clk_branch gcc_crypto_ahb_clk = {
.halt_reg = 0x16014,
+ .halt_check = BRANCH_HALT_VOTED,
.clkr = {
- .enable_reg = 0x16014,
- .enable_mask = BIT(0),
+ .enable_reg = 0xb004,
+ .enable_mask = BIT(16),
.hw.init = &(const struct clk_init_data) {
.name = "gcc_crypto_ahb_clk",
.parent_hws = (const struct clk_hw *[]) {
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 155/197] clk: sunxi-ng: common: Dont call hw_to_ccu_common on hw without common
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (153 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 154/197] clk: qcom: gcc-ipq9574: Add BRANCH_HALT_VOTED flag Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 156/197] powerpc/pseries: Fix scv instruction crash with kexec Greg Kroah-Hartman
` (55 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Robert J. Pafford, Frank Oltmanns,
Chen-Yu Tsai
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Frank Oltmanns <frank@oltmanns.dev>
commit ea977d742507e534d9fe4f4d74256f6b7f589338 upstream.
In order to set the rate range of a hw sunxi_ccu_probe calls
hw_to_ccu_common() assuming all entries in desc->ccu_clks are contained
in a ccu_common struct. This assumption is incorrect and, in
consequence, causes invalid pointer de-references.
Remove the faulty call. Instead, add one more loop that iterates over
the ccu_clks and sets the rate range, if required.
Fixes: b914ec33b391 ("clk: sunxi-ng: common: Support minimum and maximum rate")
Reported-by: Robert J. Pafford <pafford.9@buckeyemail.osu.edu>
Closes: https://lore.kernel.org/lkml/DM6PR01MB58047C810DDD5D0AE397CADFF7C22@DM6PR01MB5804.prod.exchangelabs.com/
Cc: stable@vger.kernel.org
Signed-off-by: Frank Oltmanns <frank@oltmanns.dev>
Tested-by: Robert J. Pafford <pafford.9@buckeyemail.osu.edu>
Link: https://lore.kernel.org/r/20240623-sunxi-ng_fix_common_probe-v1-1-7c97e32824a1@oltmanns.dev
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/clk/sunxi-ng/ccu_common.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
--- a/drivers/clk/sunxi-ng/ccu_common.c
+++ b/drivers/clk/sunxi-ng/ccu_common.c
@@ -132,7 +132,6 @@ static int sunxi_ccu_probe(struct sunxi_
for (i = 0; i < desc->hw_clks->num ; i++) {
struct clk_hw *hw = desc->hw_clks->hws[i];
- struct ccu_common *common = hw_to_ccu_common(hw);
const char *name;
if (!hw)
@@ -147,14 +146,21 @@ static int sunxi_ccu_probe(struct sunxi_
pr_err("Couldn't register clock %d - %s\n", i, name);
goto err_clk_unreg;
}
+ }
+
+ for (i = 0; i < desc->num_ccu_clks; i++) {
+ struct ccu_common *cclk = desc->ccu_clks[i];
+
+ if (!cclk)
+ continue;
- if (common->max_rate)
- clk_hw_set_rate_range(hw, common->min_rate,
- common->max_rate);
+ if (cclk->max_rate)
+ clk_hw_set_rate_range(&cclk->hw, cclk->min_rate,
+ cclk->max_rate);
else
- WARN(common->min_rate,
+ WARN(cclk->min_rate,
"No max_rate, ignoring min_rate of clock %d - %s\n",
- i, name);
+ i, clk_hw_get_name(&cclk->hw));
}
ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 156/197] powerpc/pseries: Fix scv instruction crash with kexec
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (154 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 155/197] clk: sunxi-ng: common: Dont call hw_to_ccu_common on hw without common Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 157/197] powerpc/64s: Fix unnecessary copy to 0 when kernel is booted at address 0 Greg Kroah-Hartman
` (54 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sourabh Jain, Nicholas Piggin,
Gautam Menghani, Michael Ellerman
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Piggin <npiggin@gmail.com>
commit 21a741eb75f80397e5f7d3739e24d7d75e619011 upstream.
kexec on pseries disables AIL (reloc_on_exc), required for scv
instruction support, before other CPUs have been shut down. This means
they can execute scv instructions after AIL is disabled, which causes an
interrupt at an unexpected entry location that crashes the kernel.
Change the kexec sequence to disable AIL after other CPUs have been
brought down.
As a refresher, the real-mode scv interrupt vector is 0x17000, and the
fixed-location head code probably couldn't easily deal with implementing
such high addresses so it was just decided not to support that interrupt
at all.
Fixes: 7fa95f9adaee ("powerpc/64s: system call support for scv/rfscv instructions")
Cc: stable@vger.kernel.org # v5.9+
Reported-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Closes: https://lore.kernel.org/3b4b2943-49ad-4619-b195-bc416f1d1409@linux.ibm.com
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Tested-by: Gautam Menghani <gautam@linux.ibm.com>
Tested-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Link: https://msgid.link/20240625134047.298759-1-npiggin@gmail.com
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/powerpc/kexec/core_64.c | 11 +++++++++++
arch/powerpc/platforms/pseries/kexec.c | 8 --------
arch/powerpc/platforms/pseries/pseries.h | 1 -
arch/powerpc/platforms/pseries/setup.c | 1 -
4 files changed, 11 insertions(+), 10 deletions(-)
--- a/arch/powerpc/kexec/core_64.c
+++ b/arch/powerpc/kexec/core_64.c
@@ -26,6 +26,7 @@
#include <asm/paca.h>
#include <asm/mmu.h>
#include <asm/sections.h> /* _end */
+#include <asm/setup.h>
#include <asm/smp.h>
#include <asm/hw_breakpoint.h>
#include <asm/svm.h>
@@ -315,6 +316,16 @@ void default_machine_kexec(struct kimage
if (!kdump_in_progress())
kexec_prepare_cpus();
+#ifdef CONFIG_PPC_PSERIES
+ /*
+ * This must be done after other CPUs have shut down, otherwise they
+ * could execute the 'scv' instruction, which is not supported with
+ * reloc disabled (see configure_exceptions()).
+ */
+ if (firmware_has_feature(FW_FEATURE_SET_MODE))
+ pseries_disable_reloc_on_exc();
+#endif
+
printk("kexec: Starting switchover sequence.\n");
/* switch to a staticly allocated stack. Based on irq stack code.
--- a/arch/powerpc/platforms/pseries/kexec.c
+++ b/arch/powerpc/platforms/pseries/kexec.c
@@ -61,11 +61,3 @@ void pseries_kexec_cpu_down(int crash_sh
} else
xics_kexec_teardown_cpu(secondary);
}
-
-void pseries_machine_kexec(struct kimage *image)
-{
- if (firmware_has_feature(FW_FEATURE_SET_MODE))
- pseries_disable_reloc_on_exc();
-
- default_machine_kexec(image);
-}
--- a/arch/powerpc/platforms/pseries/pseries.h
+++ b/arch/powerpc/platforms/pseries/pseries.h
@@ -38,7 +38,6 @@ static inline void smp_init_pseries(void
#endif
extern void pseries_kexec_cpu_down(int crash_shutdown, int secondary);
-void pseries_machine_kexec(struct kimage *image);
extern void pSeries_final_fixup(void);
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -1159,7 +1159,6 @@ define_machine(pseries) {
.machine_check_exception = pSeries_machine_check_exception,
.machine_check_log_err = pSeries_machine_check_log_err,
#ifdef CONFIG_KEXEC_CORE
- .machine_kexec = pseries_machine_kexec,
.kexec_cpu_down = pseries_kexec_cpu_down,
#endif
#ifdef CONFIG_MEMORY_HOTPLUG
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 157/197] powerpc/64s: Fix unnecessary copy to 0 when kernel is booted at address 0
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (155 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 156/197] powerpc/pseries: Fix scv instruction crash with kexec Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 158/197] firmware: sysfb: Fix reference count of sysfb parent device Greg Kroah-Hartman
` (53 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jinglin Wen, Michael Ellerman
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinglin Wen <jinglin.wen@shingroup.cn>
commit 13fc6c175924eaa953cf597ce28ffa4edc4554a6 upstream.
According to the code logic, when the kernel is loaded at address 0, no
copying operation should be performed, but it is currently being done.
This patch fixes the issue where the kernel code was incorrectly
duplicated to address 0 when booting from address 0.
Fixes: b270bebd34e3 ("powerpc/64s: Run at the kernel virtual address earlier in boot")
Cc: stable@vger.kernel.org # v6.4+
Signed-off-by: Jinglin Wen <jinglin.wen@shingroup.cn>
Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240620024150.14857-1-jinglin.wen@shingroup.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/powerpc/kernel/head_64.S | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/arch/powerpc/kernel/head_64.S
+++ b/arch/powerpc/kernel/head_64.S
@@ -647,8 +647,9 @@ __after_prom_start:
* Note: This process overwrites the OF exception vectors.
*/
LOAD_REG_IMMEDIATE(r3, PAGE_OFFSET)
- mr. r4,r26 /* In some cases the loader may */
- beq 9f /* have already put us at zero */
+ mr r4,r26 /* Load the virtual source address into r4 */
+ cmpld r3,r4 /* Check if source == dest */
+ beq 9f /* If so skip the copy */
li r6,0x100 /* Start offset, the first 0x100 */
/* bytes were copied earlier. */
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 158/197] firmware: sysfb: Fix reference count of sysfb parent device
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (156 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 157/197] powerpc/64s: Fix unnecessary copy to 0 when kernel is booted at address 0 Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 159/197] filelock: Remove locks reliably when fcntl/close race is detected Greg Kroah-Hartman
` (52 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Thomas Zimmermann,
Javier Martinez Canillas, Helge Deller, Jani Nikula,
Dan Carpenter, Arnd Bergmann, Sui Jingfeng
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Zimmermann <tzimmermann@suse.de>
commit 3285d8f0a2ede604c368155c9c0921e16d41f70a upstream.
Retrieving the system framebuffer's parent device in sysfb_init()
increments the parent device's reference count. Hence release the
reference before leaving the init function.
Adding the sysfb platform device acquires and additional reference
for the parent. This keeps the parent device around while the system
framebuffer is in use.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Fixes: 9eac534db001 ("firmware/sysfb: Set firmware-framebuffer parent device")
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Javier Martinez Canillas <javierm@redhat.com>
Cc: Helge Deller <deller@gmx.de>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Dan Carpenter <dan.carpenter@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Sui Jingfeng <suijingfeng@loongson.cn>
Cc: <stable@vger.kernel.org> # v6.9+
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240625081818.15696-1-tzimmermann@suse.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/firmware/sysfb.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
--- a/drivers/firmware/sysfb.c
+++ b/drivers/firmware/sysfb.c
@@ -101,8 +101,10 @@ static __init struct device *sysfb_paren
if (IS_ERR(pdev)) {
return ERR_CAST(pdev);
} else if (pdev) {
- if (!sysfb_pci_dev_is_enabled(pdev))
+ if (!sysfb_pci_dev_is_enabled(pdev)) {
+ pci_dev_put(pdev);
return ERR_PTR(-ENODEV);
+ }
return &pdev->dev;
}
@@ -137,7 +139,7 @@ static __init int sysfb_init(void)
if (compatible) {
pd = sysfb_create_simplefb(si, &mode, parent);
if (!IS_ERR(pd))
- goto unlock_mutex;
+ goto put_device;
}
/* if the FB is incompatible, create a legacy framebuffer device */
@@ -155,7 +157,7 @@ static __init int sysfb_init(void)
pd = platform_device_alloc(name, 0);
if (!pd) {
ret = -ENOMEM;
- goto unlock_mutex;
+ goto put_device;
}
pd->dev.parent = parent;
@@ -170,9 +172,11 @@ static __init int sysfb_init(void)
if (ret)
goto err;
- goto unlock_mutex;
+ goto put_device;
err:
platform_device_put(pd);
+put_device:
+ put_device(parent);
unlock_mutex:
mutex_unlock(&disable_lock);
return ret;
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 159/197] filelock: Remove locks reliably when fcntl/close race is detected
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (157 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 158/197] firmware: sysfb: Fix reference count of sysfb parent device Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 160/197] mtd: rawnand: Ensure ECC configuration is propagated to upper layers Greg Kroah-Hartman
` (51 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, stable, Jann Horn, Jeff Layton,
Christian Brauner
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jann Horn <jannh@google.com>
commit 3cad1bc010416c6dd780643476bc59ed742436b9 upstream.
When fcntl_setlk() races with close(), it removes the created lock with
do_lock_file_wait().
However, LSMs can allow the first do_lock_file_wait() that created the lock
while denying the second do_lock_file_wait() that tries to remove the lock.
In theory (but AFAIK not in practice), posix_lock_file() could also fail to
remove a lock due to GFP_KERNEL allocation failure (when splitting a range
in the middle).
After the bug has been triggered, use-after-free reads will occur in
lock_get_status() when userspace reads /proc/locks. This can likely be used
to read arbitrary kernel memory, but can't corrupt kernel memory.
This only affects systems with SELinux / Smack / AppArmor / BPF-LSM in
enforcing mode and only works from some security contexts.
Fix it by calling locks_remove_posix() instead, which is designed to
reliably get rid of POSIX locks associated with the given file and
files_struct and is also used by filp_flush().
Fixes: c293621bbf67 ("[PATCH] stale POSIX lock handling")
Cc: stable@kernel.org
Link: https://bugs.chromium.org/p/project-zero/issues/detail?id=2563
Signed-off-by: Jann Horn <jannh@google.com>
Link: https://lore.kernel.org/r/20240702-fs-lock-recover-2-v1-1-edd456f63789@google.com
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/locks.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -2448,8 +2448,9 @@ int fcntl_setlk(unsigned int fd, struct
error = do_lock_file_wait(filp, cmd, file_lock);
/*
- * Attempt to detect a close/fcntl race and recover by releasing the
- * lock that was just acquired. There is no need to do that when we're
+ * Detect close/fcntl races and recover by zapping all POSIX locks
+ * associated with this file and our files_struct, just like on
+ * filp_flush(). There is no need to do that when we're
* unlocking though, or for OFD locks.
*/
if (!error && file_lock->c.flc_type != F_UNLCK &&
@@ -2464,9 +2465,7 @@ int fcntl_setlk(unsigned int fd, struct
f = files_lookup_fd_locked(files, fd);
spin_unlock(&files->file_lock);
if (f != filp) {
- file_lock->c.flc_type = F_UNLCK;
- error = do_lock_file_wait(filp, cmd, file_lock);
- WARN_ON_ONCE(error);
+ locks_remove_posix(filp, files);
error = -EBADF;
}
}
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 160/197] mtd: rawnand: Ensure ECC configuration is propagated to upper layers
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (158 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 159/197] filelock: Remove locks reliably when fcntl/close race is detected Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 161/197] mtd: rawnand: Fix the nand_read_data_op() early check Greg Kroah-Hartman
` (50 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Sascha Hauer, Miquel Raynal
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miquel Raynal <miquel.raynal@bootlin.com>
commit 3a1b777eb9fb75d09c45ae5dd1d007eddcbebf1f upstream.
Until recently the "upper layer" was MTD. But following incremental
reworks to bring spi-nand support and more recently generic ECC support,
there is now an intermediate "generic NAND" layer that also needs to get
access to some values. When using "converted" ECC engines, like the
software ones, these values are already propagated correctly. But
otherwise when using good old raw NAND controller drivers, we need to
manually set these values ourselves at the end of the "scan" operation,
once these values have been negotiated.
Without this propagation, later (generic) checks like the one warning
users that the ECC strength is not high enough might simply no longer
work.
Fixes: 8c126720fe10 ("mtd: rawnand: Use the ECC framework nand_ecc_is_strong_enough() helper")
Cc: stable@vger.kernel.org
Reported-by: Sascha Hauer <s.hauer@pengutronix.de>
Closes: https://lore.kernel.org/all/Zhe2JtvvN1M4Ompw@pengutronix.de/
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
Link: https://lore.kernel.org/linux-mtd/20240507085842.108844-1-miquel.raynal@bootlin.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mtd/nand/raw/nand_base.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -6301,6 +6301,7 @@ static const struct nand_ops rawnand_ops
static int nand_scan_tail(struct nand_chip *chip)
{
struct mtd_info *mtd = nand_to_mtd(chip);
+ struct nand_device *base = &chip->base;
struct nand_ecc_ctrl *ecc = &chip->ecc;
int ret, i;
@@ -6445,9 +6446,13 @@ static int nand_scan_tail(struct nand_ch
if (!ecc->write_oob_raw)
ecc->write_oob_raw = ecc->write_oob;
- /* propagate ecc info to mtd_info */
+ /* Propagate ECC info to the generic NAND and MTD layers */
mtd->ecc_strength = ecc->strength;
+ if (!base->ecc.ctx.conf.strength)
+ base->ecc.ctx.conf.strength = ecc->strength;
mtd->ecc_step_size = ecc->size;
+ if (!base->ecc.ctx.conf.step_size)
+ base->ecc.ctx.conf.step_size = ecc->size;
/*
* Set the number of read / write steps for one page depending on ECC
@@ -6455,6 +6460,8 @@ static int nand_scan_tail(struct nand_ch
*/
if (!ecc->steps)
ecc->steps = mtd->writesize / ecc->size;
+ if (!base->ecc.ctx.nsteps)
+ base->ecc.ctx.nsteps = ecc->steps;
if (ecc->steps * ecc->size != mtd->writesize) {
WARN(1, "Invalid ECC parameters\n");
ret = -EINVAL;
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 161/197] mtd: rawnand: Fix the nand_read_data_op() early check
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (159 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 160/197] mtd: rawnand: Ensure ECC configuration is propagated to upper layers Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 162/197] mtd: rawnand: Bypass a couple of sanity checks during NAND identification Greg Kroah-Hartman
` (49 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alexander Dahl, Steven Seeger,
Miquel Raynal
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miquel Raynal <miquel.raynal@bootlin.com>
commit 5da39530d19946f6241de84d1db69da2f5c61da7 upstream.
The nand_read_data_op() operation, which only consists in DATA_IN
cycles, is sadly not supported by all controllers despite being very
basic. The core, for some time, supposed all drivers would support
it. An improvement to this situation for supporting more constrained
controller added a check to verify if the operation was supported before
attempting it by running the function with the check_only boolean set
first, and then possibly falling back to another (possibly slightly less
optimized) alternative.
An even newer addition moved that check very early and probe time, in
order to perform the check only once. The content of the operation was
not so important, as long as the controller driver would tell whether
such operation on the NAND bus would be possible or not. In practice, no
buffer was provided (no fake buffer or whatever) as it is anyway not
relevant for the "check_only" condition. Unfortunately, early in the
function, there is an if statement verifying that the input parameters
are right for normal use, making the early check always unsuccessful.
Fixes: 9f820fc0651c ("mtd: rawnand: Check the data only read pattern only once")
Cc: stable@vger.kernel.org
Reported-by: Alexander Dahl <ada@thorsis.com>
Closes: https://lore.kernel.org/linux-mtd/20240306-shaky-bunion-d28b65ea97d7@thorsis.com/
Reported-by: Steven Seeger <steven.seeger@flightsystems.net>
Closes: https://lore.kernel.org/linux-mtd/DM6PR05MB4506554457CF95191A670BDEF7062@DM6PR05MB4506.namprd05.prod.outlook.com/
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Alexander Dahl <ada@thorsis.com>
Link: https://lore.kernel.org/linux-mtd/20240516131320.579822-2-miquel.raynal@bootlin.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mtd/nand/raw/nand_base.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -2173,7 +2173,7 @@ EXPORT_SYMBOL_GPL(nand_reset_op);
int nand_read_data_op(struct nand_chip *chip, void *buf, unsigned int len,
bool force_8bit, bool check_only)
{
- if (!len || !buf)
+ if (!len || (!check_only && !buf))
return -EINVAL;
if (nand_has_exec_op(chip)) {
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 162/197] mtd: rawnand: Bypass a couple of sanity checks during NAND identification
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (160 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 161/197] mtd: rawnand: Fix the nand_read_data_op() early check Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 163/197] mtd: rawnand: rockchip: ensure NVDDR timings are rejected Greg Kroah-Hartman
` (48 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alexander Dahl, Steven Seeger,
Miquel Raynal, Sascha Hauer
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miquel Raynal <miquel.raynal@bootlin.com>
commit 8754d9835683e8fab9a8305acdb38a3aeb9d20bd upstream.
Early during NAND identification, mtd_info fields have not yet been
initialized (namely, writesize and oobsize) and thus cannot be used for
sanity checks yet. Of course if there is a misuse of
nand_change_read_column_op() so early we won't be warned, but there is
anyway no actual check to perform at this stage as we do not yet know
the NAND geometry.
So, if the fields are empty, especially mtd->writesize which is *always*
set quite rapidly after identification, let's skip the sanity checks.
nand_change_read_column_op() is subject to be used early for ONFI/JEDEC
identification in the very unlikely case of:
- bitflips appearing in the parameter page,
- the controller driver not supporting simple DATA_IN cycles.
As nand_change_read_column_op() uses nand_fill_column_cycles() the logic
explaind above also applies in this secondary helper.
Fixes: c27842e7e11f ("mtd: rawnand: onfi: Adapt the parameter page read to constraint controllers")
Fixes: daca31765e8b ("mtd: rawnand: jedec: Adapt the parameter page read to constraint controllers")
Cc: stable@vger.kernel.org
Reported-by: Alexander Dahl <ada@thorsis.com>
Closes: https://lore.kernel.org/linux-mtd/20240306-shaky-bunion-d28b65ea97d7@thorsis.com/
Reported-by: Steven Seeger <steven.seeger@flightsystems.net>
Closes: https://lore.kernel.org/linux-mtd/DM6PR05MB4506554457CF95191A670BDEF7062@DM6PR05MB4506.namprd05.prod.outlook.com/
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
Link: https://lore.kernel.org/linux-mtd/20240516131320.579822-3-miquel.raynal@bootlin.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mtd/nand/raw/nand_base.c | 57 +++++++++++++++++++++------------------
1 file changed, 32 insertions(+), 25 deletions(-)
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -1093,28 +1093,32 @@ static int nand_fill_column_cycles(struc
unsigned int offset_in_page)
{
struct mtd_info *mtd = nand_to_mtd(chip);
+ bool ident_stage = !mtd->writesize;
- /* Make sure the offset is less than the actual page size. */
- if (offset_in_page > mtd->writesize + mtd->oobsize)
- return -EINVAL;
-
- /*
- * On small page NANDs, there's a dedicated command to access the OOB
- * area, and the column address is relative to the start of the OOB
- * area, not the start of the page. Asjust the address accordingly.
- */
- if (mtd->writesize <= 512 && offset_in_page >= mtd->writesize)
- offset_in_page -= mtd->writesize;
-
- /*
- * The offset in page is expressed in bytes, if the NAND bus is 16-bit
- * wide, then it must be divided by 2.
- */
- if (chip->options & NAND_BUSWIDTH_16) {
- if (WARN_ON(offset_in_page % 2))
+ /* Bypass all checks during NAND identification */
+ if (likely(!ident_stage)) {
+ /* Make sure the offset is less than the actual page size. */
+ if (offset_in_page > mtd->writesize + mtd->oobsize)
return -EINVAL;
- offset_in_page /= 2;
+ /*
+ * On small page NANDs, there's a dedicated command to access the OOB
+ * area, and the column address is relative to the start of the OOB
+ * area, not the start of the page. Asjust the address accordingly.
+ */
+ if (mtd->writesize <= 512 && offset_in_page >= mtd->writesize)
+ offset_in_page -= mtd->writesize;
+
+ /*
+ * The offset in page is expressed in bytes, if the NAND bus is 16-bit
+ * wide, then it must be divided by 2.
+ */
+ if (chip->options & NAND_BUSWIDTH_16) {
+ if (WARN_ON(offset_in_page % 2))
+ return -EINVAL;
+
+ offset_in_page /= 2;
+ }
}
addrs[0] = offset_in_page;
@@ -1123,7 +1127,7 @@ static int nand_fill_column_cycles(struc
* Small page NANDs use 1 cycle for the columns, while large page NANDs
* need 2
*/
- if (mtd->writesize <= 512)
+ if (!ident_stage && mtd->writesize <= 512)
return 1;
addrs[1] = offset_in_page >> 8;
@@ -1436,16 +1440,19 @@ int nand_change_read_column_op(struct na
unsigned int len, bool force_8bit)
{
struct mtd_info *mtd = nand_to_mtd(chip);
+ bool ident_stage = !mtd->writesize;
if (len && !buf)
return -EINVAL;
- if (offset_in_page + len > mtd->writesize + mtd->oobsize)
- return -EINVAL;
+ if (!ident_stage) {
+ if (offset_in_page + len > mtd->writesize + mtd->oobsize)
+ return -EINVAL;
- /* Small page NANDs do not support column change. */
- if (mtd->writesize <= 512)
- return -ENOTSUPP;
+ /* Small page NANDs do not support column change. */
+ if (mtd->writesize <= 512)
+ return -ENOTSUPP;
+ }
if (nand_has_exec_op(chip)) {
const struct nand_interface_config *conf =
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 163/197] mtd: rawnand: rockchip: ensure NVDDR timings are rejected
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (161 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 162/197] mtd: rawnand: Bypass a couple of sanity checks during NAND identification Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 164/197] fs: dont misleadingly warn during thaw operations Greg Kroah-Hartman
` (47 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Val Packett, Miquel Raynal
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Val Packett <val@packett.cool>
commit b27d8946b5edd9827ee3c2f9ea1dd30022fb1ebe upstream.
.setup_interface first gets called with a "target" value of
NAND_DATA_IFACE_CHECK_ONLY, in which case an error is expected
if the controller driver does not support the timing mode (NVDDR).
Fixes: a9ecc8c814e9 ("mtd: rawnand: Choose the best timings, NV-DDR included")
Signed-off-by: Val Packett <val@packett.cool>
Cc: stable@vger.kernel.org
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20240519031409.26464-1-val@packett.cool
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mtd/nand/raw/rockchip-nand-controller.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/drivers/mtd/nand/raw/rockchip-nand-controller.c
+++ b/drivers/mtd/nand/raw/rockchip-nand-controller.c
@@ -420,13 +420,13 @@ static int rk_nfc_setup_interface(struct
u32 rate, tc2rw, trwpw, trw2c;
u32 temp;
- if (target < 0)
- return 0;
-
timings = nand_get_sdr_timings(conf);
if (IS_ERR(timings))
return -EOPNOTSUPP;
+ if (target < 0)
+ return 0;
+
if (IS_ERR(nfc->nfc_clk))
rate = clk_get_rate(nfc->ahb_clk);
else
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 164/197] fs: dont misleadingly warn during thaw operations
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (162 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 163/197] mtd: rawnand: rockchip: ensure NVDDR timings are rejected Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 165/197] net: stmmac: dwmac-qcom-ethqos: fix error array size Greg Kroah-Hartman
` (46 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Theodore Tso, Darrick J. Wong,
Christian Brauner
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Brauner <brauner@kernel.org>
commit 2ae4db5647d807efb6a87c09efaa6d1db9c905d7 upstream.
The block device may have been frozen before it was claimed by a
filesystem. Concurrently another process might try to mount that
frozen block device and has temporarily claimed the block device for
that purpose causing a concurrent fs_bdev_thaw() to end up here. The
mounter is already about to abort mounting because they still saw an
elevanted bdev->bd_fsfreeze_count so get_bdev_super() will return
NULL in that case.
For example, P1 calls dm_suspend() which calls into bdev_freeze() before
the block device has been claimed by the filesystem. This brings
bdev->bd_fsfreeze_count to 1 and no call into fs_bdev_freeze() is
required.
Now P2 tries to mount that frozen block device. It claims it and checks
bdev->bd_fsfreeze_count. As it's elevated it aborts mounting.
In the meantime P3 called dm_resume(). P3 sees that the block device is
already claimed by a filesystem and calls into fs_bdev_thaw().
P3 takes a passive reference and realizes that the filesystem isn't
ready yet. P3 puts itself to sleep to wait for the filesystem to become
ready.
P2 now puts the last active reference to the filesystem and marks it as
dying. P3 gets woken, sees that the filesystem is dying and
get_bdev_super() fails.
Fixes: 49ef8832fb1a ("bdev: implement freeze and thaw holder operations")
Cc: <stable@vger.kernel.org>
Reported-by: Theodore Ts'o <tytso@mit.edu>
Link: https://lore.kernel.org/r/20240611085210.GA1838544@mit.edu
Link: https://lore.kernel.org/r/20240613-lackmantel-einsehen-90f0d727358d@brauner
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/super.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
--- a/fs/super.c
+++ b/fs/super.c
@@ -1501,8 +1501,17 @@ static int fs_bdev_thaw(struct block_dev
lockdep_assert_held(&bdev->bd_fsfreeze_mutex);
+ /*
+ * The block device may have been frozen before it was claimed by a
+ * filesystem. Concurrently another process might try to mount that
+ * frozen block device and has temporarily claimed the block device for
+ * that purpose causing a concurrent fs_bdev_thaw() to end up here. The
+ * mounter is already about to abort mounting because they still saw an
+ * elevanted bdev->bd_fsfreeze_count so get_bdev_super() will return
+ * NULL in that case.
+ */
sb = get_bdev_super(bdev);
- if (WARN_ON_ONCE(!sb))
+ if (!sb)
return -EINVAL;
if (sb->s_op->thaw_super)
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 165/197] net: stmmac: dwmac-qcom-ethqos: fix error array size
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (163 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 164/197] fs: dont misleadingly warn during thaw operations Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 166/197] bnx2x: Fix multiple UBSAN array-index-out-of-bounds Greg Kroah-Hartman
` (45 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yijie Yang, Bartosz Golaszewski,
Paolo Abeni
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yijie Yang <quic_yijiyang@quicinc.com>
commit b698ab56837bc9e666b7e7e12e9c28fe1d6a763c upstream.
Correct member @num_por with size of right array @emac_v4_0_0_por for
struct ethqos_emac_driver_data @emac_v4_0_0_data.
Cc: stable@vger.kernel.org
Fixes: 8c4d92e82d50 ("net: stmmac: dwmac-qcom-ethqos: add support for emac4 on sa8775p platforms")
Signed-off-by: Yijie Yang <quic_yijiyang@quicinc.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Link: https://patch.msgid.link/20240701014720.2547856-1-quic_yijiyang@quicinc.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
@@ -272,7 +272,7 @@ static const struct ethqos_emac_por emac
static const struct ethqos_emac_driver_data emac_v4_0_0_data = {
.por = emac_v4_0_0_por,
- .num_por = ARRAY_SIZE(emac_v3_0_0_por),
+ .num_por = ARRAY_SIZE(emac_v4_0_0_por),
.rgmii_config_loopback_en = false,
.has_emac_ge_3 = true,
.link_clk_name = "phyaux",
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 166/197] bnx2x: Fix multiple UBSAN array-index-out-of-bounds
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (164 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 165/197] net: stmmac: dwmac-qcom-ethqos: fix error array size Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 167/197] s390/dasd: Fix invalid dereferencing of indirect CCW data pointer Greg Kroah-Hartman
` (44 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Ghadi Elie Rahme, Jakub Kicinski
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ghadi Elie Rahme <ghadi.rahme@canonical.com>
commit 134061163ee5ca4759de5c24ca3bd71608891ba7 upstream.
Fix UBSAN warnings that occur when using a system with 32 physical
cpu cores or more, or when the user defines a number of Ethernet
queues greater than or equal to FP_SB_MAX_E1x using the num_queues
module parameter.
Currently there is a read/write out of bounds that occurs on the array
"struct stats_query_entry query" present inside the "bnx2x_fw_stats_req"
struct in "drivers/net/ethernet/broadcom/bnx2x/bnx2x.h".
Looking at the definition of the "struct stats_query_entry query" array:
struct stats_query_entry query[FP_SB_MAX_E1x+
BNX2X_FIRST_QUEUE_QUERY_IDX];
FP_SB_MAX_E1x is defined as the maximum number of fast path interrupts and
has a value of 16, while BNX2X_FIRST_QUEUE_QUERY_IDX has a value of 3
meaning the array has a total size of 19.
Since accesses to "struct stats_query_entry query" are offset-ted by
BNX2X_FIRST_QUEUE_QUERY_IDX, that means that the total number of Ethernet
queues should not exceed FP_SB_MAX_E1x (16). However one of these queues
is reserved for FCOE and thus the number of Ethernet queues should be set
to [FP_SB_MAX_E1x -1] (15) if FCOE is enabled or [FP_SB_MAX_E1x] (16) if
it is not.
This is also described in a comment in the source code in
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h just above the Macro definition
of FP_SB_MAX_E1x. Below is the part of this explanation that it important
for this patch
/*
* The total number of L2 queues, MSIX vectors and HW contexts (CIDs) is
* control by the number of fast-path status blocks supported by the
* device (HW/FW). Each fast-path status block (FP-SB) aka non-default
* status block represents an independent interrupts context that can
* serve a regular L2 networking queue. However special L2 queues such
* as the FCoE queue do not require a FP-SB and other components like
* the CNIC may consume FP-SB reducing the number of possible L2 queues
*
* If the maximum number of FP-SB available is X then:
* a. If CNIC is supported it consumes 1 FP-SB thus the max number of
* regular L2 queues is Y=X-1
* b. In MF mode the actual number of L2 queues is Y= (X-1/MF_factor)
* c. If the FCoE L2 queue is supported the actual number of L2 queues
* is Y+1
* d. The number of irqs (MSIX vectors) is either Y+1 (one extra for
* slow-path interrupts) or Y+2 if CNIC is supported (one additional
* FP interrupt context for the CNIC).
* e. The number of HW context (CID count) is always X or X+1 if FCoE
* L2 queue is supported. The cid for the FCoE L2 queue is always X.
*/
However this driver also supports NICs that use the E2 controller which can
handle more queues due to having more FP-SB represented by FP_SB_MAX_E2.
Looking at the commits when the E2 support was added, it was originally
using the E1x parameters: commit f2e0899f0f27 ("bnx2x: Add 57712 support").
Back then FP_SB_MAX_E2 was set to 16 the same as E1x. However the driver
was later updated to take full advantage of the E2 instead of having it be
limited to the capabilities of the E1x. But as far as we can tell, the
array "stats_query_entry query" was still limited to using the FP-SB
available to the E1x cards as part of an oversignt when the driver was
updated to take full advantage of the E2, and now with the driver being
aware of the greater queue size supported by E2 NICs, it causes the UBSAN
warnings seen in the stack traces below.
This patch increases the size of the "stats_query_entry query" array by
replacing FP_SB_MAX_E1x with FP_SB_MAX_E2 to be large enough to handle
both types of NICs.
Stack traces:
UBSAN: array-index-out-of-bounds in
drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c:1529:11
index 20 is out of range for type 'stats_query_entry [19]'
CPU: 12 PID: 858 Comm: systemd-network Not tainted 6.9.0-060900rc7-generic
#202405052133
Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 Gen9,
BIOS P89 10/21/2019
Call Trace:
<TASK>
dump_stack_lvl+0x76/0xa0
dump_stack+0x10/0x20
__ubsan_handle_out_of_bounds+0xcb/0x110
bnx2x_prep_fw_stats_req+0x2e1/0x310 [bnx2x]
bnx2x_stats_init+0x156/0x320 [bnx2x]
bnx2x_post_irq_nic_init+0x81/0x1a0 [bnx2x]
bnx2x_nic_load+0x8e8/0x19e0 [bnx2x]
bnx2x_open+0x16b/0x290 [bnx2x]
__dev_open+0x10e/0x1d0
RIP: 0033:0x736223927a0a
Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca
64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00
f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
RSP: 002b:00007ffc0bb2ada8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
RAX: ffffffffffffffda RBX: 0000583df50f9c78 RCX: 0000736223927a0a
RDX: 0000000000000020 RSI: 0000583df50ee510 RDI: 0000000000000003
RBP: 0000583df50d4940 R08: 00007ffc0bb2adb0 R09: 0000000000000080
R10: 0000000000000000 R11: 0000000000000246 R12: 0000583df5103ae0
R13: 000000000000035a R14: 0000583df50f9c30 R15: 0000583ddddddf00
</TASK>
---[ end trace ]---
------------[ cut here ]------------
UBSAN: array-index-out-of-bounds in
drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c:1546:11
index 28 is out of range for type 'stats_query_entry [19]'
CPU: 12 PID: 858 Comm: systemd-network Not tainted 6.9.0-060900rc7-generic
#202405052133
Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 Gen9,
BIOS P89 10/21/2019
Call Trace:
<TASK>
dump_stack_lvl+0x76/0xa0
dump_stack+0x10/0x20
__ubsan_handle_out_of_bounds+0xcb/0x110
bnx2x_prep_fw_stats_req+0x2fd/0x310 [bnx2x]
bnx2x_stats_init+0x156/0x320 [bnx2x]
bnx2x_post_irq_nic_init+0x81/0x1a0 [bnx2x]
bnx2x_nic_load+0x8e8/0x19e0 [bnx2x]
bnx2x_open+0x16b/0x290 [bnx2x]
__dev_open+0x10e/0x1d0
RIP: 0033:0x736223927a0a
Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca
64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00
f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
RSP: 002b:00007ffc0bb2ada8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
RAX: ffffffffffffffda RBX: 0000583df50f9c78 RCX: 0000736223927a0a
RDX: 0000000000000020 RSI: 0000583df50ee510 RDI: 0000000000000003
RBP: 0000583df50d4940 R08: 00007ffc0bb2adb0 R09: 0000000000000080
R10: 0000000000000000 R11: 0000000000000246 R12: 0000583df5103ae0
R13: 000000000000035a R14: 0000583df50f9c30 R15: 0000583ddddddf00
</TASK>
---[ end trace ]---
------------[ cut here ]------------
UBSAN: array-index-out-of-bounds in
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c:1895:8
index 29 is out of range for type 'stats_query_entry [19]'
CPU: 13 PID: 163 Comm: kworker/u96:1 Not tainted 6.9.0-060900rc7-generic
#202405052133
Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 Gen9,
BIOS P89 10/21/2019
Workqueue: bnx2x bnx2x_sp_task [bnx2x]
Call Trace:
<TASK>
dump_stack_lvl+0x76/0xa0
dump_stack+0x10/0x20
__ubsan_handle_out_of_bounds+0xcb/0x110
bnx2x_iov_adjust_stats_req+0x3c4/0x3d0 [bnx2x]
bnx2x_storm_stats_post.part.0+0x4a/0x330 [bnx2x]
? bnx2x_hw_stats_post+0x231/0x250 [bnx2x]
bnx2x_stats_start+0x44/0x70 [bnx2x]
bnx2x_stats_handle+0x149/0x350 [bnx2x]
bnx2x_attn_int_asserted+0x998/0x9b0 [bnx2x]
bnx2x_sp_task+0x491/0x5c0 [bnx2x]
process_one_work+0x18d/0x3f0
</TASK>
---[ end trace ]---
Fixes: 50f0a562f8cc ("bnx2x: add fcoe statistics")
Signed-off-by: Ghadi Elie Rahme <ghadi.rahme@canonical.com>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20240627111405.1037812-1-ghadi.rahme@canonical.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -1262,7 +1262,7 @@ enum {
struct bnx2x_fw_stats_req {
struct stats_query_header hdr;
- struct stats_query_entry query[FP_SB_MAX_E1x+
+ struct stats_query_entry query[FP_SB_MAX_E2 +
BNX2X_FIRST_QUEUE_QUERY_IDX];
};
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 167/197] s390/dasd: Fix invalid dereferencing of indirect CCW data pointer
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (165 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 166/197] bnx2x: Fix multiple UBSAN array-index-out-of-bounds Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 168/197] selftests/harness: Fix tests timeout and race condition Greg Kroah-Hartman
` (43 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Stefan Haberland, Heiko Carstens
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Haberland <sth@linux.ibm.com>
commit b3a58f3b90f564f42a5c35778d8c5107b2c2150b upstream.
Fix invalid dereferencing of indirect CCW data pointer in
dasd_eckd_dump_sense() that leads to a kernel panic in error cases.
When using indirect addressing for DASD CCWs (IDAW) the CCW CDA pointer
does not contain the data address itself but a pointer to the IDAL.
This needs to be translated from physical to virtual as well before
using it.
This dereferencing is also used for dasd_page_cache and also fixed
although it is very unlikely that this code path ever gets used.
Fixes: c0bd39601c13 ("s390/dasd: use new address translation helpers")
Cc: stable@vger.kernel.org
Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/s390/block/dasd_eckd.c | 4 ++--
drivers/s390/block/dasd_fba.c | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 2f16f543079b..a76c6af9ea63 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -4906,7 +4906,7 @@ dasd_eckd_free_cp(struct dasd_ccw_req *cqr, struct request *req)
ccw++;
if (dst) {
if (ccw->flags & CCW_FLAG_IDA)
- cda = *((char **)dma32_to_virt(ccw->cda));
+ cda = dma64_to_virt(*((dma64_t *)dma32_to_virt(ccw->cda)));
else
cda = dma32_to_virt(ccw->cda);
if (dst != cda) {
@@ -5525,7 +5525,7 @@ dasd_eckd_dump_ccw_range(struct dasd_device *device, struct ccw1 *from,
/* get pointer to data (consider IDALs) */
if (from->flags & CCW_FLAG_IDA)
- datap = (char *)*((addr_t *)dma32_to_virt(from->cda));
+ datap = dma64_to_virt(*((dma64_t *)dma32_to_virt(from->cda)));
else
datap = dma32_to_virt(from->cda);
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c
index 361e9bd75257..9f2023a077c2 100644
--- a/drivers/s390/block/dasd_fba.c
+++ b/drivers/s390/block/dasd_fba.c
@@ -585,7 +585,7 @@ dasd_fba_free_cp(struct dasd_ccw_req *cqr, struct request *req)
ccw++;
if (dst) {
if (ccw->flags & CCW_FLAG_IDA)
- cda = *((char **)dma32_to_virt(ccw->cda));
+ cda = dma64_to_virt(*((dma64_t *)dma32_to_virt(ccw->cda)));
else
cda = dma32_to_virt(ccw->cda);
if (dst != cda) {
--
2.45.2
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 168/197] selftests/harness: Fix tests timeout and race condition
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (166 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 167/197] s390/dasd: Fix invalid dereferencing of indirect CCW data pointer Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 169/197] arm64: dts: rockchip: Fix the DCDC_REG2 minimum voltage on Quartz64 Model B Greg Kroah-Hartman
` (42 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christian Brauner,
Günther Noack, Jakub Kicinski, Kees Cook, Shuah Khan,
Will Drewry, Mark Brown, Mickaël Salaün
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mickaël Salaün <mic@digikod.net>
commit 130e42806773013e9cf32d211922c935ae2df86c upstream.
We cannot use CLONE_VFORK because we also need to wait for the timeout
signal.
Restore tests timeout by using the original fork() call in __run_test()
but also in __TEST_F_IMPL(). Also fix a race condition when waiting for
the test child process.
Because test metadata are shared between test processes, only the
parent process must set the test PID (child). Otherwise, t->pid may be
set to zero, leading to inconsistent error cases:
# RUN layout1.rule_on_mountpoint ...
# rule_on_mountpoint: Test ended in some other way [127]
# OK layout1.rule_on_mountpoint
ok 20 layout1.rule_on_mountpoint
As safeguards, initialize the "status" variable with a valid exit code,
and handle unknown test exits as errors.
The use of fork() introduces a new race condition in landlock/fs_test.c
which seems to be specific to hostfs bind mounts, but I haven't found
the root cause and it's difficult to trigger. I'll try to fix it with
another patch.
Cc: Christian Brauner <brauner@kernel.org>
Cc: Günther Noack <gnoack@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Will Drewry <wad@chromium.org>
Cc: stable@vger.kernel.org
Closes: https://lore.kernel.org/r/9341d4db-5e21-418c-bf9e-9ae2da7877e1@sirena.org.uk
Fixes: a86f18903db9 ("selftests/harness: Fix interleaved scheduling leading to race conditions")
Fixes: 24cf65a62266 ("selftests/harness: Share _metadata between forked processes")
Link: https://lore.kernel.org/r/20240621180605.834676-1-mic@digikod.net
Tested-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Mickaël Salaün <mic@digikod.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/kselftest_harness.h | 43 +++++++++++++++-------------
1 file changed, 24 insertions(+), 19 deletions(-)
--- a/tools/testing/selftests/kselftest_harness.h
+++ b/tools/testing/selftests/kselftest_harness.h
@@ -66,8 +66,6 @@
#include <sys/wait.h>
#include <unistd.h>
#include <setjmp.h>
-#include <syscall.h>
-#include <linux/sched.h>
#include "kselftest.h"
@@ -82,17 +80,6 @@
# define TH_LOG_ENABLED 1
#endif
-/* Wait for the child process to end but without sharing memory mapping. */
-static inline pid_t clone3_vfork(void)
-{
- struct clone_args args = {
- .flags = CLONE_VFORK,
- .exit_signal = SIGCHLD,
- };
-
- return syscall(__NR_clone3, &args, sizeof(args));
-}
-
/**
* TH_LOG()
*
@@ -437,7 +424,7 @@ static inline pid_t clone3_vfork(void)
} \
if (setjmp(_metadata->env) == 0) { \
/* _metadata and potentially self are shared with all forks. */ \
- child = clone3_vfork(); \
+ child = fork(); \
if (child == 0) { \
fixture_name##_setup(_metadata, self, variant->data); \
/* Let setup failure terminate early. */ \
@@ -1016,7 +1003,14 @@ void __wait_for_test(struct __test_metad
.sa_flags = SA_SIGINFO,
};
struct sigaction saved_action;
- int status;
+ /*
+ * Sets status so that WIFEXITED(status) returns true and
+ * WEXITSTATUS(status) returns KSFT_FAIL. This safe default value
+ * should never be evaluated because of the waitpid(2) check and
+ * SIGALRM handling.
+ */
+ int status = KSFT_FAIL << 8;
+ int child;
if (sigaction(SIGALRM, &action, &saved_action)) {
t->exit_code = KSFT_FAIL;
@@ -1028,7 +1022,15 @@ void __wait_for_test(struct __test_metad
__active_test = t;
t->timed_out = false;
alarm(t->timeout);
- waitpid(t->pid, &status, 0);
+ child = waitpid(t->pid, &status, 0);
+ if (child == -1 && errno != EINTR) {
+ t->exit_code = KSFT_FAIL;
+ fprintf(TH_LOG_STREAM,
+ "# %s: Failed to wait for PID %d (errno: %d)\n",
+ t->name, t->pid, errno);
+ return;
+ }
+
alarm(0);
if (sigaction(SIGALRM, &saved_action, NULL)) {
t->exit_code = KSFT_FAIL;
@@ -1083,6 +1085,7 @@ void __wait_for_test(struct __test_metad
WTERMSIG(status));
}
} else {
+ t->exit_code = KSFT_FAIL;
fprintf(TH_LOG_STREAM,
"# %s: Test ended in some other way [%u]\n",
t->name,
@@ -1218,6 +1221,7 @@ void __run_test(struct __fixture_metadat
struct __test_xfail *xfail;
char test_name[1024];
const char *diagnostic;
+ int child;
/* reset test struct */
t->exit_code = KSFT_PASS;
@@ -1236,15 +1240,16 @@ void __run_test(struct __fixture_metadat
fflush(stdout);
fflush(stderr);
- t->pid = clone3_vfork();
- if (t->pid < 0) {
+ child = fork();
+ if (child < 0) {
ksft_print_msg("ERROR SPAWNING TEST CHILD\n");
t->exit_code = KSFT_FAIL;
- } else if (t->pid == 0) {
+ } else if (child == 0) {
setpgrp();
t->fn(t, variant);
_exit(t->exit_code);
} else {
+ t->pid = child;
__wait_for_test(t);
}
ksft_print_msg(" %4s %s\n",
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 169/197] arm64: dts: rockchip: Fix the DCDC_REG2 minimum voltage on Quartz64 Model B
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (167 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 168/197] selftests/harness: Fix tests timeout and race condition Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 170/197] clk: qcom: gcc-sm6350: Fix gpll6* & gpll7 parents Greg Kroah-Hartman
` (41 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Diederik de Haas, Dragan Simic,
Heiko Stuebner
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dragan Simic <dsimic@manjaro.org>
commit d201c92bff90f3d3d0b079fc955378c15c0483cc upstream.
Correct the specified regulator-min-microvolt value for the buck DCDC_REG2
regulator, which is part of the Rockchip RK809 PMIC, in the Pine64 Quartz64
Model B board dts. According to the RK809 datasheet, version 1.01, this
regulator is capable of producing voltages as low as 0.5 V on its output,
instead of going down to 0.9 V only, which is additionally confirmed by the
regulator-min-microvolt values found in the board dts files for the other
supported boards that use the same RK809 PMIC.
This allows the DVFS to clock the GPU on the Quartz64 Model B below 700 MHz,
all the way down to 200 MHz, which saves some power and reduces the amount of
generated heat a bit, improving the thermal headroom and possibly improving
the bursty CPU and GPU performance on this board.
This also eliminates the following warnings in the kernel log:
core: _opp_supported_by_regulators: OPP minuV: 825000 maxuV: 825000, not supported by regulator
panfrost fde60000.gpu: _opp_add: OPP not supported by regulators (200000000)
core: _opp_supported_by_regulators: OPP minuV: 825000 maxuV: 825000, not supported by regulator
panfrost fde60000.gpu: _opp_add: OPP not supported by regulators (300000000)
core: _opp_supported_by_regulators: OPP minuV: 825000 maxuV: 825000, not supported by regulator
panfrost fde60000.gpu: _opp_add: OPP not supported by regulators (400000000)
core: _opp_supported_by_regulators: OPP minuV: 825000 maxuV: 825000, not supported by regulator
panfrost fde60000.gpu: _opp_add: OPP not supported by regulators (600000000)
Fixes: dcc8c66bef79 ("arm64: dts: rockchip: add Pine64 Quartz64-B device tree")
Cc: stable@vger.kernel.org
Reported-By: Diederik de Haas <didi.debian@cknow.org>
Signed-off-by: Dragan Simic <dsimic@manjaro.org>
Tested-by: Diederik de Haas <didi.debian@cknow.org>
Link: https://lore.kernel.org/r/e70742ea2df432bf57b3f7de542d81ca22b0da2f.1716225483.git.dsimic@manjaro.org
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts
@@ -289,7 +289,7 @@
regulator-name = "vdd_gpu";
regulator-always-on;
regulator-boot-on;
- regulator-min-microvolt = <900000>;
+ regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <6001>;
^ permalink raw reply [flat|nested] 218+ messages in thread
* [PATCH 6.9 170/197] clk: qcom: gcc-sm6350: Fix gpll6* & gpll7 parents
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (168 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 169/197] arm64: dts: rockchip: Fix the DCDC_REG2 minimum voltage on Quartz64 Model B Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 171/197] clk: qcom: clk-alpha-pll: set ALPHA_EN bit for Stromer Plus PLLs Greg Kroah-Hartman
` (40 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Luca Weiss, Bjorn Andersson,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luca Weiss <luca.weiss@fairphone.com>
[ Upstream commit 3414f41a13eb41db15c558fbc695466203dca4fa ]
Both gpll6 and gpll7 are parented to CXO at 19.2 MHz and not to GPLL0
which runs at 600 MHz. Also gpll6_out_even should have the parent gpll6
and not gpll0.
Adjust the parents of these clocks to make Linux report the correct rate
and not absurd numbers like gpll7 at ~25 GHz or gpll6 at 24 GHz.
Corrected rates are the following:
gpll7 807999902 Hz
gpll6 768000000 Hz
gpll6_out_even 384000000 Hz
gpll0 600000000 Hz
gpll0_out_odd 200000000 Hz
gpll0_out_even 300000000 Hz
And because gpll6 is the parent of gcc_sdcc2_apps_clk_src (at 202 MHz)
that clock also reports the correct rate now and avoids this warning:
[ 5.984062] mmc0: Card appears overclocked; req 202000000 Hz, actual 6312499237 Hz
Fixes: 131abae905df ("clk: qcom: Add SM6350 GCC driver")
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
Link: https://lore.kernel.org/r/20240508-sm6350-gpll-fix-v1-1-e4ea34284a6d@fairphone.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/clk/qcom/gcc-sm6350.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm6350.c b/drivers/clk/qcom/gcc-sm6350.c
index cf4a7b6e0b23a..0559a33faf00e 100644
--- a/drivers/clk/qcom/gcc-sm6350.c
+++ b/drivers/clk/qcom/gcc-sm6350.c
@@ -100,8 +100,8 @@ static struct clk_alpha_pll gpll6 = {
.enable_mask = BIT(6),
.hw.init = &(struct clk_init_data){
.name = "gpll6",
- .parent_hws = (const struct clk_hw*[]){
- &gpll0.clkr.hw,
+ .parent_data = &(const struct clk_parent_data){
+ .fw_name = "bi_tcxo",
},
.num_parents = 1,
.ops = &clk_alpha_pll_fixed_fabia_ops,
@@ -124,7 +124,7 @@ static struct clk_alpha_pll_postdiv gpll6_out_even = {
.clkr.hw.init = &(struct clk_init_data){
.name = "gpll6_out_even",
.parent_hws = (const struct clk_hw*[]){
- &gpll0.clkr.hw,
+ &gpll6.clkr.hw,
},
.num_parents = 1,
.ops = &clk_alpha_pll_postdiv_fabia_ops,
@@ -139,8 +139,8 @@ static struct clk_alpha_pll gpll7 = {
.enable_mask = BIT(7),
.hw.init = &(struct clk_init_data){
.name = "gpll7",
- .parent_hws = (const struct clk_hw*[]){
- &gpll0.clkr.hw,
+ .parent_data = &(const struct clk_parent_data){
+ .fw_name = "bi_tcxo",
},
.num_parents = 1,
.ops = &clk_alpha_pll_fixed_fabia_ops,
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 171/197] clk: qcom: clk-alpha-pll: set ALPHA_EN bit for Stromer Plus PLLs
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (169 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 170/197] clk: qcom: gcc-sm6350: Fix gpll6* & gpll7 parents Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 172/197] clk: mediatek: mt8183: Only enable runtime PM on mt8183-mfgcfg Greg Kroah-Hartman
` (39 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Gabor Juhos, Bjorn Andersson,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gabor Juhos <j4g8y7@gmail.com>
[ Upstream commit 5a33a64524e6381c399e5e42571d9363ffc0bed4 ]
The clk_alpha_pll_stromer_plus_set_rate() function does not
sets the ALPHA_EN bit in the USER_CTL register, so setting
rates which requires using alpha mode works only if the bit
gets set already prior calling the function.
Extend the function to set the ALPHA_EN bit in order to allow
using fractional rates regardless whether the bit gets set
previously or not.
Fixes: 84da48921a97 ("clk: qcom: clk-alpha-pll: introduce stromer plus ops")
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
Link: https://lore.kernel.org/r/20240508-stromer-plus-alpha-en-v1-1-6639ce01ca5b@gmail.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/clk/qcom/clk-alpha-pll.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/clk/qcom/clk-alpha-pll.c b/drivers/clk/qcom/clk-alpha-pll.c
index be18ff983d35c..003308a288968 100644
--- a/drivers/clk/qcom/clk-alpha-pll.c
+++ b/drivers/clk/qcom/clk-alpha-pll.c
@@ -2555,6 +2555,9 @@ static int clk_alpha_pll_stromer_plus_set_rate(struct clk_hw *hw,
regmap_write(pll->clkr.regmap, PLL_ALPHA_VAL_U(pll),
a >> ALPHA_BITWIDTH);
+ regmap_update_bits(pll->clkr.regmap, PLL_USER_CTL(pll),
+ PLL_ALPHA_EN, PLL_ALPHA_EN);
+
regmap_write(pll->clkr.regmap, PLL_MODE(pll), PLL_BYPASSNL);
/* Wait five micro seconds or more */
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 172/197] clk: mediatek: mt8183: Only enable runtime PM on mt8183-mfgcfg
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (170 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 171/197] clk: qcom: clk-alpha-pll: set ALPHA_EN bit for Stromer Plus PLLs Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 173/197] i2c: pnx: Fix potential deadlock warning from del_timer_sync() call in isr Greg Kroah-Hartman
` (38 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Pin-yen Lin, Stephen Boyd,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pin-yen Lin <treapking@chromium.org>
[ Upstream commit 878e845d8db04df9ff3bbbaac09d335b24153704 ]
Commit 2f7b1d8b5505 ("clk: mediatek: Do a runtime PM get on controllers
during probe") enabled runtime PM for all mediatek clock controllers,
but this introduced an issue on the resume path.
If a device resumes earlier than the clock controller and calls
clk_prepare() when runtime PM is enabled on the controller, it will end
up calling clk_pm_runtime_get(). But the subsequent
pm_runtime_resume_and_get() call will fail because the runtime PM is
temporarily disabled during suspend.
To workaround this, introduce a need_runtime_pm flag and only enable it
on mt8183-mfgcfg, which is the driver that observed deadlock previously.
Hopefully mt8183-cfgcfg won't run into the issue at the resume stage
because the GPU should have stopped rendering before the system calls
suspend.
Fixes: 2f7b1d8b5505 ("clk: mediatek: Do a runtime PM get on controllers during probe")
Signed-off-by: Pin-yen Lin <treapking@chromium.org>
Link: https://lore.kernel.org/r/20240613120357.1043342-1-treapking@chromium.org
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/clk/mediatek/clk-mt8183-mfgcfg.c | 1 +
drivers/clk/mediatek/clk-mtk.c | 24 ++++++++++++++----------
drivers/clk/mediatek/clk-mtk.h | 2 ++
3 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/drivers/clk/mediatek/clk-mt8183-mfgcfg.c b/drivers/clk/mediatek/clk-mt8183-mfgcfg.c
index ba504e19d4203..62d876e150e11 100644
--- a/drivers/clk/mediatek/clk-mt8183-mfgcfg.c
+++ b/drivers/clk/mediatek/clk-mt8183-mfgcfg.c
@@ -29,6 +29,7 @@ static const struct mtk_gate mfg_clks[] = {
static const struct mtk_clk_desc mfg_desc = {
.clks = mfg_clks,
.num_clks = ARRAY_SIZE(mfg_clks),
+ .need_runtime_pm = true,
};
static const struct of_device_id of_match_clk_mt8183_mfg[] = {
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index bd37ab4d1a9bb..ba1d1c495bc2b 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -496,14 +496,16 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,
}
- devm_pm_runtime_enable(&pdev->dev);
- /*
- * Do a pm_runtime_resume_and_get() to workaround a possible
- * deadlock between clk_register() and the genpd framework.
- */
- r = pm_runtime_resume_and_get(&pdev->dev);
- if (r)
- return r;
+ if (mcd->need_runtime_pm) {
+ devm_pm_runtime_enable(&pdev->dev);
+ /*
+ * Do a pm_runtime_resume_and_get() to workaround a possible
+ * deadlock between clk_register() and the genpd framework.
+ */
+ r = pm_runtime_resume_and_get(&pdev->dev);
+ if (r)
+ return r;
+ }
/* Calculate how many clk_hw_onecell_data entries to allocate */
num_clks = mcd->num_clks + mcd->num_composite_clks;
@@ -585,7 +587,8 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,
goto unregister_clks;
}
- pm_runtime_put(&pdev->dev);
+ if (mcd->need_runtime_pm)
+ pm_runtime_put(&pdev->dev);
return r;
@@ -618,7 +621,8 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,
if (mcd->shared_io && base)
iounmap(base);
- pm_runtime_put(&pdev->dev);
+ if (mcd->need_runtime_pm)
+ pm_runtime_put(&pdev->dev);
return r;
}
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index 22096501a60a7..c17fe1c2d732d 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -237,6 +237,8 @@ struct mtk_clk_desc {
int (*clk_notifier_func)(struct device *dev, struct clk *clk);
unsigned int mfg_clk_idx;
+
+ bool need_runtime_pm;
};
int mtk_clk_pdev_probe(struct platform_device *pdev);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 173/197] i2c: pnx: Fix potential deadlock warning from del_timer_sync() call in isr
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (171 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 172/197] clk: mediatek: mt8183: Only enable runtime PM on mt8183-mfgcfg Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 174/197] fs/ntfs3: Mark volume as dirty if xattr is broken Greg Kroah-Hartman
` (37 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Piotr Wojtaszczyk, Andi Shyti,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Piotr Wojtaszczyk <piotr.wojtaszczyk@timesys.com>
[ Upstream commit f63b94be6942ba82c55343e196bd09b53227618e ]
When del_timer_sync() is called in an interrupt context it throws a warning
because of potential deadlock. The timer is used only to exit from
wait_for_completion() after a timeout so replacing the call with
wait_for_completion_timeout() allows to remove the problematic timer and
its related functions altogether.
Fixes: 41561f28e76a ("i2c: New Philips PNX bus driver")
Signed-off-by: Piotr Wojtaszczyk <piotr.wojtaszczyk@timesys.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/i2c/busses/i2c-pnx.c | 48 ++++++++----------------------------
1 file changed, 10 insertions(+), 38 deletions(-)
diff --git a/drivers/i2c/busses/i2c-pnx.c b/drivers/i2c/busses/i2c-pnx.c
index a12525b3186bc..f448505d54682 100644
--- a/drivers/i2c/busses/i2c-pnx.c
+++ b/drivers/i2c/busses/i2c-pnx.c
@@ -15,7 +15,6 @@
#include <linux/ioport.h>
#include <linux/delay.h>
#include <linux/i2c.h>
-#include <linux/timer.h>
#include <linux/completion.h>
#include <linux/platform_device.h>
#include <linux/io.h>
@@ -32,7 +31,6 @@ struct i2c_pnx_mif {
int ret; /* Return value */
int mode; /* Interface mode */
struct completion complete; /* I/O completion */
- struct timer_list timer; /* Timeout */
u8 * buf; /* Data buffer */
int len; /* Length of data buffer */
int order; /* RX Bytes to order via TX */
@@ -117,24 +115,6 @@ static inline int wait_reset(struct i2c_pnx_algo_data *data)
return (timeout <= 0);
}
-static inline void i2c_pnx_arm_timer(struct i2c_pnx_algo_data *alg_data)
-{
- struct timer_list *timer = &alg_data->mif.timer;
- unsigned long expires = msecs_to_jiffies(alg_data->timeout);
-
- if (expires <= 1)
- expires = 2;
-
- del_timer_sync(timer);
-
- dev_dbg(&alg_data->adapter.dev, "Timer armed at %lu plus %lu jiffies.\n",
- jiffies, expires);
-
- timer->expires = jiffies + expires;
-
- add_timer(timer);
-}
-
/**
* i2c_pnx_start - start a device
* @slave_addr: slave address
@@ -259,8 +239,6 @@ static int i2c_pnx_master_xmit(struct i2c_pnx_algo_data *alg_data)
~(mcntrl_afie | mcntrl_naie | mcntrl_drmie),
I2C_REG_CTL(alg_data));
- del_timer_sync(&alg_data->mif.timer);
-
dev_dbg(&alg_data->adapter.dev,
"%s(): Waking up xfer routine.\n",
__func__);
@@ -276,8 +254,6 @@ static int i2c_pnx_master_xmit(struct i2c_pnx_algo_data *alg_data)
~(mcntrl_afie | mcntrl_naie | mcntrl_drmie),
I2C_REG_CTL(alg_data));
- /* Stop timer. */
- del_timer_sync(&alg_data->mif.timer);
dev_dbg(&alg_data->adapter.dev,
"%s(): Waking up xfer routine after zero-xfer.\n",
__func__);
@@ -364,8 +340,6 @@ static int i2c_pnx_master_rcv(struct i2c_pnx_algo_data *alg_data)
mcntrl_drmie | mcntrl_daie);
iowrite32(ctl, I2C_REG_CTL(alg_data));
- /* Kill timer. */
- del_timer_sync(&alg_data->mif.timer);
complete(&alg_data->mif.complete);
}
}
@@ -400,8 +374,6 @@ static irqreturn_t i2c_pnx_interrupt(int irq, void *dev_id)
mcntrl_drmie);
iowrite32(ctl, I2C_REG_CTL(alg_data));
- /* Stop timer, to prevent timeout. */
- del_timer_sync(&alg_data->mif.timer);
complete(&alg_data->mif.complete);
} else if (stat & mstatus_nai) {
/* Slave did not acknowledge, generate a STOP */
@@ -419,8 +391,6 @@ static irqreturn_t i2c_pnx_interrupt(int irq, void *dev_id)
/* Our return value. */
alg_data->mif.ret = -EIO;
- /* Stop timer, to prevent timeout. */
- del_timer_sync(&alg_data->mif.timer);
complete(&alg_data->mif.complete);
} else {
/*
@@ -453,9 +423,8 @@ static irqreturn_t i2c_pnx_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}
-static void i2c_pnx_timeout(struct timer_list *t)
+static void i2c_pnx_timeout(struct i2c_pnx_algo_data *alg_data)
{
- struct i2c_pnx_algo_data *alg_data = from_timer(alg_data, t, mif.timer);
u32 ctl;
dev_err(&alg_data->adapter.dev,
@@ -472,7 +441,6 @@ static void i2c_pnx_timeout(struct timer_list *t)
iowrite32(ctl, I2C_REG_CTL(alg_data));
wait_reset(alg_data);
alg_data->mif.ret = -EIO;
- complete(&alg_data->mif.complete);
}
static inline void bus_reset_if_active(struct i2c_pnx_algo_data *alg_data)
@@ -514,6 +482,7 @@ i2c_pnx_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
struct i2c_msg *pmsg;
int rc = 0, completed = 0, i;
struct i2c_pnx_algo_data *alg_data = adap->algo_data;
+ unsigned long time_left;
u32 stat;
dev_dbg(&alg_data->adapter.dev,
@@ -548,7 +517,6 @@ i2c_pnx_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
dev_dbg(&alg_data->adapter.dev, "%s(): mode %d, %d bytes\n",
__func__, alg_data->mif.mode, alg_data->mif.len);
- i2c_pnx_arm_timer(alg_data);
/* initialize the completion var */
init_completion(&alg_data->mif.complete);
@@ -564,7 +532,10 @@ i2c_pnx_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
break;
/* Wait for completion */
- wait_for_completion(&alg_data->mif.complete);
+ time_left = wait_for_completion_timeout(&alg_data->mif.complete,
+ alg_data->timeout);
+ if (time_left == 0)
+ i2c_pnx_timeout(alg_data);
if (!(rc = alg_data->mif.ret))
completed++;
@@ -653,7 +624,10 @@ static int i2c_pnx_probe(struct platform_device *pdev)
alg_data->adapter.algo_data = alg_data;
alg_data->adapter.nr = pdev->id;
- alg_data->timeout = I2C_PNX_TIMEOUT_DEFAULT;
+ alg_data->timeout = msecs_to_jiffies(I2C_PNX_TIMEOUT_DEFAULT);
+ if (alg_data->timeout <= 1)
+ alg_data->timeout = 2;
+
#ifdef CONFIG_OF
alg_data->adapter.dev.of_node = of_node_get(pdev->dev.of_node);
if (pdev->dev.of_node) {
@@ -673,8 +647,6 @@ static int i2c_pnx_probe(struct platform_device *pdev)
if (IS_ERR(alg_data->clk))
return PTR_ERR(alg_data->clk);
- timer_setup(&alg_data->mif.timer, i2c_pnx_timeout, 0);
-
snprintf(alg_data->adapter.name, sizeof(alg_data->adapter.name),
"%s", pdev->name);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 174/197] fs/ntfs3: Mark volume as dirty if xattr is broken
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (172 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 173/197] i2c: pnx: Fix potential deadlock warning from del_timer_sync() call in isr Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 175/197] drm/amdkfd: Let VRAM allocations go to GTT domain on small APUs Greg Kroah-Hartman
` (36 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Konstantin Komarov, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
[ Upstream commit 24f6f5020b0b2c89c2cba5ec224547be95f753ee ]
Mark a volume as corrupted if the name length exceeds the space
occupied by ea.
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/ntfs3/xattr.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c
index 53e7d1fa036aa..73785dece7a7f 100644
--- a/fs/ntfs3/xattr.c
+++ b/fs/ntfs3/xattr.c
@@ -219,8 +219,11 @@ static ssize_t ntfs_list_ea(struct ntfs_inode *ni, char *buffer,
if (!ea->name_len)
break;
- if (ea->name_len > ea_size)
+ if (ea->name_len > ea_size) {
+ ntfs_set_state(ni->mi.sbi, NTFS_DIRTY_ERROR);
+ err = -EINVAL; /* corrupted fs */
break;
+ }
if (buffer) {
/* Check if we can use field ea->name */
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 175/197] drm/amdkfd: Let VRAM allocations go to GTT domain on small APUs
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (173 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 174/197] fs/ntfs3: Mark volume as dirty if xattr is broken Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 176/197] ALSA: hda/realtek: Enable headset mic of JP-IK LEAP W502 with ALC897 Greg Kroah-Hartman
` (35 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Lang Yu, Felix Kuehling,
Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lang Yu <Lang.Yu@amd.com>
[ Upstream commit eb853413d02c8d9b27942429b261a9eef228f005 ]
Small APUs(i.e., consumer, embedded products) usually have a small
carveout device memory which can't satisfy most compute workloads
memory allocation requirements.
We can't even run a Basic MNIST Example with a default 512MB carveout.
https://github.com/pytorch/examples/tree/main/mnist. Error Log:
"torch.cuda.OutOfMemoryError: HIP out of memory. Tried to allocate
84.00 MiB. GPU 0 has a total capacity of 512.00 MiB of which 0 bytes
is free. Of the allocated memory 103.83 MiB is allocated by PyTorch,
and 22.17 MiB is reserved by PyTorch but unallocated"
Though we can change BIOS settings to enlarge carveout size,
which is inflexible and may bring complaint. On the other hand,
the memory resource can't be effectively used between host and device.
The solution is MI300A approach, i.e., let VRAM allocations go to GTT.
Then device and host can flexibly and effectively share memory resource.
v2: Report local_mem_size_private as 0. (Felix)
Signed-off-by: Lang Yu <Lang.Yu@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 5 +++++
.../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 20 ++++++++++---------
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 2 +-
drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 6 ++++--
drivers/gpu/drm/amd/amdkfd/kfd_svm.h | 3 ++-
5 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index 35dd6effa9a34..7291c3fd8cf70 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -455,6 +455,9 @@ void amdgpu_amdkfd_get_local_mem_info(struct amdgpu_device *adev,
else
mem_info->local_mem_size_private =
KFD_XCP_MEMORY_SIZE(adev, xcp->id);
+ } else if (adev->flags & AMD_IS_APU) {
+ mem_info->local_mem_size_public = (ttm_tt_pages_limit() << PAGE_SHIFT);
+ mem_info->local_mem_size_private = 0;
} else {
mem_info->local_mem_size_public = adev->gmc.visible_vram_size;
mem_info->local_mem_size_private = adev->gmc.real_vram_size -
@@ -809,6 +812,8 @@ u64 amdgpu_amdkfd_xcp_memory_size(struct amdgpu_device *adev, int xcp_id)
}
do_div(tmp, adev->xcp_mgr->num_xcp_per_mem_partition);
return ALIGN_DOWN(tmp, PAGE_SIZE);
+ } else if (adev->flags & AMD_IS_APU) {
+ return (ttm_tt_pages_limit() << PAGE_SHIFT);
} else {
return adev->gmc.real_vram_size;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 0535b07987d9d..8975cf41a91ac 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -196,7 +196,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
return -EINVAL;
vram_size = KFD_XCP_MEMORY_SIZE(adev, xcp_id);
- if (adev->gmc.is_app_apu) {
+ if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) {
system_mem_needed = size;
ttm_mem_needed = size;
}
@@ -232,7 +232,8 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
"adev reference can't be null when vram is used");
if (adev && xcp_id >= 0) {
adev->kfd.vram_used[xcp_id] += vram_needed;
- adev->kfd.vram_used_aligned[xcp_id] += adev->gmc.is_app_apu ?
+ adev->kfd.vram_used_aligned[xcp_id] +=
+ (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) ?
vram_needed :
ALIGN(vram_needed, VRAM_AVAILABLITY_ALIGN);
}
@@ -260,7 +261,7 @@ void amdgpu_amdkfd_unreserve_mem_limit(struct amdgpu_device *adev,
if (adev) {
adev->kfd.vram_used[xcp_id] -= size;
- if (adev->gmc.is_app_apu) {
+ if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) {
adev->kfd.vram_used_aligned[xcp_id] -= size;
kfd_mem_limit.system_mem_used -= size;
kfd_mem_limit.ttm_mem_used -= size;
@@ -889,7 +890,7 @@ static int kfd_mem_attach(struct amdgpu_device *adev, struct kgd_mem *mem,
* if peer device has large BAR. In contrast, access over xGMI is
* allowed for both small and large BAR configurations of peer device
*/
- if ((adev != bo_adev && !adev->gmc.is_app_apu) &&
+ if ((adev != bo_adev && !(adev->gmc.is_app_apu || adev->flags & AMD_IS_APU)) &&
((mem->domain == AMDGPU_GEM_DOMAIN_VRAM) ||
(mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_DOORBELL) ||
(mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_MMIO_REMAP))) {
@@ -1657,7 +1658,7 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev,
- atomic64_read(&adev->vram_pin_size)
- reserved_for_pt;
- if (adev->gmc.is_app_apu) {
+ if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) {
system_mem_available = no_system_mem_limit ?
kfd_mem_limit.max_system_mem_limit :
kfd_mem_limit.max_system_mem_limit -
@@ -1705,7 +1706,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
if (flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
domain = alloc_domain = AMDGPU_GEM_DOMAIN_VRAM;
- if (adev->gmc.is_app_apu) {
+ if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) {
domain = AMDGPU_GEM_DOMAIN_GTT;
alloc_domain = AMDGPU_GEM_DOMAIN_GTT;
alloc_flags = 0;
@@ -1952,7 +1953,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
if (size) {
if (!is_imported &&
(mem->bo->preferred_domains == AMDGPU_GEM_DOMAIN_VRAM ||
- (adev->gmc.is_app_apu &&
+ ((adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) &&
mem->bo->preferred_domains == AMDGPU_GEM_DOMAIN_GTT)))
*size = bo_size;
else
@@ -2374,8 +2375,9 @@ static int import_obj_create(struct amdgpu_device *adev,
(*mem)->dmabuf = dma_buf;
(*mem)->bo = bo;
(*mem)->va = va;
- (*mem)->domain = (bo->preferred_domains & AMDGPU_GEM_DOMAIN_VRAM) && !adev->gmc.is_app_apu ?
- AMDGPU_GEM_DOMAIN_VRAM : AMDGPU_GEM_DOMAIN_GTT;
+ (*mem)->domain = (bo->preferred_domains & AMDGPU_GEM_DOMAIN_VRAM) &&
+ !(adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) ?
+ AMDGPU_GEM_DOMAIN_VRAM : AMDGPU_GEM_DOMAIN_GTT;
(*mem)->mapped_to_gpu_memory = 0;
(*mem)->process_info = avm->process_info;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
index 5c8d81bfce7ab..ba651d12f1fa0 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
@@ -1023,7 +1023,7 @@ int kgd2kfd_init_zone_device(struct amdgpu_device *adev)
if (amdgpu_ip_version(adev, GC_HWIP, 0) < IP_VERSION(9, 0, 1))
return -EINVAL;
- if (adev->gmc.is_app_apu)
+ if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU)
return 0;
pgmap = &kfddev->pgmap;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
index 386875e6eb96b..069b81eeea03c 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
@@ -2619,7 +2619,8 @@ svm_range_best_restore_location(struct svm_range *prange,
return -1;
}
- if (node->adev->gmc.is_app_apu)
+ if (node->adev->gmc.is_app_apu ||
+ node->adev->flags & AMD_IS_APU)
return 0;
if (prange->preferred_loc == gpuid ||
@@ -3337,7 +3338,8 @@ svm_range_best_prefetch_location(struct svm_range *prange)
goto out;
}
- if (bo_node->adev->gmc.is_app_apu) {
+ if (bo_node->adev->gmc.is_app_apu ||
+ bo_node->adev->flags & AMD_IS_APU) {
best_loc = 0;
goto out;
}
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
index 026863a0abcd3..9c37bd0567efa 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
@@ -201,7 +201,8 @@ void svm_range_list_lock_and_flush_work(struct svm_range_list *svms, struct mm_s
* is initialized to not 0 when page migration register device memory.
*/
#define KFD_IS_SVM_API_SUPPORTED(adev) ((adev)->kfd.pgmap.type != 0 ||\
- (adev)->gmc.is_app_apu)
+ (adev)->gmc.is_app_apu ||\
+ ((adev)->flags & AMD_IS_APU))
void svm_range_bo_unref_async(struct svm_range_bo *svm_bo);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 176/197] ALSA: hda/realtek: Enable headset mic of JP-IK LEAP W502 with ALC897
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (174 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 175/197] drm/amdkfd: Let VRAM allocations go to GTT domain on small APUs Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 177/197] vhost-scsi: Handle vhost_vq_work_queue failures for events Greg Kroah-Hartman
` (34 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jian-Hong Pan, Takashi Iwai,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jian-Hong Pan <jhp@endlessos.org>
[ Upstream commit 45e37f9ce28d248470bab4376df2687a215d1b22 ]
JP-IK LEAP W502 laptop's headset mic is not enabled until
ALC897_FIXUP_HEADSET_MIC_PIN3 quirk is applied.
Here is the original pin node values:
0x11 0x40000000
0x12 0xb7a60130
0x14 0x90170110
0x15 0x411111f0
0x16 0x411111f0
0x17 0x411111f0
0x18 0x411111f0
0x19 0x411111f0
0x1a 0x411111f0
0x1b 0x03211020
0x1c 0x411111f0
0x1d 0x4026892d
0x1e 0x411111f0
0x1f 0x411111f0
Signed-off-by: Jian-Hong Pan <jhp@endlessos.org>
Link: https://lore.kernel.org/r/20240520055008.7083-2-jhp@endlessos.org
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/pci/hda/patch_realtek.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 3a56434c86bd9..c0530d4aa3fc3 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -12029,6 +12029,7 @@ enum {
ALC897_FIXUP_LENOVO_HEADSET_MODE,
ALC897_FIXUP_HEADSET_MIC_PIN2,
ALC897_FIXUP_UNIS_H3C_X500S,
+ ALC897_FIXUP_HEADSET_MIC_PIN3,
};
static const struct hda_fixup alc662_fixups[] = {
@@ -12475,10 +12476,18 @@ static const struct hda_fixup alc662_fixups[] = {
{}
},
},
+ [ALC897_FIXUP_HEADSET_MIC_PIN3] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+ { 0x19, 0x03a11050 }, /* use as headset mic */
+ { }
+ },
+ },
};
static const struct snd_pci_quirk alc662_fixup_tbl[] = {
SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_FIXUP_ASUS_MODE2),
+ SND_PCI_QUIRK(0x1019, 0x9859, "JP-IK LEAP W502", ALC897_FIXUP_HEADSET_MIC_PIN3),
SND_PCI_QUIRK(0x1025, 0x022f, "Acer Aspire One", ALC662_FIXUP_INV_DMIC),
SND_PCI_QUIRK(0x1025, 0x0241, "Packard Bell DOTS", ALC662_FIXUP_INV_DMIC),
SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE),
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 177/197] vhost-scsi: Handle vhost_vq_work_queue failures for events
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (175 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 176/197] ALSA: hda/realtek: Enable headset mic of JP-IK LEAP W502 with ALC897 Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 178/197] nvme-multipath: find NUMA path only for online numa-node Greg Kroah-Hartman
` (33 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mike Christie, Michael S. Tsirkin,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Christie <michael.christie@oracle.com>
[ Upstream commit b1b2ce58ed23c5d56e0ab299a5271ac01f95b75c ]
Currently, we can try to queue an event's work before the vhost_task is
created. When this happens we just drop it in vhost_scsi_do_plug before
even calling vhost_vq_work_queue. During a device shutdown we do the
same thing after vhost_scsi_clear_endpoint has cleared the backends.
In the next patches we will be able to kill the vhost_task before we
have cleared the endpoint. In that case, vhost_vq_work_queue can fail
and we will leak the event's memory. This has handle the failure by
just freeing the event. This is safe to do, because
vhost_vq_work_queue will only return failure for us when the vhost_task
is killed and so userspace will not be able to handle events if we
sent them.
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Message-Id: <20240316004707.45557-2-michael.christie@oracle.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/vhost/scsi.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
index 282aac45c6909..f34f9895b8984 100644
--- a/drivers/vhost/scsi.c
+++ b/drivers/vhost/scsi.c
@@ -497,10 +497,8 @@ vhost_scsi_do_evt_work(struct vhost_scsi *vs, struct vhost_scsi_evt *evt)
vq_err(vq, "Faulted on vhost_scsi_send_event\n");
}
-static void vhost_scsi_evt_work(struct vhost_work *work)
+static void vhost_scsi_complete_events(struct vhost_scsi *vs, bool drop)
{
- struct vhost_scsi *vs = container_of(work, struct vhost_scsi,
- vs_event_work);
struct vhost_virtqueue *vq = &vs->vqs[VHOST_SCSI_VQ_EVT].vq;
struct vhost_scsi_evt *evt, *t;
struct llist_node *llnode;
@@ -508,12 +506,20 @@ static void vhost_scsi_evt_work(struct vhost_work *work)
mutex_lock(&vq->mutex);
llnode = llist_del_all(&vs->vs_event_list);
llist_for_each_entry_safe(evt, t, llnode, list) {
- vhost_scsi_do_evt_work(vs, evt);
+ if (!drop)
+ vhost_scsi_do_evt_work(vs, evt);
vhost_scsi_free_evt(vs, evt);
}
mutex_unlock(&vq->mutex);
}
+static void vhost_scsi_evt_work(struct vhost_work *work)
+{
+ struct vhost_scsi *vs = container_of(work, struct vhost_scsi,
+ vs_event_work);
+ vhost_scsi_complete_events(vs, false);
+}
+
static int vhost_scsi_copy_sgl_to_iov(struct vhost_scsi_cmd *cmd)
{
struct iov_iter *iter = &cmd->saved_iter;
@@ -1509,7 +1515,8 @@ vhost_scsi_send_evt(struct vhost_scsi *vs, struct vhost_virtqueue *vq,
}
llist_add(&evt->list, &vs->vs_event_list);
- vhost_vq_work_queue(vq, &vs->vs_event_work);
+ if (!vhost_vq_work_queue(vq, &vs->vs_event_work))
+ vhost_scsi_complete_events(vs, true);
}
static void vhost_scsi_evt_handle_kick(struct vhost_work *work)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 178/197] nvme-multipath: find NUMA path only for online numa-node
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (176 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 177/197] vhost-scsi: Handle vhost_vq_work_queue failures for events Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 179/197] dma-mapping: benchmark: avoid needless copy_to_user if benchmark fails Greg Kroah-Hartman
` (32 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Nilay Shroff, Christoph Hellwig,
Keith Busch, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nilay Shroff <nilay@linux.ibm.com>
[ Upstream commit d3a043733f25d743f3aa617c7f82dbcb5ee2211a ]
In current native multipath design when a shared namespace is created,
we loop through each possible numa-node, calculate the NUMA distance of
that node from each nvme controller and then cache the optimal IO path
for future reference while sending IO. The issue with this design is that
we may refer to the NUMA distance table for an offline node which may not
be populated at the time and so we may inadvertently end up finding and
caching a non-optimal path for IO. Then latter when the corresponding
numa-node becomes online and hence the NUMA distance table entry for that
node is created, ideally we should re-calculate the multipath node distance
for the newly added node however that doesn't happen unless we rescan/reset
the controller. So essentially, we may keep using non-optimal IO path for a
node which is made online after namespace is created.
This patch helps fix this issue ensuring that when a shared namespace is
created, we calculate the multipath node distance for each online numa-node
instead of each possible numa-node. Then latter when a node becomes online
and we receive any IO on that newly added node, we would calculate the
multipath node distance for newly added node but this time NUMA distance
table would have been already populated for newly added node. Hence we
would be able to correctly calculate the multipath node distance and choose
the optimal path for the IO.
Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/nvme/host/multipath.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
index a4e46eb20be63..1bee176fd850e 100644
--- a/drivers/nvme/host/multipath.c
+++ b/drivers/nvme/host/multipath.c
@@ -596,7 +596,7 @@ static void nvme_mpath_set_live(struct nvme_ns *ns)
int node, srcu_idx;
srcu_idx = srcu_read_lock(&head->srcu);
- for_each_node(node)
+ for_each_online_node(node)
__nvme_find_path(head, node);
srcu_read_unlock(&head->srcu, srcu_idx);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 179/197] dma-mapping: benchmark: avoid needless copy_to_user if benchmark fails
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (177 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 178/197] nvme-multipath: find NUMA path only for online numa-node Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 180/197] drm/amdgpu: correct hbm field in boot status Greg Kroah-Hartman
` (31 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Barry Song, Fedor Pchelkin,
Robin Murphy, Christoph Hellwig, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fedor Pchelkin <pchelkin@ispras.ru>
[ Upstream commit f7c9ccaadffd13066353332c13d7e9bf73b8f92d ]
If do_map_benchmark() has failed, there is nothing useful to copy back
to userspace.
Suggested-by: Barry Song <21cnbao@gmail.com>
Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
Acked-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
kernel/dma/map_benchmark.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/kernel/dma/map_benchmark.c b/kernel/dma/map_benchmark.c
index f7f3d14fa69a7..4950e0b622b1f 100644
--- a/kernel/dma/map_benchmark.c
+++ b/kernel/dma/map_benchmark.c
@@ -256,6 +256,9 @@ static long map_benchmark_ioctl(struct file *file, unsigned int cmd,
* dma_mask changed by benchmark
*/
dma_set_mask(map->dev, old_dma_mask);
+
+ if (ret)
+ return ret;
break;
default:
return -EINVAL;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 180/197] drm/amdgpu: correct hbm field in boot status
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (178 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 179/197] dma-mapping: benchmark: avoid needless copy_to_user if benchmark fails Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 181/197] connector: Fix invalid conversion in cn_proc.h Greg Kroah-Hartman
` (30 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Hawking Zhang, Tao Zhou,
Alex Deucher, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hawking Zhang <Hawking.Zhang@amd.com>
[ Upstream commit ec58991054e899c9d86f7e3c8a96cb602d4b5938 ]
hbm filed takes bit 13 and bit 14 in boot status.
Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
index e0f8ce9d84406..db9cb2b4e9823 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
@@ -43,7 +43,7 @@ struct amdgpu_iv_entry;
#define AMDGPU_RAS_GPU_ERR_HBM_BIST_TEST(x) AMDGPU_GET_REG_FIELD(x, 7, 7)
#define AMDGPU_RAS_GPU_ERR_SOCKET_ID(x) AMDGPU_GET_REG_FIELD(x, 10, 8)
#define AMDGPU_RAS_GPU_ERR_AID_ID(x) AMDGPU_GET_REG_FIELD(x, 12, 11)
-#define AMDGPU_RAS_GPU_ERR_HBM_ID(x) AMDGPU_GET_REG_FIELD(x, 13, 13)
+#define AMDGPU_RAS_GPU_ERR_HBM_ID(x) AMDGPU_GET_REG_FIELD(x, 14, 13)
#define AMDGPU_RAS_GPU_ERR_BOOT_STATUS(x) AMDGPU_GET_REG_FIELD(x, 31, 31)
#define AMDGPU_RAS_BOOT_STATUS_POLLING_LIMIT 1000
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 181/197] connector: Fix invalid conversion in cn_proc.h
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (179 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 180/197] drm/amdgpu: correct hbm field in boot status Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 182/197] swap: yield device immediately Greg Kroah-Hartman
` (29 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Matt Jan, David S. Miller,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Jan <zoo868e@gmail.com>
[ Upstream commit 06e785aeb9ea8a43d0a3967c1ba6e69d758e82d4 ]
The implicit conversion from unsigned int to enum
proc_cn_event is invalid, so explicitly cast it
for compilation in a C++ compiler.
/usr/include/linux/cn_proc.h: In function 'proc_cn_event valid_event(proc_cn_event)':
/usr/include/linux/cn_proc.h:72:17: error: invalid conversion from 'unsigned int' to 'proc_cn_event' [-fpermissive]
72 | ev_type &= PROC_EVENT_ALL;
| ^
| |
| unsigned int
Signed-off-by: Matt Jan <zoo868e@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/uapi/linux/cn_proc.h | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/include/uapi/linux/cn_proc.h b/include/uapi/linux/cn_proc.h
index f2afb7cc4926c..18e3745b86cd4 100644
--- a/include/uapi/linux/cn_proc.h
+++ b/include/uapi/linux/cn_proc.h
@@ -69,8 +69,7 @@ struct proc_input {
static inline enum proc_cn_event valid_event(enum proc_cn_event ev_type)
{
- ev_type &= PROC_EVENT_ALL;
- return ev_type;
+ return (enum proc_cn_event)(ev_type & PROC_EVENT_ALL);
}
/*
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 182/197] swap: yield device immediately
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (180 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 181/197] connector: Fix invalid conversion in cn_proc.h Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 183/197] nvme: adjust multiples of NVME_CTRL_PAGE_SIZE in offset Greg Kroah-Hartman
` (28 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Petri Kaukasoina, Christian Brauner,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Brauner <brauner@kernel.org>
[ Upstream commit 712182b67e831912f90259102ae334089e7bccd1 ]
Otherwise we can cause spurious EBUSY issues when trying to mount the
rootfs later on.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=218845
Reported-by: Petri Kaukasoina <petri.kaukasoina@tuni.fi>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
kernel/power/swap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/power/swap.c b/kernel/power/swap.c
index 5bc04bfe2db1d..c6f24d17866d8 100644
--- a/kernel/power/swap.c
+++ b/kernel/power/swap.c
@@ -1600,7 +1600,7 @@ int swsusp_check(bool exclusive)
put:
if (error)
- fput(hib_resume_bdev_file);
+ bdev_fput(hib_resume_bdev_file);
else
pr_debug("Image signature found, resuming\n");
} else {
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 183/197] nvme: adjust multiples of NVME_CTRL_PAGE_SIZE in offset
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (181 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 182/197] swap: yield device immediately Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 184/197] libbpf: detect broken PID filtering logic for multi-uprobe Greg Kroah-Hartman
` (27 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christoph Hellwig, Kundan Kumar,
Sagi Grimberg, Keith Busch, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kundan Kumar <kundan.kumar@samsung.com>
[ Upstream commit 1bd293fcf3af84674e82ed022c049491f3768840 ]
bio_vec start offset may be relatively large particularly when large
folio gets added to the bio. A bigger offset will result in avoiding the
single-segment mapping optimization and end up using expensive
mempool_alloc further.
Rather than using absolute value, adjust bv_offset by
NVME_CTRL_PAGE_SIZE while checking if segment can be fitted into one/two
PRP entries.
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Kundan Kumar <kundan.kumar@samsung.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/nvme/host/pci.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 710043086dffa..102a9fb0c65ff 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -778,7 +778,8 @@ static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req,
struct bio_vec bv = req_bvec(req);
if (!is_pci_p2pdma_page(bv.bv_page)) {
- if (bv.bv_offset + bv.bv_len <= NVME_CTRL_PAGE_SIZE * 2)
+ if ((bv.bv_offset & (NVME_CTRL_PAGE_SIZE - 1)) +
+ bv.bv_len <= NVME_CTRL_PAGE_SIZE * 2)
return nvme_setup_prp_simple(dev, req,
&cmnd->rw, &bv);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 184/197] libbpf: detect broken PID filtering logic for multi-uprobe
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (182 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 183/197] nvme: adjust multiples of NVME_CTRL_PAGE_SIZE in offset Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 185/197] regmap-i2c: Subtract reg size from max_write Greg Kroah-Hartman
` (26 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jiri Olsa, Andrii Nakryiko,
Alexei Starovoitov, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrii Nakryiko <andrii@kernel.org>
[ Upstream commit 04d939a2ab229a3821f04fc81f7c027842f501f1 ]
Libbpf is automatically (and transparently to user) detecting
multi-uprobe support in the kernel, and, if supported, uses
multi-uprobes to improve USDT attachment speed.
USDTs can be attached system-wide or for the specific process by PID. In
the latter case, we rely on correct kernel logic of not triggering USDT
for unrelated processes.
As such, on older kernels that do support multi-uprobes, but still have
broken PID filtering logic, we need to fall back to singular uprobes.
Unfortunately, whether user is using PID filtering or not is known at
the attachment time, which happens after relevant BPF programs were
loaded into the kernel. Also unfortunately, we need to make a call
whether to use multi-uprobes or singular uprobe for SEC("usdt") programs
during BPF object load time, at which point we have no information about
possible PID filtering.
The distinction between single and multi-uprobes is small, but important
for the kernel. Multi-uprobes get BPF_TRACE_UPROBE_MULTI attach type,
and kernel internally substitiute different implementation of some of
BPF helpers (e.g., bpf_get_attach_cookie()) depending on whether uprobe
is multi or singular. So, multi-uprobes and singular uprobes cannot be
intermixed.
All the above implies that we have to make an early and conservative
call about the use of multi-uprobes. And so this patch modifies libbpf's
existing feature detector for multi-uprobe support to also check correct
PID filtering. If PID filtering is not yet fixed, we fall back to
singular uprobes for USDTs.
This extension to feature detection is simple thanks to kernel's -EINVAL
addition for pid < 0.
Acked-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20240521163401.3005045-4-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/lib/bpf/features.c | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/tools/lib/bpf/features.c b/tools/lib/bpf/features.c
index a336786a22a38..3df0125ed5fa7 100644
--- a/tools/lib/bpf/features.c
+++ b/tools/lib/bpf/features.c
@@ -392,11 +392,40 @@ static int probe_uprobe_multi_link(int token_fd)
link_fd = bpf_link_create(prog_fd, -1, BPF_TRACE_UPROBE_MULTI, &link_opts);
err = -errno; /* close() can clobber errno */
+ if (link_fd >= 0 || err != -EBADF) {
+ close(link_fd);
+ close(prog_fd);
+ return 0;
+ }
+
+ /* Initial multi-uprobe support in kernel didn't handle PID filtering
+ * correctly (it was doing thread filtering, not process filtering).
+ * So now we'll detect if PID filtering logic was fixed, and, if not,
+ * we'll pretend multi-uprobes are not supported, if not.
+ * Multi-uprobes are used in USDT attachment logic, and we need to be
+ * conservative here, because multi-uprobe selection happens early at
+ * load time, while the use of PID filtering is known late at
+ * attachment time, at which point it's too late to undo multi-uprobe
+ * selection.
+ *
+ * Creating uprobe with pid == -1 for (invalid) '/' binary will fail
+ * early with -EINVAL on kernels with fixed PID filtering logic;
+ * otherwise -ESRCH would be returned if passed correct binary path
+ * (but we'll just get -BADF, of course).
+ */
+ link_opts.uprobe_multi.pid = -1; /* invalid PID */
+ link_opts.uprobe_multi.path = "/"; /* invalid path */
+ link_opts.uprobe_multi.offsets = &offset;
+ link_opts.uprobe_multi.cnt = 1;
+
+ link_fd = bpf_link_create(prog_fd, -1, BPF_TRACE_UPROBE_MULTI, &link_opts);
+ err = -errno; /* close() can clobber errno */
+
if (link_fd >= 0)
close(link_fd);
close(prog_fd);
- return link_fd < 0 && err == -EBADF;
+ return link_fd < 0 && err == -EINVAL;
}
static int probe_kern_bpf_cookie(int token_fd)
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 185/197] regmap-i2c: Subtract reg size from max_write
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (183 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 184/197] libbpf: detect broken PID filtering logic for multi-uprobe Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 186/197] platform/x86: touchscreen_dmi: Add info for GlobalSpace SolT IVW 11.6" tablet Greg Kroah-Hartman
` (25 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jim Wylder, Mark Brown, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jim Wylder <jwylder@google.com>
[ Upstream commit 611b7eb19d0a305d4de00280e4a71a1b15c507fc ]
Currently, when an adapter defines a max_write_len quirk,
the data will be chunked into data sizes equal to the
max_write_len quirk value. But the payload will be increased by
the size of the register address before transmission. The
resulting value always ends up larger than the limit set
by the quirk.
Avoid this error by setting regmap's max_write to the quirk's
max_write_len minus the number of bytes for the register and
padding. This allows the chunking to work correctly for this
limited case without impacting other use-cases.
Signed-off-by: Jim Wylder <jwylder@google.com>
Link: https://msgid.link/r/20240523211437.2839942-1-jwylder@google.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/base/regmap/regmap-i2c.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/base/regmap/regmap-i2c.c b/drivers/base/regmap/regmap-i2c.c
index 3ec611dc0c09f..a905e955bbfc7 100644
--- a/drivers/base/regmap/regmap-i2c.c
+++ b/drivers/base/regmap/regmap-i2c.c
@@ -350,7 +350,8 @@ static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
if (quirks->max_write_len &&
(bus->max_raw_write == 0 || bus->max_raw_write > quirks->max_write_len))
- max_write = quirks->max_write_len;
+ max_write = quirks->max_write_len -
+ (config->reg_bits + config->pad_bits) / BITS_PER_BYTE;
if (max_read || max_write) {
ret_bus = kmemdup(bus, sizeof(*bus), GFP_KERNEL);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 186/197] platform/x86: touchscreen_dmi: Add info for GlobalSpace SolT IVW 11.6" tablet
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (184 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 185/197] regmap-i2c: Subtract reg size from max_write Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 187/197] platform/x86: touchscreen_dmi: Add info for the EZpad 6s Pro Greg Kroah-Hartman
` (24 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, hmtheboy154, Hans de Goede,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: hmtheboy154 <buingoc67@gmail.com>
[ Upstream commit 7c8639aa41343fd7b3dbe09baf6b0791fcc407a1 ]
This is a tablet created by GlobalSpace Technologies Limited
which uses an Intel Atom x5-Z8300, 4GB of RAM & 64GB of storage.
Link: https://web.archive.org/web/20171102141952/http://globalspace.in/11.6-device.html
Signed-off-by: hmtheboy154 <buingoc67@gmail.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20240527091447.248849-2-hdegoede@redhat.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/platform/x86/touchscreen_dmi.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/platform/x86/touchscreen_dmi.c b/drivers/platform/x86/touchscreen_dmi.c
index c6a10ec2c83f6..88bd117f0bf56 100644
--- a/drivers/platform/x86/touchscreen_dmi.c
+++ b/drivers/platform/x86/touchscreen_dmi.c
@@ -897,6 +897,22 @@ static const struct ts_dmi_data schneider_sct101ctm_data = {
.properties = schneider_sct101ctm_props,
};
+static const struct property_entry globalspace_solt_ivw116_props[] = {
+ PROPERTY_ENTRY_U32("touchscreen-min-x", 7),
+ PROPERTY_ENTRY_U32("touchscreen-min-y", 22),
+ PROPERTY_ENTRY_U32("touchscreen-size-x", 1723),
+ PROPERTY_ENTRY_U32("touchscreen-size-y", 1077),
+ PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-globalspace-solt-ivw116.fw"),
+ PROPERTY_ENTRY_U32("silead,max-fingers", 10),
+ PROPERTY_ENTRY_BOOL("silead,home-button"),
+ { }
+};
+
+static const struct ts_dmi_data globalspace_solt_ivw116_data = {
+ .acpi_name = "MSSL1680:00",
+ .properties = globalspace_solt_ivw116_props,
+};
+
static const struct property_entry techbite_arc_11_6_props[] = {
PROPERTY_ENTRY_U32("touchscreen-min-x", 5),
PROPERTY_ENTRY_U32("touchscreen-min-y", 7),
@@ -1624,6 +1640,15 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "SCT101CTM"),
},
},
+ {
+ /* GlobalSpace SoLT IVW 11.6" */
+ .driver_data = (void *)&globalspace_solt_ivw116_data,
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Globalspace Tech Pvt Ltd"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "SolTIVW"),
+ DMI_MATCH(DMI_PRODUCT_SKU, "PN20170413488"),
+ },
+ },
{
/* Techbite Arc 11.6 */
.driver_data = (void *)&techbite_arc_11_6_data,
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 187/197] platform/x86: touchscreen_dmi: Add info for the EZpad 6s Pro
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (185 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 186/197] platform/x86: touchscreen_dmi: Add info for GlobalSpace SolT IVW 11.6" tablet Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 188/197] block: check for max_hw_sectors underflow Greg Kroah-Hartman
` (23 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, hmtheboy154, Hans de Goede,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: hmtheboy154 <buingoc67@gmail.com>
[ Upstream commit 3050052613790e75b5e4a8536930426b0a8b0774 ]
The "EZpad 6s Pro" uses the same touchscreen as the "EZpad 6 Pro B",
unlike the "Ezpad 6 Pro" which has its own touchscreen.
Signed-off-by: hmtheboy154 <buingoc67@gmail.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20240527091447.248849-3-hdegoede@redhat.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/platform/x86/touchscreen_dmi.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/platform/x86/touchscreen_dmi.c b/drivers/platform/x86/touchscreen_dmi.c
index 88bd117f0bf56..89e1be0815b52 100644
--- a/drivers/platform/x86/touchscreen_dmi.c
+++ b/drivers/platform/x86/touchscreen_dmi.c
@@ -1401,6 +1401,17 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
DMI_MATCH(DMI_BIOS_DATE, "04/24/2018"),
},
},
+ {
+ /* Jumper EZpad 6s Pro */
+ .driver_data = (void *)&jumper_ezpad_6_pro_b_data,
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Jumper"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Ezpad"),
+ /* Above matches are too generic, add bios match */
+ DMI_MATCH(DMI_BIOS_VERSION, "E.WSA116_8.E1.042.bin"),
+ DMI_MATCH(DMI_BIOS_DATE, "01/08/2020"),
+ },
+ },
{
/* Jumper EZpad 6 m4 */
.driver_data = (void *)&jumper_ezpad_6_m4_data,
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 188/197] block: check for max_hw_sectors underflow
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (186 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 187/197] platform/x86: touchscreen_dmi: Add info for the EZpad 6s Pro Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 189/197] nvmet: fix a possible leak when destroy a ctrl during qp establishment Greg Kroah-Hartman
` (22 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Hannes Reinecke, Christoph Hellwig,
John Garry, Jens Axboe, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hannes Reinecke <hare@kernel.org>
[ Upstream commit e993db2d6e5207f1ae061c2ac554ab1f714c741d ]
The logical block size need to be smaller than the max_hw_sector
setting, otherwise we can't even transfer a single LBA.
Signed-off-by: Hannes Reinecke <hare@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
block/blk-settings.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/block/blk-settings.c b/block/blk-settings.c
index 15319b217bf3f..4bd7cbab4c241 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -104,6 +104,7 @@ static int blk_validate_zoned_limits(struct queue_limits *lim)
static int blk_validate_limits(struct queue_limits *lim)
{
unsigned int max_hw_sectors;
+ unsigned int logical_block_sectors;
/*
* Unless otherwise specified, default to 512 byte logical blocks and a
@@ -134,8 +135,11 @@ static int blk_validate_limits(struct queue_limits *lim)
lim->max_hw_sectors = BLK_SAFE_MAX_SECTORS;
if (WARN_ON_ONCE(lim->max_hw_sectors < PAGE_SECTORS))
return -EINVAL;
+ logical_block_sectors = lim->logical_block_size >> SECTOR_SHIFT;
+ if (WARN_ON_ONCE(logical_block_sectors > lim->max_hw_sectors))
+ return -EINVAL;
lim->max_hw_sectors = round_down(lim->max_hw_sectors,
- lim->logical_block_size >> SECTOR_SHIFT);
+ logical_block_sectors);
/*
* The actual max_sectors value is a complex beast and also takes the
@@ -153,7 +157,7 @@ static int blk_validate_limits(struct queue_limits *lim)
lim->max_sectors = min(max_hw_sectors, BLK_DEF_MAX_SECTORS_CAP);
}
lim->max_sectors = round_down(lim->max_sectors,
- lim->logical_block_size >> SECTOR_SHIFT);
+ logical_block_sectors);
/*
* Random default for the maximum number of segments. Driver should not
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 189/197] nvmet: fix a possible leak when destroy a ctrl during qp establishment
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (187 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 188/197] block: check for max_hw_sectors underflow Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 190/197] kbuild: fix short log for AS in link-vmlinux.sh Greg Kroah-Hartman
` (21 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alex Turin, Sagi Grimberg,
Christoph Hellwig, Keith Busch, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sagi Grimberg <sagi@grimberg.me>
[ Upstream commit c758b77d4a0a0ed3a1292b3fd7a2aeccd1a169a4 ]
In nvmet_sq_destroy we capture sq->ctrl early and if it is non-NULL we
know that a ctrl was allocated (in the admin connect request handler)
and we need to release pending AERs, clear ctrl->sqs and sq->ctrl
(for nvme-loop primarily), and drop the final reference on the ctrl.
However, a small window is possible where nvmet_sq_destroy starts (as
a result of the client giving up and disconnecting) concurrently with
the nvme admin connect cmd (which may be in an early stage). But *before*
kill_and_confirm of sq->ref (i.e. the admin connect managed to get an sq
live reference). In this case, sq->ctrl was allocated however after it was
captured in a local variable in nvmet_sq_destroy.
This prevented the final reference drop on the ctrl.
Solve this by re-capturing the sq->ctrl after all inflight request has
completed, where for sure sq->ctrl reference is final, and move forward
based on that.
This issue was observed in an environment with many hosts connecting
multiple ctrls simoutanuosly, creating a delay in allocating a ctrl
leading up to this race window.
Reported-by: Alex Turin <alex@vastdata.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/nvme/target/core.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index 2fde22323622e..06f0c587f3437 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -818,6 +818,15 @@ void nvmet_sq_destroy(struct nvmet_sq *sq)
percpu_ref_exit(&sq->ref);
nvmet_auth_sq_free(sq);
+ /*
+ * we must reference the ctrl again after waiting for inflight IO
+ * to complete. Because admin connect may have sneaked in after we
+ * store sq->ctrl locally, but before we killed the percpu_ref. the
+ * admin connect allocates and assigns sq->ctrl, which now needs a
+ * final ref put, as this ctrl is going away.
+ */
+ ctrl = sq->ctrl;
+
if (ctrl) {
/*
* The teardown flow may take some time, and the host may not
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 190/197] kbuild: fix short log for AS in link-vmlinux.sh
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (188 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 189/197] nvmet: fix a possible leak when destroy a ctrl during qp establishment Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 191/197] nfc/nci: Add the inconsistency check between the input data length and count Greg Kroah-Hartman
` (20 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Masahiro Yamada, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <masahiroy@kernel.org>
[ Upstream commit 3430f65d6130ccbc86f0ff45642eeb9e2032a600 ]
In convention, short logs print the output file, not the input file.
Let's change the suffix for 'AS' since it assembles *.S into *.o.
[Before]
LD .tmp_vmlinux.kallsyms1
NM .tmp_vmlinux.kallsyms1.syms
KSYMS .tmp_vmlinux.kallsyms1.S
AS .tmp_vmlinux.kallsyms1.S
LD .tmp_vmlinux.kallsyms2
NM .tmp_vmlinux.kallsyms2.syms
KSYMS .tmp_vmlinux.kallsyms2.S
AS .tmp_vmlinux.kallsyms2.S
LD vmlinux
[After]
LD .tmp_vmlinux.kallsyms1
NM .tmp_vmlinux.kallsyms1.syms
KSYMS .tmp_vmlinux.kallsyms1.S
AS .tmp_vmlinux.kallsyms1.o
LD .tmp_vmlinux.kallsyms2
NM .tmp_vmlinux.kallsyms2.syms
KSYMS .tmp_vmlinux.kallsyms2.S
AS .tmp_vmlinux.kallsyms2.o
LD vmlinux
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
scripts/link-vmlinux.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 7862a81017477..a9434a72cac4f 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -182,7 +182,7 @@ kallsyms_step()
mksysmap ${kallsyms_vmlinux} ${kallsyms_vmlinux}.syms ${kallsymso_prev}
kallsyms ${kallsyms_vmlinux}.syms ${kallsyms_S}
- info AS ${kallsyms_S}
+ info AS ${kallsymso}
${CC} ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS} \
${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \
-c -o ${kallsymso} ${kallsyms_S}
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 191/197] nfc/nci: Add the inconsistency check between the input data length and count
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (189 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 190/197] kbuild: fix short log for AS in link-vmlinux.sh Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 192/197] spi: cadence: Ensure data lines set to low during dummy-cycle period Greg Kroah-Hartman
` (19 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Edward Adam Davis, David S. Miller,
Sasha Levin, syzbot+71bfed2b2bcea46c98f2
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Edward Adam Davis <eadavis@qq.com>
[ Upstream commit 068648aab72c9ba7b0597354ef4d81ffaac7b979 ]
write$nci(r0, &(0x7f0000000740)=ANY=[@ANYBLOB="610501"], 0xf)
Syzbot constructed a write() call with a data length of 3 bytes but a count value
of 15, which passed too little data to meet the basic requirements of the function
nci_rf_intf_activated_ntf_packet().
Therefore, increasing the comparison between data length and count value to avoid
problems caused by inconsistent data length and count.
Reported-and-tested-by: syzbot+71bfed2b2bcea46c98f2@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/nfc/virtual_ncidev.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/nfc/virtual_ncidev.c b/drivers/nfc/virtual_ncidev.c
index 590b038e449e5..6b89d596ba9af 100644
--- a/drivers/nfc/virtual_ncidev.c
+++ b/drivers/nfc/virtual_ncidev.c
@@ -125,6 +125,10 @@ static ssize_t virtual_ncidev_write(struct file *file,
kfree_skb(skb);
return -EFAULT;
}
+ if (strnlen(skb->data, count) != count) {
+ kfree_skb(skb);
+ return -EINVAL;
+ }
nci_recv_frame(vdev->ndev, skb);
return count;
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 192/197] spi: cadence: Ensure data lines set to low during dummy-cycle period
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (190 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 191/197] nfc/nci: Add the inconsistency check between the input data length and count Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 193/197] ALSA: ump: Set default protocol when not given explicitly Greg Kroah-Hartman
` (18 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Witold Sadowski, Mark Brown,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Witold Sadowski <wsadowski@marvell.com>
[ Upstream commit 4a69c1264ff41bc5bf7c03101ada0454fbf08868 ]
During dummy-cycles xSPI will switch GPIO into Hi-Z mode. In that dummy
period voltage on data lines will slowly drop, what can cause
unintentional modebyte transmission. Value send to SPI memory chip will
depend on last address, and clock frequency.
To prevent unforeseen consequences of that behaviour, force send
single modebyte(0x00).
Modebyte will be send only if number of dummy-cycles is not equal
to 0. Code must also reduce dummycycle byte count by one - as one byte
is send as modebyte.
Signed-off-by: Witold Sadowski <wsadowski@marvell.com>
Link: https://msgid.link/r/20240529074037.1345882-2-wsadowski@marvell.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/spi/spi-cadence-xspi.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/spi/spi-cadence-xspi.c b/drivers/spi/spi-cadence-xspi.c
index 8648b8eb080dc..cdce2e280f663 100644
--- a/drivers/spi/spi-cadence-xspi.c
+++ b/drivers/spi/spi-cadence-xspi.c
@@ -145,6 +145,9 @@
#define CDNS_XSPI_STIG_DONE_FLAG BIT(0)
#define CDNS_XSPI_TRD_STATUS 0x0104
+#define MODE_NO_OF_BYTES GENMASK(25, 24)
+#define MODEBYTES_COUNT 1
+
/* Helper macros for filling command registers */
#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_1(op, data_phase) ( \
FIELD_PREP(CDNS_XSPI_CMD_INSTR_TYPE, (data_phase) ? \
@@ -157,9 +160,10 @@
FIELD_PREP(CDNS_XSPI_CMD_P1_R2_ADDR3, ((op)->addr.val >> 24) & 0xFF) | \
FIELD_PREP(CDNS_XSPI_CMD_P1_R2_ADDR4, ((op)->addr.val >> 32) & 0xFF))
-#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op) ( \
+#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, modebytes) ( \
FIELD_PREP(CDNS_XSPI_CMD_P1_R3_ADDR5, ((op)->addr.val >> 40) & 0xFF) | \
FIELD_PREP(CDNS_XSPI_CMD_P1_R3_CMD, (op)->cmd.opcode) | \
+ FIELD_PREP(MODE_NO_OF_BYTES, modebytes) | \
FIELD_PREP(CDNS_XSPI_CMD_P1_R3_NUM_ADDR_BYTES, (op)->addr.nbytes))
#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_4(op, chipsel) ( \
@@ -173,12 +177,12 @@
#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_2(op) \
FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R2_DCNT_L, (op)->data.nbytes & 0xFFFF)
-#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op) ( \
+#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op, dummybytes) ( \
FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R3_DCNT_H, \
((op)->data.nbytes >> 16) & 0xffff) | \
FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R3_NUM_OF_DUMMY, \
(op)->dummy.buswidth != 0 ? \
- (((op)->dummy.nbytes * 8) / (op)->dummy.buswidth) : \
+ (((dummybytes) * 8) / (op)->dummy.buswidth) : \
0))
#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_4(op, chipsel) ( \
@@ -351,6 +355,7 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi,
u32 cmd_regs[6];
u32 cmd_status;
int ret;
+ int dummybytes = op->dummy.nbytes;
ret = cdns_xspi_wait_for_controller_idle(cdns_xspi);
if (ret < 0)
@@ -365,7 +370,12 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi,
memset(cmd_regs, 0, sizeof(cmd_regs));
cmd_regs[1] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_1(op, data_phase);
cmd_regs[2] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_2(op);
- cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op);
+ if (dummybytes != 0) {
+ cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, 1);
+ dummybytes--;
+ } else {
+ cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, 0);
+ }
cmd_regs[4] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_4(op,
cdns_xspi->cur_cs);
@@ -375,7 +385,7 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi,
cmd_regs[0] = CDNS_XSPI_STIG_DONE_FLAG;
cmd_regs[1] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_1(op);
cmd_regs[2] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_2(op);
- cmd_regs[3] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op);
+ cmd_regs[3] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op, dummybytes);
cmd_regs[4] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_4(op,
cdns_xspi->cur_cs);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 193/197] ALSA: ump: Set default protocol when not given explicitly
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (191 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 192/197] spi: cadence: Ensure data lines set to low during dummy-cycle period Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 194/197] drm/amdgpu: silence UBSAN warning Greg Kroah-Hartman
` (17 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Takashi Iwai, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <tiwai@suse.de>
[ Upstream commit bc42ca002d5d211f9c57334b9b4c25ddb0b4ec35 ]
When an inquiry of the current protocol via UMP Stream Configuration
message fails by some reason, we may leave the current protocol
undefined, which may lead to unexpected behavior. Better to assume a
valid protocol found in the protocol capability bits instead.
For a device that doesn't support the UMP v1.2 feature, it won't reach
to this code path, and USB MIDI GTB descriptor would be used for
determining the protocol, instead.
Link: https://lore.kernel.org/r/20240529164723.18309-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/core/ump.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/sound/core/ump.c b/sound/core/ump.c
index 117c7ecc48563..3f61220c23b4e 100644
--- a/sound/core/ump.c
+++ b/sound/core/ump.c
@@ -967,6 +967,14 @@ int snd_ump_parse_endpoint(struct snd_ump_endpoint *ump)
if (err < 0)
ump_dbg(ump, "Unable to get UMP EP stream config\n");
+ /* If no protocol is set by some reason, assume the valid one */
+ if (!(ump->info.protocol & SNDRV_UMP_EP_INFO_PROTO_MIDI_MASK)) {
+ if (ump->info.protocol_caps & SNDRV_UMP_EP_INFO_PROTO_MIDI2)
+ ump->info.protocol |= SNDRV_UMP_EP_INFO_PROTO_MIDI2;
+ else if (ump->info.protocol_caps & SNDRV_UMP_EP_INFO_PROTO_MIDI1)
+ ump->info.protocol |= SNDRV_UMP_EP_INFO_PROTO_MIDI1;
+ }
+
/* Query and create blocks from Function Blocks */
for (blk = 0; blk < ump->info.num_blocks; blk++) {
err = create_block_from_fb_info(ump, blk);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 194/197] drm/amdgpu: silence UBSAN warning
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (192 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 193/197] ALSA: ump: Set default protocol when not given explicitly Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 195/197] hwmon: (dell-smm) Add Dell G15 5511 to fan control whitelist Greg Kroah-Hartman
` (16 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christian König, Alex Deucher,
Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <alexander.deucher@amd.com>
[ Upstream commit 05d9e24ddb15160164ba6e917a88c00907dc2434 ]
Convert a variable sized array from [1] to [].
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/include/atomfirmware.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h
index a34f064df336b..09cbc3afd6d89 100644
--- a/drivers/gpu/drm/amd/include/atomfirmware.h
+++ b/drivers/gpu/drm/amd/include/atomfirmware.h
@@ -3583,7 +3583,7 @@ struct atom_gpio_voltage_object_v4
uint8_t phase_delay_us; // phase delay in unit of micro second
uint8_t reserved;
uint32_t gpio_mask_val; // GPIO Mask value
- struct atom_voltage_gpio_map_lut voltage_gpio_lut[1];
+ struct atom_voltage_gpio_map_lut voltage_gpio_lut[] __counted_by(gpio_entry_num);
};
struct atom_svid2_voltage_object_v4
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 195/197] hwmon: (dell-smm) Add Dell G15 5511 to fan control whitelist
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (193 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 194/197] drm/amdgpu: silence UBSAN warning Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 196/197] null_blk: Do not allow runt zone with zone capacity smaller then zone size Greg Kroah-Hartman
` (15 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Armin Wolf, Pali Rohár,
Guenter Roeck, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Armin Wolf <W_Armin@gmx.de>
[ Upstream commit fa0bc8f297b29126b5ae983406e9bc76d48a9a8e ]
A user reported that he needs to disable BIOS fan control on his
Dell G15 5511 in order to be able to control the fans.
Closes: https://github.com/Wer-Wolf/i8kutils/issues/5
Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Acked-by: Pali Rohár <pali@kernel.org>
Link: https://lore.kernel.org/r/20240522210809.294488-1-W_Armin@gmx.de
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/hwmon/dell-smm-hwmon.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
index efcf78673e747..b6a995c852ab4 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -1530,6 +1530,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
},
.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
},
+ {
+ .ident = "Dell G15 5511",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"),
+ },
+ .driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
+ },
{ }
};
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 196/197] null_blk: Do not allow runt zone with zone capacity smaller then zone size
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (194 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 195/197] hwmon: (dell-smm) Add Dell G15 5511 to fan control whitelist Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 197/197] libbpf: dont close(-1) in multi-uprobe feature detector Greg Kroah-Hartman
` (14 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Damien Le Moal, Niklas Cassel,
Bart Van Assche, Jens Axboe, Sasha Levin
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Damien Le Moal <dlemoal@kernel.org>
[ Upstream commit b164316808ec5de391c3e7b0148ec937d32d280d ]
A zoned device with a smaller last zone together with a zone capacity
smaller than the zone size does make any sense as that does not
correspond to any possible setup for a real device:
1) For ZNS and zoned UFS devices, all zones are always the same size.
2) For SMR HDDs, all zones always have the same capacity.
In other words, if we have a smaller last runt zone, then this zone
capacity should always be equal to the zone size.
Add a check in null_init_zoned_dev() to prevent a configuration to have
both a smaller zone size and a zone capacity smaller than the zone size.
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20240530054035.491497-2-dlemoal@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/block/null_blk/zoned.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/block/null_blk/zoned.c b/drivers/block/null_blk/zoned.c
index 27928deccc643..74d0418ddac78 100644
--- a/drivers/block/null_blk/zoned.c
+++ b/drivers/block/null_blk/zoned.c
@@ -84,6 +84,17 @@ int null_init_zoned_dev(struct nullb_device *dev,
return -EINVAL;
}
+ /*
+ * If a smaller zone capacity was requested, do not allow a smaller last
+ * zone at the same time as such zone configuration does not correspond
+ * to any real zoned device.
+ */
+ if (dev->zone_capacity != dev->zone_size &&
+ dev->size & (dev->zone_size - 1)) {
+ pr_err("A smaller last zone is not allowed with zone capacity smaller than zone size.\n");
+ return -EINVAL;
+ }
+
zone_capacity_sects = mb_to_sects(dev->zone_capacity);
dev_capacity_sects = mb_to_sects(dev->size);
dev->zone_size_sects = mb_to_sects(dev->zone_size);
--
2.43.0
^ permalink raw reply related [flat|nested] 218+ messages in thread
* [PATCH 6.9 197/197] libbpf: dont close(-1) in multi-uprobe feature detector
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (195 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 196/197] null_blk: Do not allow runt zone with zone capacity smaller then zone size Greg Kroah-Hartman
@ 2024-07-09 11:10 ` Greg Kroah-Hartman
2024-07-09 18:42 ` [PATCH 6.9 000/197] 6.9.9-rc1 review SeongJae Park
` (13 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-09 11:10 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Andrii Nakryiko, Jiri Olsa,
Alexei Starovoitov
6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrii Nakryiko <andrii@kernel.org>
commit 7d0b3953f6d832daec10a0d76e2d4db405768a8b upstream.
Guard close(link_fd) with extra link_fd >= 0 check to prevent close(-1).
Detected by Coverity static analysis.
Fixes: 04d939a2ab22 ("libbpf: detect broken PID filtering logic for multi-uprobe")
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/r/20240529231212.768828-1-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/lib/bpf/features.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/tools/lib/bpf/features.c
+++ b/tools/lib/bpf/features.c
@@ -393,7 +393,8 @@ static int probe_uprobe_multi_link(int t
err = -errno; /* close() can clobber errno */
if (link_fd >= 0 || err != -EBADF) {
- close(link_fd);
+ if (link_fd >= 0)
+ close(link_fd);
close(prog_fd);
return 0;
}
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 057/197] powerpc/dexcr: Track the DEXCR per-process
2024-07-09 11:08 ` [PATCH 6.9 057/197] powerpc/dexcr: Track the DEXCR per-process Greg Kroah-Hartman
@ 2024-07-09 12:27 ` Michael Ellerman
2024-07-11 9:35 ` Greg Kroah-Hartman
0 siblings, 1 reply; 218+ messages in thread
From: Michael Ellerman @ 2024-07-09 12:27 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: Greg Kroah-Hartman, patches, Benjamin Gray, Sasha Levin
Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
> 6.9-stable review patch. If anyone has any objections, please let me know.
>
> ------------------
>
> From: Benjamin Gray <bgray@linux.ibm.com>
>
> [ Upstream commit 75171f06c4507c3b6b5a69d793879fb20d108bb1 ]
>
> Add capability to make the DEXCR act as a per-process SPR.
>
> We do not yet have an interface for changing the values per task. We
> also expect the kernel to use a single DEXCR value across all tasks
> while in privileged state, so there is no need to synchronize after
> changing it (the userspace aspects will synchronize upon returning to
> userspace).
>
> Signed-off-by: Benjamin Gray <bgray@linux.ibm.com>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> Link: https://msgid.link/20240417112325.728010-3-bgray@linux.ibm.com
> Stable-dep-of: bbd99922d0f4 ("powerpc/dexcr: Reset DEXCR value across exec")
This is listed as a dep, but I don't see that commit (bbd99922d0f4)
queued up?
This series included user-visible changes including new prctls, it
shouldn't be backported piecemeal.
I think this series shouldn't be backported unless someone explicitly
wants it.
cheers
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (196 preceding siblings ...)
2024-07-09 11:10 ` [PATCH 6.9 197/197] libbpf: dont close(-1) in multi-uprobe feature detector Greg Kroah-Hartman
@ 2024-07-09 18:42 ` SeongJae Park
2024-07-09 18:58 ` Markus Reichelt
` (12 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: SeongJae Park @ 2024-07-09 18:42 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: SeongJae Park, stable, patches, linux-kernel, torvalds, akpm,
linux, shuah, patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie, damon
Hello,
On Tue, 9 Jul 2024 13:07:34 +0200 Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> and the diffstat can be found below.
This rc kernel passes DAMON functionality test[1] on my test machine.
Attaching the test results summary below. Please note that I retrieved the
kernel from linux-stable-rc tree[2].
Tested-by: SeongJae Park <sj@kernel.org>
[1] https://github.com/awslabs/damon-tests/tree/next/corr
[2] 6ced42af8b2d ("Linux 6.9.9-rc1")
Thanks,
SJ
[...]
---
ok 6 selftests: damon: debugfs_duplicate_context_creation.sh
ok 7 selftests: damon: debugfs_rm_non_contexts.sh
ok 8 selftests: damon: debugfs_target_ids_read_before_terminate_race.sh
ok 9 selftests: damon: debugfs_target_ids_pid_leak.sh
ok 10 selftests: damon: sysfs.sh
ok 11 selftests: damon: sysfs_update_removed_scheme_dir.sh
ok 12 selftests: damon: sysfs_update_schemes_tried_regions_hang.py
ok 13 selftests: damon: sysfs_update_schemes_tried_regions_wss_estimation.py
ok 14 selftests: damon: damos_quota.py
ok 15 selftests: damon: damos_apply_interval.py
ok 16 selftests: damon: reclaim.sh
ok 17 selftests: damon: lru_sort.sh
ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh
ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_arm64.sh
ok 12 selftests: damon-tests: build_m68k.sh
ok 13 selftests: damon-tests: build_i386_idle_flag.sh
ok 14 selftests: damon-tests: build_i386_highpte.sh
ok 15 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (197 preceding siblings ...)
2024-07-09 18:42 ` [PATCH 6.9 000/197] 6.9.9-rc1 review SeongJae Park
@ 2024-07-09 18:58 ` Markus Reichelt
2024-07-09 19:49 ` Pavel Machek
` (11 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Markus Reichelt @ 2024-07-09 18:58 UTC (permalink / raw)
To: stable, linux-kernel
* Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
Hi Greg
6.9.9-rc1 compiles, boots and runs here on x86_64
(AMD Ryzen 5 PRO 4650G, Slackware64-15.0)
Tested-by: Markus Reichelt <lkt+2023@mareichelt.com>
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (198 preceding siblings ...)
2024-07-09 18:58 ` Markus Reichelt
@ 2024-07-09 19:49 ` Pavel Machek
2024-07-09 20:01 ` Kelsey Steele
` (10 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Pavel Machek @ 2024-07-09 19:49 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie
[-- Attachment #1: Type: text/plain, Size: 774 bytes --]
Hi!
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 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.
CIP testing did not find any problems here:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-6.9.y
6.6 passes our testing, too:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-6.6.y
Tested-by: Pavel Machek (CIP) <pavel@denx.de>
Best regards,
Pavel
--
DENX Software Engineering GmbH, Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (199 preceding siblings ...)
2024-07-09 19:49 ` Pavel Machek
@ 2024-07-09 20:01 ` Kelsey Steele
2024-07-09 23:21 ` Shuah Khan
` (9 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Kelsey Steele @ 2024-07-09 20:01 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie
On Tue, Jul 09, 2024 at 01:07:34PM +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
>
No regressions found on WSL (x86 and arm64).
Built, booted, and reviewed dmesg.
Thank you. :)
Tested-by: Kelsey Steele <kelseysteele@linux.microsoft.com>
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (200 preceding siblings ...)
2024-07-09 20:01 ` Kelsey Steele
@ 2024-07-09 23:21 ` Shuah Khan
2024-07-09 23:24 ` Peter Schneider
` (8 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Shuah Khan @ 2024-07-09 23:21 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor, allen.lkml, broonie, Shuah Khan
On 7/9/24 05:07, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
>
Compiled and booted on my test system. No dmesg regressions.
Tested-by: Shuah Khan <skhan@linuxfoundation.org>
thanks,
-- Shuah
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (201 preceding siblings ...)
2024-07-09 23:21 ` Shuah Khan
@ 2024-07-09 23:24 ` Peter Schneider
2024-07-10 2:36 ` Bagas Sanjaya
` (7 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Peter Schneider @ 2024-07-09 23:24 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor, allen.lkml, broonie
Am 09.07.2024 um 13:07 schrieb Greg Kroah-Hartman:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 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.
Builds, boots and works on my 2-socket Ivy Bridge Xeon E5-2697 v2 server. No dmesg
oddities or regressions found.
Tested-by: Peter Schneider <pschneider1968@googlemail.com>
Beste Grüße,
Peter Schneider
--
Climb the mountain not to plant your flag, but to embrace the challenge,
enjoy the air and behold the view. Climb it so you can see the world,
not so the world can see you. -- David McCullough Jr.
OpenPGP: 0xA3828BD796CCE11A8CADE8866E3A92C92C3FF244
Download: https://www.peters-netzplatz.de/download/pschneider1968_pub.asc
https://keys.mailvelope.com/pks/lookup?op=get&search=pschneider1968@googlemail.com
https://keys.mailvelope.com/pks/lookup?op=get&search=pschneider1968@gmail.com
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (202 preceding siblings ...)
2024-07-09 23:24 ` Peter Schneider
@ 2024-07-10 2:36 ` Bagas Sanjaya
2024-07-10 3:11 ` Naresh Kamboju
` (6 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Bagas Sanjaya @ 2024-07-10 2:36 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor, allen.lkml, broonie
[-- Attachment #1: Type: text/plain, Size: 557 bytes --]
On Tue, Jul 09, 2024 at 01:07:34PM +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 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.
>
Successfully compiled and installed the kernel on my computer (Acer
Aspire E15, Intel Core i3 Haswell). No noticeable regressions.
Tested-by: Bagas Sanjaya <bagasdotme@gmail.com>
--
An old man doll... just what I always wanted! - Clara
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (203 preceding siblings ...)
2024-07-10 2:36 ` Bagas Sanjaya
@ 2024-07-10 3:11 ` Naresh Kamboju
2024-07-11 8:30 ` Naresh Kamboju
2024-07-10 8:34 ` Jon Hunter
` (5 subsequent siblings)
210 siblings, 1 reply; 218+ messages in thread
From: Naresh Kamboju @ 2024-07-10 3:11 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie,
Anders Roxell, Mike Christie, Paul E. McKenney, rcu, gnstark,
linux-mm, Jinliang Zheng, Dan Carpenter, Arnd Bergmann
On Tue, 9 Jul 2024 at 16:49, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
Results from Linaro’s test farm.
The following kernel panic was noticed while running kunit tests.
First seen on
git commit id: 2471237b27c681c22e5f2b7175584aa7d5c89bfc
date: on July 9th 2024.
GOOD: v6.9.7-223-g03247eed042d
BAD: v6.9.8-198-g2471237b27c6
Always reproduce: yes.
* qemu-arm64, Juno-r2, rk3399-rock-pi-4b and qemu-x86_64 the kunit-boot failed.
- gcc-13-defconfig-kunit
- clang-18-defconfig-kunit
- clang-nightly-defconfig-kunit
- gcc-8-defconfig-kunit
Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
Crash log [1]:
---------
<4>[ 63.601683] kernel_init_freeable (init/main.c:1559)
<4>[ 63.602335] kernel_init (init/main.c:1446)
<4>[ 63.602980] ret_from_fork (arch/arm64/kernel/entry.S:861)
<3>[ 63.603703]
<3>[ 63.604057] The buggy address belongs to the object at fff00000c07582e8
<3>[ 63.604057] which belongs to the cache inode_cache of size 616
<3>[ 63.605281] The buggy address is located 80 bytes to the right of
<3>[ 63.605281] allocated 616-byte region [fff00000c07582e8,
fff00000c0758550)
<3>[ 63.606592]
<3>[ 63.607294] The buggy address belongs to the physical page:
<4>[ 63.607948] page: refcount:1 mapcount:0 mapping:0000000000000000
index:0x0 pfn:0x100758
<4>[ 63.608830] head: order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0
<4>[ 63.609593] flags:
0xbfffe0000000840(slab|head|node=0|zone=2|lastcpupid=0x1ffff)
<4>[ 63.610449] page_type: 0xffffffff()
<4>[ 63.611934] raw: 0bfffe0000000840 fff00000c08d2dc0
dead000000000122 0000000000000000
<4>[ 63.612810] raw: 0000000000000000 0000000080160016
00000001ffffffff 0000000000000000
<4>[ 63.613668] head: 0bfffe0000000840 fff00000c08d2dc0
dead000000000122 0000000000000000
<4>[ 63.614525] head: 0000000000000000 0000000080160016
00000001ffffffff 0000000000000000
<4>[ 63.615694] head: 0bfffe0000000002 ffffc1ffc301d601
ffffc1ffc301d648 00000000ffffffff
<4>[ 63.616583] head: 0000000400000000 0000000000000000
00000000ffffffff 0000000000000000
<4>[ 63.617391] page dumped because: kasan: bad access detected
<3>[ 63.618034]
<3>[ 63.618354] Memory state around the buggy address:
<3>[ 63.619281] fff00000c0758480: 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00
<3>[ 63.620086] fff00000c0758500: 00 00 00 00 00 00 00 00 00 00 fc
fc fc fc fc fc
<3>[ 63.620886] >fff00000c0758580: fc fc fc fc fc fc fc fc fc fc 00
00 00 00 00 00
<3>[ 63.621664] ^
<3>[ 63.622235] fff00000c0758600: 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00
<3>[ 63.623362] fff00000c0758680: 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00
<3>[ 63.624138]
==================================================================
<6>[ 63.645148] not ok 1 block_bits=10 cluster_bits=3
blocks_per_group=8192 group_count=4 desc_size=64
<6>[ 63.658504] ok 2 block_bits=12 cluster_bits=3
blocks_per_group=8192 group_count=4 desc_size=64
<1>[ 63.674531] Unable to handle kernel NULL pointer dereference at
virtual address 0000000000000008
<1>[ 63.675691] Mem abort info:
<1>[ 63.676527] ESR = 0x000000009600006b
<1>[ 63.677658] EC = 0x25: DABT (current EL), IL = 32 bits
<1>[ 63.678274] SET = 0, FnV = 0
<1>[ 63.678906] EA = 0, S1PTW = 0
<1>[ 63.679880] FSC = 0x2b: level -1 translation fault
<1>[ 63.680879] Data abort info:
<1>[ 63.681606] ISV = 0, ISS = 0x0000006b, ISS2 = 0x00000000
<1>[ 63.682544] CM = 0, WnR = 1, TnD = 0, TagAccess = 0
<1>[ 63.683493] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
<1>[ 63.684732] [0000000000000008] user address but active_mm is swapper
<0>[ 63.686080] Internal error: Oops: 000000009600006b [#1] PREEMPT SMP
<4>[ 63.688843] Modules linked in:
<4>[ 63.689662] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G B
N 6.9.9-rc1 #1
<4>[ 63.690522] Hardware name: linux,dummy-virt (DT)
<4>[ 63.691532] pstate: 224000c9 (nzCv daIF +PAN -UAO +TCO -DIT
-SSBS BTYPE=--)
<4>[ 63.692423] pc : _raw_spin_lock_irq
(arch/arm64/include/asm/atomic_lse.h:271
arch/arm64/include/asm/cmpxchg.h:120
arch/arm64/include/asm/cmpxchg.h:169
include/linux/atomic/atomic-arch-fallback.h:2055
include/linux/atomic/atomic-arch-fallback.h:2173
include/linux/atomic/atomic-instrumented.h:1302
include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187
include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
<4>[ 63.693097] lr : _raw_spin_lock_irq
(include/linux/atomic/atomic-arch-fallback.h:2172 (discriminator 1)
include/linux/atomic/atomic-instrumented.h:1302 (discriminator 1)
include/asm-generic/qspinlock.h:111 (discriminator 1)
include/linux/spinlock.h:187 (discriminator 1)
include/linux/spinlock_api_smp.h:120 (discriminator 1)
kernel/locking/spinlock.c:170 (discriminator 1))
<4>[ 63.693714] sp : ffff800080087620
<4>[ 63.694519] x29: ffff800080087680 x28: 1ffff00010010f45 x27:
ffff800080087a20
<4>[ 63.696315] x26: 1ffff00010010f47 x25: ffff800080087a00 x24:
fff00000c99f0028
<4>[ 63.697334] x23: 0000000000000000 x22: dfff800000000000 x21:
ffff800080087640
<4>[ 63.698333] x20: 1ffff00010010ec4 x19: 0000000000000008 x18:
000000004b9fd0a9
<4>[ 63.699711] x17: 0000000000000000 x16: fff00000da13e180 x15:
ffffaa8e3330c4c4
<4>[ 63.700732] x14: ffffaa8e33312508 x13: ffffaa8e3583b0ec x12:
ffff700010010ec9
<4>[ 63.701734] x11: 1ffff00010010ec8 x10: ffff700010010ec8 x9 :
dfff800000000000
<4>[ 63.702792] x8 : 0000000000000003 x7 : 0000000000000001 x6 :
ffff700010010ec8
<4>[ 63.704539] x5 : ffff800080087640 x4 : ffff700010010ec8 x3 :
ffffaa8e3585c520
<4>[ 63.705529] x2 : 0000000000000001 x1 : 0000000000000000 x0 :
0000000000000000
<4>[ 63.706625] Call trace:
<4>[ 63.707408] _raw_spin_lock_irq
(arch/arm64/include/asm/atomic_lse.h:271
arch/arm64/include/asm/cmpxchg.h:120
arch/arm64/include/asm/cmpxchg.h:169
include/linux/atomic/atomic-arch-fallback.h:2055
include/linux/atomic/atomic-arch-fallback.h:2173
include/linux/atomic/atomic-instrumented.h:1302
include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187
include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
<4>[ 63.708130] wait_for_completion_timeout
(kernel/sched/completion.c:84 kernel/sched/completion.c:116
kernel/sched/completion.c:127 kernel/sched/completion.c:167)
<4>[ 63.708902] kunit_try_catch_run (lib/kunit/try-catch.c:85)
<4>[ 63.709710] kunit_run_case_catch_errors (lib/kunit/test.c:544)
<4>[ 63.710558] kunit_run_tests (lib/kunit/test.c:649)
<4>[ 63.711555] __kunit_test_suites_init (lib/kunit/test.c:732
(discriminator 1))
<4>[ 63.712489] kunit_run_all_tests (lib/kunit/executor.c:276
lib/kunit/executor.c:392)
<4>[ 63.713317] kernel_init_freeable (init/main.c:1559)
<4>[ 63.713971] kernel_init (init/main.c:1446)
<4>[ 63.714503] ret_from_fork (arch/arm64/kernel/entry.S:861)
<0>[ 63.716154] Code: 93407c02 d503201f 2a0003e1 52800022 (88e17e62)
All code
========
0: 93407c02 sxtw x2, w0
4: d503201f nop
8: 2a0003e1 mov w1, w0
c: 52800022 mov w2, #0x1 // #1
10:* 88e17e62 casa w1, w2, [x19] <-- trapping instruction
Code starting with the faulting instruction
===========================================
0: 88e17e62 casa w1, w2, [x19]
<4>[ 63.717705] ---[ end trace 0000000000000000 ]---
<6>[ 63.718649] note: swapper/0[1] exited with irqs disabled
<6>[ 63.720758] note: swapper/0[1] exited with preempt_count 1
<0>[ 63.722091] Kernel panic - not syncing: Attempted to kill init!
exitcode=0x0000000b
<2>[ 63.724608] SMP: stopping secondary CPUs
<0>[ 63.725877] Kernel Offset: 0x2a8db2200000 from 0xffff800080000000
<0>[ 63.726534] PHYS_OFFSET: 0x40000000
<0>[ 63.727664] CPU features: 0x0,00000006,8f17bd7c,6766773f
<0>[ 63.729291] Memory Limit: none
<0>[ 63.731074] ---[ end Kernel panic - not syncing: Attempted to
kill init! exitcode=0x0000000b ]---
Steps to reproduce on qemu-arm64 link provided [2].
Build artifacts arm64 link provided [3].
The Kconfig is built with defconfig+Kunit and the config link provided [4].
This occurred on following Toolchain builds gcc-13, clang-18,
clang-nightly and gcc-8.
Reproducible always on following devices and emulators,
* rk3399-rock-pi-4b
* qemu-arm64
* qemu-x86_64
I am bisecting this reported issue.
Please let me know if you need more information.
Links:
[1] https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.8-198-g2471237b27c6/testrun/24552495/suite/boot/test/gcc-13-lkftconfig-kunit/log
[2] https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2j0YCwfoW0D9nrPUAeDspHG0iFE/reproducer
[3] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/
[4] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/config
--
Linaro LKFT
https://lkft.linaro.org
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (204 preceding siblings ...)
2024-07-10 3:11 ` Naresh Kamboju
@ 2024-07-10 8:34 ` Jon Hunter
2024-07-10 9:07 ` Christian Heusel
` (4 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Jon Hunter @ 2024-07-10 8:34 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Greg Kroah-Hartman, patches, linux-kernel, torvalds, akpm, linux,
shuah, patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie,
linux-tegra, stable
On Tue, 09 Jul 2024 13:07:34 +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
All tests passing for Tegra ...
Test results for stable-v6.9:
10 builds: 10 pass, 0 fail
26 boots: 26 pass, 0 fail
111 tests: 111 pass, 0 fail
Linux version: 6.9.9-rc1-g6ced42af8b2d
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Jon
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (205 preceding siblings ...)
2024-07-10 8:34 ` Jon Hunter
@ 2024-07-10 9:07 ` Christian Heusel
2024-07-10 11:01 ` Pascal Ernster
` (3 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Christian Heusel @ 2024-07-10 9:07 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie
[-- Attachment #1: Type: text/plain, Size: 391 bytes --]
On 24/07/09 01:07PM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 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.
Tested-by: Christian Heusel <christian@heusel.eu>
Tested on a ThinkPad E14 Gen 3 with a AMD Ryzen 5 5500U CPU
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (206 preceding siblings ...)
2024-07-10 9:07 ` Christian Heusel
@ 2024-07-10 11:01 ` Pascal Ernster
2024-07-10 12:59 ` Ron Economos
` (2 subsequent siblings)
210 siblings, 0 replies; 218+ messages in thread
From: Pascal Ernster @ 2024-07-10 11:01 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor, allen.lkml, broonie
[2024-07-09 13:07] Greg Kroah-Hartman:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
Hi, 6.9.9-rc1 compiled and is running fine on various x86_64 bare metal
and virtual machines of mine (Haswell, Skylake, Kaby Lake, Coffee Lake).
Tested-by: Pascal Ernster <git@hardfalcon.net>
Regard
Pascal
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (207 preceding siblings ...)
2024-07-10 11:01 ` Pascal Ernster
@ 2024-07-10 12:59 ` Ron Economos
2024-07-10 13:04 ` Mark Brown
2024-07-12 17:38 ` Florian Fainelli
210 siblings, 0 replies; 218+ messages in thread
From: Ron Economos @ 2024-07-10 12:59 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor, allen.lkml, broonie
On 7/9/24 4:07 AM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Tested-by: Ron Economos <re@w6rz.net>
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (208 preceding siblings ...)
2024-07-10 12:59 ` Ron Economos
@ 2024-07-10 13:04 ` Mark Brown
2024-07-10 17:20 ` Mark Brown
2024-07-12 17:38 ` Florian Fainelli
210 siblings, 1 reply; 218+ messages in thread
From: Mark Brown @ 2024-07-10 13:04 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml,
Mickaël Salaün
[-- Attachment #1: Type: text/plain, Size: 1471 bytes --]
On Tue, Jul 09, 2024 at 01:07:34PM +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 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.
I'm seeing the RTC date_read_loop test start triggering timeouts on the
i.MX8MP EVK with this:
# # RUN rtc.date_read_loop ...
# # rtctest.c:95:date_read_loop:Continuously reading RTC time for 30s (with 11ms breaks after every read).
# # date_read_loop: Test terminated by timeout
The test was fine with v6.10-rc3 (the first tag it worked at all for
v6.10 but that's another story...), but is broken in -next:
# # RUN rtc.date_read_loop ...
# # rtctest.c:95:date_read_loop:Continuously reading RTC time for 30s (with 11ms breaks after every read).
# # rtctest.c:122:date_read_loop:Performed 2954 RTC time reads.
# # OK rtc.date_read_loop
Bisection points to "selftests/harness: Fix tests timeout and race
condition" but this looks like a test bug, the timeout for tests is 30s
and the test tries to run for 30s which obviously doesn't add up.
Previously the test would pass because the bug the patch is fixing is
that timeout had no effect. I'm also running the test on other
platforms without it triggering new timeouts, it's just this one
specific platform that triggered which is a bit worrying.
I'll send a patch for the test.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-10 13:04 ` Mark Brown
@ 2024-07-10 17:20 ` Mark Brown
0 siblings, 0 replies; 218+ messages in thread
From: Mark Brown @ 2024-07-10 17:20 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml,
Mickaël Salaün
[-- Attachment #1: Type: text/plain, Size: 965 bytes --]
On Wed, Jul 10, 2024 at 02:04:55PM +0100, Mark Brown wrote:
> # # RUN rtc.date_read_loop ...
> # # rtctest.c:95:date_read_loop:Continuously reading RTC time for 30s (with 11ms breaks after every read).
> # # rtctest.c:122:date_read_loop:Performed 2954 RTC time reads.
> # # OK rtc.date_read_loop
> Bisection points to "selftests/harness: Fix tests timeout and race
> condition" but this looks like a test bug, the timeout for tests is 30s
> and the test tries to run for 30s which obviously doesn't add up.
> Previously the test would pass because the bug the patch is fixing is
> that timeout had no effect. I'm also running the test on other
> platforms without it triggering new timeouts, it's just this one
> specific platform that triggered which is a bit worrying.
> I'll send a patch for the test.
Sorry, spoke too soon on that - the test is explicitly overriding the
timeout to be longer so there's something else going on here.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-10 3:11 ` Naresh Kamboju
@ 2024-07-11 8:30 ` Naresh Kamboju
2024-07-11 9:11 ` Greg Kroah-Hartman
0 siblings, 1 reply; 218+ messages in thread
From: Naresh Kamboju @ 2024-07-11 8:30 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie,
Anders Roxell, Mike Christie, Paul E. McKenney, rcu, gnstark,
linux-mm, Jinliang Zheng, Dan Carpenter, Arnd Bergmann,
Mickaël Salaün, Brendan Higgins, Eric W. Biederman,
Shuah Khan
On Wed, 10 Jul 2024 at 08:41, Naresh Kamboju <naresh.kamboju@linaro.org> wrote:
>
> On Tue, 9 Jul 2024 at 16:49, Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> >
> > This is the start of the stable review cycle for the 6.9.9 release.
> > There are 197 patches in this series, all will be posted as a response
> > to this one. If anyone has any issues with these being applied, please
> > let me know.
> >
> > Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> > Anything received after that time might be too late.
> >
> > The whole patch series can be found in one patch at:
> > https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> > or in the git tree and branch at:
> > git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> > and the diffstat can be found below.
> >
> > thanks,
> >
> > greg k-h
>
> Results from Linaro’s test farm.
> The following kernel panic was noticed while running kunit tests.
>
> First seen on
> git commit id: 2471237b27c681c22e5f2b7175584aa7d5c89bfc
> date: on July 9th 2024.
>
> GOOD: v6.9.7-223-g03247eed042d
> BAD: v6.9.8-198-g2471237b27c6
>
> Always reproduce: yes.
>
> * qemu-arm64, Juno-r2, rk3399-rock-pi-4b and qemu-x86_64 the kunit-boot failed.
> - gcc-13-defconfig-kunit
> - clang-18-defconfig-kunit
> - clang-nightly-defconfig-kunit
> - gcc-8-defconfig-kunit
>
> Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
>
> Crash log [1]:
> ---------
> <4>[ 63.601683] kernel_init_freeable (init/main.c:1559)
> <4>[ 63.602335] kernel_init (init/main.c:1446)
> <4>[ 63.602980] ret_from_fork (arch/arm64/kernel/entry.S:861)
> <3>[ 63.603703]
> <3>[ 63.604057] The buggy address belongs to the object at fff00000c07582e8
> <3>[ 63.604057] which belongs to the cache inode_cache of size 616
> <3>[ 63.605281] The buggy address is located 80 bytes to the right of
> <3>[ 63.605281] allocated 616-byte region [fff00000c07582e8,
> fff00000c0758550)
> <3>[ 63.606592]
> <3>[ 63.607294] The buggy address belongs to the physical page:
> <4>[ 63.607948] page: refcount:1 mapcount:0 mapping:0000000000000000
> index:0x0 pfn:0x100758
> <4>[ 63.608830] head: order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0
> <4>[ 63.609593] flags:
> 0xbfffe0000000840(slab|head|node=0|zone=2|lastcpupid=0x1ffff)
> <4>[ 63.610449] page_type: 0xffffffff()
> <4>[ 63.611934] raw: 0bfffe0000000840 fff00000c08d2dc0
> dead000000000122 0000000000000000
> <4>[ 63.612810] raw: 0000000000000000 0000000080160016
> 00000001ffffffff 0000000000000000
> <4>[ 63.613668] head: 0bfffe0000000840 fff00000c08d2dc0
> dead000000000122 0000000000000000
> <4>[ 63.614525] head: 0000000000000000 0000000080160016
> 00000001ffffffff 0000000000000000
> <4>[ 63.615694] head: 0bfffe0000000002 ffffc1ffc301d601
> ffffc1ffc301d648 00000000ffffffff
> <4>[ 63.616583] head: 0000000400000000 0000000000000000
> 00000000ffffffff 0000000000000000
> <4>[ 63.617391] page dumped because: kasan: bad access detected
> <3>[ 63.618034]
> <3>[ 63.618354] Memory state around the buggy address:
> <3>[ 63.619281] fff00000c0758480: 00 00 00 00 00 00 00 00 00 00 00
> 00 00 00 00 00
> <3>[ 63.620086] fff00000c0758500: 00 00 00 00 00 00 00 00 00 00 fc
> fc fc fc fc fc
> <3>[ 63.620886] >fff00000c0758580: fc fc fc fc fc fc fc fc fc fc 00
> 00 00 00 00 00
> <3>[ 63.621664] ^
> <3>[ 63.622235] fff00000c0758600: 00 00 00 00 00 00 00 00 00 00 00
> 00 00 00 00 00
> <3>[ 63.623362] fff00000c0758680: 00 00 00 00 00 00 00 00 00 00 00
> 00 00 00 00 00
> <3>[ 63.624138]
> ==================================================================
> <6>[ 63.645148] not ok 1 block_bits=10 cluster_bits=3
> blocks_per_group=8192 group_count=4 desc_size=64
> <6>[ 63.658504] ok 2 block_bits=12 cluster_bits=3
> blocks_per_group=8192 group_count=4 desc_size=64
> <1>[ 63.674531] Unable to handle kernel NULL pointer dereference at
> virtual address 0000000000000008
> <1>[ 63.675691] Mem abort info:
> <1>[ 63.676527] ESR = 0x000000009600006b
> <1>[ 63.677658] EC = 0x25: DABT (current EL), IL = 32 bits
> <1>[ 63.678274] SET = 0, FnV = 0
> <1>[ 63.678906] EA = 0, S1PTW = 0
> <1>[ 63.679880] FSC = 0x2b: level -1 translation fault
> <1>[ 63.680879] Data abort info:
> <1>[ 63.681606] ISV = 0, ISS = 0x0000006b, ISS2 = 0x00000000
> <1>[ 63.682544] CM = 0, WnR = 1, TnD = 0, TagAccess = 0
> <1>[ 63.683493] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
> <1>[ 63.684732] [0000000000000008] user address but active_mm is swapper
> <0>[ 63.686080] Internal error: Oops: 000000009600006b [#1] PREEMPT SMP
> <4>[ 63.688843] Modules linked in:
> <4>[ 63.689662] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G B
> N 6.9.9-rc1 #1
> <4>[ 63.690522] Hardware name: linux,dummy-virt (DT)
> <4>[ 63.691532] pstate: 224000c9 (nzCv daIF +PAN -UAO +TCO -DIT
> -SSBS BTYPE=--)
> <4>[ 63.692423] pc : _raw_spin_lock_irq
> (arch/arm64/include/asm/atomic_lse.h:271
> arch/arm64/include/asm/cmpxchg.h:120
> arch/arm64/include/asm/cmpxchg.h:169
> include/linux/atomic/atomic-arch-fallback.h:2055
> include/linux/atomic/atomic-arch-fallback.h:2173
> include/linux/atomic/atomic-instrumented.h:1302
> include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187
> include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
> <4>[ 63.693097] lr : _raw_spin_lock_irq
> (include/linux/atomic/atomic-arch-fallback.h:2172 (discriminator 1)
> include/linux/atomic/atomic-instrumented.h:1302 (discriminator 1)
> include/asm-generic/qspinlock.h:111 (discriminator 1)
> include/linux/spinlock.h:187 (discriminator 1)
> include/linux/spinlock_api_smp.h:120 (discriminator 1)
> kernel/locking/spinlock.c:170 (discriminator 1))
> <4>[ 63.693714] sp : ffff800080087620
> <4>[ 63.694519] x29: ffff800080087680 x28: 1ffff00010010f45 x27:
> ffff800080087a20
> <4>[ 63.696315] x26: 1ffff00010010f47 x25: ffff800080087a00 x24:
> fff00000c99f0028
> <4>[ 63.697334] x23: 0000000000000000 x22: dfff800000000000 x21:
> ffff800080087640
> <4>[ 63.698333] x20: 1ffff00010010ec4 x19: 0000000000000008 x18:
> 000000004b9fd0a9
> <4>[ 63.699711] x17: 0000000000000000 x16: fff00000da13e180 x15:
> ffffaa8e3330c4c4
> <4>[ 63.700732] x14: ffffaa8e33312508 x13: ffffaa8e3583b0ec x12:
> ffff700010010ec9
> <4>[ 63.701734] x11: 1ffff00010010ec8 x10: ffff700010010ec8 x9 :
> dfff800000000000
> <4>[ 63.702792] x8 : 0000000000000003 x7 : 0000000000000001 x6 :
> ffff700010010ec8
> <4>[ 63.704539] x5 : ffff800080087640 x4 : ffff700010010ec8 x3 :
> ffffaa8e3585c520
> <4>[ 63.705529] x2 : 0000000000000001 x1 : 0000000000000000 x0 :
> 0000000000000000
> <4>[ 63.706625] Call trace:
> <4>[ 63.707408] _raw_spin_lock_irq
> (arch/arm64/include/asm/atomic_lse.h:271
> arch/arm64/include/asm/cmpxchg.h:120
> arch/arm64/include/asm/cmpxchg.h:169
> include/linux/atomic/atomic-arch-fallback.h:2055
> include/linux/atomic/atomic-arch-fallback.h:2173
> include/linux/atomic/atomic-instrumented.h:1302
> include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187
> include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
> <4>[ 63.708130] wait_for_completion_timeout
> (kernel/sched/completion.c:84 kernel/sched/completion.c:116
> kernel/sched/completion.c:127 kernel/sched/completion.c:167)
> <4>[ 63.708902] kunit_try_catch_run (lib/kunit/try-catch.c:85)
> <4>[ 63.709710] kunit_run_case_catch_errors (lib/kunit/test.c:544)
> <4>[ 63.710558] kunit_run_tests (lib/kunit/test.c:649)
> <4>[ 63.711555] __kunit_test_suites_init (lib/kunit/test.c:732
> (discriminator 1))
> <4>[ 63.712489] kunit_run_all_tests (lib/kunit/executor.c:276
> lib/kunit/executor.c:392)
> <4>[ 63.713317] kernel_init_freeable (init/main.c:1559)
> <4>[ 63.713971] kernel_init (init/main.c:1446)
> <4>[ 63.714503] ret_from_fork (arch/arm64/kernel/entry.S:861)
> <0>[ 63.716154] Code: 93407c02 d503201f 2a0003e1 52800022 (88e17e62)
> All code
> ========
> 0: 93407c02 sxtw x2, w0
> 4: d503201f nop
> 8: 2a0003e1 mov w1, w0
> c: 52800022 mov w2, #0x1 // #1
> 10:* 88e17e62 casa w1, w2, [x19] <-- trapping instruction
>
> Code starting with the faulting instruction
> ===========================================
> 0: 88e17e62 casa w1, w2, [x19]
> <4>[ 63.717705] ---[ end trace 0000000000000000 ]---
> <6>[ 63.718649] note: swapper/0[1] exited with irqs disabled
> <6>[ 63.720758] note: swapper/0[1] exited with preempt_count 1
> <0>[ 63.722091] Kernel panic - not syncing: Attempted to kill init!
> exitcode=0x0000000b
> <2>[ 63.724608] SMP: stopping secondary CPUs
> <0>[ 63.725877] Kernel Offset: 0x2a8db2200000 from 0xffff800080000000
> <0>[ 63.726534] PHYS_OFFSET: 0x40000000
> <0>[ 63.727664] CPU features: 0x0,00000006,8f17bd7c,6766773f
> <0>[ 63.729291] Memory Limit: none
> <0>[ 63.731074] ---[ end Kernel panic - not syncing: Attempted to
> kill init! exitcode=0x0000000b ]---
>
> Steps to reproduce on qemu-arm64 link provided [2].
> Build artifacts arm64 link provided [3].
> The Kconfig is built with defconfig+Kunit and the config link provided [4].
> This occurred on following Toolchain builds gcc-13, clang-18,
> clang-nightly and gcc-8.
>
> Reproducible always on following devices and emulators,
> * rk3399-rock-pi-4b
> * qemu-arm64
> * qemu-x86_64
>
> I am bisecting this reported issue.
Anders, bisected this issue and found this as the first bad commit and after
reverting this patch the boot pass and kernel panic were not found.
# first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d]
kunit: Handle test faults
[ Upstream commit 3a35c13007dea132a65f07de05c26b87837fadc2 ]
> Please let me know if you need more information.
>
> Links:
> [1] https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.8-198-g2471237b27c6/testrun/24552495/suite/boot/test/gcc-13-lkftconfig-kunit/log
> [2] https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2j0YCwfoW0D9nrPUAeDspHG0iFE/reproducer
> [3] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/
> [4] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/config
Bisection log:
------
$ git bisect log
# bad: [6ced42af8b2d3a7dfca7121f6f01b19aa818eeab] Linux 6.9.9-rc1
# good: [2106717b5214895a29c038b37f15d78a3202aa2b] Linux 6.9.8
git bisect start 'stable-rc/linux-6.9.y' 'v6.9.8'
# bad: [30dbb09f028b3de9e304e3ab0bbf123613d6b61f] KVM: s390: fix LPSWEY handling
git bisect bad 30dbb09f028b3de9e304e3ab0bbf123613d6b61f
# good: [81d79946a4623d2d2ce21e68ccd1e9997119e8ff]
thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data
git bisect good 81d79946a4623d2d2ce21e68ccd1e9997119e8ff
# bad: [9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7] s390/pkey: Wipe
sensitive data on failure
git bisect bad 9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7
# good: [1b4c766b624614df4deaf51d20dc596859ec8254] orangefs: fix
out-of-bounds fsid access
git bisect good 1b4c766b624614df4deaf51d20dc596859ec8254
# bad: [867bfb350f89b328fe30537afda02fe4c4ae23f5] bpf: Avoid
uninitialized value in BPF_CORE_READ_BITFIELD
git bisect bad 867bfb350f89b328fe30537afda02fe4c4ae23f5
# bad: [18363e5c5cbf3c51d0d857e4b9706674cbfd5a96] powerpc/xmon: Check
cpu id in commands "c#", "dp#" and "dx#"
git bisect bad 18363e5c5cbf3c51d0d857e4b9706674cbfd5a96
# bad: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults
git bisect bad 6b91f756f49a16223085b38cedb7e297d134d64d
# good: [3bbd81663033fa72cac3a867e5284b925b445ad6] kunit: Fix timeout message
git bisect good 3bbd81663033fa72cac3a867e5284b925b445ad6
# first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit:
Handle test faults
- Naresh
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-11 8:30 ` Naresh Kamboju
@ 2024-07-11 9:11 ` Greg Kroah-Hartman
2024-07-11 12:29 ` Naresh Kamboju
0 siblings, 1 reply; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-11 9:11 UTC (permalink / raw)
To: Naresh Kamboju
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie,
Anders Roxell, Mike Christie, Paul E. McKenney, rcu, gnstark,
linux-mm, Jinliang Zheng, Dan Carpenter, Arnd Bergmann,
Mickaël Salaün, Brendan Higgins, Eric W. Biederman,
Shuah Khan
On Thu, Jul 11, 2024 at 02:00:17PM +0530, Naresh Kamboju wrote:
> On Wed, 10 Jul 2024 at 08:41, Naresh Kamboju <naresh.kamboju@linaro.org> wrote:
> >
> > On Tue, 9 Jul 2024 at 16:49, Greg Kroah-Hartman
> > <gregkh@linuxfoundation.org> wrote:
> > >
> > > This is the start of the stable review cycle for the 6.9.9 release.
> > > There are 197 patches in this series, all will be posted as a response
> > > to this one. If anyone has any issues with these being applied, please
> > > let me know.
> > >
> > > Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> > > Anything received after that time might be too late.
> > >
> > > The whole patch series can be found in one patch at:
> > > https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> > > or in the git tree and branch at:
> > > git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> > > and the diffstat can be found below.
> > >
> > > thanks,
> > >
> > > greg k-h
> >
> > Results from Linaro’s test farm.
> > The following kernel panic was noticed while running kunit tests.
> >
> > First seen on
> > git commit id: 2471237b27c681c22e5f2b7175584aa7d5c89bfc
> > date: on July 9th 2024.
> >
> > GOOD: v6.9.7-223-g03247eed042d
> > BAD: v6.9.8-198-g2471237b27c6
> >
> > Always reproduce: yes.
> >
> > * qemu-arm64, Juno-r2, rk3399-rock-pi-4b and qemu-x86_64 the kunit-boot failed.
> > - gcc-13-defconfig-kunit
> > - clang-18-defconfig-kunit
> > - clang-nightly-defconfig-kunit
> > - gcc-8-defconfig-kunit
> >
> > Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
> >
> > Crash log [1]:
> > ---------
> > <4>[ 63.601683] kernel_init_freeable (init/main.c:1559)
> > <4>[ 63.602335] kernel_init (init/main.c:1446)
> > <4>[ 63.602980] ret_from_fork (arch/arm64/kernel/entry.S:861)
> > <3>[ 63.603703]
> > <3>[ 63.604057] The buggy address belongs to the object at fff00000c07582e8
> > <3>[ 63.604057] which belongs to the cache inode_cache of size 616
> > <3>[ 63.605281] The buggy address is located 80 bytes to the right of
> > <3>[ 63.605281] allocated 616-byte region [fff00000c07582e8,
> > fff00000c0758550)
> > <3>[ 63.606592]
> > <3>[ 63.607294] The buggy address belongs to the physical page:
> > <4>[ 63.607948] page: refcount:1 mapcount:0 mapping:0000000000000000
> > index:0x0 pfn:0x100758
> > <4>[ 63.608830] head: order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0
> > <4>[ 63.609593] flags:
> > 0xbfffe0000000840(slab|head|node=0|zone=2|lastcpupid=0x1ffff)
> > <4>[ 63.610449] page_type: 0xffffffff()
> > <4>[ 63.611934] raw: 0bfffe0000000840 fff00000c08d2dc0
> > dead000000000122 0000000000000000
> > <4>[ 63.612810] raw: 0000000000000000 0000000080160016
> > 00000001ffffffff 0000000000000000
> > <4>[ 63.613668] head: 0bfffe0000000840 fff00000c08d2dc0
> > dead000000000122 0000000000000000
> > <4>[ 63.614525] head: 0000000000000000 0000000080160016
> > 00000001ffffffff 0000000000000000
> > <4>[ 63.615694] head: 0bfffe0000000002 ffffc1ffc301d601
> > ffffc1ffc301d648 00000000ffffffff
> > <4>[ 63.616583] head: 0000000400000000 0000000000000000
> > 00000000ffffffff 0000000000000000
> > <4>[ 63.617391] page dumped because: kasan: bad access detected
> > <3>[ 63.618034]
> > <3>[ 63.618354] Memory state around the buggy address:
> > <3>[ 63.619281] fff00000c0758480: 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00
> > <3>[ 63.620086] fff00000c0758500: 00 00 00 00 00 00 00 00 00 00 fc
> > fc fc fc fc fc
> > <3>[ 63.620886] >fff00000c0758580: fc fc fc fc fc fc fc fc fc fc 00
> > 00 00 00 00 00
> > <3>[ 63.621664] ^
> > <3>[ 63.622235] fff00000c0758600: 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00
> > <3>[ 63.623362] fff00000c0758680: 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00
> > <3>[ 63.624138]
> > ==================================================================
> > <6>[ 63.645148] not ok 1 block_bits=10 cluster_bits=3
> > blocks_per_group=8192 group_count=4 desc_size=64
> > <6>[ 63.658504] ok 2 block_bits=12 cluster_bits=3
> > blocks_per_group=8192 group_count=4 desc_size=64
> > <1>[ 63.674531] Unable to handle kernel NULL pointer dereference at
> > virtual address 0000000000000008
> > <1>[ 63.675691] Mem abort info:
> > <1>[ 63.676527] ESR = 0x000000009600006b
> > <1>[ 63.677658] EC = 0x25: DABT (current EL), IL = 32 bits
> > <1>[ 63.678274] SET = 0, FnV = 0
> > <1>[ 63.678906] EA = 0, S1PTW = 0
> > <1>[ 63.679880] FSC = 0x2b: level -1 translation fault
> > <1>[ 63.680879] Data abort info:
> > <1>[ 63.681606] ISV = 0, ISS = 0x0000006b, ISS2 = 0x00000000
> > <1>[ 63.682544] CM = 0, WnR = 1, TnD = 0, TagAccess = 0
> > <1>[ 63.683493] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
> > <1>[ 63.684732] [0000000000000008] user address but active_mm is swapper
> > <0>[ 63.686080] Internal error: Oops: 000000009600006b [#1] PREEMPT SMP
> > <4>[ 63.688843] Modules linked in:
> > <4>[ 63.689662] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G B
> > N 6.9.9-rc1 #1
> > <4>[ 63.690522] Hardware name: linux,dummy-virt (DT)
> > <4>[ 63.691532] pstate: 224000c9 (nzCv daIF +PAN -UAO +TCO -DIT
> > -SSBS BTYPE=--)
> > <4>[ 63.692423] pc : _raw_spin_lock_irq
> > (arch/arm64/include/asm/atomic_lse.h:271
> > arch/arm64/include/asm/cmpxchg.h:120
> > arch/arm64/include/asm/cmpxchg.h:169
> > include/linux/atomic/atomic-arch-fallback.h:2055
> > include/linux/atomic/atomic-arch-fallback.h:2173
> > include/linux/atomic/atomic-instrumented.h:1302
> > include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187
> > include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
> > <4>[ 63.693097] lr : _raw_spin_lock_irq
> > (include/linux/atomic/atomic-arch-fallback.h:2172 (discriminator 1)
> > include/linux/atomic/atomic-instrumented.h:1302 (discriminator 1)
> > include/asm-generic/qspinlock.h:111 (discriminator 1)
> > include/linux/spinlock.h:187 (discriminator 1)
> > include/linux/spinlock_api_smp.h:120 (discriminator 1)
> > kernel/locking/spinlock.c:170 (discriminator 1))
> > <4>[ 63.693714] sp : ffff800080087620
> > <4>[ 63.694519] x29: ffff800080087680 x28: 1ffff00010010f45 x27:
> > ffff800080087a20
> > <4>[ 63.696315] x26: 1ffff00010010f47 x25: ffff800080087a00 x24:
> > fff00000c99f0028
> > <4>[ 63.697334] x23: 0000000000000000 x22: dfff800000000000 x21:
> > ffff800080087640
> > <4>[ 63.698333] x20: 1ffff00010010ec4 x19: 0000000000000008 x18:
> > 000000004b9fd0a9
> > <4>[ 63.699711] x17: 0000000000000000 x16: fff00000da13e180 x15:
> > ffffaa8e3330c4c4
> > <4>[ 63.700732] x14: ffffaa8e33312508 x13: ffffaa8e3583b0ec x12:
> > ffff700010010ec9
> > <4>[ 63.701734] x11: 1ffff00010010ec8 x10: ffff700010010ec8 x9 :
> > dfff800000000000
> > <4>[ 63.702792] x8 : 0000000000000003 x7 : 0000000000000001 x6 :
> > ffff700010010ec8
> > <4>[ 63.704539] x5 : ffff800080087640 x4 : ffff700010010ec8 x3 :
> > ffffaa8e3585c520
> > <4>[ 63.705529] x2 : 0000000000000001 x1 : 0000000000000000 x0 :
> > 0000000000000000
> > <4>[ 63.706625] Call trace:
> > <4>[ 63.707408] _raw_spin_lock_irq
> > (arch/arm64/include/asm/atomic_lse.h:271
> > arch/arm64/include/asm/cmpxchg.h:120
> > arch/arm64/include/asm/cmpxchg.h:169
> > include/linux/atomic/atomic-arch-fallback.h:2055
> > include/linux/atomic/atomic-arch-fallback.h:2173
> > include/linux/atomic/atomic-instrumented.h:1302
> > include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187
> > include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
> > <4>[ 63.708130] wait_for_completion_timeout
> > (kernel/sched/completion.c:84 kernel/sched/completion.c:116
> > kernel/sched/completion.c:127 kernel/sched/completion.c:167)
> > <4>[ 63.708902] kunit_try_catch_run (lib/kunit/try-catch.c:85)
> > <4>[ 63.709710] kunit_run_case_catch_errors (lib/kunit/test.c:544)
> > <4>[ 63.710558] kunit_run_tests (lib/kunit/test.c:649)
> > <4>[ 63.711555] __kunit_test_suites_init (lib/kunit/test.c:732
> > (discriminator 1))
> > <4>[ 63.712489] kunit_run_all_tests (lib/kunit/executor.c:276
> > lib/kunit/executor.c:392)
> > <4>[ 63.713317] kernel_init_freeable (init/main.c:1559)
> > <4>[ 63.713971] kernel_init (init/main.c:1446)
> > <4>[ 63.714503] ret_from_fork (arch/arm64/kernel/entry.S:861)
> > <0>[ 63.716154] Code: 93407c02 d503201f 2a0003e1 52800022 (88e17e62)
> > All code
> > ========
> > 0: 93407c02 sxtw x2, w0
> > 4: d503201f nop
> > 8: 2a0003e1 mov w1, w0
> > c: 52800022 mov w2, #0x1 // #1
> > 10:* 88e17e62 casa w1, w2, [x19] <-- trapping instruction
> >
> > Code starting with the faulting instruction
> > ===========================================
> > 0: 88e17e62 casa w1, w2, [x19]
> > <4>[ 63.717705] ---[ end trace 0000000000000000 ]---
> > <6>[ 63.718649] note: swapper/0[1] exited with irqs disabled
> > <6>[ 63.720758] note: swapper/0[1] exited with preempt_count 1
> > <0>[ 63.722091] Kernel panic - not syncing: Attempted to kill init!
> > exitcode=0x0000000b
> > <2>[ 63.724608] SMP: stopping secondary CPUs
> > <0>[ 63.725877] Kernel Offset: 0x2a8db2200000 from 0xffff800080000000
> > <0>[ 63.726534] PHYS_OFFSET: 0x40000000
> > <0>[ 63.727664] CPU features: 0x0,00000006,8f17bd7c,6766773f
> > <0>[ 63.729291] Memory Limit: none
> > <0>[ 63.731074] ---[ end Kernel panic - not syncing: Attempted to
> > kill init! exitcode=0x0000000b ]---
> >
> > Steps to reproduce on qemu-arm64 link provided [2].
> > Build artifacts arm64 link provided [3].
> > The Kconfig is built with defconfig+Kunit and the config link provided [4].
> > This occurred on following Toolchain builds gcc-13, clang-18,
> > clang-nightly and gcc-8.
> >
> > Reproducible always on following devices and emulators,
> > * rk3399-rock-pi-4b
> > * qemu-arm64
> > * qemu-x86_64
> >
> > I am bisecting this reported issue.
>
> Anders, bisected this issue and found this as the first bad commit and after
> reverting this patch the boot pass and kernel panic were not found.
>
> # first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d]
> kunit: Handle test faults
> [ Upstream commit 3a35c13007dea132a65f07de05c26b87837fadc2 ]
>
>
> > Please let me know if you need more information.
> >
> > Links:
> > [1] https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.8-198-g2471237b27c6/testrun/24552495/suite/boot/test/gcc-13-lkftconfig-kunit/log
> > [2] https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2j0YCwfoW0D9nrPUAeDspHG0iFE/reproducer
> > [3] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/
> > [4] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/config
>
>
> Bisection log:
> ------
> $ git bisect log
> # bad: [6ced42af8b2d3a7dfca7121f6f01b19aa818eeab] Linux 6.9.9-rc1
> # good: [2106717b5214895a29c038b37f15d78a3202aa2b] Linux 6.9.8
> git bisect start 'stable-rc/linux-6.9.y' 'v6.9.8'
> # bad: [30dbb09f028b3de9e304e3ab0bbf123613d6b61f] KVM: s390: fix LPSWEY handling
> git bisect bad 30dbb09f028b3de9e304e3ab0bbf123613d6b61f
> # good: [81d79946a4623d2d2ce21e68ccd1e9997119e8ff]
> thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data
> git bisect good 81d79946a4623d2d2ce21e68ccd1e9997119e8ff
> # bad: [9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7] s390/pkey: Wipe
> sensitive data on failure
> git bisect bad 9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7
> # good: [1b4c766b624614df4deaf51d20dc596859ec8254] orangefs: fix
> out-of-bounds fsid access
> git bisect good 1b4c766b624614df4deaf51d20dc596859ec8254
> # bad: [867bfb350f89b328fe30537afda02fe4c4ae23f5] bpf: Avoid
> uninitialized value in BPF_CORE_READ_BITFIELD
> git bisect bad 867bfb350f89b328fe30537afda02fe4c4ae23f5
> # bad: [18363e5c5cbf3c51d0d857e4b9706674cbfd5a96] powerpc/xmon: Check
> cpu id in commands "c#", "dp#" and "dx#"
> git bisect bad 18363e5c5cbf3c51d0d857e4b9706674cbfd5a96
> # bad: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults
> git bisect bad 6b91f756f49a16223085b38cedb7e297d134d64d
> # good: [3bbd81663033fa72cac3a867e5284b925b445ad6] kunit: Fix timeout message
> git bisect good 3bbd81663033fa72cac3a867e5284b925b445ad6
> # first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit:
> Handle test faults
So the code to do testing is the thing that is crashing {sigh}
I'll go drop this from all stable branches, but odds are this is also
happening in Linus's tree so you might want to report it to the people
who submitted it there as well. The thread is here:
https://lore.kernel.org/r/20240408074625.65017-5-mic@digikod.net
thanks for the bisection!
greg k-h
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 057/197] powerpc/dexcr: Track the DEXCR per-process
2024-07-09 12:27 ` Michael Ellerman
@ 2024-07-11 9:35 ` Greg Kroah-Hartman
0 siblings, 0 replies; 218+ messages in thread
From: Greg Kroah-Hartman @ 2024-07-11 9:35 UTC (permalink / raw)
To: Michael Ellerman; +Cc: stable, patches, Benjamin Gray, Sasha Levin
On Tue, Jul 09, 2024 at 10:27:20PM +1000, Michael Ellerman wrote:
> Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
> > 6.9-stable review patch. If anyone has any objections, please let me know.
> >
> > ------------------
> >
> > From: Benjamin Gray <bgray@linux.ibm.com>
> >
> > [ Upstream commit 75171f06c4507c3b6b5a69d793879fb20d108bb1 ]
> >
> > Add capability to make the DEXCR act as a per-process SPR.
> >
> > We do not yet have an interface for changing the values per task. We
> > also expect the kernel to use a single DEXCR value across all tasks
> > while in privileged state, so there is no need to synchronize after
> > changing it (the userspace aspects will synchronize upon returning to
> > userspace).
> >
> > Signed-off-by: Benjamin Gray <bgray@linux.ibm.com>
> > Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> > Link: https://msgid.link/20240417112325.728010-3-bgray@linux.ibm.com
> > Stable-dep-of: bbd99922d0f4 ("powerpc/dexcr: Reset DEXCR value across exec")
>
> This is listed as a dep, but I don't see that commit (bbd99922d0f4)
> queued up?
>
> This series included user-visible changes including new prctls, it
> shouldn't be backported piecemeal.
>
> I think this series shouldn't be backported unless someone explicitly
> wants it.
Thanks for the review, now removed.
greg k-h
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-11 9:11 ` Greg Kroah-Hartman
@ 2024-07-11 12:29 ` Naresh Kamboju
0 siblings, 0 replies; 218+ messages in thread
From: Naresh Kamboju @ 2024-07-11 12:29 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, broonie,
Anders Roxell, Mike Christie, Paul E. McKenney, rcu, gnstark,
linux-mm, Jinliang Zheng, Dan Carpenter, Arnd Bergmann,
Mickaël Salaün, Brendan Higgins, Eric W. Biederman,
Shuah Khan
On Thu, 11 Jul 2024 at 14:41, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> On Thu, Jul 11, 2024 at 02:00:17PM +0530, Naresh Kamboju wrote:
> > On Wed, 10 Jul 2024 at 08:41, Naresh Kamboju <naresh.kamboju@linaro.org> wrote:
> > >
> > > On Tue, 9 Jul 2024 at 16:49, Greg Kroah-Hartman
> > > <gregkh@linuxfoundation.org> wrote:
> > > >
> > > > This is the start of the stable review cycle for the 6.9.9 release.
> > > > There are 197 patches in this series, all will be posted as a response
> > > > to this one. If anyone has any issues with these being applied, please
> > > > let me know.
> > > >
> > > > Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> > > > Anything received after that time might be too late.
> > > >
> > > > The whole patch series can be found in one patch at:
> > > > https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> > > > or in the git tree and branch at:
> > > > git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> > > > and the diffstat can be found below.
> > > >
> > > > thanks,
> > > >
> > > > greg k-h
> > >
> > > Results from Linaro’s test farm.
> > > The following kernel panic was noticed while running kunit tests.
> > >
> > > First seen on
> > > git commit id: 2471237b27c681c22e5f2b7175584aa7d5c89bfc
> > > date: on July 9th 2024.
> > >
> > > GOOD: v6.9.7-223-g03247eed042d
> > > BAD: v6.9.8-198-g2471237b27c6
> > >
> > > Always reproduce: yes.
> > >
> > > * qemu-arm64, Juno-r2, rk3399-rock-pi-4b and qemu-x86_64 the kunit-boot failed.
> > > - gcc-13-defconfig-kunit
> > > - clang-18-defconfig-kunit
> > > - clang-nightly-defconfig-kunit
> > > - gcc-8-defconfig-kunit
> > >
> > > Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
> > >
> > > Crash log [1]:
> > > ---------
> > > <4>[ 63.601683] kernel_init_freeable (init/main.c:1559)
> > > <4>[ 63.602335] kernel_init (init/main.c:1446)
> > > <4>[ 63.602980] ret_from_fork (arch/arm64/kernel/entry.S:861)
> > > <3>[ 63.603703]
> > > <3>[ 63.604057] The buggy address belongs to the object at fff00000c07582e8
> > > <3>[ 63.604057] which belongs to the cache inode_cache of size 616
> > > <3>[ 63.605281] The buggy address is located 80 bytes to the right of
> > > <3>[ 63.605281] allocated 616-byte region [fff00000c07582e8,
> > > fff00000c0758550)
> > > <3>[ 63.606592]
> > > <3>[ 63.607294] The buggy address belongs to the physical page:
> > > <4>[ 63.607948] page: refcount:1 mapcount:0 mapping:0000000000000000
> > > index:0x0 pfn:0x100758
> > > <4>[ 63.608830] head: order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0
> > > <4>[ 63.609593] flags:
> > > 0xbfffe0000000840(slab|head|node=0|zone=2|lastcpupid=0x1ffff)
> > > <4>[ 63.610449] page_type: 0xffffffff()
> > > <4>[ 63.611934] raw: 0bfffe0000000840 fff00000c08d2dc0
> > > dead000000000122 0000000000000000
> > > <4>[ 63.612810] raw: 0000000000000000 0000000080160016
> > > 00000001ffffffff 0000000000000000
> > > <4>[ 63.613668] head: 0bfffe0000000840 fff00000c08d2dc0
> > > dead000000000122 0000000000000000
> > > <4>[ 63.614525] head: 0000000000000000 0000000080160016
> > > 00000001ffffffff 0000000000000000
> > > <4>[ 63.615694] head: 0bfffe0000000002 ffffc1ffc301d601
> > > ffffc1ffc301d648 00000000ffffffff
> > > <4>[ 63.616583] head: 0000000400000000 0000000000000000
> > > 00000000ffffffff 0000000000000000
> > > <4>[ 63.617391] page dumped because: kasan: bad access detected
> > > <3>[ 63.618034]
> > > <3>[ 63.618354] Memory state around the buggy address:
> > > <3>[ 63.619281] fff00000c0758480: 00 00 00 00 00 00 00 00 00 00 00
> > > 00 00 00 00 00
> > > <3>[ 63.620086] fff00000c0758500: 00 00 00 00 00 00 00 00 00 00 fc
> > > fc fc fc fc fc
> > > <3>[ 63.620886] >fff00000c0758580: fc fc fc fc fc fc fc fc fc fc 00
> > > 00 00 00 00 00
> > > <3>[ 63.621664] ^
> > > <3>[ 63.622235] fff00000c0758600: 00 00 00 00 00 00 00 00 00 00 00
> > > 00 00 00 00 00
> > > <3>[ 63.623362] fff00000c0758680: 00 00 00 00 00 00 00 00 00 00 00
> > > 00 00 00 00 00
> > > <3>[ 63.624138]
> > > ==================================================================
> > > <6>[ 63.645148] not ok 1 block_bits=10 cluster_bits=3
> > > blocks_per_group=8192 group_count=4 desc_size=64
> > > <6>[ 63.658504] ok 2 block_bits=12 cluster_bits=3
> > > blocks_per_group=8192 group_count=4 desc_size=64
> > > <1>[ 63.674531] Unable to handle kernel NULL pointer dereference at
> > > virtual address 0000000000000008
> > > <1>[ 63.675691] Mem abort info:
> > > <1>[ 63.676527] ESR = 0x000000009600006b
> > > <1>[ 63.677658] EC = 0x25: DABT (current EL), IL = 32 bits
> > > <1>[ 63.678274] SET = 0, FnV = 0
> > > <1>[ 63.678906] EA = 0, S1PTW = 0
> > > <1>[ 63.679880] FSC = 0x2b: level -1 translation fault
> > > <1>[ 63.680879] Data abort info:
> > > <1>[ 63.681606] ISV = 0, ISS = 0x0000006b, ISS2 = 0x00000000
> > > <1>[ 63.682544] CM = 0, WnR = 1, TnD = 0, TagAccess = 0
> > > <1>[ 63.683493] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
> > > <1>[ 63.684732] [0000000000000008] user address but active_mm is swapper
> > > <0>[ 63.686080] Internal error: Oops: 000000009600006b [#1] PREEMPT SMP
> > > <4>[ 63.688843] Modules linked in:
> > > <4>[ 63.689662] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G B
> > > N 6.9.9-rc1 #1
> > > <4>[ 63.690522] Hardware name: linux,dummy-virt (DT)
> > > <4>[ 63.691532] pstate: 224000c9 (nzCv daIF +PAN -UAO +TCO -DIT
> > > -SSBS BTYPE=--)
> > > <4>[ 63.692423] pc : _raw_spin_lock_irq
> > > (arch/arm64/include/asm/atomic_lse.h:271
> > > arch/arm64/include/asm/cmpxchg.h:120
> > > arch/arm64/include/asm/cmpxchg.h:169
> > > include/linux/atomic/atomic-arch-fallback.h:2055
> > > include/linux/atomic/atomic-arch-fallback.h:2173
> > > include/linux/atomic/atomic-instrumented.h:1302
> > > include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187
> > > include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
> > > <4>[ 63.693097] lr : _raw_spin_lock_irq
> > > (include/linux/atomic/atomic-arch-fallback.h:2172 (discriminator 1)
> > > include/linux/atomic/atomic-instrumented.h:1302 (discriminator 1)
> > > include/asm-generic/qspinlock.h:111 (discriminator 1)
> > > include/linux/spinlock.h:187 (discriminator 1)
> > > include/linux/spinlock_api_smp.h:120 (discriminator 1)
> > > kernel/locking/spinlock.c:170 (discriminator 1))
> > > <4>[ 63.693714] sp : ffff800080087620
> > > <4>[ 63.694519] x29: ffff800080087680 x28: 1ffff00010010f45 x27:
> > > ffff800080087a20
> > > <4>[ 63.696315] x26: 1ffff00010010f47 x25: ffff800080087a00 x24:
> > > fff00000c99f0028
> > > <4>[ 63.697334] x23: 0000000000000000 x22: dfff800000000000 x21:
> > > ffff800080087640
> > > <4>[ 63.698333] x20: 1ffff00010010ec4 x19: 0000000000000008 x18:
> > > 000000004b9fd0a9
> > > <4>[ 63.699711] x17: 0000000000000000 x16: fff00000da13e180 x15:
> > > ffffaa8e3330c4c4
> > > <4>[ 63.700732] x14: ffffaa8e33312508 x13: ffffaa8e3583b0ec x12:
> > > ffff700010010ec9
> > > <4>[ 63.701734] x11: 1ffff00010010ec8 x10: ffff700010010ec8 x9 :
> > > dfff800000000000
> > > <4>[ 63.702792] x8 : 0000000000000003 x7 : 0000000000000001 x6 :
> > > ffff700010010ec8
> > > <4>[ 63.704539] x5 : ffff800080087640 x4 : ffff700010010ec8 x3 :
> > > ffffaa8e3585c520
> > > <4>[ 63.705529] x2 : 0000000000000001 x1 : 0000000000000000 x0 :
> > > 0000000000000000
> > > <4>[ 63.706625] Call trace:
> > > <4>[ 63.707408] _raw_spin_lock_irq
> > > (arch/arm64/include/asm/atomic_lse.h:271
> > > arch/arm64/include/asm/cmpxchg.h:120
> > > arch/arm64/include/asm/cmpxchg.h:169
> > > include/linux/atomic/atomic-arch-fallback.h:2055
> > > include/linux/atomic/atomic-arch-fallback.h:2173
> > > include/linux/atomic/atomic-instrumented.h:1302
> > > include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187
> > > include/linux/spinlock_api_smp.h:120 kernel/locking/spinlock.c:170)
> > > <4>[ 63.708130] wait_for_completion_timeout
> > > (kernel/sched/completion.c:84 kernel/sched/completion.c:116
> > > kernel/sched/completion.c:127 kernel/sched/completion.c:167)
> > > <4>[ 63.708902] kunit_try_catch_run (lib/kunit/try-catch.c:85)
> > > <4>[ 63.709710] kunit_run_case_catch_errors (lib/kunit/test.c:544)
> > > <4>[ 63.710558] kunit_run_tests (lib/kunit/test.c:649)
> > > <4>[ 63.711555] __kunit_test_suites_init (lib/kunit/test.c:732
> > > (discriminator 1))
> > > <4>[ 63.712489] kunit_run_all_tests (lib/kunit/executor.c:276
> > > lib/kunit/executor.c:392)
> > > <4>[ 63.713317] kernel_init_freeable (init/main.c:1559)
> > > <4>[ 63.713971] kernel_init (init/main.c:1446)
> > > <4>[ 63.714503] ret_from_fork (arch/arm64/kernel/entry.S:861)
> > > <0>[ 63.716154] Code: 93407c02 d503201f 2a0003e1 52800022 (88e17e62)
> > > All code
> > > ========
> > > 0: 93407c02 sxtw x2, w0
> > > 4: d503201f nop
> > > 8: 2a0003e1 mov w1, w0
> > > c: 52800022 mov w2, #0x1 // #1
> > > 10:* 88e17e62 casa w1, w2, [x19] <-- trapping instruction
> > >
> > > Code starting with the faulting instruction
> > > ===========================================
> > > 0: 88e17e62 casa w1, w2, [x19]
> > > <4>[ 63.717705] ---[ end trace 0000000000000000 ]---
> > > <6>[ 63.718649] note: swapper/0[1] exited with irqs disabled
> > > <6>[ 63.720758] note: swapper/0[1] exited with preempt_count 1
> > > <0>[ 63.722091] Kernel panic - not syncing: Attempted to kill init!
> > > exitcode=0x0000000b
> > > <2>[ 63.724608] SMP: stopping secondary CPUs
> > > <0>[ 63.725877] Kernel Offset: 0x2a8db2200000 from 0xffff800080000000
> > > <0>[ 63.726534] PHYS_OFFSET: 0x40000000
> > > <0>[ 63.727664] CPU features: 0x0,00000006,8f17bd7c,6766773f
> > > <0>[ 63.729291] Memory Limit: none
> > > <0>[ 63.731074] ---[ end Kernel panic - not syncing: Attempted to
> > > kill init! exitcode=0x0000000b ]---
> > >
> > > Steps to reproduce on qemu-arm64 link provided [2].
> > > Build artifacts arm64 link provided [3].
> > > The Kconfig is built with defconfig+Kunit and the config link provided [4].
> > > This occurred on following Toolchain builds gcc-13, clang-18,
> > > clang-nightly and gcc-8.
> > >
> > > Reproducible always on following devices and emulators,
> > > * rk3399-rock-pi-4b
> > > * qemu-arm64
> > > * qemu-x86_64
> > >
> > > I am bisecting this reported issue.
> >
> > Anders, bisected this issue and found this as the first bad commit and after
> > reverting this patch the boot pass and kernel panic were not found.
> >
> > # first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d]
> > kunit: Handle test faults
> > [ Upstream commit 3a35c13007dea132a65f07de05c26b87837fadc2 ]
> >
> >
> > > Please let me know if you need more information.
> > >
> > > Links:
> > > [1] https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.8-198-g2471237b27c6/testrun/24552495/suite/boot/test/gcc-13-lkftconfig-kunit/log
> > > [2] https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2j0YCwfoW0D9nrPUAeDspHG0iFE/reproducer
> > > [3] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/
> > > [4] https://storage.tuxsuite.com/public/linaro/lkft/builds/2j0Y8lX6zRNGTiGTZmteMwzwHj2/config
> >
> >
> > Bisection log:
> > ------
> > $ git bisect log
> > # bad: [6ced42af8b2d3a7dfca7121f6f01b19aa818eeab] Linux 6.9.9-rc1
> > # good: [2106717b5214895a29c038b37f15d78a3202aa2b] Linux 6.9.8
> > git bisect start 'stable-rc/linux-6.9.y' 'v6.9.8'
> > # bad: [30dbb09f028b3de9e304e3ab0bbf123613d6b61f] KVM: s390: fix LPSWEY handling
> > git bisect bad 30dbb09f028b3de9e304e3ab0bbf123613d6b61f
> > # good: [81d79946a4623d2d2ce21e68ccd1e9997119e8ff]
> > thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data
> > git bisect good 81d79946a4623d2d2ce21e68ccd1e9997119e8ff
> > # bad: [9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7] s390/pkey: Wipe
> > sensitive data on failure
> > git bisect bad 9a2f3e9cd7906c3dc5eebcc1d981c3403c742ea7
> > # good: [1b4c766b624614df4deaf51d20dc596859ec8254] orangefs: fix
> > out-of-bounds fsid access
> > git bisect good 1b4c766b624614df4deaf51d20dc596859ec8254
> > # bad: [867bfb350f89b328fe30537afda02fe4c4ae23f5] bpf: Avoid
> > uninitialized value in BPF_CORE_READ_BITFIELD
> > git bisect bad 867bfb350f89b328fe30537afda02fe4c4ae23f5
> > # bad: [18363e5c5cbf3c51d0d857e4b9706674cbfd5a96] powerpc/xmon: Check
> > cpu id in commands "c#", "dp#" and "dx#"
> > git bisect bad 18363e5c5cbf3c51d0d857e4b9706674cbfd5a96
> > # bad: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit: Handle test faults
> > git bisect bad 6b91f756f49a16223085b38cedb7e297d134d64d
> > # good: [3bbd81663033fa72cac3a867e5284b925b445ad6] kunit: Fix timeout message
> > git bisect good 3bbd81663033fa72cac3a867e5284b925b445ad6
> > # first bad commit: [6b91f756f49a16223085b38cedb7e297d134d64d] kunit:
> > Handle test faults
>
> So the code to do testing is the thing that is crashing {sigh}
>
> I'll go drop this from all stable branches, but odds are this is also
> happening in Linus's tree so you might want to report it to the people
> who submitted it there as well. The thread is here:
> https://lore.kernel.org/r/20240408074625.65017-5-mic@digikod.net
I have double checked and confirmed that the kunit test works on Linus's tree.
>
> thanks for the bisection!
Always Happy to Test :)
>
> greg k-h
- Naresh
^ permalink raw reply [flat|nested] 218+ messages in thread
* Re: [PATCH 6.9 000/197] 6.9.9-rc1 review
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
` (209 preceding siblings ...)
2024-07-10 13:04 ` Mark Brown
@ 2024-07-12 17:38 ` Florian Fainelli
210 siblings, 0 replies; 218+ messages in thread
From: Florian Fainelli @ 2024-07-12 17:38 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, sudipm.mukherjee, srw, rwarsow,
conor, allen.lkml, broonie
On 7/9/24 04:07, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.9.9 release.
> There are 197 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Thu, 11 Jul 2024 11:06:25 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.9-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.9.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on
BMIPS_GENERIC:
Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
--
Florian
^ permalink raw reply [flat|nested] 218+ messages in thread
end of thread, other threads:[~2024-07-12 17:38 UTC | newest]
Thread overview: 218+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-09 11:07 [PATCH 6.9 000/197] 6.9.9-rc1 review Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 001/197] selftests/resctrl: Fix non-contiguous CBM for AMD Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 002/197] locking/mutex: Introduce devm_mutex_init() Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 003/197] leds: mlxreg: Use devm_mutex_init() for mutex initialization Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 004/197] leds: an30259a: " Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 005/197] crypto: hisilicon/debugfs - Fix debugfs uninit process issue Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 006/197] drm/lima: fix shared irq handling on driver remove Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 007/197] powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 008/197] media: dvb: as102-fe: Fix as10x_register_addr packing Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 009/197] media: dvb-usb: dib0700_devices: Add missing release_firmware() Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 010/197] net: dql: Avoid calling BUG() when WARN() is enough Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 011/197] wifi: rtw89: fw: scan offload prohibit all 6 GHz channel if no 6 GHz sband Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 012/197] drm/xe: Add outer runtime_pm protection to xe_live_ktest@xe_dma_buf Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 013/197] IB/core: Implement a limit on UMAD receive List Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 014/197] scsi: qedf: Make qedf_execute_tmf() non-preemptible Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 015/197] irqchip/gic-v3-its: Remove BUG_ON in its_vpe_irq_domain_alloc Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 016/197] bpf: mark bpf_dummy_struct_ops.test_1 parameter as nullable Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 017/197] selftests/bpf: adjust dummy_st_ops_success to detect additional error Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 018/197] selftests/bpf: do not pass NULL for non-nullable params in dummy_st_ops Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 019/197] bpf: check bpf_dummy_struct_ops program params for test runs Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 020/197] selftests/bpf: dummy_st_ops should reject 0 for non-nullable params Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 021/197] RISC-V: KVM: Fix the initial sample period value Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 022/197] crypto: aead,cipher - zeroize key buffer after use Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 023/197] media: mediatek: vcodec: Only free buffer VA that is not NULL Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 024/197] drm/amdgpu: Fix uninitialized variable warnings Greg Kroah-Hartman
2024-07-09 11:07 ` [PATCH 6.9 025/197] drm/amdgpu: Using uninitialized value *size when calling amdgpu_vce_cs_reloc Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 026/197] drm/amdgpu: Initialize timestamp for some legacy SOCs Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 027/197] drm/amdgpu: fix double free err_addr pointer warnings Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 028/197] drm/amd/display: Add NULL pointer check for kzalloc Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 029/197] drm/amd/display: Check index msg_id before read or write Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 030/197] drm/amd/display: Check pipe offset before setting vblank Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 031/197] drm/amd/display: Skip finding free audio for unknown engine_id Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 032/197] drm/amd/display: Fix overlapping copy within dml_core_mode_programming Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 033/197] drm/amd/display: update pipe topology log to support subvp Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 034/197] drm/amd/display: Do not return negative stream id for array Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 035/197] drm/amd/display: ASSERT when failing to find index by plane/stream id Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 036/197] drm/amd/display: Fix uninitialized variables in DM Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 037/197] drm/amdgpu: fix uninitialized scalar variable warning Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 038/197] drm/amdgpu: fix the warning about the expression (int)size - len Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 039/197] media: dw2102: Dont translate i2c read into write Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 040/197] riscv: Apply SiFive CIP-1200 workaround to single-ASID sfence.vma Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 041/197] media: dw2102: fix a potential buffer overflow Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 042/197] sctp: prefer struct_size over open coded arithmetic Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 043/197] firmware: dmi: Stop decoding on broken entry Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 044/197] kunit/fortify: Do not spam logs with fortify WARNs Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 045/197] Input: ff-core - prefer struct_size over open coded arithmetic Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 046/197] usb: xhci: prevent potential failure in handle_tx_event() for Transfer events without TRB Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 047/197] wifi: mt76: replace skb_put with skb_put_zero Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 048/197] wifi: mt76: mt7996: add sanity checks for background radar trigger Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 049/197] thermal/drivers/mediatek/lvts_thermal: Check NULL ptr on lvts_data Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 050/197] net: dsa: mv88e6xxx: Correct check for empty list Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 051/197] media: dvb-frontends: tda18271c2dd: Remove casting during div Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 052/197] media: s2255: Use refcount_t instead of atomic_t for num_channels Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 053/197] media: i2c: st-mipid02: Use the correct div function Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 054/197] media: tc358746: Use the correct div_ function Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 055/197] media: dvb-frontends: tda10048: Fix integer overflow Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 056/197] crypto: hisilicon/sec2 - fix for register offset Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 057/197] powerpc/dexcr: Track the DEXCR per-process Greg Kroah-Hartman
2024-07-09 12:27 ` Michael Ellerman
2024-07-11 9:35 ` Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 058/197] gve: Account for stopped queues when reading NIC stats Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 059/197] i2c: i801: Annotate apanel_addr as __ro_after_init Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 060/197] powerpc/64: Set _IO_BASE to POISON_POINTER_DELTA not 0 for CONFIG_PCI=n Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 061/197] orangefs: fix out-of-bounds fsid access Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 062/197] kunit: Fix timeout message Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 063/197] kunit: Handle test faults Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 064/197] powerpc/xmon: Check cpu id in commands "c#", "dp#" and "dx#" Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 065/197] selftests/net: fix uninitialized variables Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 066/197] igc: fix a log entry using uninitialized netdev Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 067/197] bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 068/197] f2fs: check validation of fault attrs in f2fs_build_fault_attr() Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 069/197] scsi: mpi3mr: Sanitise num_phys Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 070/197] serial: imx: Raise TX trigger level to 8 Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 071/197] jffs2: Fix potential illegal address access in jffs2_free_inode Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 072/197] s390: Mark psw in __load_psw_mask() as __unitialized Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 073/197] s390/pkey: Use kfree_sensitive() to fix Coccinelle warnings Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 074/197] s390/pkey: Wipe sensitive data on failure Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 075/197] s390/pkey: Wipe copies of clear-key structures " Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 076/197] s390/pkey: Wipe copies of protected- and secure-keys Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 077/197] btrfs: scrub: initialize ret in scrub_simple_mirror() to fix compilation warning Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 078/197] cdrom: rearrange last_media_change check to avoid unintentional overflow Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 079/197] tools/power turbostat: Remember global max_die_id Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 080/197] tools/power turbostat: Avoid possible memory corruption due to sparse topology IDs Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 081/197] vhost: Use virtqueue mutex for swapping worker Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 082/197] vhost: Release worker mutex during flushes Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 083/197] vhost_task: Handle SIGKILL by flushing work and exiting Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 084/197] virtio-pci: Check if is_avq is NULL Greg Kroah-Hartman
2024-07-09 11:08 ` [PATCH 6.9 085/197] mac802154: fix time calculation in ieee802154_configure_durations() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 086/197] wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 087/197] net: phy: phy_device: Fix PHY LED blinking code comment Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 088/197] wifi: mac80211: fix BSS_CHANGED_UNSOL_BCAST_PROBE_RESP Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 089/197] UPSTREAM: tcp: fix DSACK undo in fast recovery to call tcp_try_to_open() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 090/197] net/mlx5: E-switch, Create ingress ACL when needed Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 091/197] net/mlx5e: Add mqprio_rl cleanup and free in mlx5e_priv_cleanup() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 092/197] net/mlx5e: Present succeeded IPsec SA bytes and packet Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 093/197] net/mlx5e: Approximate IPsec per-SA payload data bytes count Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 094/197] Bluetooth: hci_event: Fix setting of unicast qos interval Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 095/197] Bluetooth: Ignore too large handle values in BIG Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 096/197] Bluetooth: ISO: Check socket flag instead of hcon Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 097/197] bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 098/197] tcp_metrics: validate source addr length Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 099/197] KVM: s390: fix LPSWEY handling Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 100/197] e1000e: Fix S0ix residency on corporate systems Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 101/197] gpiolib: of: fix lookup quirk for MIPS Lantiq Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 102/197] net: allow skb_datagram_iter to be called from any context Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 103/197] net: txgbe: initialize num_q_vectors for MSI/INTx interrupts Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 104/197] net: txgbe: remove separate irq request for MSI and INTx Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 105/197] net: txgbe: add extra handle for MSI/INTx into thread irq handle Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 106/197] net: txgbe: free isb resources at the right time Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 107/197] btrfs: always do the basic checks for btrfs_qgroup_inherit structure Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 108/197] net: phy: aquantia: add missing include guards Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 109/197] net: ntb_netdev: Move ntb_netdev_rx_handler() to call netif_rx() from __netif_rx() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 110/197] drm/fbdev-generic: Fix framebuffer on big endian devices Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 111/197] net: stmmac: enable HW-accelerated VLAN stripping for gmac4 only Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 112/197] s390/vfio_ccw: Fix target addresses of TIC CCWs Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 113/197] gpio: mmio: do not calculate bgpio_bits via "ngpios" Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 114/197] wifi: wilc1000: fix ies_len type in connect path Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 115/197] riscv: kexec: Avoid deadlock in kexec crash path Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 116/197] netfilter: nf_tables: unconditionally flush pending work before notifier Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 117/197] net: rswitch: Avoid use-after-free in rswitch_poll() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 118/197] bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 119/197] ice: Fix improper extts handling Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 120/197] ice: Dont process extts if PTP is disabled Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 121/197] ice: Reject pin requests with unsupported flags Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 122/197] ice: use proper macro for testing bit Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 123/197] selftests: fix OOM in msg_zerocopy selftest Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 124/197] selftests: make order checking verbose " Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 125/197] drm/xe/mcr: Avoid clobbering DSS steering Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 126/197] tcp: Dont flag tcp_sk(sk)->rx_opt.saw_unknown for TCP AO Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 127/197] inet_diag: Initialize pad field in struct inet_diag_req_v2 Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 128/197] mlxsw: core_linecards: Fix double memory deallocation in case of invalid INI file Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 129/197] bnxt_en: Fix the resource check condition for RSS contexts Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 130/197] gpiolib: of: add polarity quirk for TSC2005 Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 131/197] platform/x86: toshiba_acpi: Fix quickstart quirk handling Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 132/197] Revert "igc: fix a log entry using uninitialized netdev" Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 133/197] nilfs2: fix inode number range checks Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 134/197] nilfs2: add missing check for inode numbers on directory entries Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 135/197] nilfs2: fix incorrect inode allocation from reserved inodes Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 136/197] mm: optimize the redundant loop of mm_update_owner_next() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 137/197] mm: avoid overflows in dirty throttling logic Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 138/197] btrfs: zoned: fix calc_available_free_space() for zoned mode Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 139/197] btrfs: fix adding block group to a reclaim list and the unused list during reclaim Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 140/197] btrfs: fix folio refcount in __alloc_dummy_extent_buffer() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 141/197] f2fs: Add inline to f2fs_build_fault_attr() stub Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 142/197] scsi: mpi3mr: Use proper format specifier in mpi3mr_sas_port_add() Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 143/197] Bluetooth: hci_bcm4377: Fix msgid release Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 144/197] Bluetooth: Add quirk to ignore reserved PHY bits in LE Extended Adv Report Greg Kroah-Hartman
2024-07-09 11:09 ` [PATCH 6.9 145/197] Bluetooth: qca: Fix BT enable failure again for QCA6390 after warm reboot Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 146/197] can: kvaser_usb: Explicitly initialize family in leafimx driver_info struct Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 147/197] fsnotify: Do not generate events for O_PATH file descriptors Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 148/197] Revert "mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again" Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 149/197] drm/xe: fix error handling in xe_migrate_update_pgtables Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 150/197] drm/ttm: Always take the bo delayed cleanup path for imported bos Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 151/197] drm/nouveau: fix null pointer dereference in nouveau_connector_get_modes Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 152/197] drm/amdgpu/atomfirmware: silence UBSAN warning Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 153/197] drm: panel-orientation-quirks: Add quirk for Valve Galileo Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 154/197] clk: qcom: gcc-ipq9574: Add BRANCH_HALT_VOTED flag Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 155/197] clk: sunxi-ng: common: Dont call hw_to_ccu_common on hw without common Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 156/197] powerpc/pseries: Fix scv instruction crash with kexec Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 157/197] powerpc/64s: Fix unnecessary copy to 0 when kernel is booted at address 0 Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 158/197] firmware: sysfb: Fix reference count of sysfb parent device Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 159/197] filelock: Remove locks reliably when fcntl/close race is detected Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 160/197] mtd: rawnand: Ensure ECC configuration is propagated to upper layers Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 161/197] mtd: rawnand: Fix the nand_read_data_op() early check Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 162/197] mtd: rawnand: Bypass a couple of sanity checks during NAND identification Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 163/197] mtd: rawnand: rockchip: ensure NVDDR timings are rejected Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 164/197] fs: dont misleadingly warn during thaw operations Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 165/197] net: stmmac: dwmac-qcom-ethqos: fix error array size Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 166/197] bnx2x: Fix multiple UBSAN array-index-out-of-bounds Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 167/197] s390/dasd: Fix invalid dereferencing of indirect CCW data pointer Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 168/197] selftests/harness: Fix tests timeout and race condition Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 169/197] arm64: dts: rockchip: Fix the DCDC_REG2 minimum voltage on Quartz64 Model B Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 170/197] clk: qcom: gcc-sm6350: Fix gpll6* & gpll7 parents Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 171/197] clk: qcom: clk-alpha-pll: set ALPHA_EN bit for Stromer Plus PLLs Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 172/197] clk: mediatek: mt8183: Only enable runtime PM on mt8183-mfgcfg Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 173/197] i2c: pnx: Fix potential deadlock warning from del_timer_sync() call in isr Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 174/197] fs/ntfs3: Mark volume as dirty if xattr is broken Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 175/197] drm/amdkfd: Let VRAM allocations go to GTT domain on small APUs Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 176/197] ALSA: hda/realtek: Enable headset mic of JP-IK LEAP W502 with ALC897 Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 177/197] vhost-scsi: Handle vhost_vq_work_queue failures for events Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 178/197] nvme-multipath: find NUMA path only for online numa-node Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 179/197] dma-mapping: benchmark: avoid needless copy_to_user if benchmark fails Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 180/197] drm/amdgpu: correct hbm field in boot status Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 181/197] connector: Fix invalid conversion in cn_proc.h Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 182/197] swap: yield device immediately Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 183/197] nvme: adjust multiples of NVME_CTRL_PAGE_SIZE in offset Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 184/197] libbpf: detect broken PID filtering logic for multi-uprobe Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 185/197] regmap-i2c: Subtract reg size from max_write Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 186/197] platform/x86: touchscreen_dmi: Add info for GlobalSpace SolT IVW 11.6" tablet Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 187/197] platform/x86: touchscreen_dmi: Add info for the EZpad 6s Pro Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 188/197] block: check for max_hw_sectors underflow Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 189/197] nvmet: fix a possible leak when destroy a ctrl during qp establishment Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 190/197] kbuild: fix short log for AS in link-vmlinux.sh Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 191/197] nfc/nci: Add the inconsistency check between the input data length and count Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 192/197] spi: cadence: Ensure data lines set to low during dummy-cycle period Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 193/197] ALSA: ump: Set default protocol when not given explicitly Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 194/197] drm/amdgpu: silence UBSAN warning Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 195/197] hwmon: (dell-smm) Add Dell G15 5511 to fan control whitelist Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 196/197] null_blk: Do not allow runt zone with zone capacity smaller then zone size Greg Kroah-Hartman
2024-07-09 11:10 ` [PATCH 6.9 197/197] libbpf: dont close(-1) in multi-uprobe feature detector Greg Kroah-Hartman
2024-07-09 18:42 ` [PATCH 6.9 000/197] 6.9.9-rc1 review SeongJae Park
2024-07-09 18:58 ` Markus Reichelt
2024-07-09 19:49 ` Pavel Machek
2024-07-09 20:01 ` Kelsey Steele
2024-07-09 23:21 ` Shuah Khan
2024-07-09 23:24 ` Peter Schneider
2024-07-10 2:36 ` Bagas Sanjaya
2024-07-10 3:11 ` Naresh Kamboju
2024-07-11 8:30 ` Naresh Kamboju
2024-07-11 9:11 ` Greg Kroah-Hartman
2024-07-11 12:29 ` Naresh Kamboju
2024-07-10 8:34 ` Jon Hunter
2024-07-10 9:07 ` Christian Heusel
2024-07-10 11:01 ` Pascal Ernster
2024-07-10 12:59 ` Ron Economos
2024-07-10 13:04 ` Mark Brown
2024-07-10 17:20 ` Mark Brown
2024-07-12 17:38 ` Florian Fainelli
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).