6.1.191-rc1 review
Subsystems (12)
Greg Kroah-Hartman
maintainercover 6.1.191-rc1 review
This is the start of the stable review cycle for the 6.1.191 release. There are 1887 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 30 Oct 2026 17:02:34 +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.1.191-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.1.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 6.1.191-rc1
Alexey Dobriyan <[email protected]>
uapi: stddef.h: Fix header guard location
Xiaolei Wang <[email protected]>
pinctrl: freescale: Fix a memory out of bounds when num_configs is 1
Shenwei Wang <[email protected]>
gpio: mxc: map Both Edge pad wakeup to Rising Edge
Haojie Li <[email protected]>
drm/amdkfd: fix dma_buf reference leak in get_dmabuf_info
Steffen Klassert <[email protected]>
Revert "esp: do not unref managed frag pages in esp_ssg_unref()"
Eric Dumazet <[email protected]>
inet: control sockets should not use current thread task_frag
Damien Le Moal <[email protected]>
scsi: block: Improve ioprio value validity checks
Damien Le Moal <[email protected]>
scsi: block: Introduce ioprio hints
Zhaoyang Huang <[email protected]>
mm: use stack_depot_early_init for kmemleak
Xiaolei Wang <[email protected]>
mm/kmemleak: use object_cache instead of kmemleak_initialized to check in set_track_prepare()
Thomas Zimmermann <[email protected]>
fbdev: Use /* */ comment in initializer macro
Eric Dumazet <[email protected]>
vlan: restore HW VLAN tag insertion with reorder_hdr off
Pablo Neira Ayuso <[email protected]>
netfilter: ctnetlink: do not expose expectation DEAD flag
Nathan Lynch <[email protected]>
seq_buf: Make DECLARE_SEQ_BUF() usable
HyeongJun An <[email protected]>
ALSA: seq: Don't leak the extension cell pointer in the bounce payload
Joseph Qi <[email protected]>
ocfs2: use correct endian in ocfs2_dinode_has_extents
ThangNN99 <[email protected]>
Bluetooth: hci_core: Fix queuing tx_work after workqueue is drained
Luiz Augusto von Dentz <[email protected]>
Bluetooth: hci_core: Print number of packets in conn->data_q
Tejun Heo <[email protected]>
sched/psi: Create the psimon kthread outside of cgroup_mutex
Dan Carpenter <[email protected]>
ext4: fix error pointer dereference in ext4_mb_load_buddy_gfp()
Damien Le Moal <[email protected]>
ata: libata-core: fix cancellation of a port deferred qc work
Adrian Hunter <[email protected]>
i3c: mipi-i3c-hci: Preserve RUN bit when aborting DMA ring
Ming Qian <[email protected]>
media: verisilicon: Fix kernel panic due to __initconst misuse
Magnus Lindholm <[email protected]>
alpha: do not clear remote MMU contexts in migrate_flush_tlb_page()
Henrique Carvalho <[email protected]>
smb: client: protect tc_count increment in smb2_find_smb_sess_tcon_unlocked()
Mikhail Gavrilov <[email protected]>
drm/amdgpu: replace PASID IDR with XArray
Prike Liang <[email protected]>
drm/amdgpu: fix the idr allocation flags
Pankaj Gupta <[email protected]>
KVM: SEV: Drop FOLL_WRITE for encrypted region registration
Perry Yuan <[email protected]>
drm/amdgpu: ensure no_hw_access is visible before MMIO
Dan Carpenter <[email protected]>
xen/events: fix error code in xen_bind_pirq_msi_to_irq()
Pauli Virtanen <[email protected]>
Bluetooth: MGMT: fix crash in set_mesh_sync and set_mesh_complete
Jianpeng Chang <[email protected]>
Bluetooth: MGMT: Fix memory leak in set_ssp_complete
Luiz Augusto von Dentz <[email protected]>
Bluetooth: MGMT: Fix dangling pointer on mgmt_add_adv_patterns_monitor_complete
Su Hui <[email protected]>
highmem: fix a memory copy problem in memcpy_from_folio
Moon Hee Lee <[email protected]>
fs/ntfs3: reject index allocation if $BITMAP is empty but blocks exist
Karl Mehltretter <[email protected]>
virtio_ccw: always take irq_lock in the classic interrupt handler
Namjae Jeon <[email protected]>
ksmbd: fix r_count dec/increment mismatch
Qihang <[email protected]>
ksmbd: pin conn during async oplock break notification
Jason Gunthorpe <[email protected]>
RDMA/mlx5: Follow rb_key.ats when creating new mkeys
Yishai Hadas <[email protected]>
RDMA/mlx5: Fix implicit ODP hang on parent deregistration
Cen Zhang (Microsoft) <[email protected]>
rds: tcp: unregister sysctl before tearing down listen socket
Yihang Li <[email protected]>
scsi: hisi_sas: Remove redundant checks for automatic debugfs dump
Yihang Li <[email protected]>
scsi: hisi_sas: Fix a deadlock issue related to automatic dump
Yihang Li <[email protected]>
scsi: hisi_sas: Check before using pointer variables
Sudeep Holla <[email protected]>
firmware: arm_scmi: Drop handle on protocol bind failures
Sudeep Holla <[email protected]>
firmware: arm_scmi: Fix requested device removal race
Sudeep Holla <[email protected]>
firmware: arm_scmi: Unrequest devices if driver registration fails
Cristian Marussi <[email protected]>
firmware: arm_scmi: Add multiple protocols registration support
Sudeep Holla <[email protected]>
firmware: arm_scmi: Unregister device notifier before IDR teardown
Sudeep Holla <[email protected]>
firmware: arm_scmi: Free transport channel on IDR failure
Sudeep Holla <[email protected]>
firmware: arm_scmi: Protect device request lookup with RCU
Sudeep Holla <[email protected]>
firmware: arm_scmi: Avoid IDR updates while cleaning channels
Sudeep Holla <[email protected]>
firmware: arm_scmi: Reject out of range DT protocol IDs
Sudeep Holla <[email protected]>
firmware: arm_scmi: Use channel ID for transport teardown
Cristian Marussi <[email protected]>
firmware: arm_scmi: Add internal platform/channel identifiers
Cristian Marussi <[email protected]>
firmware: arm_scmi: Move errors defs and code to common.h
Gleb Markov <[email protected]>
drm/amd/display: Remove unused-but-set variable hubp from
Zicheng Qu <[email protected]>
drm/amd/display: Fix null check for pipe_ctx->plane_state in dcn20_program_pipe
Hamza Mahfooz <[email protected]>
drm/amd/display: drop unused function set_abm_event()
Mukesh Ojha <[email protected]>
pinmux: fix race causing mux_owner NULL with active mux_usecount
Yongpeng Yang <[email protected]>
f2fs: fix node_cnt race between extent node destroy and writeback
Cong Wang <[email protected]>
bpf: Fix a potential use-after-free in bpf_link_free()
Filipe Manana <[email protected]>
btrfs: fix race between ordered extent completion and fiemap
Johannes Berg <[email protected]>
net/sched: initialize noop_qdisc owner
Petr Machata <[email protected]>
Documentation: networking: Add a caveat to nexthop_compat_mode sysctl
Mike Tipton <[email protected]>
interconnect: Don't access req_list while it's being manipulated
Song Shuai <[email protected]>
riscv: Remove SHADOW_OVERFLOW_STACK_SIZE macro
Radim Krčmář <[email protected]>
riscv: use lw when reading int cpu in asm_per_cpu
Christian Brauner <[email protected]>
signal: allow taks to temporarily block TIF_NOTIFY_SIGNAL
Christian Brauner <[email protected]>
pid_namespace: prevent TIF_NOTIFY_SIGNAL from interrupting the reaper
Christian Brauner <[email protected]>
signal: don't retarget shared signals in a dying thread group
Christian Brauner <[email protected]>
signal: only SIGKILL and the freezers interrupt a coredumping task
Christian Brauner <[email protected]>
coredump: hold RCU while releasing parked threads
Aaron Ahmed <[email protected]>
ftrace: Initialize modname and offset in print_rec()
Weiming Shi <[email protected]>
asymmetric_keys: reject trust keys without IDs
Srish Srinivasan <[email protected]>
keys/trusted_keys: return immediately after TPM unseal failure
Stefano Garzarella <[email protected]>
KEYS: trusted: Fix blob allocation size in tpm2_key_decode()
Adrian Martinez <[email protected]>
KEYS: Fix key_reject_and_link() race with keyring restriction
Cen Zhang <[email protected]>
keys: Protect the read method check against type removal
Kyle Zeng <[email protected]>
keys: make keyring indexes independent of kernel addresses
Cen Zhang <[email protected]>
keys: Protect the type name while describing a key
Cen Zhang <[email protected]>
keys: Check the authorization payload in process keyring searches
Cen Zhang <[email protected]>
keys: Avoid the owner account dereference in named keyring lookup
Lee Jones <[email protected]>
tracing/histograms: Verify event_call identity when updating synth_event refcount
Donggeun Yoo <[email protected]>
tracing: Fix 64-bit and signed histogram fields on 32-bit kernels
Donggeun Yoo <[email protected]>
tracing: Unregister field variable histograms when the command fails
Donggeun Yoo <[email protected]>
tracing: Save the event file instead of the compatible histogram
Kyle Zeng <[email protected]>
tracing: Reject incomplete event filter expressions
Kees Cook <[email protected]>
Compiler Attributes: counted_by: Adjust name and identifier expansion
Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: refuse __l2cap_chan_add if chan already has conn
Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: access chan->conn safely in get/setsockopt
Kirill A. Shutemov <[email protected]>
mm: split critical region in remap_file_pages() and invoke LSMs in between
Jonas Köppeler <[email protected]>
net_sched: codel: fix stale state for empty flows in fq_codel
Hangbin Liu <[email protected]>
bonding: do not set usable_slaves for broadcast mode
Yun Zhou <[email protected]>
xfs: don't hold buffer locks across sync transaction commit in xfs_sync_sb_buf
Frank Sorenson <[email protected]>
cifs: add revalidation on FSCTL failure in smb2_duplicate_extents()
Ben Cressey <[email protected]>
dm-integrity: fix infinite loop on discard with large tag size
Dibin Moolakadan Subrahmanian <[email protected]>
drm/i915/dmc: Harden DMC firmware payload parsing
Jann Horn <[email protected]>
futex: Fix mm reuse handling for FUT_OFF_MMSHARED
Wentao Liang <[email protected]>
i2c: viai2c-wmt: Fix clock leak in wmt_i2c_probe()
Ido Schimmel <[email protected]>
ipv4: udp: Create exceptions before socket matching
Daehyeon Ko <[email protected]>
vsock/virtio: validate packet source for connected sockets
Chen Cheng <[email protected]>
dm-integrity: require stable writes for internal hash modes
Usama Arif <[email protected]>
mm/huge_memory: transfer the pmd dirty bit to the folio on zap
Aviv Vaknin <[email protected]>
pid_namespace: make zap_pid_ns_processes() freezable
Jens Axboe <[email protected]>
exit: move core of do_wait() into helper
Christian Brauner <[email protected]>
ext4: free the sbi after a grace period
Cen Zhang (Microsoft) <[email protected]>
watch_queue: Fix note pool publication race in watch_queue_set_size()
Daniil Stas <[email protected]>
hwmon: (drivetemp) Fix driver producing garbage data when SCSI errors occur
Lorenzo Stoakes (ARM) <[email protected]>
perf: Track the perf mlock gift separately
Laurence Oberman <[email protected]>
scsi: st: Fix use-after-free race between st_remove() and st_open()
Lee Jones <[email protected]>
tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields
Paulo Alcantara <[email protected]>
smb: client: fix multiuser mount with krb5
Aohan Mei <[email protected]>
net/sched: cls_flower: validate mask pointer after nla_next()
Aleksandr Khromov <[email protected]>
ksmbd: zero the FS_OBJECT_ID_INFORMATION buffer before filling it in
Aleksandr Khromov <[email protected]>
ksmbd: initialize FileSystemControlFlags in FS_CONTROL_INFORMATION
Aleksandr Khromov <[email protected]>
ksmbd: fill in FileSysIdentifier in FS_POSIX_INFORMATION
Jun Yang <[email protected]>
net: bridge: mcast: don't truncate the port group walk on teardown
Kairui Song <[email protected]>
mm, madvise: fix potential workingset node list_lru leaks
Hyunwoo Kim <[email protected]>
KVM: x86/mmu: Preserve nested TDP shadow page tables if they are used as roots
Matt Fleming <[email protected]>
mm/huge_memory: initialise workingset state before folio split
David Rosca <[email protected]>
drm/amdgpu: Fix VCE 3 ring align_mask
Zihan Xi <[email protected]>
ipv4: avoid divide by zero in fib_rebalance
Niklas Schnelle <[email protected]>
s390/pci: Fix leak of uninitialized kernel data in SCLP report
Aswin Karuvally <[email protected]>
s390/ctcm: Prevent XID null dereference
Florian Schauer <[email protected]>
page_pool: keep frag_offset aligned for odd-sized requests
Charles Vosburgh <[email protected]>
sctp: validate chunk length in the inqueue parser
Chengfeng Ye <[email protected]>
tipc: protect node reset trace dump with node lock
Carlos Maiolino <[email protected]>
xfs: fix capability check in xfs
Bryam Vargas <[email protected]>
net/iucv: fix the recvmsg window update
Genjian Zhang <[email protected]>
dm-ebs: fix incorrect device offset check in ebs_ctr()
Ben Cressey <[email protected]>
dm-crypt: fix a tiny race condition in crypt_dec_pending
Benjamin Marzinski <[email protected]>
dm cache: fix issue with background work locking
Ming-Hung Tsai <[email protected]>
dm cache: fix demotion stats in passthrough mode
Etienne Perot <[email protected]>
cgroup: fix spurious SIGKILL of CLONE_INTO_CGROUP children
Cen Zhang (Microsoft Security FORGE Labs) <[email protected]>
tcp: fix use-after-free in do_tcp_getsockopt(TCP_CC_INFO)
Cen Zhang (Microsoft Security FORGE Labs) <[email protected]>
tcp: fix use-after-free in do_tcp_getsockopt(TCP_CONGESTION)
Heyang Tan <[email protected]>
wifi: p54: validate firmware record lengths
Tengda Wu <[email protected]>
tracing: Fix hist trigger timestamps for buffered events
Amit Machhiwal <[email protected]>
tracing: Do not initialize tracefs work if tracing is disabled
Donggeun Yoo <[email protected]>
tracing: Fix the shift out of bounds in the log2 histogram modifier
Jesse Zhang <[email protected]>
drm/amdgpu: don't drop the runtime PM reference twice in amdgpu_gpr
Timur Kristóf <[email protected]>
drm/amdgpu/sdma3: Work around POLL_REGMEM / FENCE hang
Yehyeong Lee <[email protected]>
scsi: libiscsi: Validate the task named by a management response
Yehyeong Lee <[email protected]>
scsi: libiscsi: Validate the ITT reflected in a Reject PDU
Yehyeong Lee <[email protected]>
scsi: libiscsi: Reject a negative task index from parse_pdu_itt
Yehyeong Lee <[email protected]>
scsi: xen/scsifront: Check for a NULL shadow entry on a backend response
Loic Poulain <[email protected]>
i2c: qcom-cci: Fix HALT_ACK reset request being dropped
Sasha Levin <[email protected]>
tools: gpio: fix building from the top level with O=
Daehyeon Ko <[email protected]>
sctp: revalidate output stream after association connect wait
Mario Limonciello <[email protected]>
pinctrl: amd: Clear S4 wake bits when firmware has _AEI
Aohan Mei <[email protected]>
net: rds: fix uninitialized trans dereference in CM event handler
Jérémy Jean <[email protected]>
net/sched: fix use-after-free in __tcf_action_put()
Kyle Zeng <[email protected]>
fsnotify: prevent mark additions during connector teardown
Amirmohammad Eftekhar <[email protected]>
KVM: nVMX: Reset MMU back to the root MMU if loading L2 state fails for !VM-Entry
Christian Brauner <[email protected]>
unicode: free the map after a grace period
Sung Byeongchan <[email protected]>
autofs: ignore notification errors from a replaced pipe
Peng Fan <[email protected]>
gpio: mxc: fix wakeup_pads bit operations
Alexander Stein <[email protected]>
gpio: mxc: use BIT() macro
Peng Fan <[email protected]>
gpio: mxc: fix both_edges bit operations
Bartosz Golaszewski <[email protected]>
gpio: mxc: use lock guards for the generic GPIO chip lock
Shenwei Wang <[email protected]>
gpio: mxc: enable pad wakeup on i.MX8x platforms
Nicolai Buchwitz <[email protected]>
net: bcmgenet: unshare the skb before writing the control block
Kyle Zeng <[email protected]>
netlink: avoid hashing the network namespace pointer
Xingui Yang <[email protected]>
scsi: libsas: Fix SMP IO deadlock during HA resume
Kyle Zeng <[email protected]>
pipe: preserve existing fasync readers on writer setup failure
Sasha Levin <[email protected]>
samples: pidfd: fix userprogs typo
Cen Zhang <[email protected]>
ocfs2/dlm: Protect the recovery list during debugfs reads
Linfeng Sun <[email protected]>
scsi: target: iscsi: Fix race in discovery auth updates
Laurence Oberman <[email protected]>
scsi: st: Save the visited block for the partition the drive is in
Keith Busch <[email protected]>
nios2: fix __wsum type degradation in csum_fold()
Carlos Jones Jr <[email protected]>
spi: tegra114: assert CS GPIO for every transfer in a message
HyeongJun An <[email protected]>
ASoC: nau8822: Fix the 128x oversampling switch bits
HyeongJun An <[email protected]>
ASoC: wm8978: Fix the 128x oversampling switch bits
HyeongJun An <[email protected]>
ASoC: max98371: Fix the Speaker DHT Min Volume bits
HyeongJun An <[email protected]>
ASoC: pcm3168a: Fix the DAC zero flag polarity bit
HyeongJun An <[email protected]>
ASoC: cs42l52: Fix the NG Type Switch bit
HyeongJun An <[email protected]>
ASoC: cs42l56: Put the Limiter Cushion control on the limiter register
Avi Weiss <[email protected]>
ASoC: stm32: spdifrx: fix synchronization state check
Sergey Tiraspolsky <[email protected]>
ASoC: Intel: avs: Reset the stream unless it is already prepared
Allison Henderson <[email protected]>
net/rds: don't let the rdma_cm destroy an id RDS still owns on route failure
Michal Luczaj <[email protected]>
vsock: treat TCP_CLOSING as once-established
Michael Kelley <[email protected]>
Drivers: hv: Don't reset VMBus connection state on error/exit paths
Waiman Long <[email protected]>
Drivers: hv: Avoid infinite retry loop in init_vp_index()
Xueqin Luo <[email protected]>
power: supply: ds2780: Fix ds2780_get_capacity() returning raw value
Karl Mehltretter <[email protected]>
power: supply: Fix maintenance charge table kernel-doc
Abdul Wasey <[email protected]>
mptcp: move the OoO check back into __mptcp_try_fallback()
Jinu Kim <[email protected]>
KVM: x86: Use active memslots for the per-vCPU MMIO cache
Ilan Dudnik <[email protected]>
ksmbd: fix heap out-of-bounds write in krb5_authenticate()
Matthew Wilcox (Oracle) <[email protected]>
powerpc: Remove initialisation of readpos
Chengfeng Ye <[email protected]>
netfilter: cttimeout: prevent UAF during module unload
David Carlier <[email protected]>
ieee802154: hwsim: serialize pib updates to fix double-free
Zhiling Zou <[email protected]>
ipv6: flowlabel: cap duplicate leases per socket
Xixin Liu <[email protected]>
perf: RISC-V: store available counter mask as bitmap
Kalpan Jani <[email protected]>
mptcp: pm: kernel: drop pending ADD_ADDR when removing ID0
Paulo Alcantara <[email protected]>
smb: client: honor forceuid/forcegid when mapping SIDs to uid/gid
Bjoern Doebel <[email protected]>
smb: client: fail DACL rewrite when the new DACL exceeds 64K
Paulo Alcantara <[email protected]>
smb: client: avoid using uninitialized SIDs in cifs_posix_to_fattr()
Nilesh Javali <[email protected]>
scsi: qla2xxx: Bound VP index against VP_CTRL IOCB bitmap size
Daeho Jeong <[email protected]>
f2fs: accurately adjust free_sections during free_segment_range
Nilesh Javali <[email protected]>
scsi: qla2xxx: Skip vport under deletion in report ID acquisition
Yuqi Xu <[email protected]>
wifi: cfg80211: reject duplicate wiphy cipher suite entries
Viken Dadhaniya <[email protected]>
spi: spi-qcom-qspi: Fix incomplete error handling in runtime PM
Douglas Anderson <[email protected]>
spi: spi-qcom-qspi: Support pinctrl sleep states
Krzysztof Wilczyński <[email protected]>
PCI/sysfs: Add CAP_SYS_ADMIN check to __resource_resize_store()
Ilpo Järvinen <[email protected]>
PCI/sysfs: Demacrofy pci_dev_resource_resize_attr(n) functions
Chen-Yu Tsai <[email protected]>
pinctrl: mediatek: paris: bypass pinctrl GPIO layer in set GPIO direction
Ping-Ke Shih <[email protected]>
wifi: rtw89: phy: check length before parsing PHY status IE
Candice Li <[email protected]>
drm/amdgpu: validate and share PSP fw_pri_buf copies via psp_copy_fw
Candice Li <[email protected]>
drm/amdgpu: Bound GPIO I2C table entry count from VBIOS
Stepan Ionichev <[email protected]>
tty: serial: 8250: protect against NULL uart->port.dev in register
Herve Codina <[email protected]>
driver core: Avoid warning when removing a device while its supplier is unbinding
Sicong Huang <[email protected]>
virt: acrn: Fix irqfd use-after-free during eventfd shutdown
Tao Cui <[email protected]>
RDMA/counter: Fix num_counters leak on bind_qp failure in alloc_and_bind()
Shiwu Zhang <[email protected]>
drm/amdgpu: fix buffer overflow during vBIOS update
Mario Limonciello <[email protected]>
drm/amd: Use attribute groups for PSP flashing attributes
Lijo Lazar <[email protected]>
drm/amdgpu: Add vbios attribute only if supported
Yongqiang Sun <[email protected]>
drm/amdkfd: fix SMI event cross-process information leak
Mohamed Khalfella <[email protected]>
nvme-fc: Do not cancel requests in io target before it is initialized
Fredric Cover <[email protected]>
smb: client: fix races in cifsd thread creation
Paulo Alcantara <[email protected]>
cifs: get rid of dns resolve worker
David Timber <[email protected]>
exfat: fix handling of damaged volume in exfat_create_upcase_table()
Daniel Yang <[email protected]>
exfat: resolve memory leak from exfat_create_upcase_table()
Xiaogang Chen <[email protected]>
drm/amdkfd: Let driver decide buffer size at AMDKFD_IOC_GET_DMABUF_INFO ioctl
Peter Zijlstra <[email protected]>
perf: Fix addr_filter_ranges lifetime
Pagadala Yesu Anjaneyulu <[email protected]>
wifi: mac80211: ibss: wait for in-flight TX on disconnect
Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: pcie: null RX pointers after free
Huiwen He <[email protected]>
smb/client: flush dirty data before punching a hole
Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: validate TX_CMD response layout
Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix a possible underflow
Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: add a check on the tid coming from the firmware
Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix out-of-bounds tid_data access in BA notif
Namjae Jeon <[email protected]>
ksmbd: preserve VFS inherited POSIX ACL mask
Namjae Jeon <[email protected]>
ksmbd: fix maximum allowed access checks
Val Packett <[email protected]>
remoteproc: qcom_wcnss: Fix handling the lack of PD regulators in v3
Yun Zhou <[email protected]>
ext4: fix circular lock dependency in ext4_ext_migrate
Gou Hao <[email protected]>
powerpc/xive: propagate IPI init errors to prevent use-after-free
Gou Hao <[email protected]>
powerpc/xive: add error return value to xive_smp_probe()
Rafael J. Wysocki <[email protected]>
ACPI: bus: Introduce acpi_bus_get_primary_device()
Chris Mason <[email protected]>
svcrdma: Reject Write/Reply chunks with segcount 0
Shameer Kolothum <[email protected]>
iommu/arm-smmu-v3: Manage teardown with devm
Adrian Hunter <[email protected]>
i3c: master: Fix recursive locking during device registration
Li Chen <[email protected]>
nvdimm: virtio_pmem: refcount requests for token lifetime
Maíra Canal <[email protected]>
drm/v3d: Clear queue->active_job when v3d_fence_create() fails
Richard Cheng <[email protected]>
cxl/mbox: Clamp mailbox output allocation to the payload size
Evgenii Burenchev <[email protected]>
drm/amd/display: Fix dangling pointer in plane reset function
Evgenii Burenchev <[email protected]>
drm/amd/display: Fix dangling pointer in CRTC reset function
Leon Hwang <[email protected]>
bpf: Copy per-CPU map value padding in copy_map_value_long()
Gregory Price <[email protected]>
mm/mm_init: handle alloc_percpu failure in free_area_init_core_hotplug
Alex Bereza <[email protected]>
dmaengine: xilinx_dma: Fix CPU stall in xilinx_dma_poll_timeout
Manos Pitsidianakis <[email protected]>
hwrng: core - fix rng list on registration error
Myeonghun Pak <[email protected]>
crypto: keembay - Fix AEAD unregister count in error path
Waiman Long <[email protected]>
cgroup/cpuset: Make nr_deadline_tasks an atomic_t
Chen Ridong <[email protected]>
cgroup/cpuset: move common code to cpuset-internal.h
Chen Ridong <[email protected]>
cgroup/cpuset: introduce cpuset-v1.c
Malaya Kumar Rout <[email protected]>
time/namespace: Validate nanosecond field in proc_timens_set_offset()
Armin Wolf <[email protected]>
platform/x86: dell-wmi-base: Fix handling of ultra performance key
Armin Wolf <[email protected]>
platform/x86: lg-laptop: Fix LED resource handling
Nicholas Dudar <[email protected]>
bpf: Reject rdonly/rdwr_buf_size kfunc arguments that exceed u32 max
Qing Ming <[email protected]>
usb: gadget: uac: validate rate list length before storing
Marco Scardovi <[email protected]>
platform/x86: asus-wmi: fix resource leaks on probe failure
Maher Azzouzi <[email protected]>
esp: do not unref managed frag pages in esp_ssg_unref()
Leon Romanovsky <[email protected]>
RDMA/rvt: Return NULL after port allocation failure
Reinette Chatre <[email protected]>
fs/resctrl: Prevent use-after-free in rdtgroup_kn_put()
Sudeep Holla <[email protected]>
firmware: arm_scmi: Publish channel state before callbacks
Sudeep Holla <[email protected]>
firmware: arm_scmi: Fix SCMI device destroy lifetimes
Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: guard against division by zero in iwl_dbg_tlv_alloc_fragments
Ruoyu Wang <[email protected]>
drm/msm: Only fini scheduler after successful init
Philipp Stanner <[email protected]>
drm/sched: Use struct for drm_sched_init() params
Koichiro Den <[email protected]>
dmaengine: dw-edma: Terminate all descriptors without callbacks
Kumar Kartikeya Dwivedi <[email protected]>
bpf: Zero queue and stack outputs on lock failure
Aditya Prakash Srivastava <[email protected]>
ext4: fix ABBA deadlock in ext4_xattr_inode_cache_find()
Leon Romanovsky <[email protected]>
RDMA/erdma: complete object teardown when the destroy command fails
Leon Hwang <[email protected]>
bpf: Fix WARNING in bpf_tracing_link_release
Justin Yeh <[email protected]>
pinctrl: mediatek: use devm_gpiochip_add_data() for GPIO chip
Li Qiang <[email protected]>
scsi: ufs: core: Validate string descriptors
Fan Wu <[email protected]>
spi: oc-tiny: switch to managed controller allocation
Gary Guo <[email protected]>
PCI: Fix UAF when probe runs concurrent to dyn ID removal
Gary Guo <[email protected]>
PCI: Fix dyn_id add TOCTOU
Gary Guo <[email protected]>
PCI: Make pci_match_one_device() match on ID instead of device
Samiullah Khawaja <[email protected]>
PCI: Initialize temporary device in new_id_store()
Ryusuke Konishi <[email protected]>
nilfs2: fix BUG in nilfs_copy_dirty_pages() on dirty state mismatch
Leon Romanovsky <[email protected]>
RDMA/cxgb4: Fix dereg_skb leak and double free in write_tpt_entry()
Fan Wu <[email protected]>
spi: davinci: switch to managed controller allocation
Jeff Johnson <[email protected]>
wifi: ath11k: fix overreads in ath11k_wmi_process_csa_switch_count_event()
Jeff Johnson <[email protected]>
wifi: ath11k: fix stride mismatch in mac_phy_caps_parse()
Pu Lehui <[email protected]>
bpf: Fix potential UAF when reading bpf link info
Kui-Feng Lee <[email protected]>
bpf: Retire the struct_ops map kvalue->refcnt.
Peter Zijlstra <[email protected]>
x86/ftrace: Remove SYSTEM_BOOTING exceptions
Martin Wilck <[email protected]>
md/raid1: create serial pool adding rdev to array with serialize_policy=1
Muhammad Usama Anjum <[email protected]>
misc: sgi-gru: remove interrupt-context page-table walks
Michael-CY Lee <[email protected]>
wifi: mt76: fix non-AQL packet accounting for MLO stations
Felix Fietkau <[email protected]>
wifi: mt76: mt7915: unwind state on add_interface failure
Christophe JAILLET <[email protected]>
wifi: mt76: mt7915: Fix an error handling path in mt7915_add_interface()
Felix Fietkau <[email protected]>
wifi: mt76: mt7915: allocate vif wcid in the same range as stations
Felix Fietkau <[email protected]>
wifi: mt76: cancel reset and rc work on device unregister
Yonghong Song <[email protected]>
bpf, x86: Fix trampoline stack size for 128-bit arguments
Will Deacon <[email protected]>
arm64: ptrace: Keep 'orig_x0' in-sync with x0 on syscall entry
Zhao Li <[email protected]>
wifi: nl80211: clean up color-change beacon data on errors
Jason Huang <[email protected]>
wifi: brcmfmac: fix P2P action frame handling without device vif
Zhao Li <[email protected]>
wifi: cfg80211: stop PMSR before P2P and NAN teardown
Karl Mehltretter <[email protected]>
serial: core: do fallible allocations before the console can be registered
Karl Mehltretter <[email protected]>
serial: core: clear freed pointers on uart_register_driver() failure
Karl Mehltretter <[email protected]>
tty: skip cdev_del() when no cdev is registered
Greg Kroah-Hartman <[email protected]>
tty: make tty_class a static const structure
Haoxiang Li <[email protected]>
HID: logitech-hidpp: Fix FF device cleanup on init failure
Vicki Pfau <[email protected]>
HID: steam: Reject short reads
Pu Lehui <[email protected]>
bpf, cgroup: Fix invalid storage access after __cgroup_bpf_attach failed
Rafael J. Wysocki <[email protected]>
thermal: hwmon: Remove hwmon class device along with its parent
Cheng Xu <[email protected]>
RDMA/erdma: Hold QP references for AE and CM processing
Cen Zhang <[email protected]>
ocfs2: o2hb: quiesce negotiate handlers and timeout work
Cen Zhang <[email protected]>
ocfs2/cluster: keep heartbeat local node stable
Yufan Chen <[email protected]>
ocfs2/heartbeat: fix slot mapping rollback leaks on error paths
Jiri Olsa <[email protected]>
bpf: Clear buf on error in __bpf_get_task_stack
Harry Wentland <[email protected]>
drm/amd/display: Resize MST HDCP per-connector arrays to 32
Yeoreum Yun <[email protected]>
coresight: etm4x: missing cscfg_csdev_disable_active_config() in perf enable
Yang Xiuwei <[email protected]>
scsi: sd: Fix special_vec mempool leak when scsi_alloc_sgtables() fails
Filipe Manana <[email protected]>
btrfs: defrag: fix deadlock between defrag and delalloc space reservation
Qu Wenruo <[email protected]>
btrfs: always wait for ordered extents to avoid OE races
Sun YangKai <[email protected]>
btrfs: check if root is readonly when setting posix acl
Qu Wenruo <[email protected]>
btrfs: qgroup: fix a wrong length calculation in qgroup_free_reserved_data()
Pu Lehui <[email protected]>
bpf, cgroup: Fix storage null-ptr-deref after replacing prog
Sanghyun Park <[email protected]>
bpf: Fix mmap_lock leak in irq_work path
Runyu Xiao <[email protected]>
sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE
Benjamin Coddington <[email protected]>
Treewide: Stop corrupting socket's task_frag
Guillaume Nault <[email protected]>
net: Introduce sk_use_task_frag in struct sock.
Alexander Aring <[email protected]>
fs: dlm: cleanup listen sock handling
Alexander Aring <[email protected]>
fs: dlm: remove socket shutdown handling
Alexander Aring <[email protected]>
fs: dlm: use listen sock as dlm running indicator
Chuck Lever <[email protected]>
NFS: Return a delegation the client fails to record
Kuniyuki Iwashima <[email protected]>
amt: Don't support cross-netns setup.
Sven Peter <[email protected]>
nvme-apple: Destroy the admin queue on removal
Takashi Sakamoto <[email protected]>
firewire: core: fix memory leak in error path of build_tree()
Marek Szyprowski <[email protected]>
clocksource/drivers/samsung_pwm: Switch to raw_spinlock_t type
Maurizio Lombardi <[email protected]>
nvmet: fix max_qid race between configfs and controller allocation
ZhengYuan Huang <[email protected]>
ocfs2: validate orphan slot during inode read
ZhengYuan Huang <[email protected]>
ocfs2: validate DIO orphan slot during inode read
Zhan Xusheng <[email protected]>
fs/ntfs3: fix integer overflow in MFT cluster validation
Zizhi Wo <[email protected]>
null_blk: free zones array on device power-off
Usama Arif <[email protected]>
blk-iolatency: clear delay state when freeing policy data
Usama Arif <[email protected]>
blk-iocost: clear delay state when freeing policy data
Yu Kuai <[email protected]>
blk-cgroup: delay freeing policy data after rcu grace period
John Johansen <[email protected]>
apparmor: fix deadlock in complain-mode change_hat
Yunseong Kim <[email protected]>
ksmbd: fix slab-out-of-bounds read in ksmbd_alloc_user()
Namjae Jeon <[email protected]>
ksmbd: free preauth sessions on connection teardown
Namjae Jeon <[email protected]>
ksmbd: serialize oplock close with pending break ownership
ZhangGuoDong <[email protected]>
smb/server: fix null-ptr-deref in ksmbd_ipc_tree_connect_request()
Ilan Dudnik <[email protected]>
ksmbd: defer publishing granted locks to prevent UAF/double-free race
Gao Xiang <[email protected]>
erofs: fix interlaced ztailpacking pclusters
Namjae Jeon <[email protected]>
ksmbd: safely discard unregistered deferred locks
Namjae Jeon <[email protected]>
ksmbd: detach blocked lock requests before freeing
Hang Nan <[email protected]>
ksmbd: bound smb_check_perm_dacl() ACE walks by DACL size
Ze Tan <[email protected]>
smb/server: fix session leak in ksmbd_session_register()
ZhangGuoDong <[email protected]>
pnfs/blocklayout: Fix device leaks on parse failure
Jeuk Kim <[email protected]>
NFSv4/flexfiles: fix NULL dereference for NFSv4.0 data servers
Zhansong Gao <[email protected]>
NFSv4: Fix incorrect argument passed to nfs4_delete_lease() in nfs4_add_lease()
Jiayuan Chen <[email protected]>
bpf, xdp: move offload check into dev_xdp_install()
Baokun Li <[email protected]>
fuse: check for NULL root inode in fuse_fill_super_submount
Nguyen Dinh Phi <[email protected]>
vsock: don't check the listener's sk_err in vsock_accept()
Tetsuo Handa <[email protected]>
net: add missing ref_tracker_dir_exit() to alloc_netdev_mqs()
Christopher Lusk <[email protected]>
smb: client: fix request buffer leak in smb2_new_read_req()
Runyu Xiao <[email protected]>
ALSA: mtpav: shut down output timer before card teardown
Pengpeng Hou <[email protected]>
net: qlcnic: validate unified ROM sections before loading
Eric Dumazet <[email protected]>
ip6mr: do not clone dst in ip6mr_cache_report()
Jamal Hadi Salim <[email protected]>
net: sched: fix 32-bit backlog wrap in gred, bfifo and plug enqueue
Eric Dumazet <[email protected]>
net_sched: sch_fifo: implement lockless __fifo_dump()
Nikolay Aleksandrov <[email protected]>
net: bridge: arp/nd proxy: fix reading neigh ha
Nikolay Aleksandrov <[email protected]>
vxlan: fix reading neigh ha
Jérémy Jean <[email protected]>
NFSv4.1: zero referring call lists before decoding
Jamal Hadi Salim <[email protected]>
net/sched: account classifier filter allocations to memcg
Michael Kelley <[email protected]>
Drivers: hv: vmbus: Skip VMBus module cleanup for non-nested root partition
Radek Podgorny <[email protected]>
Bluetooth: do not leak an hci_conn when a second LE connect is rejected
Anshumali Gaur <[email protected]>
octeontx2-vf: fix workqueue and netdev race in probe/remove
Victor Nogueira <[email protected]>
net/sched: act_ife: Only operate on Ethernet frames
Jamal Hadi Salim <[email protected]>
net/sched: fq: add overflow bounds to quantum and initial quantum
Haotian Zhang <[email protected]>
samples/ftrace: Fix kthread_stop() on ERR_PTR in ftrace-direct-multi-modify
Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: skip double clone set expressions on element insert
Doruk Tan Ozturk <[email protected]>
HID: sony: clean up device list on probe failure
Chuck Lever <[email protected]>
NFSD: Prevent client use-after-free during close_lru reaping
Jeffin Philip <[email protected]>
usb: gadget: f_midi: initialize work in f_midi_alloc()
Kees Cook <[email protected]>
usb: gadget: f_midi: Annotate struct f_midi with __counted_by
Kees Cook <[email protected]>
Compiler Attributes: Add __counted_by macro
Steven Rostedt <[email protected]>
tracing: Take trace_array reference when opening options file
Baineng Shou <[email protected]>
dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds
Aneesh Kumar K.V (Arm) <[email protected]>
dma-direct: return struct page from dma_direct_alloc_from_pool()
Christoph Hellwig <[email protected]>
dma-direct: simplify the use atomic pool logic in dma_direct_alloc
Petr Tesarik <[email protected]>
dma-direct: cleanup parameters to dma_direct_optimal_gfp_mask
Jinjie Ruan <[email protected]>
powerpc/kexec_file: Prevent kexec range truncation
Anthony Krowiak <[email protected]>
s390/vfio-ap: fix stale pqap_hook pointer on error in vfio_ap_mdev_set_kvm()
Anthony Krowiak <[email protected]>
s390/vfio-ap: Fix dereference matrix_mdev->kvm without checking for NULL
Anthony Krowiak <[email protected]>
s390/vfio-ap: Fix missing lock required to access list of ap_matrix_mdev objects
Haoxiang Li <[email protected]>
ASoC: hdac_hda: Fix hlink refcount leak on component registration failure
Vidhu Sarwal <[email protected]>
iio: light: ltrf216a: fix runtime PM reference leak in error path
Shreeya Patel <[email protected]>
iio: light: ltrf216a: Return floating point values
Christian Borntraeger <[email protected]>
KVM: s390: Fix memory corruption by not reinjecting CK machine checks
Fuad Tabba <[email protected]>
KVM: arm64: vgic-its: Don't dereference a NULL collection on ITT save
Wenjie Qi <[email protected]>
f2fs: validate MOVE_RANGE destination size
Wenjie Qi <[email protected]>
f2fs: avoid NULL checkpoint thread access in sysfs
Zhiguo Niu <[email protected]>
f2fs: use new ioprio Macro to get ckpt thread ioprio level
Damien Le Moal <[email protected]>
scsi: block: ioprio: Clean up interface definition
Yangtao Li <[email protected]>
f2fs: convert to use sysfs_emit
Daeho Jeong <[email protected]>
f2fs: fix to migrate all curseg types during free_segment_range
Chao Yu <[email protected]>
f2fs: fix to avoid potential deadloop in f2fs_fsync_node_pages()
Chao Yu <[email protected]>
f2fs: fix to clear dirty flag on folio in error path
Jesse Zhang <[email protected]>
drm/amdgpu: force complete the KIQ ring fences on reset
Priya Hosur <[email protected]>
drm/amdkfd: Add TLB flush after MES queue eviction/suspension
Xiaogang Chen <[email protected]>
drm/amdkfd: Fix error path at svm_migrate_copy_to_ram
Xiaogang Chen <[email protected]>
drm/amdkfd: Fix the case that vm range is hole at svm_migrate_copy_to_vram
Marek Czernohous <[email protected]>
drm/nouveau: unsubscribe the channel-kill event before the fence context
Jiri Olsa <[email protected]>
bpf: Disable preemption in bpf_get_stackid
Farhan Ali <[email protected]>
PCI: Allow per function PCI slots to fix slot reset on s390
Farhan Ali <[email protected]>
PCI: Introduce PCI_SLOT_PLACEHOLDER constant for slot_nr placeholder value
Namjae Jeon <[email protected]>
ksmbd: zero pipe read compound padding
Cen Zhang (Microsoft Security FORGE Labs) <[email protected]>
ksmbd: fix tree connection use-after-free in smb2_tree_connect()
Jann Horn <[email protected]>
apparmor: fix cred UAF caused by begin_current_label_crit_section()
Quanfa Fu <[email protected]>
apparmor: make aa_set_current_onexec return void
Breno Leitao <[email protected]>
mm/kmemleak: avoid soft lockup when scanning task stacks
Jim Cromie <[email protected]>
kmemleak: drop (age <increasing>) from leak record
Zhaoyang Huang <[email protected]>
mm: use stack_depot for recording kmemleak's backtrace
Kairui Song <[email protected]>
mm/mglru: fix and remove redundant unevictable folio handling
Daniel Borkmann <[email protected]>
bpf: Disable preemption in __bpf_get_stack
Chuck Lever <[email protected]>
svcrdma: Reject Read lists that exceed the page budget
Chuck Lever <[email protected]>
svcrdma: Validate Read chunk positions before reconstruction
Jiangshan Yi <[email protected]>
HID: nintendo: register input device after capabilities are set
Eric Farman <[email protected]>
s390/vfio_ccw: Ensure first IDAW remains constant
David Windsor <[email protected]>
bpf: Reject sleepable BPF_LSM_CGROUP programs at load time
Jordan Walters <[email protected]>
Bluetooth: hci_core: Fix UAF in hci_unregister_dev()
Eric Dumazet <[email protected]>
net: watchdog: fix refcount tracking races
Jamie Nguyen <[email protected]>
fs/ntfs3: resize log->one_page_buf when adopting on-disk page size
Cen Zhang <[email protected]>
Bluetooth: 6lowpan: hold L2CAP conn across debugfs control
Marc Zyngier <[email protected]>
KVM: arm64: vgic: Handle race between interrupt affinity change and LPI disabling
Kanglong Wang <[email protected]>
LoongArch: Move jump_label_init() before parse_early_param()
Qing Ming <[email protected]>
cgroup/rstat: validate cpu before css_rstat_cpu() access
Florian Westphal <[email protected]>
netfilter: revalidate bridge ports
Damien Riégel <[email protected]>
greybus: raw: fix use-after-free if write is called after disconnect
Yongpeng Yang <[email protected]>
f2fs: fix fsck inconsistency caused by FGGC of node block
Gao Xiang <[email protected]>
erofs: fix inline data read failure for ztailpacking pclusters
Florian Westphal <[email protected]>
netfilter: nfnetlink_queue: do shared-unconfirmed check before segmentation
Xingui Yang <[email protected]>
scsi: hisi_sas: Fix NULL pointer exception during user_scan()
Fernando Fernandez Mancera <[email protected]>
ipv4: nexthop: allocate skb dynamically in rtm_get_nexthop()
Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: clone set on flush only
Peilin Ye <[email protected]>
bpf: Tell memcg to use allow_spinning=false path in bpf_timer_init()
Qu Wenruo <[email protected]>
btrfs: avoid NULL pointer dereference if no valid csum tree
Qu Wenruo <[email protected]>
btrfs: avoid NULL pointer dereference if no valid extent tree
Zqiang <[email protected]>
rcu-tasks: Fix access non-existent percpu rtpcp variable in rcu_tasks_need_gpcb()
Alex Hung <[email protected]>
drm/amd/display: Check link_index before accessing dc->links[]
Hugo Villeneuve <[email protected]>
serial: sc16is7xx: fix TX fifo corruption
Junxian Huang <[email protected]>
RDMA/hns: Fix soft lockup under heavy CEQE load
Gavin Shan <[email protected]>
mm/shmem: disable PMD-sized page cache if needed
Jacob Keller <[email protected]>
ice: Don't process extts if PTP is disabled
Gavin Shan <[email protected]>
mm/filemap: skip to create PMD-sized page cache if needed
Longlong Xia <[email protected]>
zram: fix out-of-bounds access in writeback_store()
Chuck Lever <[email protected]>
NFSD: check truncate permission under inode lock
Jeff Layton <[email protected]>
lockd, nfsd: RCU-protect nlmsvc_ops dispatch
Jeff Layton <[email protected]>
nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke
Jeff Layton <[email protected]>
nfsd: fix fcache_disposal UAF by inlining dispose state into nfsd_net
Jeff Layton <[email protected]>
nfsd: fix stale s2s_cp_stateids IDR entry for async COPY
Chris Mason <[email protected]>
nfsd: gate nfs3 setacl by argp->mask
Robbie Ko <[email protected]>
nfsd: reject out-of-range nseconds in NFSv3 SETATTR and create ops
Chuck Lever <[email protected]>
NFSD: Prevent client use-after-free during delegation revoke
Xiubo Li <[email protected]>
ceph: fix UAF in check_new_map() on session freed during unlock
Michael Bommarito <[email protected]>
ceph: cap delegated inode count in ceph_parse_deleg_inos()
Max Kellermann <[email protected]>
ceph: do not repeat ceph_trim_dentries() if no progress possible
Guanghui Yang <[email protected]>
btrfs: drop recovered reloc root refs on recovery failure
Anand Jain <[email protected]>
btrfs: rename err to ret in btrfs_recover_relocation()
Anand Jain <[email protected]>
btrfs: rename ret to ret2 in btrfs_recover_relocation()
Anand Jain <[email protected]>
btrfs: rename ret to err in btrfs_recover_relocation()
Shuangpeng Bai <[email protected]>
btrfs: fix extent map leak in NOCOW direct I/O write
Frank Sorenson <[email protected]>
cifs: call pagecache_isize_extended() in cifs_setsize() when extending
Bryam Vargas <[email protected]>
smb: client: reject a tree connect response whose byte count is too small
Jiangshan Yi <[email protected]>
HID: mcp2221: clear rxbuf after I2C/SMBus transfer completes
Florian Pradines <[email protected]>
HID: mcp2221: fix OOB write in mcp2221_raw_event()
Jan Kara <[email protected]>
ext2: Fix lost inode updates for IS_SYNC inodes
Hui Su <[email protected]>
fbdev: ssd1307fb: defer I2C transfers from damage callbacks
Thomas Zimmermann <[email protected]>
fbdev/ssd1307fb: Generate deferred I/O ops
Thomas Zimmermann <[email protected]>
fbdev: Add initializer macros for struct fb_ops
Thomas Zimmermann <[email protected]>
fbdev: Validate info->screen_{base, buffer} in fb_ops implementationsThomas Zimmermann <[email protected]>
fbdev: Don't re-validate info->state in fb_ops implementations
Bryam Vargas <[email protected]>
dm array: validate array block headers on read
Heinz Mauelshagen <[email protected]>
dm: correct block comments format.
Zhiling Zou <[email protected]>
ip: orphan prefetched skbs before multicast forwarding
Andrea Mayer <[email protected]>
ipv6: rpl: fix NULL dereference of idev in ipv6_rpl_srh_rcv()
Chris Mason <[email protected]>
SUNRPC: svcauth_gss: enforce krb5 token minimum length
Chuck Lever <[email protected]>
SUNRPC: Convert unwrap_priv_data() to use xdr_stream
Chuck Lever <[email protected]>
SUNRPC: Rename automatic variables in unwrap_priv_data()
Chuck Lever <[email protected]>
SUNRPC: Fix crasher in unwrap_integ_data()
Jeff Layton <[email protected]>
sunrpc: defer rq_argp and rq_resp free until after RCU grace period
Luxiao Xu <[email protected]>
sunrpc: fix use-after-free in __rpc_clnt_handle_event and __rpc_clnt_remove_pipedir
Chuck Lever <[email protected]>
SUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2
Chuck Lever <[email protected]>
svcrdma: Reject connection when transport allocation fails
Chuck Lever <[email protected]>
svcrdma: Handle ADDR_CHANGE CM event properly
Chuck Lever <[email protected]>
svcrdma: Reject inline replies that overflow the pull-up buffer
Chuck Lever <[email protected]>
svcrdma: Use svc_xprt_put to free listener on create failure
Yan Zhen <[email protected]>
sunrpc: xprtrdma: Use ERR_CAST() to return
Chuck Lever <[email protected]>
svcrdma: Refactor the creation of listener CMA ID
Chuck Lever <[email protected]>
svcrdma: Allocate new transports on device's NUMA node
Tejun Heo <[email protected]>
sched/core: Make core-sched flips wait for in-flight selections
Shuangpeng Bai <[email protected]>
lockd: fix NULL dereference on lockowner allocation failure
Fan Wu <[email protected]>
power: supply: charger-manager: register regulators before exposing sysfs
Uwe Kleine-König <[email protected]>
power: supply: charger-manager: Convert to platform remove callback returning void
Fan Wu <[email protected]>
power: supply: lp8788-charger: fix use-after-free on remove
Andrew Davis <[email protected]>
power: supply: lp8788: Use devm_power_supply_register() helper
Uwe Kleine-König <[email protected]>
power: supply: lp8788-charger: Convert to platform remove callback returning void
Jianing Li <[email protected]>
power: supply: max17040: propagate register read errors
Weimin Xiong <[email protected]>
iommu/msm: Unwind probe state on registration failure
Kevin Tian <[email protected]>
iommu/vt-d: Force requesting ACS when tboot is enabled
Lu Baolu <[email protected]>
iommu: Add max_pasids field in struct iommu_device
Abdun Nihaal <[email protected]>
platform/x86: int1092: Fix potential memory leak in sar_probe()
Rafael J. Wysocki <[email protected]>
platform/x86: intel_sar: Check ACPI_HANDLE() against NULL
Mario Limonciello <[email protected]>
platform/x86/amd/pmc: Propagate SMU errors and validate S2D address
Zihan Xi <[email protected]>
net: l2tp: do not propagate multicast notification errors
Xuanqiang Luo <[email protected]>
net: ravb: serialize PTP clock teardown
Fan Ye <[email protected]>
net: thunderbolt: Mark the connection down when bringing it up fails
Fan Ye <[email protected]>
net: thunderbolt: Release the Rx HopID that was handed out on mismatch
Hidayath Khan <[email protected]>
net/smc: stop killed, freed and out_of_sync sharing a byte
Abdun Nihaal <[email protected]>
mfd: sm501: Fix potential memory leaks during remove
Uwe Kleine-König <[email protected]>
mfd: sm501: Convert to platform remove callback returning void
Paul Cercueil <[email protected]>
mfd: sm501: Remove #ifdef guards for PM related functions
Dawei Feng <[email protected]>
wifi: iwlwifi: dvm: fix memory leak in iwl_op_mode_dvm_start()
Bryam Vargas <[email protected]>
wifi: mt76: mt7915: bound the device EEPROM address before the EFUSE copy
StanleyYP Wang <[email protected]>
wifi: mt76: mt7915: set correct background radar capability
Eric Dumazet <[email protected]>
vlan: fix skb_under_panic and races when toggling HW VLAN offload
David Rosca <[email protected]>
drm/amdgpu: Fix UVD dpb min size calculation for H264
Srinivasan Shanmugam <[email protected]>
drm/amd/amdgpu: Fix errors & warnings in amdgpu _uvd, _vce.c
Wei Fang <[email protected]>
net: tap: fix wrong transport_header when sending VLAN-tagged frame
Akihiko Odaki <[email protected]>
tap: Keep hdr_len in tap_get_user()
Leon Romanovsky <[email protected]>
ntb: Store original DMA address for future release
Koichiro Den <[email protected]>
NTB: ntb_transport: Use ntb_get_dma_dev() for DMA buffers
Koichiro Den <[email protected]>
NTB: core: Add .get_dma_dev() callback to ntb_dev_ops
Eric Dumazet <[email protected]>
tipc: avoid busy looping in tipc_exit_net()
Ibrahim Hashimov <[email protected]>
RDMA/rxe: Fix responder UAF on IB_QP_MAX_DEST_RD_ATOMIC modify_qp
Yong Wang <[email protected]>
tcp: clamp route advmss to TCP_MIN_MSS
Kyle Zeng <[email protected]>
net/packet: defer vmalloc TX_RING free until skbs finish
Fourie Zhang <[email protected]>
netfilter: nf_tables: don't queue packet path object notifications
Bryam Vargas <[email protected]>
crypto: virtio - bound the akcipher result length
Lukas Wunner <[email protected]>
crypto: virtio - Drop superfluous [as]kcipher_req pointer
Lukas Wunner <[email protected]>
crypto: virtio - Drop superfluous [as]kcipher_ctx pointer
Lukas Wunner <[email protected]>
crypto: virtio - Drop sign/verify operations
Markus Elfring <[email protected]>
crypto: virtio - Less function calls in __virtio_crypto_akcipher_do_req() after error detection
Thomas Zimmermann <[email protected]>
fbdev: Wrap user-invoked calls to fb_set_var() in helper
Ali Ahmet Memis <[email protected]>
Bluetooth: ISO: zero the sockaddr before returning it in getname
Bryam Vargas <[email protected]>
selinux: reject a permission value exceeding the class permission count
William Palacek <[email protected]>
drm/amdkfd: Add bounds check for CRAT subtype length
Yongqiang Sun <[email protected]>
drm/amdkfd: Fix infinite loop parsing CRAT with zero subtype length
Shay Drory <[email protected]>
net/mlx5e: TC, Check if flow is PEER before acquiring devcom lock
Luxiao Xu <[email protected]>
bpf: Check sk_state before sk_protocol in bpf_tcp_*_syncookie
Stefan Haberland <[email protected]>
s390/dasd: Fix undersized format-check buffer
Heiko Carstens <[email protected]>
s390: include linux/io.h instead of asm/io.h
Baoquan He <[email protected]>
s390/mm: do not include <asm-generic/io.h> directly
Thomas Richter <[email protected]>
s390/cpum_sf: move functions from header file to source file
Heiko Carstens <[email protected]>
s390/appldata: remove power management callbacks
Yuho Choi <[email protected]>
dmaengine: idxd: fix double free of wq, engine, and group structs
Guenter Roeck <[email protected]>
hwmon: (sht3x) Fix unaligned accesses
Chenguang Zhao <[email protected]>
net: ethernet: mtk_eth_soc: pass eth to mtk_handle_irq_rx in poll_controller
Pablo Neira Ayuso <[email protected]>
netfilter: nf_conntrack_expect: use conntrack GC to reap expectations
Prasanna Kumar T S M <[email protected]>
soc: xilinx: Shutdown and free rx mailbox channel
Uwe Kleine-König <[email protected]>
soc/xilinx: zynqmp_power: Convert to platform remove callback returning void
Yihang Li <[email protected]>
scsi: hisi_sas: Add slave_destroy interface for v3 hw
Yuho Choi <[email protected]>
media: atomisp: gc2235: fix UAF and memory leak
Qiuxu Zhuo <[email protected]>
EDAC/igen6: Fix call trace due to missing release()
Fernando Fernandez Mancera <[email protected]>
netfilter: synproxy: fix unaligned memory access in timestamp adjustment
Fernando Fernandez Mancera <[email protected]>
netfilter: synproxy: adjust duplicate timestamp options
Fernando Fernandez Mancera <[email protected]>
netfilter: synproxy: drop packets if timestamp adjustment fails
Florian Westphal <[email protected]>
netfilter: make nftables drops visible in net dropmonitor
David Carlier <[email protected]>
netfilter: flowtable: avoid num_encaps underflow on bridge VLAN untag
Weiming Shi <[email protected]>
btrfs: lzo: reject compressed segment that overflows the compressed input
Ratheesh Kannoth <[email protected]>
octeontx2-af: npc: Fix size of entry2cntr_map
Cen Zhang <[email protected]>
ALSA: seq: oss: Serialize readq reset state with q->lock
James Clark <[email protected]>
coresight: ete: Always save state on power down
Ivan Abramov <[email protected]>
ieee802154: Avoid calling WARN_ON() on -ENOMEM in cfg802154_switch_netns()
Li RongQing <[email protected]>
ACPI: processor_idle: Mark LPI enter functions as __cpuidle
Matthieu Baerts (NGI0) <[email protected]>
mptcp: avoid combining some incoming suboptions
Candice Li <[email protected]>
drm/amdgpu: reject oversized IBs with per-ring packet limits
Eric Farman <[email protected]>
s390/vfio_ccw: Limit the number of channel program segments
Mark Brown <[email protected]>
ASoC: tas2562: Validate values for volume writes
Hongjie Fang <[email protected]>
scsi: core: pair EH runtime PM get and put
Julian Anastasov <[email protected]>
ipvs: revalidate ihl to prevent out-of-bounds access
Jamal Hadi Salim <[email protected]>
net/sched: act_api: fix TOCTOU NULL deref on a->goto_chain
Victor Nogueira <[email protected]>
net: sched: Add initial TC error skb drop reasons
Victor Nogueira <[email protected]>
net: sched: Move drop_reason to struct tc_skb_cb
Jamal Hadi Salim <[email protected]>
net, sched: Fix SKB_NOT_DROPPED_YET splat under debug config
Daniel Borkmann <[email protected]>
net, sched: Make tc-related drop reason more flexible
Eric Dumazet <[email protected]>
l2tp: fix tunnel and session refcount leak on seq_file release
Mark Tomlinson <[email protected]>
gpio: pca953x: fix pca953x_irq_bus_sync_unlock regmap lock
Karthikeyan KS <[email protected]>
soc: aspeed: lpc-snoop: Fix usercopy overflow in snoop_file_read
David Lee <[email protected]>
btrfs: lzo: reject inline extents without valid headers
Chengfeng Ye <[email protected]>
bpf: Fix netns reference imbalance in conntrack kfuncs
Linfeng Sun <[email protected]>
vhost_iotlb: bound map allocation in add_range
Jamal Hadi Salim <[email protected]>
net/sched: cls_api: Always acquire rtnl_lock when destroying locked classifiers
Xin Long <[email protected]>
net: sched: refine software bypass handling in tc_run
Jianbo Liu <[email protected]>
net: sched: cls_api: fix slab-use-after-free in fl_dump_key
Asbjørn Sloth Tønnesen <[email protected]>
net: sched: cls_api: add filter counter
Asbjørn Sloth Tønnesen <[email protected]>
net: sched: cls_api: add skip_sw counter
Eric Dumazet <[email protected]>
netfilter: nf_flow_table: drop existing skb dst before skb_dst_set_noref()
Alexandra Winter <[email protected]>
s390/ism: Fix UAF of sba and ieq during ism_dev_exit()
Hongyan Xu <[email protected]>
watchdog: at91sam9_wdt: prevent timer rearm during teardown
Dongli Zhang <[email protected]>
net: tap: set skb->dev before parsing virtio net header in tap_get_user_xdp()
Jérémy Jean <[email protected]>
tls: rx: restore msg_iter before TLS 1.3 optimistic retry
Sabrina Dubroca <[email protected]>
selftests: tls: add rekey tests
Sabrina Dubroca <[email protected]>
selftests: tls: add test with a partially invalid iov
Sabrina Dubroca <[email protected]>
selftests: tls: add getsockopt test
Zhiling Zou <[email protected]>
mm/page_table_check: skip special zero mappings
Lorenzo Stoakes (ARM) <[email protected]>
mm/ptdump: always stabilise against page table freeing using init_mm
Dongjiang Zhu <[email protected]>
btrfs: skip global block reserve accounting for rescue mounts
Cen Zhang (Microsoft) <[email protected]>
net/sched: cls_u32: validate offshift to prevent shift-out-of-bounds
Eric Dumazet <[email protected]>
net: udp_tunnel: fix memory leak in udp_tunnel_nic_unregister()
Pauli Virtanen <[email protected]>
Bluetooth: ISO: hold sk properly in iso_conn_ready
Hariprasad Kelam <[email protected]>
octeontx2-af: Block VFs from clobbering special CGX PKIND state
Harald Freudenberger <[email protected]>
s390/zcrypt: Close speculative mem read possibility
Zack Rusin <[email protected]>
drm/vmwgfx: reject DX_BIND_QUERY without a DX context
Werner Kasselman <[email protected]>
drm/radeon: fix integer overflow in radeon_align_pitch()
Wei Zhang <[email protected]>
wifi: ath11k: cancel SSR work items during PCI shutdown
Di Shen <[email protected]>
OPP: Fix race between OPP addition and lookup
Alexander Aring <[email protected]>
dlm: fix add msg handle in send_queue ordered
Prathamesh Deshpande <[email protected]>
IB/mlx5: Fix transport-domain rollback and initialize lb mutex earlier
Pengpeng Hou <[email protected]>
tracing: Bound synthetic-field strings with seq_buf
Kees Cook <[email protected]>
seq_buf: Introduce DECLARE_SEQ_BUF and seq_buf_str()
Matthew Wilcox (Oracle) <[email protected]>
tracing: Move readpos from seq_buf to trace_seq
Sergey Senozhatsky <[email protected]>
seq_buf: Add seq_buf_do_printk() helper
Lianfa Weng <[email protected]>
RDMA/hns: Fix log flood after cmd_mbox failure
Takashi Iwai <[email protected]>
ALSA: seq: oss: Fix UAF at handling events with embedded SysEx data
Geliang Tang <[email protected]>
nvmet-tcp: fix page fragment cache leak in error path
Michael S. Tsirkin <[email protected]>
vhost: fix vhost_get_avail_idx for a non empty ring
Michael S. Tsirkin <[email protected]>
vhost: move smp_rmb() into vhost_get_avail_idx()
Xianting Tian <[email protected]>
vhost: correct misleading printing information
Zhang Cen <[email protected]>
ocfs2: validate fast symlink target during inode read
Pablo Neira Ayuso <[email protected]>
netfilter: cttimeout: detach dataplane timeout policy and repurpose refcount
Bernard Metzler <[email protected]>
RDMA/siw: Fix endpoint/socket association handling
Guoqing Jiang <[email protected]>
RDMA/siw: Introduce siw_destroy_cep_sock
Filipe Manana <[email protected]>
btrfs: fix deadlock cloning inline extent when using flushoncommit
Larysa Zaremba <[email protected]>
ixgbe: do not configure xps for XDP queues
Aditya Prakash Srivastava <[email protected]>
ext4: fix kernel BUG in ext4_write_inline_data_end
Yun Zhou <[email protected]>
ext4: validate donor file superblock early in EXT4_IOC_MOVE_EXT
Cássio Gabriel <[email protected]>
ASoC: topology: Check PCM and DAI name strings before use
HanQuan <[email protected]>
ALSA: seq: Fix kernel heap address leak in bounce_error_event()
Takashi Iwai <[email protected]>
ALSA: seq: Drop superfluous filter argument of get_event_dest_client()
Joe Damato <[email protected]>
bnxt: fix head underflow on XDP head-grow
Cen Zhang <[email protected]>
ALSA: seq: avoid stale FIFO cells during resize
Takashi Iwai <[email protected]>
ALSA: seq: Clean up fifo locking with guard
Takashi Iwai <[email protected]>
ALSA: seq: fifo: Use guard() for locking
Kuniyuki Iwashima <[email protected]>
sockmap: Fix use-after-free in udp_bpf_recvmsg()
Jacob Moroni <[email protected]>
RDMA/irdma: Replace waitqueue and flag with completion
Baoli.Zhang <[email protected]>
soundwire: fix bug in sdw_add_element_group_count found by syzkaller
Yang Erkun <[email protected]>
nfs: use nfsi->rwsem to protect traversal of the file lock list
Abd-Alrhman Masalkhi <[email protected]>
md/raid1: fix writes_pending and barrier reference leaks on write failures
Abd-Alrhman Masalkhi <[email protected]>
md/raid10: fix writes_pending leak on write request failures
John Garry <[email protected]>
md/raid10: Handle bio_split() errors
Abd-Alrhman Masalkhi <[email protected]>
md/raid10: fix writes_pending and barrier reference leaks on discard failures
Yiyang Chen <[email protected]>
bpf: Guard conntrack opts error writes
Chen Cheng <[email protected]>
md/raid5: avoid R5_Overlap races while breaking stripe batches
Florian Westphal <[email protected]>
netfilter: nft_compat: ebtables emulation must reject non-bridge targets
Eric Dumazet <[email protected]>
net: udp_tunnel: prevent double queueing in udp_tunnel_nic_device_sync
Eric Dumazet <[email protected]>
tipc: fix UAF in cleanup_bearer() due to premature dst_cache_destroy()
Xin Long <[email protected]>
sctp: add INIT verification after cookie unpacking
Xin Long <[email protected]>
sctp: fix addr_wq_timer race in sctp_free_addr_wq()
Haofeng Li <[email protected]>
ksmbd: reject undersized DACLs before parsing ACEs
Michael Bommarito <[email protected]>
xen/pvcalls: bound backend response req_id before indexing rsp[]
Christian Brauner <[email protected]>
fs: refuse O_TMPFILE creation with an unmapped fsuid or fsgid
David Howells <[email protected]>
afs: Fix reinitialisation of the inode, in particular ->lock_work
Feng Liu <[email protected]>
net/mlx5e: Fix publication race for priv->channel_stats[]
Jamal Hadi Salim <[email protected]>
net/sched: act_pedit: fix TOCTOU heap OOB write in tc offload
Cen Zhang <[email protected]>
Bluetooth: 6lowpan: avoid untracked enable work
Yuho Choi <[email protected]>
net/liquidio: drop cached VF pci_dev LUT
Sandipan Das <[email protected]>
perf/x86/amd/core: Avoid enabling BRS from the SVM reload path
Eric Dumazet <[email protected]>
ipv4: igmp: Fix potential memory leaks in igmp_mod_timer() and igmp_stop_timer()
Tamaki Yanagawa <[email protected]>
netfilter: nft_lookup: fix catchall element handling with inverted lookups
Theodor Arsenij Larionov-Trichkine <[email protected]>
netfilter: nft_fib: reject fib expression on the netdev egress hook
Deepanshu Kartikey <[email protected]>
mm/hugetlb: fix hugetlb cgroup rsvd charge/uncharge mismatch
Matthew Wilcox (Oracle) <[email protected]>
fs: Remove NTFS classic
Florian Fuchs <[email protected]>
mtd: maps: vmu-flash: fix fault in unaligned fixup
Ian Bridges <[email protected]>
ocfs2: fix UBSAN array-index-out-of-bounds in ocfs2_sum_rightmost_rec
Deepanshu Kartikey <[email protected]>
ocfs2: validate i_refcount_loc when refcount flag is set
Dmitry Antipov <[email protected]>
ocfs2: add extra consistency checks for chain allocator dinodes
Dmitry Antipov <[email protected]>
ocfs2: add suballoc slot check in ocfs2_validate_inode_block()
Julian Sun <[email protected]>
ocfs2: correct l_next_free_rec in online check
Koichiro Den <[email protected]>
dmaengine: dw-edma-pcie: Reject devices without driver data
Haoxiang Li <[email protected]>
platform/x86: dell-laptop: fix missing cleanups in init error path
Lyndon Sanche <[email protected]>
platform/x86: dell-smbios: Move request functions for reuse
Armin Wolf <[email protected]>
ACPI: battery: Pass battery hook pointer to hook callbacks
Michael Bommarito <[email protected]>
nvmet-auth: reject short AUTH_RECEIVE buffers
Damien Le Moal <[email protected]>
nvmet: Introduce nvmet_req_transfer_len()
Mikulas Patocka <[email protected]>
dm-ioctl: fix a possible overflow in list_version_get_info
Heinz Mauelshagen <[email protected]>
dm: avoid spaces before function arguments or in favour of tabs
Mikulas Patocka <[email protected]>
dm ioctl: a small code cleanup in list_version_get_info
Mikulas Patocka <[email protected]>
dm-verity: fix buffer overflow in FEC calculation
Martin Kaiser <[email protected]>
riscv: probes: save original sp in rethook trampoline
Guoniu Zhou <[email protected]>
pmdomain: imx93-blk-ctrl: Extract PHY as shared domain for DSI/CSI
Peng Fan <[email protected]>
pmdomain: imx: Fix i.MX8MP VC8000E power up sequence
Zhao Li <[email protected]>
wifi: ieee80211: validate MLE common info length
Harald Freudenberger <[email protected]>
s390/zcrypt: Fix buffer over-read in cca_cipher2protkey
Rosen Penev <[email protected]>
ata: sata_dwc_460ex: fix infinite loop in NCQ tag completion bit-scanning
Amir Goldstein <[email protected]>
ovl: check access to copy_file_range source with src mounter creds
Linmao Li <[email protected]>
drm/vc4: Prevent shader BO mappings from becoming writable
Jamal Hadi Salim <[email protected]>
net/sched: Handle TC_ACT_REDIRECT from qdisc filter chains
George Guo <[email protected]>
LoongArch: Fix address space mismatch in kexec command line lookup
Petr Wozniak <[email protected]>
xfrm: fix stale skb->prev after async crypto steals a GSO segment
Jacob Moroni <[email protected]>
RDMA/irdma: Prevent user-triggered null deref on QP create
Maoyi Xie <[email protected]>
wifi: mac80211: defer link RX stats percpu free to RCU
Sarika Sharma <[email protected]>
wifi: cfg80211: add link_station_info structure to support MLO statistics
Sarika Sharma <[email protected]>
wifi: mac80211: refactor populating mesh related fields in sinfo
Peddolla Harshavardhan Reddy <[email protected]>
wifi: cfg80211: convert pmsr_free_wk to wiphy_work to fix deadlock
Cen Zhang <[email protected]>
wifi: cfg80211: use wiphy work for socket owner autodisconnect
Mostafa Saleh <[email protected]>
firmware: arm_ffa: Fix out-of-bound writes in ffa_setup_and_transmit()
Matt Bobrowski <[email protected]>
bpf: Fix UAF in sock clone early bailouts
David Jeffery <[email protected]>
scsi: core: wake eh reliably when using scsi_schedule_eh
Guanghui Feng <[email protected]>
iommu/amd: Wait for completion instead of returning early in iommu_completion_wait()
Weiming Shi <[email protected]>
tipc: serialize udp bearer replicast list updates
Frank Sorenson <[email protected]>
cifs: fix cifsFileInfo leak on kmalloc failure in deferred close drain paths
Frank Sorenson <[email protected]>
cifs: prevent readdir from changing file size due to stale directory metadata
Gregor Herburger <[email protected]>
drm/vc4: hvs/v3d: Fix null dereference in unbind
Gal Pressman <[email protected]>
net/mlx5: Fix MCIA register buffer overflow on 32 dword reads
Tvrtko Ursulin <[email protected]>
drm/amdgpu: Fix context pstate override handling
James Zhu <[email protected]>
drm/amdgpu: keep amdgpu_ctx_mgr in ctx structure
David Francis <[email protected]>
drm/amdkfd: Check bounds on CRIU restore queue type and mqd size
Jani Nikula <[email protected]>
drm/i915/bios: range check LFP Data Block panel_type2
Joonas Lahtinen <[email protected]>
drm/i915/gt: Fix NULL deref on sched_engine alloc failure
Jani Nikula <[email protected]>
drm/i915/mst: limit DP MST ESI service loop
Mario Limonciello <[email protected]>
drm/amdgpu: Release VFCT ACPI table reference
Lijo Lazar <[email protected]>
drm/amdgpu: Add wrapper for freeing vbios memory
Lijo Lazar <[email protected]>
drm/amdgpu: Use dbg level for VBIOS check messages
Srinivasan Shanmugam <[email protected]>
drm/amd/amdgpu: Fix errors & warnings in amdgpu _bios, _cs, _dma_buf, _fence.c
Linmao Li <[email protected]>
drm/vc4: Shut down BO cache timer before teardown
Guangshuo Li <[email protected]>
media: vivid: fix cleanup bugs in vivid_init()
Yuxiang Yang <[email protected]>
tcp: challenge ACK for non-exact RST in SYN-RECEIVED
Asad Kamal <[email protected]>
drm/amdgpu: fix aperture mapping leak
Namjae Jeon <[email protected]>
ksmbd: bound DACL dedup walk to copied ACEs
Davide Ornaghi <[email protected]>
ksmbd: fix path resolution in ksmbd_vfs_kern_path_create
Sean Christopherson <[email protected]>
KVM: nVMX: Put vmcs12 pages if nested VM-Enter fails due to invalid guest state
Taeyang Lee <[email protected]>
perf/core: Detach event groups during remove_on_exec
Cássio Gabriel <[email protected]>
ALSA: hda/cs35l41: Fix firmware load work teardown
Myeonghun Pak <[email protected]>
usb: typec: tcpci_rt1711h: unregister TCPCI port with devres
Breno Leitao <[email protected]>
netpoll: fix a use-after-free on shutdown path
Namjae Jeon <[email protected]>
ksmbd: prevent path traversal bypass by restricting caseless retry
Namjae Jeon <[email protected]>
ksmbd: use opener credentials for delete-on-close
Namjae Jeon <[email protected]>
ksmbd: use opener credentials for ADS I/O
Haofeng Li <[email protected]>
ksmbd: validate NTLMv2 response before updating session key
Ralph Boehme <[email protected]>
smb/client: fix chown/chgrp with SMB3 POSIX Extensions
Dawei Feng <[email protected]>
usb: free iso schedules on failed submit
Xu Rao <[email protected]>
usb: gadget: f_printer: take kref only for successful open
Andrzej Pietrasiewicz <[email protected]>
usb: gadget: function: Simplify diagnostic messaging in printer
Johan Hovold <[email protected]>
USB: iowarrior: fix use-after-free on disconnect race
Bryam Vargas <[email protected]>
nvmet: fix pre-auth out-of-bounds heap read in Discovery Get Log Page
Tianchu Chen <[email protected]>
nvmet-auth: validate reply message payload bounds against transfer length
Hannes Reinecke <[email protected]>
nvmet: return DHCHAP status codes from nvmet_setup_auth()
Ahsan Atta <[email protected]>
crypto: qat - protect service table iterations with service_lock
Guenter Roeck <[email protected]>
hwmon: (lm90) Add lock protection to lm90_alert
Martin Kaiser <[email protected]>
test_kprobes: clear kprobes between test runs
Jia Zhu <[email protected]>
erofs: fix metabuf leak in inode xattr initialization
Jiajia Liu <[email protected]>
Bluetooth: btmtk: fix urb->setup_packet leak in error paths
Junyi Liu <[email protected]>
ksmbd: validate SID in parent security descriptor during ACL inheritance
Florian Westphal <[email protected]>
netfilter: ebtables: move to two-stage removal scheme
Florian Westphal <[email protected]>
netfilter: bridge: eb_tables: close module init race
Guenter Roeck <[email protected]>
hwmon: (lm90) Stop work before releasing hwmon device
Xingwang Xiang <[email protected]>
bpf, skmsg: fix verdict sk_data_ready racing with ktls rx
Keith Busch <[email protected]>
blk-mq: pop cached request if it is usable
Fernando Fernandez Mancera <[email protected]>
netfilter: nf_tables: fix dst corruption in same register operation
Phil Sutter <[email protected]>
netfilter: nf_tables: Extend nft_expr_ops::dump callback parameters
Heitor Alves de Siqueira <[email protected]>
Bluetooth: hci_sync: Set HCI_CMD_DRAIN_WORKQUEUE during device close
Greg Kroah-Hartman <[email protected]>
usb: typec: tcpm: validate VDO count in Discover Identity ACK handlers
Greg Kroah-Hartman <[email protected]>
usb: typec: tcpm: bound altmode_desc[] per iteration in svdm_consume_modes()
Greg Kroah-Hartman <[email protected]>
usb: typec: tcpm/tcpci_maxim: validate header NDO against RX_BYTE_CNT
Sean Christopherson <[email protected]>
KVM: SEV: Ignore Port I/O requests of length '0'
SeungJu Cheon <[email protected]>
Bluetooth: ISO: Fix data-race on iso_pi fields in hci_get_route calls
Yinjie Yao <[email protected]>
drm/amdgpu/vcn: set no_user_fence for VCN v2.0 enc/dec rings
Yinjie Yao <[email protected]>
drm/amdgpu/vcn: set no_user_fence for VCN v2.5 enc/dec rings
Yinjie Yao <[email protected]>
drm/amdgpu/vcn: set no_user_fence for VCN v3.0 enc/dec rings
Yinjie Yao <[email protected]>
drm/amdgpu/vcn: set no_user_fence for VCN v4.0 enc ring
Yinjie Yao <[email protected]>
drm/amdgpu/jpeg: set no_user_fence for JPEG v2.0 ring
Yinjie Yao <[email protected]>
drm/amdgpu/jpeg: set no_user_fence for JPEG v2.5 ring
Yinjie Yao <[email protected]>
drm/amdgpu/jpeg: set no_user_fence for JPEG v3.0 ring
Yinjie Yao <[email protected]>
drm/amdgpu/jpeg: set no_user_fence for JPEG v4.0 ring
Ian Bridges <[email protected]>
fbdev: fix use-after-free in store_modes()
Konstantin Khorenko <[email protected]>
gcov: use atomic counter updates to fix concurrent access crashes
Hongling Zeng <[email protected]>
fbdev: omap2: fix use-after-free in omapfb_mmap
Hongling Zeng <[email protected]>
fbdev: omap2: fix inconsistent lock returns in omapfb_mmap
Anna Maniscalco <[email protected]>
drm/msm: always recover the gpu
Alysa Liu <[email protected]>
drm/amdkfd: Add upper bound check for num_of_nodes
Yongpeng Yang <[email protected]>
f2fs: fix fsck inconsistency caused by incorrect nat_entry flag usage
Sean Christopherson <[email protected]>
KVM: Don't WARN if memory is dirtied without a vCPU when the VM is dying
Harry Wentland <[email protected]>
drm/amd/display: Fix out-of-bounds read in dp_get_eq_aux_rd_interval()
Rory Little <[email protected]>
wifi: mt76: mt7921: Place upper limit on station AID
Srinivasan Shanmugam <[email protected]>
drm/amd/display: Avoid NULL dereference in dc_dmub_srv error paths
Stylon Wang <[email protected]>
drm/amd/display: Add interface to enable DPIA trace
Erni Sri Satya Vennela <[email protected]>
net: mana: Guard mana_remove against double invocation
Morduan Zang <[email protected]>
net: phonet: do not BUG_ON() in pn_socket_autobind() on failed bind
Qu Wenruo <[email protected]>
btrfs: only release the dirty pages io tree after successful writes
Gao Xiang <[email protected]>
erofs: fix use-after-free on sbi->sync_decompress
Jiayuan Chen <[email protected]>
netfilter: nft_ct: bail out on template ct in get eval
Lee Jones <[email protected]>
l2tp: pppol2tp: hold reference to session in pppol2tp_ioctl()
Fedor Pchelkin <[email protected]>
wifi: fix leak if split 6 GHz scanning fails
Yun Zhou <[email protected]>
gpio: mvebu: fix NULL pointer dereference in suspend/resume
Uwe Kleine-König <[email protected]>
gpio: mvebu: Use IS_REACHABLE instead of IS_ENABLED for CONFIG_PWM
Maxime Chevallier <[email protected]>
net: phy: clean the sfp upstream if phy probing fails
Dragos Tatulea <[email protected]>
net/mlx5: Fix slab-out-of-bounds in mlx5_query_nic_vport_mac_list
Shay Drory <[email protected]>
net/mlx5: Add generic getters for other functions caps
Dragos Tatulea <[email protected]>
net/mlx5e: xsk: Fix DMA and xdp_frame leak on XDP_TX xmit failure
Xin Long <[email protected]>
sctp: validate embedded INIT chunk and address list lengths in cookie
HyungJung Joo <[email protected]>
fs/mbcache: cancel shrink work before destroying the cache
Filipe Manana <[email protected]>
btrfs: fix deadlock between reflink and transaction commit when using flushoncommit
Ritesh Harjani (IBM) <[email protected]>
powerpc/64s: Fix unmap race with PMD migration entries
Zilin Guan <[email protected]>
wifi: mt76: Fix memory leak after mt76_connac_mcu_alloc_sta_req()
Sechang Lim <[email protected]>
bpf: Fix RCU stall in bpf_fd_array_map_clear()
Lang Xu <[email protected]>
bpf: Fix OOB in pcpu_init_value
Xin Long <[email protected]>
sctp: disable BH before calling udp_tunnel_xmit_skb()
Vasant Hegde <[email protected]>
iommu/amd: Fix clone_alias() to use the original device's devid
Deepanshu Kartikey <[email protected]>
fs/ntfs3: fix missing run load for vcn0 in attr_data_get_block_locked()
Damien Riégel <[email protected]>
greybus: raw: fix use-after-free on cdev close
Jianan Huang <[email protected]>
f2fs: avoid reading already updated pages during GC
Yongpeng Yang <[email protected]>
f2fs: fix data loss caused by incorrect use of nat_entry flag
Gao Xiang <[email protected]>
erofs: unify lcn as u64 for 32-bit platforms
Michal Schmidt <[email protected]>
ice: fix double-free of tx_buf skb
Pablo Neira Ayuso <[email protected]>
netfilter: nat: use kfree_rcu to release ops
Edward Adam Davis <[email protected]>
sched/psi: fix race between file release and pressure write
Amir Goldstein <[email protected]>
fsnotify: fix inode reference leak in fsnotify_recalc_mask()
Viacheslav Dubeyko <[email protected]>
ceph: fix BUG_ON in __ceph_build_xattrs_blob() due to stale blob size
Raphael Zimmer <[email protected]>
libceph: Fix potential out-of-bounds access in __ceph_x_decrypt()
Weiming Shi <[email protected]>
tap: fix stack info leak in tap_ioctl() SIOCGIFHWADDR
Haixin Xu <[email protected]>
crypto: jitterentropy - replace long-held spinlock with mutex
Stephan Müller <[email protected]>
crypto: jitter - replace LFSR with SHA3-256
D. Wythe <[email protected]>
Revert "net/smc: Introduce TCP ULP support"
Florian Westphal <[email protected]>
netfilter: nf_tables: use list_del_rcu for netlink hooks
Janne Grunau <[email protected]>
media: videobuf2: Set vma_flags in vb2_dma_sg_mmap
Stephen Smalley <[email protected]>
selinux: allow multiple opens of /sys/fs/selinux/policy
Helge Deller <[email protected]>
AppArmor: Allow apparmor to handle unaligned dfa tables
Johan Hovold <[email protected]>
spi: mpc52xx: fix use-after-free on registration failure
Amir Shetaia <[email protected]>
drm/amdkfd: Clear VRAM on allocation to prevent stale data exposure
Johan Hovold <[email protected]>
spi: fsl: fix controller deregistration
Yang Yingliang <[email protected]>
spi: fsl-spi: switch to use modern name
Uwe Kleine-König <[email protected]>
spi: fsl-spi: Convert to platform remove callback returning void
Johan Hovold <[email protected]>
spi: rspi: fix controller deregistration
Uwe Kleine-König <[email protected]>
spi: rspi: Convert to platform remove callback returning void
Benjamin Cheng <[email protected]>
drm/amdgpu/vcn4: Prevent OOB reads when parsing IB
David Rosca <[email protected]>
drm/amdgpu/vcn4: Fix IB parsing with multiple engine info packages
David (Ming Qiang) Wu <[email protected]>
drm/amdgpu: limit AV1 to the first instance on VCN4 encode
Johan Hovold <[email protected]>
spi: mpc52xx: fix controller deregistration
Yang Yingliang <[email protected]>
spi: mpc52xx: switch to use modern name
Uwe Kleine-König <[email protected]>
spi: mpc52xx: Convert to platform remove callback returning void
Jason Gunthorpe <[email protected]>
RDMA/mlx4: Fix mis-use of RCU in mlx4_srq_event()
Takashi Iwai <[email protected]>
ALSA: pcm: oss: Fix data race at accessing runtime.oss.trigger
Conor Dooley <[email protected]>
spi: microchip-core-qspi: control built-in cs manually
Yosry Ahmed <[email protected]>
KVM: nSVM: Avoid clearing VMCB_LBR in vmcb12
Yosry Ahmed <[email protected]>
KVM: nSVM: Always use NextRIP as vmcb02's NextRIP after first L2 VMRUN
Yosry Ahmed <[email protected]>
KVM: nSVM: Triple fault if restore host CR3 fails on nested #VMEXIT
David Howells <[email protected]>
rxrpc: Fix memory leaks in rxkad_verify_response()
David Howells <[email protected]>
rxrpc: Fix conn-level packet handling to unshare RESPONSE packets
Zhang Yi <[email protected]>
ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O
Deepanshu Kartikey <[email protected]>
gfs2: fix memory leaks in gfs2_fill_super error path
Yao Kai <[email protected]>
rcu: Fix rcu_read_unlock() deadloop due to softirq
Lianjie Wang <[email protected]>
hwrng: core - use RCU and work_struct to fix race condition
Lu Baolu <[email protected]>
iommu/vt-d: Clear Present bit before tearing down context entry
Yongjian Sun <[email protected]>
ext4: fix e4b bitmap inconsistency reports
Matthew Wilcox (Oracle) <[email protected]>
ext4: convert bd_buddy_page to bd_buddy_folio
Matthew Wilcox (Oracle) <[email protected]>
ext4: convert bd_bitmap_page to bd_bitmap_folio
Gou Hao <[email protected]>
ext4: delete redundant calculations in ext4_mb_get_buddy_page_lock()
Theodore Ts'o <[email protected]>
ext4: convert some BUG_ON's in mballoc to use WARN_RATELIMITED instead
Kemeng Shi <[email protected]>
ext4: remove unnecessary e4b->bd_buddy_page check in ext4_mb_load_buddy_gfp
Jie Zhang <[email protected]>
net: stmmac: fix oops when split header is enabled
Boris Burkov <[email protected]>
btrfs: fix EEXIST abort due to non-consecutive gaps in chunk allocation
Julian Anastasov <[email protected]>
ipvs: do not keep dest_dst if dev is going down
Zhang Yi <[email protected]>
ext4: drop extent cache when splitting extent fails
Lu Baolu <[email protected]>
iommu/vt-d: Clear Present bit before tearing down PASID entry
Helge Deller <[email protected]>
apparmor: Fix & Optimize table creation from possibly unaligned memory
Ryan Lin <[email protected]>
HID: intel-ish-hid: fix NULL-ptr-deref in ishtp_bus_remove_all_clients
Even Xu <[email protected]>
HID: Intel-ish-hid: Ishtp: Fix sensor reads after ACPI S3 suspend
Damien Le Moal <[email protected]>
ata: libata-scsi: avoid Non-NCQ command starvation
Shota Zaizen <[email protected]>
ksmbd: validate inherited ACE SID length
Jiayuan Chen <[email protected]>
bonding: fix type confusion in bond_setup_by_slave()
Chen Ni <[email protected]>
ASoC: amd: acp-mach-common: Add missing error check for clock acquisition
Venkata Prasad Potturu <[email protected]>
ASoC: amd: acp: Refactor i2s clocks programming sequence
Venkata Prasad Potturu <[email protected]>
ASoC: amd: acp: Refactor dai format implementation
Venkata Prasad Potturu <[email protected]>
ASoC: amd: acp: Add setbias level for rt5682s codec in machine driver
Max Kellermann <[email protected]>
ceph: fix memory leaks in ceph_mdsc_build_path()
Vladimir Riabchun <[email protected]>
scsi: qla2xxx: Completely fix fcport double free
Adrian Hunter <[email protected]>
i3c: mipi-i3c-hci: Fix race in DMA ring dequeue
Adrian Hunter <[email protected]>
i3c: mipi-i3c-hci: Correct RING_CTRL_ABORT handling in DMA dequeue
Zide Chen <[email protected]>
perf/x86/intel/uncore: Fix die ID init and look up bugs
Filipe Manana <[email protected]>
btrfs: reserve enough transaction items for qgroup ioctls
Ming Qian <[email protected]>
media: verisilicon: Avoid G2 bus error while decoding H.264 and HEVC
Nicolas Dufresne <[email protected]>
media: v4l2-mem2mem: Add a kref to the v4l2_m2m_dev structure
Sebastian Reichel <[email protected]>
media: hantro: Disable multicore support
Filipe Manana <[email protected]>
btrfs: don't BUG() on unexpected delayed ref type in run_one_delayed_ref()
Qu Wenruo <[email protected]>
btrfs: do not ASSERT() when the fs flips RO inside btrfs_repair_io_failure()
Jiasheng Jiang <[email protected]>
md-cluster: fix NULL pointer dereference in process_metadata_update
Magnus Lindholm <[email protected]>
alpha: fix user-space corruption during memory compaction
Arnd Bergmann <[email protected]>
arch: turn off -Werror for architectures with known warnings
Ankit Soni <[email protected]>
iommu/amd: move wait_on_sem() out of spinlock
Mario Peter <[email protected]>
usb: chipidea: udc: fix DMA and SG cleanup in _ep_nuke()
Stefano Stabellini <[email protected]>
9p/xen: protect xen_9pfs_front_free against concurrent calls
Eugenio Pérez <[email protected]>
vhost: move vdpa group bound check to vhost_vdpa
Jiayuan Chen <[email protected]>
kcm: fix zero-frag skb in frag_list on partial sendmsg error
Henrique Carvalho <[email protected]>
smb: client: prevent races in ->query_interfaces()
Tetsuo Handa <[email protected]>
team: avoid NETDEV_CHANGEMTU event when unregistering slave
Shyam Prasad N <[email protected]>
cifs: Fix locking usage for tcon fields
Ping-Ke Shih <[email protected]>
wifi: rtw89: pci: validate sequence number of TX release report
Cédric Bellegarde <[email protected]>
ASoC: qcom: q6asm: drop DSP responses for closed data streams
Srinivas Kandagatla <[email protected]>
ASoC: qcom: q6asm: handle the responses after closing
Nicholas Carlini <[email protected]>
ksmbd: fix signededness bug in smb_direct_prepare_negotiation()
Prashanth K <[email protected]>
usb: dwc3: gadget: Move vbus draw to workqueue context
Tetsuo Handa <[email protected]>
xfrm: always flush state and policy upon NETDEV_UNREGISTER event
Christoph Hellwig <[email protected]>
xfs: remove xfs_attr_leaf_hasname
Harshit Mogalapalli <[email protected]>
ima: verify the previous kernel's IMA buffer lies in addressable RAM
Takashi Iwai <[email protected]>
ALSA: mixer: oss: Add card disconnect checkpoints
Cen Zhang <[email protected]>
Bluetooth: hci_sync: annotate data-races around hdev->req_status
Filipe Manana <[email protected]>
btrfs: fix zero size inode with non-zero size after log replay
Keenan Dong <[email protected]>
xfrm: account XFRMA_IF_ID in aevent size calculation
Eric Dumazet <[email protected]>
ipv6: ioam: fix potential NULL dereferences in __ioam6_fill_trace_data()
Steffen Klassert <[email protected]>
xfrm: Wait for RCU readers during policy netns exit
Justin Iurman <[email protected]>
net: ioam6: fix OOB and missing lock
Lee Jones <[email protected]>
HID: logitech-hidpp: Prevent use-after-free on force feedback initialisation failure
Lee Jones <[email protected]>
HID: core: Mitigate potential OOB by removing bogus memset()
Li Chen <[email protected]>
HID: rate-limit hid_warn to prevent log flooding
Tatsuya S <[email protected]>
HID: core: Add reserved item tag for main items
Sabrina Dubroca <[email protected]>
mpls: add seqcount to protect the platform_label{,s} pair
Guoyu Su <[email protected]>
net: use skb_header_pointer() for TCPv4 GSO frag_off check
Pauli Virtanen <[email protected]>
Bluetooth: hci_sync: hci_cmd_sync_queue_once() return -EEXIST if exists
Kuniyuki Iwashima <[email protected]>
bpf: sockmap: Fix use-after-free of sk->sk_socket in sk_psock_verdict_data_ready().
Varun R Mallya <[email protected]>
bpf: Reject sleepable kprobe_multi programs at attach time
Daniel Borkmann <[email protected]>
bpf: Fix incorrect pruning due to atomic fetch precision tracking
Oleh Konko <[email protected]>
Bluetooth: hci_event: move wake reason storage into validated event handlers
Ville Syrjälä <[email protected]>
drm/i915/dsi: Don't do DSC horizontal timing adjustments in command mode
Kuen-Han Tsai <[email protected]>
usb: gadget: f_ecm: Fix net_device lifecycle with device_move
Kuen-Han Tsai <[email protected]>
usb: gadget: f_eem: Fix net_device lifecycle with device_move
Kuen-Han Tsai <[email protected]>
usb: gadget: f_subset: Fix net_device lifecycle with device_move
Kuen-Han Tsai <[email protected]>
usb: gadget: f_rndis: Fix net_device lifecycle with device_move
Michael Bommarito <[email protected]>
ksmbd: validate response sizes in ipc_validate_msg()
Michael Bommarito <[email protected]>
ksmbd: validate num_aces and harden ACE walk in smb_inherit_dacl()
Douya Le <[email protected]>
crypto: af_alg - limit RX SG extraction by receive buffer budget
Yucheng Lu <[email protected]>
net/sched: sch_netem: fix out-of-bounds access in packet corruption
Qi Tang <[email protected]>
xfrm: hold dev ref until after transport_finish NF_HOOK
Jacky Bai <[email protected]>
pmdomain: imx8mp-blk-ctrl: Keep the NOC_HDCP clock enabled
Michael Zimmermann <[email protected]>
usb: gadget: f_hid: don't call cdev_init while cdev in use
Sean Christopherson <[email protected]>
KVM: SEV: Protect *all* of sev_mem_enc_register_region() with kvm->lock
Ge Yang <[email protected]>
KVM: SEV: Use long-term pin when registering encrypted memory regions
Janosch Frank <[email protected]>
s390/mm: Add missing secure storage access fixups for donated memory
Vladimir Yakovlev <[email protected]>
spi: spi-dw-dma: fix print error log when wait finish transaction
Chaitanya Kulkarni <[email protected]>
nvmet: move async event work off nvmet-wq
Kohei Enju <[email protected]>
iavf: fix out-of-bounds writes in iavf_get_ethtool_stats()
Jiayuan Chen <[email protected]>
team: fix header_ops type confusion with non-Ethernet ports
Guenter Roeck <[email protected]>
hwmon: (pmbus/core) Protect regulator operations with mutex
Eric Huang <[email protected]>
drm/amdgpu: prevent immediate PASID reuse case
Christophe JAILLET <[email protected]>
drm/amdgpu: Remove usage of the deprecated ida_simple_xx() API
Asim Viladi Oglu Manizada <[email protected]>
ksmbd: fix OOB write in QUERY_INFO for compound requests
Namjae Jeon <[email protected]>
ksmbd: use volume UUID in FS_OBJECT_ID_INFORMATION
Jiayuan Chen <[email protected]>
serial: core: fix infinite loop in handle_tx() for PORT_UNKNOWN
Filipe Manana <[email protected]>
btrfs: log new dentries when logging parent dir of a conflicting inode
Allison Henderson <[email protected]>
net/rds: Fix circular locking dependency in rds_tcp_tune
Fuad Tabba <[email protected]>
bpf, arm64: Force 8-byte alignment for JIT buffer to prevent atomic tearing
Chaitanya Kulkarni <[email protected]>
blktrace: fix __this_cpu_read/write in preemptible context
Juri Lelli <[email protected]>
sched/deadline: Fix missing ENQUEUE_REPLENISH during PI de-boosting
Niklas Cassel <[email protected]>
PCI: dwc: ep: Flush MSI-X write before unmapping its ATU entry
Jakub Kicinski <[email protected]>
nfc: nci: complete pending data exchange on device close
Davidlohr Bueso <[email protected]>
cxl/mbox: validate payload size before accessing contents in cxl_payload_from_user_allowed()
Eric Dumazet <[email protected]>
tcp: secure_seq: add back ports to TS offset
Namjae Jeon <[email protected]>
ksmbd: add chann_lock to protect ksmbd_chann_list xarray
Qu Wenruo <[email protected]>
btrfs: reject new transactions if the fs is fully read-only
Perry Yuan <[email protected]>
drm/amd/pm: Disable MMIO access during SMU Mode 1 reset
Edward Adam Davis <[email protected]>
ALSA: usb-audio: Prevent excessive number of frames
Breno Leitao <[email protected]>
spi: tegra210-quad: Protect curr_xfer check in IRQ handler
Nikolay Aleksandrov <[email protected]>
bonding: fix use-after-free due to enslave fail after slave array update
Steven Rostedt <[email protected]>
tracing: Add recursion protection in kernel stack trace recording
Zilin Guan <[email protected]>
of: unittest: Fix memory leak in unittest_data_add()
David Howells <[email protected]>
rxrpc: Fix data-race warning and potential load/store tearing
Trond Myklebust <[email protected]>
pNFS: Fix a deadlock when returning a delegation during open()
Eric Dumazet <[email protected]>
dst: fix races in rt6_uncached_list_del() and rt_del_uncached_list()
Jie Zhang <[email protected]>
drm/msm: Recover HW before retire hung submit
Cong Nguyen <[email protected]>
staging: rtl8723bs: fix xmit_frame/xmit_buf leaks on mgnt-frame error paths
Haotian Zhang <[email protected]>
PCI: endpoint: Add missing NULL check for alloc_workqueue()
Konstantin Komarov <[email protected]>
fs/ntfs3: handle attr_set_size() errors when truncating files
Manivannan Sadhasivam <[email protected]>
net: qrtr: Drop the MHI auto_queue feature for IPCR DL channels
Bitterblue Smith <[email protected]>
wifi: rtw88: Use devm_kmemdup() in rtw_set_supported_band()
Ping-Ke Shih <[email protected]>
wifi: rtw88: debugfs: support multiple adapters debugging
Johannes Berg <[email protected]>
wifi: mac80211: don't WARN for connections on invalid channels
Francesco Lavra <[email protected]>
iio: imu: st_lsm6dsx: fix iio_chan_spec for sensors without event detection
Lorenzo Bianconi <[email protected]>
iio: imu: st_lsm6dsx: fix LSM6DSV sensor description
Loic Poulain <[email protected]>
phy: qcom-qusb2: Fix NULL pointer dereference on early suspend
Miquel Sabaté Solà <[email protected]>
btrfs: fix NULL dereference on root when tracing inode eviction
Vladimir Oltean <[email protected]>
net: dsa: properly keep track of conduit reference
Nikolay Kuratov <[email protected]>
drm/msm/dpu: Add missing NULL pointer check for pingpong interface
Gregory CLEMENT <[email protected]>
MIPS: ftrace: Fix memory corruption when kernel is located beyond 32 bits
Al Viro <[email protected]>
functionfs: fix the open/removal races
Al Viro <[email protected]>
functionfs, gadgetfs: use simple_recursive_removal()
Paul Cercueil <[email protected]>
usb: gadget: functionfs: Factorize wait-for-endpoint code
Paul Cercueil <[email protected]>
usb: gadget: Support already-mapped DMA SGs
Linyu Yuan <[email protected]>
usb: gadget: ffs: remove ENTER() macro
Minseong Kim <[email protected]>
Input: lkkbd - disable pending work before freeing device
Joshua Rogers <[email protected]>
svcrdma: bound check rq_pages index in inline path
Duoming Zhou <[email protected]>
Input: alps - fix use-after-free bugs caused by dev3_register_work
Qianchang Zhao <[email protected]>
ksmbd: vfs: fix race on m_flags in vfs_cache
Johan Hovold <[email protected]>
staging: most: remove broken i2c driver
Tony Battersby <[email protected]>
scsi: qla2xxx: Clear cmds after chip reset
Zhu Yanjun <[email protected]>
RDMA/rxe: Fix null deref on srq->rq.queue after resize failure
Arnaud Lecomte <[email protected]>
bpf: Fix stackmap overflow check in __bpf_get_stackid()
Marc Kleine-Budde <[email protected]>
can: gs_usb: gs_usb_receive_bulk_callback(): check actual_length before accessing data
Duoming Zhou <[email protected]>
scsi: imm: Fix use-after-free bug caused by unfinished delayed work
Horatiu Vultur <[email protected]>
lan966x: Fix sleeping in atomic context
Nitin Rawat <[email protected]>
scsi: ufs: ufs-qcom: Fix UFS OCP issue during UFS power down (PC=3)
Shaurya Rane <[email protected]>
cifs: fix memory leak in smb3_fs_context_parse_param error path
Akiva Goldberger <[email protected]>
mlx5: Fix default values in create CQ
Eric Dumazet <[email protected]>
tcp: use dst_dev_rcu() in tcp_fastopen_active_disable_ofo_check()
Coiby Xu <[email protected]>
ima: don't clear IMA_DIGSIG flag when setting or removing non-IMA xattr
Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Do not share the name pointer between components
Oleksij Rempel <[email protected]>
net: stmmac: Correctly handle Rx checksum offload errors
Romain Gantois <[email protected]>
net: stmmac: Prevent DSA tags from breaking COE
Henrique Carvalho <[email protected]>
smb: client: fix potential UAF in smb2_close_cached_fid()
Xiao Ni <[email protected]>
md/raid10: wait barrier before returning discard request with REQ_NOWAIT
Moti Haimovski <[email protected]>
accel/habanalabs: support mapping cb with vmalloc-backed coherent memory
Christian König <[email protected]>
drm/amdgpu: hide VRAM sysfs attributes on GPUs without VRAM
Lijo Lazar <[email protected]>
drm/amdgpu: Show vram vendor only if available
Edward Adam Davis <[email protected]>
cifs: client: fix memory leak in smb3_fs_context_parse_param
Harini T <[email protected]>
mailbox: zynqmp-ipi: Fix out-of-bounds access in mailbox cleanup loop
Ben Levinsky <[email protected]>
mailbox: zynqmp: Move buffered IPI setup to of_match selected routine
Ben Levinsky <[email protected]>
mailbox: zynqmp: Move of_match structure closer to usage
Randy Dunlap <[email protected]>
mailbox: zynqmp-ipi: fix an Excess struct member kernel-doc warning
Rob Herring <[email protected]>
mailbox: Explicitly include correct DT includes
Rob Herring <[email protected]>
of: Move of_device_get_match_data() declaration
Rob Herring <[email protected]>
of: Move of_device_(add|register|unregister) to of_platform.h
Eric Dumazet <[email protected]>
net: use dst_dev_rcu() in sk_setup_caps()
Jason Andryuk <[email protected]>
xen/events: Return -EEXIST for bound VIRQs
Juergen Gross <[email protected]>
xen/events: modify internal [un]bind interfaces
Juergen Gross <[email protected]>
xen/events: drop xen_allocate_irqs_dynamic()
Juergen Gross <[email protected]>
xen/events: remove some simple helpers from events_base.c
Juergen Gross <[email protected]>
xen/events: reduce externally visible helper functions
Juergen Gross <[email protected]>
xen/events: avoid using info_for_irq() in xen_send_IPI_one()
Eric Dumazet <[email protected]>
ipv6: use RCU in ip6_output()
Chao Yu <[email protected]>
f2fs: fix to truncate first page in error path of f2fs_truncate()
Weili Qian <[email protected]>
crypto: hisilicon/qm - request reserved interrupt for virtual function
Chao Yu <[email protected]>
f2fs: fix to avoid overflow while left shift operation
Matthew Wilcox (Oracle) <[email protected]>
f2fs: Use a folio in f2fs_truncate_partial_cluster()
Eric Dumazet <[email protected]>
tcp_metrics: use dst_dev_net_rcu()
Seppo Takalo <[email protected]>
tty: n_gsm: Don't block input queue by waiting MSC
Daniel Starke <[email protected]>
tty: n_gsm: add parameters used with parameter negotiation
Daniel Starke <[email protected]>
tty: n_gsm: introduce macro for minimal unit size
Fangyu Yu <[email protected]>
RISC-V: KVM: Write hgatp register with valid mode bits
I Viswanath <[email protected]>
ptp: Add a upper bound on max_vclocks
Andy Shevchenko <[email protected]>
i915: Move list_count() to list.h as list_count_nodes() for broader use
Duoming Zhou <[email protected]>
net: mscc: ocelot: Fix use-after-free caused by cyclic delayed work
Shuai Xue <[email protected]>
x86/mce: use is_copy_from_user() to determine copy-from-user context
Luiz Augusto von Dentz <[email protected]>
Bluetooth: MGMT: Fix possible UAFs
[email protected] <[email protected]>
wifi: wilc1000: avoid buffer overflow in WID string configuration
Stefan Metzmacher <[email protected]>
smb: client: let recv_done verify data_offset, data_length and remaining_data_length
Stefan Metzmacher <[email protected]>
smb: client: let smbd_destroy() call disable_work_sync(&info->post_send_credits_work)
Uladzislau Rezki (Sony) <[email protected]>
mm/vmalloc, mm/kasan: respect gfp mask in kasan_populate_vmalloc()
Duoming Zhou <[email protected]>
ptp: ocp: fix use-after-free bugs causing by ptp_ocp_watchdog
Ido Schimmel <[email protected]>
vxlan: Fix NPD when refreshing an FDB entry with a nexthop object
Ido Schimmel <[email protected]>
vxlan: Fix NPD in {arp,neigh}_reduce() when using nexthop objects
Ye Weihua <[email protected]>
trace/fgraph: Fix the warning caused by missing unregister notifier
Sreekanth Reddy <[email protected]>
bnxt_en: Fix memory corruption when FW resources change during ifdown
Aakash Kumar S <[email protected]>
xfrm: Duplicate SPI Handling
Kanglong Wang <[email protected]>
LoongArch: Optimize module load time by optimizing PLT/GOT counting
Jinjiang Tu <[email protected]>
mm/smaps: fix race between smaps_hugetlb_range and migration
Joel Fernandes <[email protected]>
rcu: Fix rcu_read_unlock() deadloop due to IRQ work
Halil Pasic <[email protected]>
s390/ism: fix concurrency management in ism_cmd()
Stefan Raspl <[email protected]>
s390/ism: Introduce struct ism_dmb
Ziyan Xu <[email protected]>
ksmbd: fix refcount leak causing resource not released
Siyang Liu <[email protected]>
drm/amd/display: fix a Null pointer dereference vulnerability
William Liu <[email protected]>
net/sched: Fix backlog accounting in qdisc_dequeue_internal
D. Wythe <[email protected]>
net/smc: fix UAF on smcsk after smc_listen_out()
Al Viro <[email protected]>
habanalabs: fix UAF in export_dmabuf()
Tomer Tayar <[email protected]>
habanalabs: fix dma-buf release handling if dma_buf_fd() fails
Ohad Sharabi <[email protected]>
habanalabs: helper function to validate export params
Ohad Sharabi <[email protected]>
habanalabs: remove support to export dmabuf from handle
Viacheslav Dubeyko <[email protected]>
hfs: fix general protection fault in hfs_find_init()
Matthew Wilcox (Oracle) <[email protected]>
highmem: add memcpy_to_folio() and memcpy_from_folio()
Vishal Moola (Oracle) <[email protected]>
pagemap: add filemap_grab_folio()
Jan Kara <[email protected]>
loop: Avoid updating block size under exclusive owner
Umio Yasuno <[email protected]>
drm/amd/pm: fix null pointer access
Yuezhang Mo <[email protected]>
exfat: add cluster chain loop check for dir
Yuezhang Mo <[email protected]>
exfat: remove unnecessary arguments from exfat_find_dir_entry()
Gabriele Monaco <[email protected]>
rv: Use strings in da monitors tracepoints
Edward Adam Davis <[email protected]>
fs/ntfs3: cancle set bad inode after removing name fails
Heiko Stuebner <[email protected]>
drm/rockchip: vop2: fail cleanly if missing a primary plane for a video-port
Al Viro <[email protected]>
xen: fix UAF in dmabuf_exp_from_pages()
Jianbo Liu <[email protected]>
net/mlx5e: Remove skb secpath if xfrm state is not found
Leon Romanovsky <[email protected]>
net/mlx5e: Provide intermediate pointer to access IPsec struct
wenglianfa <[email protected]>
RDMA/hns: Fix double destruction of rsv_qp
David Howells <[email protected]>
rxrpc: Fix bug due to prealloc collision
Maud Spierings <[email protected]>
iio: common: st_sensors: Fix use of uninitialize device structs
Kaustabh Chakraborty <[email protected]>
iio: st_sensors: relax WhoAmI check in st_sensors_verify_id()
Jonathan Cameron <[email protected]>
iio: st_sensors: core and lsm9ds0 switch to devm_regulator_bulk_get_enable()
David Howells <[email protected]>
rxrpc: Fix recv-recv race of completed call
Daniel J. Ogorchock <[email protected]>
HID: nintendo: avoid bluetooth suspend/resume stalls
Sumit Kumar <[email protected]>
bus: mhi: ep: Update read pointer only after buffer is written
Heiko Carstens <[email protected]>
s390/mm: Fix in_atomic() handling in do_secure_storage_access()
Longfang Liu <[email protected]>
hisi_acc_vfio_pci: bugfix live migration function without VF device driver
Jonas Gorski <[email protected]>
net: dsa: b53: do not enable EEE on bcm63xx
Ben Dooks <[email protected]>
riscv: save the SR_SUM status over switches
Ido Schimmel <[email protected]>
bridge: mcast: Fix use-after-free during router port configuration
Yan Zhai <[email protected]>
bnxt: properly flush XDP redirect lists
Paulo Alcantara <[email protected]>
smb: client: fix potential deadlock when reconnecting channels
Harshit Agarwal <[email protected]>
sched/rt: Fix race in push_rt_task
Tianyang Zhang <[email protected]>
LoongArch: Fix panic caused by NULL-PMD in huge_pte_offset()
Ronnie Sahlberg <[email protected]>
ublk: santizize the arguments from userspace when adding a device
Yeoreum Yun <[email protected]>
coresight: holding cscfg_csdev_lock while removing cscfg from csdev
Michal Kubiak <[email protected]>
ice: fix Tx scheduler error handling in XDP callback
Miri Korenblit <[email protected]>
wifi: iwlwifi: don't warn when if there is a FW error
Luis de Arquer <[email protected]>
spi-rockchip: Fix register out of bounds access
Christian Bruel <[email protected]>
PCI: endpoint: pci-epf-test: Fix double free that causes kernel to oops
Michael S. Tsirkin <[email protected]>
virtio: break and reset virtio devices on device_shutdown()
Johannes Berg <[email protected]>
wifi: iwlwifi: fix debug actions order
Johannes Berg <[email protected]>
wifi: iwlwifi: dbg-tlv: fix DRAM data init
Roger Quadros <[email protected]>
dmaengine: ti: k3-udma-glue: Drop skip_fdq argument from k3_udma_glue_reset_rx_chn
Philippe Simons <[email protected]>
clk: sunxi-ng: h616: Reparent GPU clock during frequency changes
Andre Przywara <[email protected]>
clk: sunxi-ng: h616: Reparent CPU clock during frequency changes
Alexander Gordeev <[email protected]>
kasan: avoid sleepable page allocation from atomic context
Andrey Konovalov <[email protected]>
kasan: use unchecked __memset internally
Matt Johnston <[email protected]>
net: mctp: Don't access ifa_index when missing
Peter Griffin <[email protected]>
scsi: ufs: exynos: Disable iocc if dma-coherent property isn't set
Mikhail Lobanov <[email protected]>
KVM: SVM: Forcibly leave SMM mode on SHUTDOWN interception
Namjae Jeon <[email protected]>
ksmbd: prevent rename with empty string
Sean Heelan <[email protected]>
ksmbd: Fix UAF in __close_file_table_ids
Johannes Berg <[email protected]>
um: fix time-travel syscall scheduling hack
Ranjan Kumar <[email protected]>
scsi: mpi3mr: Synchronous access b/w reset and tm thread for reply queue
Edward Cree <[email protected]>
sfc: fix NULL dereferences in ef100_process_design_param()
Boris Burkov <[email protected]>
btrfs: harden block_group::bg_list against list_del() races
Philip Yang <[email protected]>
drm/amdkfd: debugfs hang_hws skip GPU with MES
Han Xu <[email protected]>
spi: fsl-qspi: use devm function instead of driver remove
Yonghong Song <[email protected]>
bpf: Fix kmemleak warning for percpu hashmap
Lizhi Xu <[email protected]>
fs/ntfs3: Keep write operations atomic
Paulo Alcantara <[email protected]>
smb: client: fix UAF in decryption with multichannel
Frederic Weisbecker <[email protected]>
perf: Fix hang while freeing sigtrap event
Chao Yu <[email protected]>
f2fs: fix potential deadloop in prepare_compress_overwrite()
Chao Yu <[email protected]>
f2fs: convert f2fs_handle_page_eio() to use folio
Boris Burkov <[email protected]>
btrfs: fix block group refcount race in btrfs_create_pending_block_groups()
Murad Masimov <[email protected]>
ax25: Remove broken autobind
Christian Schoenebeck <[email protected]>
fs/9p: fix NULL pointer dereference on mkdir
Antoine Tenart <[email protected]>
net: decrease cached dst counters in dst_release
Dave Marquardt <[email protected]>
net: ibmveth: make veth_pool_store stop hanging
Nick Child <[email protected]>
ibmveth: Always stop tx queues during close
Hengqi Chen <[email protected]>
LoongArch: BPF: Don't override subprog's return value
Namjae Jeon <[email protected]>
ksmbd: fix null pointer dereference in alloc_preauth_hash()
Matt Johnston <[email protected]>
net: mctp: unshare packets when reassembling
Luiz Augusto von Dentz <[email protected]>
Bluetooth: L2CAP: Fix slab-use-after-free Read in l2cap_send_cmd
Namjae Jeon <[email protected]>
ksmbd: fix use-after-free in ksmbd_free_work_struct
Taehee Yoo <[email protected]>
eth: bnxt: fix truesize for mb-xdp-pass case
Namjae Jeon <[email protected]>
ksmbd: prevent connection release during oplock break notification
Maurizio Lombardi <[email protected]>
nvme-tcp: fix potential memory corruption in nvme_tcp_recv_pdu()
Wei Fang <[email protected]>
net: enetc: VFs do not support HWTSTAMP_TX_ONESTEP_SYNC
Yishai Hadas <[email protected]>
RDMA/mlx5: Fix the recovery flow of the UMR QP
Shay Drory <[email protected]>
RDMA/mlx5: Implement mkeys management via LIFO queue
Michael Guralnik <[email protected]>
RDMA/mlx5: Introduce mlx5r_cache_rb_key
Michael Guralnik <[email protected]>
RDMA/mlx5: Change the cache structure to an RB-tree
Aharon Landau <[email protected]>
RDMA/mlx5: Remove implicit ODP cache entry
Aharon Landau <[email protected]>
RDMA/mlx5: Don't keep umrable 'page_shift' in cache entries
Yishai Hadas <[email protected]>
RDMA/mlx5: Fix a WARN during dereg_mr for DM type
Kashyap Desai <[email protected]>
RDMA/bnxt_re: Fix the page details for the srq created by kernel consumers
Peter Jones <[email protected]>
efi: Don't map the entire mokvar table to determine its size
Peter Ujfalusi <[email protected]>
ASoC: SOF: ipc4-topology: Harden loops for looking up ALH copiers
Werner Sembach <[email protected]>
PCI: Avoid putting some root ports into D3 on TUXEDO Sirius Gen1
Mario Limonciello <[email protected]>
x86/PCI: Avoid PME from D3hot/D3cold for AMD Rembrandt and Phoenix USB4
Kory Maincent <[email protected]>
net: ravb: Fix missing rtnl lock in suspend/resume path
Jakub Kicinski <[email protected]>
net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels
Yishai Hadas <[email protected]>
RDMA/mlx5: Fix a race for an ODP MR which leads to CQE with error
Ping-Ke Shih <[email protected]>
wifi: rtw89: fix race between cancel_hw_scan and hw_scan completion
Guixin Liu <[email protected]>
scsi: mpi3mr: Fix possible crash when setting up bsg fails
Patrisious Haddad <[email protected]>
RDMA/mlx5: Fix implicit ODP use after free
Ryan Roberts <[email protected]>
mm: clear uffd-wp PTE/PMD state on mremap()
Paulo Alcantara <[email protected]>
smb: client: fix double free of TCP_Server_Info::hostname
Matthieu Baerts (NGI0) <[email protected]>
rds: sysctl: rds_tcp_{rcv,snd}buf: avoid using current->nsproxyBard Liao <[email protected]>
ASoC: SOF: Intel: hda-dai: Ensure DAI widget is valid during params
Niklas Cassel <[email protected]>
PCI: dwc: ep: Prevent changing BAR size/flags in pci_epc_set_bar()
Gaurav Batra <[email protected]>
powerpc/pseries/iommu: IOMMU incorrectly marks MMIO range in DDW
Florian Westphal <[email protected]>
xfrm: state: fix out-of-bounds read during lookup
Qu Wenruo <[email protected]>
btrfs: do proper folio cleanup when cow_file_range() failed
Stefano Brivio <[email protected]>
udp: Deal with race between UDP socket address change and rehash
Tvrtko Ursulin <[email protected]>
workqueue: Do not warn when cancelling WQ_MEM_RECLAIM work from !WQ_MEM_RECLAIM worker
Ranjan Kumar <[email protected]>
scsi: mpi3mr: Fix corrupt config pages PHY state is switched in sysfs
Yishai Hadas <[email protected]>
vfio/mlx5: Fix an unwind issue in mlx5vf_add_migration_pages()
Paul Aurich <[email protected]>
smb: Initialize cfid->tcon before performing network ops
Jann Horn <[email protected]>
udmabuf: fix memory leak on last export_udmabuf() error path
Chao Yu <[email protected]>
f2fs: fix to do sanity check on node blkaddr in truncate_node()
Wen Gu <[email protected]>
net/smc: initialize close_work early to avoid warning
David Hildenbrand <[email protected]>
mm/mempolicy: fix migrate_to_node() assuming there is at least one VMA in a MM
Hou Tao <[email protected]>
bpf: Call free_htab_elem() after htab_unlock_bucket()
Yihang Li <[email protected]>
scsi: hisi_sas: Create all dump files during debugfs initialization
Yihang Li <[email protected]>
scsi: hisi_sas: Allocate DFX memory during dump trigger
Yihang Li <[email protected]>
scsi: hisi_sas: Directly call register snapshot instead of using workqueue
Xiang Chen <[email protected]>
scsi: hisi_sas: Add function complete_v3_hw()
Xingui Yang <[email protected]>
scsi: hisi_sas: Add SATA_DISK_ERR bit handling for v3 hw
Xingui Yang <[email protected]>
scsi: hisi_sas: Move slot variable definition in hisi_sas_abort_task()
Wander Lairson Costa <[email protected]>
sched/deadline: Fix warning in migrate_enable for boosted tasks
yuan.gao <[email protected]>
mm/slub: Avoid list corruption when removing a slab from the full list
Chao Yu <[email protected]>
f2fs: fix to drop all discards after creating snapshot on lvm device
Sean Anderson <[email protected]>
drm: zynqmp_kms: Unplug DRM device before removal
Phil Sutter <[email protected]>
netfilter: IDLETIMER: Fix for possible ABBA deadlock
Patrisious Haddad <[email protected]>
RDMA/mlx5: Move events notifier registration to be after device registration
Yang Erkun <[email protected]>
nfsd: release svc_expkey/svc_export with rcu_work
Raghavendra Rao Ananta <[email protected]>
KVM: arm64: Get rid of userspace_irqchip_in_use
Pavel Begunkov <[email protected]>
io_uring: check for overflows in io_pin_pages
Paulo Alcantara <[email protected]>
smb: client: fix use-after-free of signing key
Paulo Alcantara <[email protected]>
smb: client: stop flooding dmesg in smb2_calc_signature()
Paul Aurich <[email protected]>
smb: Don't leak cfid when reconnect races with open_cached_dir
Liu Jian <[email protected]>
sunrpc: fix one UAF issue caused by sunrpc kernel tcp socket
Yuezhang Mo <[email protected]>
exfat: fix out-of-bounds access of directory entries
Peng Fan <[email protected]>
pmdomain: imx93-blk-ctrl: correct remove path
Kuniyuki Iwashima <[email protected]>
smb: client: Fix use-after-free of network namespace.
Showrya M N <[email protected]>
RDMA/siw: Add sendpage_ok() check to disable MSG_SPLICE_PAGES
Zijian Zhang <[email protected]>
bpf: Add sk_is_inet and IS_ICSK check in tls_sw_has_ctx_tx/rx
David Howells <[email protected]>
afs: Fix lock recursion
Xinqi Zhang <[email protected]>
firmware: arm_scmi: Fix slab-use-after-free in scmi_bus_notifier()
Cristian Marussi <[email protected]>
firmware: arm_scmi: Refactor device create/destroy helpers
Cristian Marussi <[email protected]>
firmware: arm_scmi: Move handle get/set helpers
Cristian Marussi <[email protected]>
firmware: arm_scmi: Refactor protocol device creation
Cristian Marussi <[email protected]>
firmware: arm_scmi: Add common notifier helpers
Cristian Marussi <[email protected]>
firmware: arm_scmi: Move protocol registration helpers
Cristian Marussi <[email protected]>
firmware: arm_scmi: Use dedicated devices to initialize channels
Cristian Marussi <[email protected]>
firmware: arm_scmi: Simplify chan_available transport operation
Dan Carpenter <[email protected]>
drm/msm/gem: prevent integer overflow in msm_ioctl_gem_submit()
Namjae Jeon <[email protected]>
ksmbd: check outstanding simultaneous SMB operations
Dan Williams <[email protected]>
cxl/port: Fix use-after-free, permit out-of-order decoder shutdown
Maurizio Lombardi <[email protected]>
nvme-pci: fix race condition between reset and nvme_dev_disable()
Anastasia Belova <[email protected]>
cpufreq: amd-pstate: add check for cpufreq_cpu_get's return value
Srinivasan Shanmugam <[email protected]>
drm/amd/display: Implement bounds check for stream encoder creation in DCN401
Eddie James <[email protected]>
net/ncsi: Disable the ncsi work before freeing the associated structure
James Chapman <[email protected]>
l2tp: prevent possible tunnel refcount underflow
Alex Hung <[email protected]>
drm/amd/display: Pass non-null to dcn20_validate_apply_pipe_split_flags
Alex Hung <[email protected]>
drm/amd/display: Check null pointers before using them
Alex Hung <[email protected]>
drm/amd/display: Check null pointers before used
Alex Hung <[email protected]>
drm/amd/display: Check null pointers before multiple uses
Srinivasan Shanmugam <[email protected]>
drm/amd/display: Add null check for head_pipe in dcn201_acquire_free_pipe_for_layer
Srinivasan Shanmugam <[email protected]>
drm/amd/display: Add null check for head_pipe in dcn32_acquire_idle_pipe_for_head_pipe_in_layer
Srinivasan Shanmugam <[email protected]>
drm/amd/display: Add null check for pipe_ctx->plane_state in dcn20_program_pipe
Rodrigo Siqueira <[email protected]>
drm/amd/display: Check null pointer before try to access it
Chunguang.xu <[email protected]>
nvme-rdma: unquiesce admin_q before destroy it
Leon Hwang <[email protected]>
bpf: Prevent tailcall infinite loop caused by freplace
Yunfei Dong <[email protected]>
media: mediatek: vcodec: Fix H264 stateless decoder smatch warning
Devyn Liu <[email protected]>
spi: hisi-kunpeng: Add verification for the max_frequency provided by the firmware
Yang Yingliang <[email protected]>
spi: hisi-kunpeng: switch to use modern name
Uwe Kleine-König <[email protected]>
spi: hisi-kunpeng: Convert to platform remove callback returning void
Alex Hung <[email protected]>
drm/amd/display: Avoid overflow from uint32_t to uint8_t
Leon Huang <[email protected]>
drm/amd/display: Refactor ABM feature
Maxime Méré <[email protected]>
crypto: stm32/cryp - call finalize with bh disabled
Mukesh Ojha <[email protected]>
pinmux: Use sequential access to access desc->pinmux data
Bert Karwatzki <[email protected]>
wifi: mt76: mt7921: fix NULL pointer access in mt7921_ipv6_addr_change
Hersen Wu <[email protected]>
drm/amd/display: Fix index may exceed array range within fpu_update_bw_bounding_box
Hersen Wu <[email protected]>
drm/amd/display: Add missing NULL pointer check within dpcd_extend_address_range
Lenko Donchev <[email protected]>
drm/amd/display: Use kcalloc() instead of kzalloc()
Jann Horn <[email protected]>
userfaultfd: fix checks for huge PMDs
Larysa Zaremba <[email protected]>
ice: protect XDP configuration with a mutex
Alex Hung <[email protected]>
drm/amd/display: Ensure array index tg_inst won't be -1
Alex Hung <[email protected]>
drm/amd/display: Check index for aux_rd_interval before using
Eric Dumazet <[email protected]>
pktgen: use cpus_read_lock() in pg_net_init()
Filipe Manana <[email protected]>
btrfs: do not BUG_ON() when freeing tree block after error
Chao Yu <[email protected]>
f2fs: fix to do sanity check on F2FS_INLINE_DATA flag in inode during GC
Chao Yu <[email protected]>
f2fs: fix to cover read extent cache access with lock
Keith Busch <[email protected]>
nvme: apple: fix device reference counting
Aurabindo Pillai <[email protected]>
drm/amd/display: Fix null pointer deref in dcn20_resource.c
Sibi Sankar <[email protected]>
soc: qcom: icc-bwmon: Fix refcount imbalance seen during bwmon_remove
Manivannan Sadhasivam <[email protected]>
PCI: endpoint: pci-epf-test: Make use of cached 'epc_features' in pci_epf_test_core_init()
Steve Wilkins <[email protected]>
spi: microchip-core: ensure TX and RX FIFOs are empty at start of a transfer
Gavin Shan <[email protected]>
mm/filemap: make MAX_PAGECACHE_ORDER acceptable to xarray
Xu Yang <[email protected]>
filemap: add helper mapping_max_folio_size()
Jules Irenge <[email protected]>
s390/pkey: Use kfree_sensitive() to fix Coccinelle warnings
Holger Dengler <[email protected]>
s390/pkey: Wipe copies of clear-key structures on failure
Holger Dengler <[email protected]>
s390/pkey: Wipe copies of protected- and secure-keys
Milena Olech <[email protected]>
ice: Fix improper extts handling
George Stark <[email protected]>
leds: an30259a: Use devm_mutex_init() for mutex initialization
Bob Zhou <[email protected]>
drm/amdgpu: fix double free err_addr pointer warnings
Chao Yu <[email protected]>
f2fs: fix to shrink read extent node in batches
Wander Lairson Costa <[email protected]>
sched/deadline: Fix task_struct reference leak
Miaohe Lin <[email protected]>
fork: defer linking file vma until vma is fully initialized
Huacai Chen <[email protected]>
LoongArch: Update cpu_sibling_map when disabling nonboot CPUs
Shashank Sharma <[email protected]>
drm/amdgpu: change vm->task_info handling
Baokun Li <[email protected]>
ext4: fix uninitialized ratelimit_state->lock access in __ext4_fill_super()
Baokun Li <[email protected]>
ext4: refactoring to use the unified helper ext4_quotas_off()
Hans de Goede <[email protected]>
platform/x86: x86-android-tablets: Unregister devices in reverse order
Konstantin Komarov <[email protected]>
fs/ntfs3: Check 'folio' pointer for NULL
Aleksandr Mishin <[email protected]>
drm/msm/dpu: Add callback function pointer check before its call
Xiaolei Wang <[email protected]>
net: stmmac: move the EST lock to struct stmmac_priv
Andreas Gruenbacher <[email protected]>
gfs2: Fix potential glock use-after-free on unmount
Stanislav Fomichev <[email protected]>
bpf: Add BPF_PROG_TYPE_CGROUP_SKB attach type enforcement in BPF_LINK_CREATE
Maher Sanalla <[email protected]>
net/mlx5: Reload only IB representors upon lag disable/enable
Sungwoo Kim <[email protected]>
Bluetooth: L2CAP: Fix div-by-zero in l2cap_le_flowctl_init()
Rick Edgecombe <[email protected]>
hv_netvsc: Don't free decrypted memory
Peter Xu <[email protected]>
mm/userfaultfd: reset ptes when close() for wr-protected ones
Boris Brezillon <[email protected]>
drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr()
Po-Hao Huang <[email protected]>
wifi: rtw89: fix null pointer access when abort scan
Andre Werner <[email protected]>
net: phy: phy_device: Prevent nullptr exceptions on ISR
Adam Ford <[email protected]>
pmdomain: imx8mp-blk-ctrl: imx8mp_blk: Add fdcc clock to hdmimix domain
Abhishek Pandit-Subedi <[email protected]>
usb: typec: ucsi: Limit read size on v1.2
Christian Göttsche <[email protected]>
selinux: avoid dereference of garbage after mount failure
Andrii Nakryiko <[email protected]>
bpf: support deferring bpf_link dealloc to after RCU grace period
Chris Park <[email protected]>
drm/amd/display: Prevent crash when disable stream
Josef Bacik <[email protected]>
btrfs: fix deadlock with fiemap and extent locking
Kory Maincent <[email protected]>
dmaengine: dw-edma: eDMA: Add sync read before starting the DMA transfer in remote setup
Dave Airlie <[email protected]>
nouveau: lock the client object tree.
Peter Ujfalusi <[email protected]>
ASoC: SOF: ipc4-pcm: Workaround for crashed firmware on system suspend
Nikita Zhandarovich <[email protected]>
drm/amd/display: fix NULL checks for adev->dm.dc in amdgpu_dm_fini()
Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: fix memleak in map from abort path
Eric Dumazet <[email protected]>
net/sched: Fix mirred deadlock on device recursion
Dragos Tatulea <[email protected]>
net: esp: fix bad handling of pages from page_pool
Allen Pan <[email protected]>
drm/amd/display: Add a dc_state NULL check in dc_state_release
Yongqiang Liu <[email protected]>
ARM: 9359/1: flush: check if the folio is reserved for no-mapping addresses
Fei Wu <[email protected]>
perf: RISCV: Fix panic on pmu overflow handler
Atish Patra <[email protected]>
perf: RISC-V: Define helper functions expose hpm counter width and count
Luiz Augusto von Dentz <[email protected]>
Bluetooth: hci_core: Fix possible buffer overflow
Luiz Augusto von Dentz <[email protected]>
Bluetooth: af_bluetooth: Fix deadlock
Mads Bligaard Nielsen <[email protected]>
drm/bridge: adv7511: fix crash on irq during probe
Chao Yu <[email protected]>
f2fs: fix to truncate meta inode pages forcely
Chao Yu <[email protected]>
f2fs: introduce f2fs_invalidate_internal_cache() for cleanup
Yangtao Li <[email protected]>
f2fs: introduce f2fs_is_readonly() for readability
Alexander Sverdlin <[email protected]>
spi: lpspi: Avoid potential use-after-free in probe()
Colin Ian King <[email protected]>
ASoC: qcom: Fix uninitialized pointer dmactl
Jakub Kicinski <[email protected]>
net/sched: act_mirred: use the backlog for mirred ingress
Petr Tesarik <[email protected]>
net: stmmac: protect updates of 64-bit statistics counters
David Howells <[email protected]>
rxrpc: Fix delayed ACKs to not set the reference serial number
Mark Rutland <[email protected]>
arm64: entry: fix ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD
Ido Schimmel <[email protected]>
net/sched: flower: Fix chain template offload
Srinivasan Shanmugam <[email protected]>
drm/amd/display: Fix 'panel_cntl' could be null in 'dcn21_set_backlight_level()'
Srinivasan Shanmugam <[email protected]>
drm/amd/display: Add NULL test for 'timing generator' in 'dcn21_set_pipe()'
Petr Machata <[email protected]>
net: nexthop: Increase weight to u16
Petr Machata <[email protected]>
net: nexthop: Have all NH notifiers carry NH ID
Benjamin Poirier <[email protected]>
nexthop: Do not return invalid nexthop object during multipath selection
Benjamin Poirier <[email protected]>
nexthop: Factor out neighbor validity check
Benjamin Poirier <[email protected]>
nexthop: Factor out hash threshold fdb nexthop selection
Yu Kuai <[email protected]>
blk-cgroup: dropping parent refcount after pd_free_fn() is done
Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaim
Chao Yu <[email protected]>
f2fs: fix to do sanity check on direct node in truncate_dnode()
Yu Kuai <[email protected]>
block/rq_qos: protect rq_qos apis with a new lock
Kuniyuki Iwashima <[email protected]>
smc: Fix use-after-free in tcp_write_timer_handler().
Marc Kleine-Budde <[email protected]>
can: gs_usb: fix time stamp counter initialization
Chao Yu <[email protected]>
f2fs: don't reset unchangable mount option in f2fs_remount()
Yangtao Li <[email protected]>
f2fs: fix to set flush_merge opt and show noflush_merge
Dragos Tatulea <[email protected]>
net/mlx5e: xsk: Fix crash on regular rq reactivation
Junhao He <[email protected]>
coresight: Fix memory leak in acpi_buffer->pointer
Jan Kara <[email protected]>
ext4: avoid deadlock in fs reclaim with page writeback
Fei Shao <[email protected]>
media: mediatek: vcodec: Only free buffer VA that is not NULL
Dan Williams <[email protected]>
cxl/port: Fix delete_endpoint() vs parent unregistration race
Jaegeuk Kim <[email protected]>
f2fs: split initial and dynamic conditions for extent_cache
Deepak Gupta <[email protected]>
riscv: VMAP_STACK overflow detection thread-safe
Paulo Alcantara <[email protected]>
smb: client: fix use-after-free in smb2_query_info_compound()
Ilya Bakoulin <[email protected]>
drm/amd/display: Fix hang/underflow when transitioning to ODM4:1
Zhipeng Lu <[email protected]>
SUNRPC: fix a memleak in gss_import_v2_context
Jan Kara <[email protected]>
reiserfs: Avoid touching renamed directory if parent does not change
Jeff Layton <[email protected]>
reiserfs: convert to simple_rename_timestamp
Jeff Layton <[email protected]>
fs: new helper: simple_rename_timestamp
Paloma Arellano <[email protected]>
drm/msm/dpu: Add mutex lock in control vblank irq
Baolin Wang <[email protected]>
mm: migrate: fix getting incorrect page mapping during page migration
Dave Chinner <[email protected]>
xfs: fix unmount hang with unflushable inodes stuck in the AIL
Dave Chinner <[email protected]>
xfs: factor out stale buffer item completion
Dave Chinner <[email protected]>
xfs: rearrange code in xfs_buf_item.c
Dave Chinner <[email protected]>
xfs: catch stale AGF/AGF metadata
Dave Chinner <[email protected]>
xfs: xfs_ifree_cluster vs xfs_iflush_shutdown_abort deadlock
Johan Hovold <[email protected]>
tty: add break_wait kernel-doc
Christian Brauner <[email protected]>
namespace: handle mount locking for automounts correctly
Christian Brauner <[email protected]>
fcntl: refuse F_SET_RW_HINT on an immutable inode
Christian Brauner <[email protected]>
namespace: check the target before walking it in do_mount_setattr()
Christian Brauner <[email protected]>
namespace: don't copy an unmounted mount tree
Christian Brauner <[email protected]>
namespace: unhash a dentry before detaching the mounts on it
Nguyen Ngoc Thang <[email protected]>
drm/fb-helper: defer setup when fbdev_probe() fails, not just on -EAGAIN
Mikhail Gavrilov <[email protected]>
drm/amdgpu: copy debugfs register data outside the GRBM/SRBM locks
Wentao Liang <[email protected]>
drm/vc4: Fix firmware reference leak in vc4_drm_bind()
Ahmed Abdelhaleem Ahmed <[email protected]>
scsi: ch: Do not keep references to data transfer element devices
Shao-Fu Chen <[email protected]>
optee: register TEE devices only once fully initialized
Shawn Lin <[email protected]>
pmdomain: rockchip: propagate subdomain add errors
Shawn Lin <[email protected]>
pmdomain: rockchip: don't ignore clock lookup errors on attach
Ming Qian <[email protected]>
pmdomain: imx8m-blk-ctrl: Serialize power on/off across sibling domains
Shawn Lin <[email protected]>
pmdomain: rockchip: fix clock leak on domain probe failure
Mikulas Patocka <[email protected]>
dm: fix reading free memory in do_resume
Christian Brauner <[email protected]>
namespace: check the mounts before reading their parents in pivot_root()
Christian Brauner <[email protected]>
namespace: don't inherit MNT_UMOUNT in clone_mnt()
Chengfeng Ye <[email protected]>
Bluetooth: ISO: Serialize concurrent connect calls
Zack Rusin <[email protected]>
drm/vmwgfx: validate pitch coming from userspace
Mikhail Gavrilov <[email protected]>
Bluetooth: RFCOMM: connect the session socket without rfcomm_mutex
Weiming Shi <[email protected]>
net: team: stop reusing skb after queue override
Weiming Shi <[email protected]>
net: team: fix NULL pointer dereference in team_xmit during mode change
Marc Harvey <[email protected]>
net: team: Rename port_disabled team mode op to port_tx_disabled
Marc Harvey <[email protected]>
net: team: Remove unused team_mode_op, port_enabled
Felix Fietkau <[email protected]>
netfilter: nf_tables: fix bidirectional offload regression
Tahera Fahimi <[email protected]>
xfrm: prevent policy_hthresh.work from racing with netns teardown
Ramses de Norre <[email protected]>
wireguard: queueing: preserve tstamp_type when encapsulating packet
Lorenzo Stoakes (ARM) <[email protected]>
mm/mremap: fix locked_vm leak from MREMAP_DONTUNMAP self-merge
Lorenzo Stoakes (ARM) <[email protected]>
mm/mremap: fix locked_vm leak by splitting VMA for MREMAP_DONTUNMAP
Vishal Badole <[email protected]>
EDAC/amd64: Mask UMC chip select to the four implemented selects
Christian Göttsche <[email protected]>
selinux: fix data race on AVC latest_notif
Tristan Madani <[email protected]>
ice: fix metadata_dst refcount handling on representor teardown
Daehyeon Ko <[email protected]>
ip6_gre: remove obsolete ERSPAN PMTU update
Donggeun Yoo <[email protected]>
tracing: Set the trace clock before registering the histogram trigger
Vicki Pfau <[email protected]>
HID: steam: Clean up locking
Vicki Pfau <[email protected]>
HID: steam: Refactor registration
Vicki Pfau <[email protected]>
HID: steam: Rearrange teardown sequence
Vicki Pfau <[email protected]>
HID: steam: Fully unregister controller when hidraw is opened
Vicki Pfau <[email protected]>
HID: hid-steam: Make client_opened a counter
Dan Carpenter <[email protected]>
HID: hid-steam: Fix cleanup in probe()
Adrian Betschart <[email protected]>
drm/amd/display: Don't replace a sink mode that shares the native totals
Oliver Hartkopp <[email protected]>
can: fix unique skb identifier regression under RPS
Ezrak1e <[email protected]>
dlm: validate length in dlm_search_rsb_tree
Xue Lei <[email protected]>
mtd: fix double free and WARN_ON in add_mtd_device() error paths
Miquel Raynal <[email protected]>
mtd: maps: vmu-flash: Fix the (mtd core) switch to ref counters
Alexander Usyskin <[email protected]>
mtd: fix use-after-free in mtd release
Miquel Raynal <[email protected]>
mtd: Clean refcounting with MTD_PARTITIONED_MASTER
Fernando Fernandez Mancera <[email protected]>
net: openvswitch: validate transport header presence in set_ipv6_addr
Li RongQing <[email protected]>
net/mlx5e: Order ICOSQ cc update after CQ doorbell
Eric Dumazet <[email protected]>
flow_dissector: avoid u16 truncation of hlen in bpf_flow_dissect()
Eric Dumazet <[email protected]>
flow_dissector: avoid u16 truncation of skb->len when computing thoff
Marek Szyprowski <[email protected]>
ASoC: samsung: i2s: enable op_clk in probe to balance runtime PM
Alvin Šipraga <[email protected]>
ASoC: adau1372: fix invalid default state of output ASRC and DAC muxes
Alvin Šipraga <[email protected]>
ASoC: adau1372: allow sleepy powerdown GPIOs
Sang-Hoon Choi <[email protected]>
nvmet: use the local P2P device on metadata allocation failure
Sang-Hoon Choi <[email protected]>
cxgb4/ch_ktls: disable softirqs around tid_list erases
Omar Ramadan <[email protected]>
amt: send the relay's General Query directly from the receive path
Jamal Hadi Salim <[email protected]>
net/sched: em_text: reject unterminated algo before autoload
Maíra Canal <[email protected]>
drm/vc4: Free the BO cache size list on teardown
Myeonghun Pak <[email protected]>
drm/aspeed: Balance the display clock enable on teardown
Sang-Hoon Choi <[email protected]>
gpio: exar: initialize the ID before registering its cleanup
Oleg Keri <[email protected]>
drm/dp: don't mark the AUX backlight enabled when enabling failed
Christian Brauner <[email protected]>
namespace: refuse an automount below a mount that is in no namespace
Christian Brauner <[email protected]>
dcache: don't put a mountpoint on a dentry that's being removed
Christian Brauner <[email protected]>
namespace: check a submount for references right before unmounting it
Christian Brauner <[email protected]>
fs: refuse fspick() on internal superblocks
Alex Deucher <[email protected]>
drm/amdgpu: make Mac FB workaround generic
Fan Wu <[email protected]>
drm/vc4: drain the hangcheck timer and works on V3D unbind
Krzysztof Karas <[email protected]>
drm/i915/gt: Unmask interrupts only when ACTIVE is true
Krzysztof Karas <[email protected]>
drm/i915/gem: Prevent overstepping exec array boundary
Sajal Gupta <[email protected]>
drm/gud: don't keep a connector without a CRTC as connector_state
Palla Raghunath <[email protected]>
Bluetooth: RFCOMM: Fix NULL tty_dev dereference in rfcomm_dev_shutdown
Maxim Skokov <[email protected]>
Bluetooth: RFCOMM: free the skb when the DLC has no owner
Iaroslav Voitovych <[email protected]>
Bluetooth: MGMT: Fix status of pending commands flushed on power off
Chengfeng Ye <[email protected]>
Bluetooth: hci_sock: Serialize dead-device detachment
Runyu Xiao <[email protected]>
scsi: qedi: Initialize callback state before registration
Abhishek Ojha <[email protected]>
regulator: ltc3676: don't read the write-only HRST and CLIRQ registers
Denis V. Lunev <[email protected]>
openvswitch: fix soft lockup in the netlink flow dump
Karl Bonde Torp <[email protected]>
nvme: fix swapped ZRASF zone state values for full and read only
Fredrik Nyberg <[email protected]>
net: usb: ax88179_178a: fix rx frame length for non-last packets
Sebastien Royen <[email protected]>
net: dsa: microchip: fix KSZ8765 fiber detection
Zixuan Chai <[email protected]>
net: bridge: avoid recursive multicast port cleanup
Chengfeng Ye <[email protected]>
net/smc: protect clcsock lifetime in smc_getname
Quchaosheng <[email protected]>
net/packet: guard the ll header push in packet_rcv_spkt()
Guangshuo Li <[email protected]>
mmc: sdhci-sprd: disable runtime PM on remove
Yibo Tan <[email protected]>
mmc: mtk-sd: Cancel request timeout work on remove
Guangshuo Li <[email protected]>
mmc: cavium-thunderx: destroy slot platform devices on remove
Guangshuo Li <[email protected]>
mmc: cavium-octeon: destroy slot platform devices on remove
Ma Xinmeng <[email protected]>
dm-snap: reject the transient exception store for snapshot-merge
Ben Cressey <[email protected]>
dm-crypt: reject the lmk IV mode with AEAD ciphers
Nguyen Ngoc Thang <[email protected]>
memstick: rtsx_usb_ms: complete requests after eject instead of dropping them
Raj Ojha <[email protected]>
memstick: core: wait for request completion before freeing card
성병찬 <[email protected]>
KEYS: Fix add_key() race with keyring restriction
Karl Mehltretter <[email protected]>
keys: finalize persistent keyring timeout after link attempt
Mingming Cao <[email protected]>
ibmveth: fix TX LTB and filter unwind on open-fail
Mingming Cao <[email protected]>
ibmveth: h_free logical LAN on open-fail after register
Ridham Khurana <[email protected]>
gpio: xilinx: fix runtime PM leak on request error path
Hui Peng <[email protected]>
sctp: copy zeroed stats to user in sctp_getsockopt_pr_streamstatus() when !streamoute
Stephen Smalley <[email protected]>
selinux: preserve NATIVE_LABELS on already-initialized sb in set_mnt_opts
Johannes Berg <[email protected]>
Revert "wifi: libertas: reject short monitor TX frames"
Chengfeng Ye <[email protected]>
tipc: hold a reference to nodes found by link name
Yuqi Xu <[email protected]>
tipc: destroy topsrv workqueues before closing connections
Sabrina Dubroca <[email protected]>
strparser: make sure __strp_recv isn't running before tearing down the parser
Josef Bacik <[email protected]>
xen/netfront: don't leak the skb when xennet_fill_frags() fails
Pavankumar Kondeti <[email protected]>
workqueue: Fix NULL current_pwq deref in chained work check
Jason A. Donenfeld <[email protected]>
wireguard: noise: reject response consumption after intermediate initiation
Michele Dionisio <[email protected]>
wifi: brcmfmac: fix P2P device removal race in brcmf_detach()
Palla Raghunath <[email protected]>
dm ioctl: don't let data_start run past the buffer
Wentao Liang <[email protected]>
btrfs: scrub: fix local_root reference leak in scrub_print_warning_inode()
Michael Garland <[email protected]>
ASoC: amd: yc: Add DMI quirk for Acer Aspire Go 15 (AG15-21P)
Karl Mehltretter <[email protected]>
arm64: irq: exclude the softirq stack switch from KCOV
Daehyeon Ko <[email protected]>
ipv6: do not warn on route notification size race
Daehyeon Ko <[email protected]>
ipv4: do not warn on route notification size race
Daehyeon Ko <[email protected]>
ipv4: stop route notification sizing when nexthop group shrinks
Daehyeon Ko <[email protected]>
ipv4: stop PMTU walk when nexthop group shrinks
Eric Biggers <[email protected]>
crypto: drbg - Fix ineffective sanity check
Karl Mehltretter <[email protected]>
netfilter: nft_set_pipapo: restore cloned mapping table memcg accounting
Jiajia Liu <[email protected]>
Bluetooth: hci_event: fix simultaneous discovery stuck in FINDING
Liew Rui Yan <[email protected]>
mm/damon/core: fix unconditionally skip last region
SeongJae Park <[email protected]>
mm/damon/core: do non-safe region walk on kdamond_apply_schemes()
Carlos Llamas <[email protected]>
HID: uhid: convert to hid_safe_input_report()
Benjamin Tissoires <[email protected]>
HID: core: introduce hid_safe_input_report()
Andrey Misiurov <[email protected]>
scsi: lpfc: Fix use-after-free of mboxq in lpfc_sli4_driver_resource_setup()
HE WEI(ギカク) <[email protected]>
fs/ntfs3: fix slab-out-of-bounds write in ni_create_attr_list()
Nirbhay Sharma <[email protected]>
fs/ntfs3: fix KMSAN uninit-value in ni_create_attr_list
Konstantin Komarov <[email protected]>
fs/ntfs3: Mark inode as bad as soon as error detected in mi_enum_attr()
Konstantin Komarov <[email protected]>
fs/ntfs3: Add more checks in mi_enum_attr (part 2)
Pengpeng Hou <[email protected]>
iio: cdc: ad7150: fix OF matching and publish module aliases
Fabrice Gasnier <[email protected]>
iio: adc: stm32-adc: fix possible division by zero in processed channel
Vladyslav Ivashchenko <[email protected]>
iio: adc: axp288: Add TS bias override for Haier HV103H
Cong Nguyen <[email protected]>
iio: adc: max1363: sign-extend bipolar differential channel reads
Pengpeng Hou <[email protected]>
iio: adc: aspeed: propagate reset deassert errors
Krzysztof Kozlowski <[email protected]>
iio: adc: aspeed: Simplify with dev_err_probe
Fan Wu <[email protected]>
iio: adc: ad_sigma_delta: fix use-after-free on unbind
Paulo Alcantara <[email protected]>
smb: client: discard post-EOF pagecache when extending a file via zero range
Felix Fietkau <[email protected]>
wifi: mac80211: set info->band for 802.3 encap offload frames
Sean Christopherson <[email protected]>
KVM: SVM: Use the active VMCB's MSR bitmap when checking if MSR is intercepted
Peter Xu <[email protected]>
mm/hugetlb: fix avoid_reserve to allow taking folio from subpool
Matthew Wilcox (Oracle) <[email protected]>
fs: Free any excess xarray nodes in clear_inode()
Zhiling Zou <[email protected]>
wifi: mac80211: count only matching reservations in reserved switch
Zhiling Zou <[email protected]>
wifi: mac80211: keep paired old chanctx alive
Johan Hovold <[email protected]>
tty: port: fix tty_port_tty_vhangup() race
Eric Dumazet <[email protected]>
bnxt_en: fix DMA mapping length for padded small packets
Zhao Li <[email protected]>
wifi: mac80211: account proxy paths against the mesh path limit
Han Xu <[email protected]>
mtd: spinand: Enable QE on all dies
Pei Xiao <[email protected]>
mtd: block2mtd: Fix divide error when erase_size is zero
Johan Hovold <[email protected]>
USB: serial: fix ioctl hangup race
Johan Hovold <[email protected]>
USB: serial: report unsupported break signalling
Johan Hovold <[email protected]>
USB: serial: return errors from break handling
Zhao Li <[email protected]>
wifi: mac80211: keep fallback association elements alive
Zhao Li <[email protected]>
wifi: mac80211: shut down RX BA session timer on teardown
Nuno Sá <[email protected]>
mtd: spinand: fix NULL pointer dereference with no ECC engine
Timur Kristóf <[email protected]>
drm/amd/display: Mark DCE 6.4 as not APU
Johan Hovold <[email protected]>
serial: fix TIOCMIWAIT race
Fan Wu <[email protected]>
tty: serial: max3100: shut down timer before freeing port
Johan Hovold <[email protected]>
tty: tty_port: restore TTY_IO_ERROR on activation failure
Pannarat Wiriyaarritham <[email protected]>
usb: typec: ucsi: acpi: Assume UCSI 1.2 on Acer Nitro ANV15-41
Runyu Xiao <[email protected]>
USB: dwc2: shut down wakeup timer before freeing HCD state
Myeonghun Pak <[email protected]>
usb: ohci-spear: disable controller wakeup on removal
Chen Ni <[email protected]>
usb: ohci-spear: Remove unnecessary NULL check before clk_disable_unprepare()
Francisco Beltrán Millalén <[email protected]>
drm/amdgpu: reset VI ASIC on MacBookPro14,3
Andre Eikmeyer <[email protected]>
drm/amdgpu: reset VI ASIC on MacBookPro15,1
Jiangshan Yi <[email protected]>
drm/amd/display: check dc_state_create_copy() for NULL in dm_suspend
Eric Biggers <[email protected]>
fsverity: add dependency on 64K or smaller pages
Mostafa Saleh <[email protected]>
KVM: arm64: Don't use the VMA to size stage-2 block mappings for VM_PFNMAP
Jinseob Kim <[email protected]>
iio: buffer: serialize buffer teardown with mode claims
Beata Michalska <[email protected]>
arm64: errata: Add Cortex-A725 erratum 3821522 workaround
Beata Michalska <[email protected]>
arm64: errata: Factor out broken AMU const counter cap
Mark Rutland <[email protected]>
arm64/fpsimd: signal: Forbid non-streaming SVE payload on SME-only systems
Zhengchuan Liang <[email protected]>
perf: Require kernel access for text poke events
Johan Hovold <[email protected]>
tty: fix saved termios reset race
Jiazi Liu <[email protected]>
usb: dwc3: gadget: fix IRQ storm on invalid event buffer count
Viken Dadhaniya <[email protected]>
soc: qcom: geni-se: Correct QUP Core ICC vote constants
Andrei Matei <[email protected]>
bpf: Fix accesses to uninit stack slots
Jiangshan Yi <[email protected]>
smb: client: clear setuid/setgid bit on write with cifsacl/modefromsid/posix extensions
Josef Bacik <[email protected]>
xen/netfront: drop RX packets with a short Ethernet header
Amit Sunil Dhamne <[email protected]>
usb: typec: tcpm: constrain TCPM_SOURCING_VBUS event handling
Xu Yang <[email protected]>
usb: typec: tcpm: fix debug accessory mode detection for sink ports
Neill Kapron <[email protected]>
usb: gadget: f_fs: Fix Use-After-Free in AIO error path
Gabriel Prostitis <[email protected]>
USB: gadget: ffs: fix mm lifetime handling
Fan Wu <[email protected]>
usb: gadget: at91_udc: drain polled-VBUS timer/work before udc is freed
Uwe Kleine-König <[email protected]>
usb: gadget: at91_udc: Convert to platform remove callback returning void
Karl Mehltretter <[email protected]>
serial: imx: serialize imx_uart_ports[] lifetime
Uwe Kleine-König <[email protected]>
serial: imx: Convert to platform remove callback returning void
Gilberto Conde <[email protected]>
net: usb: qmi_wwan: add Quectel EG120K-EA
Wentao Liang <[email protected]>
wifi: wlcore: Fix runtime PM leak in wlcore_remove()
Uwe Kleine-König <[email protected]>
wifi: wlcore: Convert to platform remove callback returning void
Frank Sorenson <[email protected]>
smb: client: split cifsFileInfo bitfields to avoid shared-byte RMW races
Paolo Abeni <[email protected]>
mptcp: prevent race between disconnect() and rtx
Eric Dumazet <[email protected]>
tcp: introduce icsk->icsk_keepalive_timer
Mehmet Fide <[email protected]>
mtd: rawnand: vf610_nfc: fix false bitflips on reads of erased pages
Yi Yang <[email protected]>
vc_screen: reload vc pointer before if (ret) in vcs_write() to avoid UAF
Chris Mason <[email protected]>
SUNRPC: reject duplicate CREDS_VALUE options
Chris Mason <[email protected]>
SUNRPC: fix gssx_dec_option_array error path bugs
Asad Kamal <[email protected]>
drm/amd/powerplay: fix VoltageObjectInfo zero-stride loop and OOB read
Aditya Dutt <[email protected]>
jfs: fix array-index-out-of-bounds read in add_missing_indices
Fan Wu <[email protected]>
iio: trigger: cancel reenable_work before freeing trigger
Salah Triki <[email protected]>
iio: proximity: vcnl3020: fix ISR bitmask check in IRQ handler
Zhang Jie <[email protected]>
iio: proximity: sx9324: Correct proximity channel resolution
Cong Nguyen <[email protected]>
iio: proximity: pulsedlight: fix iio_device left registered on PM setup failure
Salah Triki <[email protected]>
iio: proximity: isl29501: Fix return type of isl29501_register_write
Hui Su <[email protected]>
iio: pressure: bmp280: fix out-of-bounds access in sampling frequency lookup
Fan Wu <[email protected]>
iio: light: gp2ap020a00f: drain irq_work after free_irq
Arka Mondal <[email protected]>
iio: imu: adis16480: fix unprotected debugfs reads
Arka Mondal <[email protected]>
iio: imu: adis16400: fix unprotected debugfs reads
Arka Mondal <[email protected]>
iio: gyro: adis16136: fix unprotected debugfs reads
Salah Triki <[email protected]>
iio: frequency: admv1013: fix wrong channel field used in admv1013_read_raw()
Jonathan Cameron <[email protected]>
iio: buffer: Ensure bounce buffer used for unaligned case is zeroed.
Fan Wu <[email protected]>
iio: adc: xilinx-xadc: free IRQ before cancelling the unmask worker on unbind
Felix Gu <[email protected]>
iio: adc: sun4i-gpadc-iio: drop underflowing pm_runtime_put() calls
Felix Gu <[email protected]>
iio: adc: sun4i-gpadc-iio: clean up on thermal zone registration failure
Salah Triki <[email protected]>
iio: accel: sca3000: fix frequency divider condition check
Jiale Yao <[email protected]>
iio: accel: kxcjk-1013: reject duplicate event disable
Daehyeon Ko <[email protected]>
thunderbolt: Reject oversized XDomain properties responses
Kurt Lieber <[email protected]>
thunderbolt: Disable CL states for the Anker Prime TB5 dock
Mika Westerberg <[email protected]>
thunderbolt: Fix KASAN reported use-after-free when request is canceled
Ian Lin <[email protected]>
USB: serial: option: add Compal EXC-T1 support
Sebastian Sjoholm <[email protected]>
USB: serial: option: add Quectel RG660QB
Ian Lin <[email protected]>
USB: serial: option: add Compal EXM-G1x support
Carlo Szelinsky <[email protected]>
USB: serial: option: add Quectel EG060W
Zhao Dongdong <[email protected]>
USB: serial: option: add support for SIMCom SIM8260C
Johan Hovold <[email protected]>
USB: serial: fix driver deregistration order
Johan Hovold <[email protected]>
USB: serial: fix dynamic id driver deregistration race
Johan Hovold <[email protected]>
USB: serial: ssu100: fix baud rate overflow
Johan Hovold <[email protected]>
USB: serial: quatech2: fix baud rate overflow
Jérémy Carrat <[email protected]>
USB: serial: cp210x: add Corsair AX1500i Power Supply
Yuqi Xu <[email protected]>
wifi: mac80211: handle empty FILS association request payload
Zhao Li <[email protected]>
wifi: mac80211: release mesh path quota on failed additions
Yuqi Xu <[email protected]>
wifi: mac80211: minstrel_ht: validate fixed rate index
Zhao Li <[email protected]>
wifi: mac80211: drain PS delivery work during station teardown
Guangshuo Li <[email protected]>
wifi: iwlegacy: 3945: free EEPROM data on remove
Tianchu Chen <[email protected]>
wifi: cw1200: fix TX padding OOB read leaking heap data to device
Nuno Sá <[email protected]>
mtd: spinand: fix zero oobavail when no ECC engine is used
Mehmet Fide <[email protected]>
mtd: rawnand: vf610_nfc: fix reads on chips with more than 64 bytes of OOB
Runyu Xiao <[email protected]>
mtd: rawnand: cadence: Initialize IRQ state before requesting IRQ
Weiming Shi <[email protected]>
nvmet-auth: fix out-of-bounds write in nvmet_auth_challenge()
Daehyeon Ko <[email protected]>
nvme-multipath: fix underflow in ANA log bounds checks
Zhiling Zou <[email protected]>
ipvs: bound LBLCR and LBLC cache growth
Chandrashekar Devegowda <[email protected]>
Bluetooth: btintel: fix buffer over-read in btintel_hw_error()
Chengfeng Ye <[email protected]>
Bluetooth: hci_core: Serialize fragmented ISO packet queueing
Chengfeng Ye <[email protected]>
Bluetooth: hci_core: Serialize ACL scheduling with channel deletion
Linmao Li <[email protected]>
Bluetooth: hci_core: Fix inquiry cache timestamps on 64-bit systems
Chengfeng Ye <[email protected]>
Bluetooth: hci_conn: Lock parent access during enhanced SCO setup
Chengfeng Ye <[email protected]>
Bluetooth: RFCOMM: Fix initial port reference race
Xiang Mei <[email protected]>
ALSA: ua101: reject mismatched capture/playback packet sizes
Kyle Zeng <[email protected]>
ALSA: seq: Serialize compat port-info ioctls
Zimeng Li <[email protected]>
ASoC: qcom: lpass-cpu: use DAI table index for playback constraints
Wentao Liang <[email protected]>
serial: vt8500: Fix clock reference leak in vt8500_serial_probe()
Simon Gassner <[email protected]>
serial: tegra: don't clear the Tx FIFO on an Rx-only reset
Fan Wu <[email protected]>
serial: 8250_bcm7271: fix use-after-free in brcmuart_remove()
Johan Hovold <[email protected]>
tty: abort break signalling on hangup
Viken Dadhaniya <[email protected]>
tty: serial: qcom_geni_serial: Keep console RX functional after deep idle
Joshua Rogers <[email protected]>
tty: vcc: hold port lock when clearing tty pointer in vcc_cleanup
Joshua Rogers <[email protected]>
tty: vcc: zero-initialize control packet in vcc_send_ctl()
Johan Hovold <[email protected]>
tty: amiserial: fix broken TIOCMIWAIT
Mingyu Wang <[email protected]>
tty: vt: fix memory leak in vc_allocate()
Jie Deng <[email protected]>
usb: cdns3: Fix NULL pointer dereference in cdns3_pci_probe
Fan Wu <[email protected]>
usb: cdns3: fix use-after-free in cdns3_gadget_exit()
Jameson Thies <[email protected]>
usb: typec: ucsi: displayport: Current CAM OOB index fixup
Prashanth K <[email protected]>
usb: typec: ucsi: Get the connector fwnode based on reg value
Radhey Shyam Pandey <[email protected]>
usb: typec: tipd: fix uninitialized typec_partner_desc in tps6598x_connect()
Amit Sunil Dhamne <[email protected]>
usb: typec: tcpm: recover after failure to start the frs ams
Hui Peng <[email protected]>
usb: core: clear both ep_in and ep_out for non-ep0 control endpoints
Myeonghun Pak <[email protected]>
usb: chipidea: tegra: disable runtime PM on resume failure
Yuchao Zhang <[email protected]>
usb: gadget: f_fs: Fix NULL pointer dereference in FUNCTIONFS_ENDPOINT_DESC
Alan Stern <[email protected]>
USB: gadget: dummy-hcd: Fix wait for outstanding request completions
Fan Wu <[email protected]>
usb: gadget: aspeed-vhub: cancel wake work on device removal
Radhey Shyam Pandey <[email protected]>
usb: dwc3: am62: Fix runtime PM usage count leak on probe error path
Linkai Gong <[email protected]>
usb: typec: anx7411 - stop the IRQ before destroying the workqueue
Liu Chao <[email protected]>
usb: gadget: f_uac1_legacy: validate bRequest index in generic_{set,get}_cmd
Myeonghun Pak <[email protected]>
usb: ohci-st: disable controller wakeup on removal
Myeonghun Pak <[email protected]>
usb: ohci-s3c2410: disable controller wakeup on removal
Myeonghun Pak <[email protected]>
usb: ohci-da8xx: disable controller wakeup on cleanup
Orgad Shaneh <[email protected]>
usb: octeon-hcd: fix the FIFO-flush timeout computation
Lovekesh Solanki <[email protected]>
usb: hub: use shorter 120ms post resume hold for SS root hubs
Syed Labeeq Sajid Bukhari <[email protected]>
usb: storage: sierra_ms: reject short SWoC info transfers
Johan Hovold <[email protected]>
USB: serial: fix port tear down use-after-free
Yuchao Zhang <[email protected]>
USB: cdc-acm: skip URB restart in port_shutdown if disconnected
Johan Hovold <[email protected]>
USB: cdc-acm: fix racy TIOCMIWAIT implementation
Yuxiao Wang <[email protected]>
nitro_enclaves: fix use-after-free on SLOT_ALLOC failure
Raphaël Larocque <[email protected]>
Input: synaptics - limit T440p InterTouch quirk to LEN0036
Lovekesh Solanki <[email protected]>
Input: synaptics - add LEN205b entry to smbus_pnp_ids for ThinkPad T490
David Heidelberg <[email protected]>
Input: s6sy761 - fix resume ordering and restore sensing
Lovekesh Solanki <[email protected]>
Input: i8042 - add nomux quirk for Fujitsu LIFEBOOK U7410
Martino Papero <[email protected]>
Input: atkbd - skip deactivate for Lenovo IdeaPad Slim 3 15IWC11
Wentao Liang <[email protected]>
kgdboc: Fix tty driver reference leak in configure_kgdboc()
Tomer Pomeranc <[email protected]>
binder: fix leaked fd fixups on TF_UPDATE_TXN supersede
Tomer Pomeranc <[email protected]>
binder: fix is_failure flag for superseded transaction cleanup
Guangshuo Li <[email protected]>
drm/amdgpu: fix ACP MFD device leak on init failure
Guangshuo Li <[email protected]>
drm/amdgpu: fix IP instance memory leak on kobject add failure
Imre Kaloz <[email protected]>
drm/radeon: Read the VRAM VBIOS signature with readb()
Willian Oliveira <[email protected]>
drm/amdgpu/gfx6: fix firmware leak on teardown
Timur Kristóf <[email protected]>
drm/amd/pm/si: Fix updating clock limits on AC/DC
Timur Kristóf <[email protected]>
drm/amd/pm/si: Check AMD_IS_MOBILITY flag for PPSMC_SYSTEMFLAG_GPIO_DC
Nikola Prica <[email protected]>
PCI: Accept AtomicOps already enabled by the hypervisor
Luo Gengkun <[email protected]>
perf: Fix race between perf_event_exit_task() and perf_pending_task()
Hongjian Dai <[email protected]>
i2c: at91: release DMA channels when probe defers
Eric Dumazet <[email protected]>
ipv6: sr: use skb_get_hash_net() in seg6_make_flowlabel()
Florian Westphal <[email protected]>
net: add and use skb_get_hash_net
Quentin Freimanis <[email protected]>
net: sparx5: make ports inherit the switch base mac address type
Fernando Fernandez Mancera <[email protected]>
netfilter: bpf: reject invalid NAT manipulation types
Julian Anastasov <[email protected]>
ipvs: filter some flags received in the backup server
Julian Anastasov <[email protected]>
ipvs: do not create invisible templates
Julian Anastasov <[email protected]>
ipvs: fix missing counter decrement in lblc
Jeff Jo <[email protected]>
tcp: refresh TS.Recent for accepted old ACKs
Nicolai Buchwitz <[email protected]>
net: bcmgenet: fix NULL dereference in set_coalesce before first open
Jamal Hadi Salim <[email protected]>
net/sched: sch_codel: match the no-drop threshold to the packet size
Jamal Hadi Salim <[email protected]>
net/sched: fq_codel: match the no-drop threshold to the packet size
Jérémy Jean <[email protected]>
tipc: prevent GCM nonce reuse on peer key changes
Baha Mesleh <[email protected]>
octeontx2-af: mcs: Fix SC resource cleanup loop
Florian Fainelli <[email protected]>
net: systemport: Fix RUNT MIB counter register offset calculation
Nguyen Ngoc Thang <[email protected]>
Bluetooth: hci_sync: don't drain cmd_sync backlog on unregister
Florian Westphal <[email protected]>
netfilter: ipset: do not update comments from kernel-side adds
Jamal Hadi Salim <[email protected]>
net/sched: cls_api: reclaim an empty proto on the error path
Binbin Deng <[email protected]>
net/mctp: publish the mctp_dev only after it is initialised
Sai Teja Aluvala <[email protected]>
Bluetooth: btintel: validate DDC record lengths
Sang-Hoon Choi <[email protected]>
Bluetooth: hci_core: free the HCI ID if naming fails
Cezary Rojewski <[email protected]>
ASoC: codecs: rt274: Fix format setting for 44100 rate
Cezary Rojewski <[email protected]>
ASoC: codecs: rt286: Revert delay value for jack setup
Zhao Li <[email protected]>
wifi: cfg80211: preserve hidden-group beacon IE ownership
Manush Prajwal <[email protected]>
rtc: mpfs: fix unchecked devm_clk_get() error pointer in probe()
Liu Dalin <[email protected]>
rtc: dev: zero-initialize struct rtc_wkalrm to prevent information leak
Nicolas Escande <[email protected]>
wifi: ath11k: reset ar->num_stations on hardware start
Sheetal <[email protected]>
ASoC: tegra: Fix ASRC Stream6 input threshold control
Aamir Ahmed <[email protected]>
wifi: wfx: validate MIB read length before copying to caller
HyeongJun An <[email protected]>
ASoC: wm8903: Move the DRC QR threshold to the register that holds it
Abdurrahman Hussain <[email protected]>
of/overlay: don't create "//" paths for fragments targeting the root
Abdurrahman Hussain <[email protected]>
of/overlay: don't leak fragment references when changeset init fails
Julian Sun <[email protected]>
nvmet: preserve device path on allocation failure
Karl Mehltretter <[email protected]>
mtd: core: call _get_device() with the master MTD
Alexander Usyskin <[email protected]>
mtd: call external _get and _put in right order
Tomas Winkler <[email protected]>
mtd: use refcount to prevent corruption
SJ Park <[email protected]>
mm/damon/core: don't skip damos_adjust_quota() while esz is not zero
Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix NVMe abort reference leak on repeated abort
Nilesh Javali <[email protected]>
scsi: qla2xxx: Initialize NVMe abort_work once at submission
Svyatoslav Ryhel <[email protected]>
drm/tegra: gr2d/gr3d: Initialize address register map before HOST1X client is registered
Sandipan Das <[email protected]>
perf/x86/amd/lbr: Fix kernel address leakage
Kuniyuki Iwashima <[email protected]>
hsr: Remove WARN_ONCE() in hsr_addr_is_self().
Kang Yang <[email protected]>
wifi: ath11k: add srng->lock for ath11k_hal_srng_* in monitor mode
Duoming Zhou <[email protected]>
watchdog: cpu5wdt.c: Fix use-after-free bug caused by cpu5wdt_trigger
Tetsuo Handa <[email protected]>
perf/core: Fix WARN in perf_sigtrap()
Lorenzo Stoakes (ARM) <[email protected]>
mm/secretmem: properly account locked pages
Xiang Mei <[email protected]>
ALSA: line6: reject oversized playback packets
Nguyen Ngoc Thang <[email protected]>
ALSA: caiaq: unregister the input device when probe fails
Zizhi Wo <[email protected]>
vt: skip screen update for DEC alignment test on backgroup consoles
Clément Léger <[email protected]>
of/irq: add missing of_node_put() for interrupt parent node
Chunguang Xu <[email protected]>
nvme-fabrics: use reserved tag for reg read/write command
Jakub Kicinski <[email protected]>
ethtool: fail closed if we can't get max channel used in indirection tables
Mauro Carvalho Chehab <[email protected]>
media: av7110: fix a spectre vulnerability
Christoph Schlameuss <[email protected]>
kvm: s390: Reject memory region operations for ucontrol VMs
Dan Carpenter <[email protected]>
drm/mediatek: Fix potential NULL dereference in mtk_crtc_destroy()
Suraj Kandpal <[email protected]>
drm/i915/hdcp: Add encoder check in hdcp2_get_capability
Suraj Kandpal <[email protected]>
drm/i915/hdcp: Add encoder check in intel_hdcp_get_capability
Alex Hung <[email protected]>
drm/amd/display: Validate function returns
Sanghyun Park <[email protected]>
vxlan: use one headroom snapshot for neighbour replies
Maoyi Xie <[email protected]>
rds_tcp: close NULL deref window in rds_tcp_set_callbacks
Konrad Dybcio <[email protected]>
drm/msm/adreno: Assign msm_gpu->pdev earlier to avoid nullptrs
Benjamin Berg <[email protected]>
wifi: cfg80211: avoid double free if updating BSS fails
Mario Limonciello <[email protected]>
x86/CPU/AMD: Clear virtualized VMLOAD/VMSAVE on Zen4 client
David Arinzon <[email protected]>
net: ena: Add validation for completion descriptors consistency
Shay Drory <[email protected]>
net/mlx5e: Fix netif state handling
Jan Kara <[email protected]>
ocfs2: Avoid touching renamed directory if parent does not change
Kumar Kartikeya Dwivedi <[email protected]>
bpf: Defer work in bpf_timer_cancel_and_free
Kumar Kartikeya Dwivedi <[email protected]>
bpf: Fail bpf_timer_cancel when callback is being cancelled
Jun Yang <[email protected]>
sctp: check RCV_SHUTDOWN after the sendmsg connect wait
Runyu Xiao <[email protected]>
rtc: spear: initialize IRQ state before requesting alarm IRQ
Ilkka Lappeteläinen <[email protected]>
net/packet: prevent TX_RING byte count overflow
Aohan Mei <[email protected]>
netfilter: nft_flow_offload: drop flowtable reference on init error path
Abdurrahman Hussain <[email protected]>
of/overlay: only treat a positive changeset id as registered
Abdurrahman Hussain <[email protected]>
of/overlay: put property on deadprops only after changeset add succeeds
Wentao Liang <[email protected]>
of/irq: Fix remaining refcount leaks in of_irq_init()
Leon Hwang <[email protected]>
kprobes: Skip disarmed probes when checking optkprobe overlap
Jérémy Jean <[email protected]>
audit: fix exe mark UAF in kill_rules()
Takashi Iwai <[email protected]>
ALSA: usb-audio: Apply IGNORE_CTL_ERROR quirk to all Audient devices
Darrick J. Wong <[email protected]>
xfs: fix cursor and pointer handling when recovering iunlink buckets
Zihan Xi <[email protected]>
smb: client: close completed creates on compound wait errors
Zihan Xi <[email protected]>
smb: client: close handle after create-context parsing failure
ChenXiaoSong <[email protected]>
smb/client: pass cifs_open_info_data to SMB2_open()
ChenXiaoSong <[email protected]>
smb/client: use stack-allocated smb2_file_all_info in smb3_query_mf_symlink()
Chen Changcheng <[email protected]>
HID: alps: unregister DualPoint Stick input device on remove
Bastien Nocera <[email protected]>
HID: hid-alps: Use pm_ptr instead of #ifdef CONFIG_PM
Marcus Folkesson <[email protected]>
HID: hid-alps: use default remove for hid device
Thomas Weißschuh <[email protected]>
HID: core: remove #ifdef CONFIG_PM from hid_driver
Tibor Harcsa <[email protected]>
Bluetooth: btusb: Add IMC Networks QCA9377 to quirks table
Aldo Ariel Panzardo <[email protected]>
Bluetooth: mgmt: fix race in read_unconf_index_list()
Namjae Jeon <[email protected]>
smb: client: use finish_no_open() for non-regular inodes
Dapeng Mi <[email protected]>
perf/x86/intel: Fix GRT PEBS load/store direction for latency events, to fix sample classification
Dapeng Mi <[email protected]>
perf/x86/intel: Update event constraints and cache_extra_regsfor ADL
Aohan Mei <[email protected]>
netfilter: nf_tables: skip expired catchall elements on insert and delete
Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: set->ops->insert returns opaque set element in case of EEXIST
Guangshuo Li <[email protected]>
net: ena: fix MMIO read buffer leak on probe failure
Dr. David Alan Gilbert <[email protected]>
net: ena: Remove autopolling mode
Yuqi Xu <[email protected]>
net: ipconfig: bound DHCP option construction
Thorsten Blum <[email protected]>
net: ipconfig: Remove outdated comment and indent code block
Liz Fong-Jones <[email protected]>
PCI: Fix BAR resize for devices on a root bus
Ilpo Järvinen <[email protected]>
PCI: Fix Resizable BAR restore order
Zihan Xi <[email protected]>
smb: client: fix create context out-of-bounds reads
Steve French <[email protected]>
smb3: make query_on_disk_id open context consistent and move to common code
Ilya Maximets <[email protected]>
net: openvswitch: conntrack: fix helper UAF due to extensions realloc
Florian Westphal <[email protected]>
openvswitch: prepare for stolen verdict coming from conntrack and nat engine
Jaewook You <[email protected]>
mm/hugetlb: preserve mremap address delta when skipping page tables
Jinjiang Tu <[email protected]>
mm/rmap: fix missing barrier between anon_vma init and vma->anon_vma publish
Waiman Long <[email protected]>
mm/kmemleak: fix UAF bug in kmemleak_scan()
Waiman Long <[email protected]>
mm/kmemleak: simplify kmemleak_cond_resched() usage
Henry Martin <[email protected]>
tracing/user_events: Don't destroy fields when event removal fails
Dapeng Mi <[email protected]>
perf/x86/intel: Remove anythread_deprecated bit from perf_capabilities
Willem de Bruijn <[email protected]>
tcp: prevent collapsing skbs across boundary in rtx queue
Myeonghun Pak <[email protected]>
bna: prevent IOC timer rearm during teardown
April Cardenas <[email protected]>
smb/client: send lease break ACKs thru correct session for multiuser mounts
Fan Wu <[email protected]>
wifi: wcn36xx: Fix potential use-after-free in TX ack timer teardown
Yibo Tan <[email protected]>
hwmon: (pwm-fan) Stop RPM timer before freeing tach data
Tzung-Bi Shih <[email protected]>
watchdog: rtd119x: Avoid division by zero
Christophe JAILLET <[email protected]>
watchdog: rtd119x: Use devm_clk_get_enabled() helper
Shakeel Butt <[email protected]>
mm/mlock: use the IRQ-safe accessor for NR_MLOCK in __munlock_folio()
Hongling Zeng <[email protected]>
btrfs: take commit root semaphore when iterating in mark_block_group_to_copy()
Fan Wu <[email protected]>
smb: client: fix cifsFileInfo reference leak in deferred close
Paulo Alcantara <[email protected]>
smb: client: fix file type corruption in cifs_reparse_point_to_fattr()
Matthieu Baerts (NGI0) <[email protected]>
mptcp: pm: reset retrans_time when ADD_ADDR entry is reused
Qing Luo <[email protected]>
mptcp: pm: userspace: fix address ID overflow
Geliang Tang <[email protected]>
mptcp: use sock_kmemdup for address entry
Geliang Tang <[email protected]>
sock: add sock_kmemdup helper
Geliang Tang <[email protected]>
mptcp: pm: drop match in userspace_pm_append_new_local_addr
Matthieu Baerts <[email protected]>
mptcp: userspace pm: use a single point of exit
Nikhil Gurudasani <[email protected]>
erofs: preserve LZMA decoders on resize failure
Sahil Chandna <[email protected]>
net: mana: Reserve extra CQ slot for the fence completion CQE
Xuanqiang Luo <[email protected]>
net/sched: act_api: release all action references on NEWACTION failure
Xiong Weimin <[email protected]>
virtio_mmio: disable IRQ wake before free_irq
Viresh Kumar <[email protected]>
virtio-mmio: Remove virtqueue list from mmio device
Zihan Xi <[email protected]>
ipmr: account multicast table and route memory
Thomas Zimmermann <[email protected]>
drm/sysfb: simpledrm: Improve stride validation
Guanghui Yang <[email protected]>
f2fs: fix dentry folio leak in find_in_level
Wenjie Qi <[email protected]>
f2fs: limit recovery filename logging to stored length
Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix soft lockup polling continuation IOCB signature
Nilesh Javali <[email protected]>
scsi: qla2xxx: Use memset_io() to clear QLAFX00 request ring slot
Nilesh Javali <[email protected]>
scsi: qla2xxx: Quiesce response IRQ before freeing request queue
Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix 64G link speed reporting in get_data_rate
Nilesh Javali <[email protected]>
scsi: qla2xxx: Null out freed pointers in qla2x00_mem_alloc() error path
Narasimharao Vadlamudi <[email protected]>
media: rkvdec: Propagate platform_get_irq() errors
Johan Hovold <[email protected]>
media: platform: mtk-mdp3: fix NULL deref on failed SCP lookup
Lorenzo Stoakes (ARM) <[email protected]>
mm/mremap: reset unfaulted VMA page offset for MREMAP_DONTUNMAP
Rupesh Majhi <[email protected]>
iio: pressure: dps310: fix NULL pointer dereference on ACPI probe
Anthony Krowiak <[email protected]>
s390/vfio-ap: Fix NULL deref in status_show() during queue probe
Xu Rao <[email protected]>
nvme-fabrics: fix DHCHAP secret leak on parse failure
Karl Mehltretter <[email protected]>
arm64: mm: Fix the lockless page-table walk in show_pte()
Hugh Dickins <[email protected]>
arm64: allow pte_offset_map() to fail
Lad Prabhakar <[email protected]>
rtc: rzn1: Handle unset alarm weekday in rzn1_rtc_read_alarm
Steven Rostedt <[email protected]>
ftrace: Synchronize the initialization of ftrace_ops
Muhammad Bilal <[email protected]>
staging: sm750fb: fix mono image source stride mismatch in lynxfb_ops_imageblit()
Can Peng <[email protected]>
spi: bcm63xx: disable clock on resume failure
Yang Yingliang <[email protected]>
spi: bcm63xx: switch to use modern name
Jeffin Philip <[email protected]>
usb: gadget: f_mass_storage: fix null pointer dereference in fsg_common_set_num_buffers()
Adrian Hunter <[email protected]>
i3c: master: Fix use-after-free of master->this
Adrian Hunter <[email protected]>
i3c: master: Do not treat master device as a duplicate target
Can Peng <[email protected]>
hwrng: stm32 - Fix runtime PM cleanup on registration failure
Fan Wu <[email protected]>
mmc: via-sdmmc: cancel card-detect work on remove
Jianing Li <[email protected]>
power: supply: max17040: drop incorrect I2C functionality check
Uwe Kleine-König <[email protected]>
power: supply: max17040: Convert to i2c's .probe_new()
Angel Iglesias <[email protected]>
i2c: core: Introduce i2c_client_get_device_id helper function
Fan Wu <[email protected]>
power: supply: rt9455: quiesce delayed work before teardown
Uwe Kleine-König <[email protected]>
power: supply: rt9455: Convert to i2c's .probe_new()
Oscar Ou <[email protected]>
lockd: fix swapped arguments in nlmsvc_match_ip()
Ruoyu Wang <[email protected]>
i2c: mxs: fix DMA channel leak on probe error
Bence Csókás <[email protected]>
dmaengine: Add devm_dma_request_chan()
Jiacheng Yu <[email protected]>
params: fix charp corruption on allocation failure
Andy Shevchenko <[email protected]>
params: Fix multi-line comment style
Andy Shevchenko <[email protected]>
params: Sort headers
Andy Shevchenko <[email protected]>
params: Use size_add() for kmalloc()
Andy Shevchenko <[email protected]>
params: Do not go over the limit when getting the string length
Christophe JAILLET <[email protected]>
kernel/params.c: Use kstrtobool() instead of strtobool()
Rafael J. Wysocki <[email protected]>
ACPI: TAD: Add locking around AML evaluations
Rafael J. Wysocki <[email protected]>
ACPI: TAD: Split three functions to untangle runtime PM handling
Rafael J. Wysocki <[email protected]>
ACPI: TAD: Rearrange RT data validation checking
Hui Su <[email protected]>
kasan: fix cache shrink race with CPU hotplug
Zqiang <[email protected]>
kasan: fix lockdep report invalid wait context
Kuan-Wei Chiu <[email protected]>
coresight: etm3x: Fix cntr_val_show() to match cntr_val_store() behavior
Chuck Lever <[email protected]>
nfsd: gate nfs2 setacl by argp->mask
Jeff Layton <[email protected]>
nfsd: fix clock domain mismatch in clients_still_reclaiming()
Jeff Layton <[email protected]>
nfsd: check nfsd4_acl_to_attr() return value in nfsd4_create()
Chris Mason <[email protected]>
nfsd: size fh_verify server sockaddr slot by xpt_locallen
Chris Mason <[email protected]>
nfsd: release path refs on follow_down() error
Longlong Xia <[email protected]>
zram: fix out-of-bounds access in read_block_state()
Sergey Senozhatsky <[email protected]>
zram: fixup read_block_state()
Chengfeng Ye <[email protected]>
KEYS: trusted: Fix TPM teardown ordering
Qing Ming <[email protected]>
gtp: serialize PDP context updates
Breno Leitao <[email protected]>
usb: xhci: bail out of setup if the controller is inaccessible
Arnaldo Carvalho de Melo <[email protected]>
perf test bpf: Address error about non-null argument for epoll_pwait 2nd arg
Namhyung Kim <[email protected]>
perf tools: Fix a asan issue in parse_events_multi_pmu_add()
Ilya Titov <[email protected]>
pinctrl: sunxi: keep a shadow copy of the data register output latches
Xiang Mei <[email protected]>
vlan: require the MAC header to be present in __vlan_insert_inner_tag()
Frank Sorenson <[email protected]>
smb: client: fix OOB struct field reads in move_smb2_ea_to_cifs()
Joseph Qi <[email protected]>
smb: client: fix use-after-free of iface in cifs_try_adding_channels()
Daehyeon Ko <[email protected]>
wifi: libipw: reject TKIP frames without a full MIC
Hyunwoo Kim <[email protected]>
exec: Cleanup POSIX timers right after de_thread()
Xiang Mei <[email protected]>
ALSA: usb-audio: Clamp implicit feedback packet count to URB capacity
Takashi Iwai <[email protected]>
ALSA: usb-audio: Optimize the copy of packet sizes for implicit fb handling
Bjoern Doebel <[email protected]>
smb: client: fix heap overflow in DACL owner/group rewrite
Norbert Szetei <[email protected]>
landlock: Fix use-after-free of the source's parent directory
Zhiling Zou <[email protected]>
net: bridge: use option bits for CFM/MRP frame handlers
XingWang Xiang <[email protected]>
genetlink: pin family module during policy dump
Xu Rao <[email protected]>
Bluetooth: btqcomsmd: destroy RPMsg endpoints before freeing hci_dev
Uwe Kleine-König <[email protected]>
Bluetooth: btqcomsmd: Convert to platform remove callback returning void
Chao Yu <[email protected]>
f2fs: embed f2fs_gc_kthread in f2fs_sb_info
Nilesh Javali <[email protected]>
scsi: qla2xxx: Validate BSG request_len before reading vendor_cmd[]
Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix use-after-free of qpair work on queue teardown
Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix queue teardown NULL dma_free and bitmap locking
Nilesh Javali <[email protected]>
scsi: qla2xxx: Zero dport diagnostics buffer to avoid info leak
Christian Borntraeger <[email protected]>
KVM: s390: Zero initialize data structures for inject_pfault_token
Tristan Madani <[email protected]>
nvme: add missing SRCU grace period in error path
Steven Rostedt <[email protected]>
ftrace: Take trace_array reference before accessing its ftrace_ops
Muhammad Bilal <[email protected]>
staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie()
Vivek BalachandharTN <[email protected]>
staging: rtl8723bs: fix spacing around operators
Myeonghun Pak <[email protected]>
usb: storage: realtek_cr: fix use-after-free on disconnect
Fan Wu <[email protected]>
wifi: rtl8xxxu: fix use-after-free from rx_urb_wq on stop
Doruk Tan Ozturk <[email protected]>
ocfs2: validate directory-index entry counts when reading metadata
Joseph Qi <[email protected]>
ocfs2: validate dx_root extent list fields during block read
Dave Airlie <[email protected]>
nouveau/gem: reserve the bo in the info ioctl around the vma lookup
Doruk Tan Ozturk <[email protected]>
HID: sony: fix UAF of ghl_poke_timer / ghl_urb at driver unbind
Frank Sorenson <[email protected]>
smb: client: fix OOB read/write from unvalidated DataOffset in coalesce_t2()
Michael Bommarito <[email protected]>
ceph: bound copied dentry name length in NFS export get_name
Jeff Layton <[email protected]>
nfsd: fix nfsd_file leak on inter-server COPY setup failure
Hyunwoo Kim <[email protected]>
apparmor: fix out-of-bounds write when null terminating a label vec
Arnd Bergmann <[email protected]>
mips: unhide uasm_in_compat_space_p() declaration
Jens Axboe <[email protected]>
io_uring/poll: don't loop on HUP with multiple references
Jens Axboe <[email protected]>
io_uring/timeout: don't lose a cancel as io-wq arms a timeout
Jens Axboe <[email protected]>
io_uring/timeout: don't flush with the sequence behind the last flush
Jens Axboe <[email protected]>
io_uring/timeout: don't put a sequence target behind the last flush
Juanlu Herrero <[email protected]>
io_uring/poll: avoid retry wakeup loss when dropping ownership
Josef Bacik <[email protected]>
io_uring: look up the file before queueing to io-wq
Josef Bacik <[email protected]>
io_uring: don't pass restart error codes to userspace
Josef Bacik <[email protected]>
io_uring/sqpoll: let the thread sleep on disabled rings
Josef Bacik <[email protected]>
io_uring/timeout: don't skip over reached sequences
Josef Bacik <[email protected]>
io_uring/poll: drop stale double poll entry on rearm
Josef Bacik <[email protected]>
io_uring/wait: look at all CQ waiters on wake up
Josef Bacik <[email protected]>
io_uring/cancel: let CANCEL_ALL find parked requests
Josef Bacik <[email protected]>
io_uring/cancel: recognize "no timeout" on 32-bit
Josef Bacik <[email protected]>
io_uring/cancel: don't forget that the work was running
Josef Bacik <[email protected]>
io_uring/poll: don't lose a cancel as io-wq arms poll
Josef Bacik <[email protected]>
io_uring/io-wq: let cancel find picked up hashed work
Josef Bacik <[email protected]>
io_uring/io-wq: don't exit with a creation pending
Josef Bacik <[email protected]>
io_uring/io-wq: don't strand work when a worker exits
Josef Bacik <[email protected]>
io_uring: don't flood a cancelling task with task_work
Josef Bacik <[email protected]>
io_uring/io-wq: don't hide a link from cancellations
Josef Bacik <[email protected]>
io_uring/io-wq: don't lose the signal that ends work
Christian Brauner <[email protected]>
io-wq: order the exit bit against worker creation task work
-------------
Diffstat:
CREDITS | 5 + Documentation/arm64/silicon-errata.rst | 2 + Documentation/filesystems/index.rst | 1 - Documentation/filesystems/ntfs.rst | 466 --- Documentation/networking/ip-sysctl.rst | 6 + Documentation/networking/strparser.rst | 2 +- Documentation/virt/kvm/api.rst | 6 + MAINTAINERS | 11 +- Makefile | 31 +- arch/alpha/include/asm/pgtable.h | 33 +- arch/alpha/include/asm/tlbflush.h | 4 +- arch/alpha/lib/Makefile | 1 - arch/alpha/mm/Makefile | 4 +- arch/alpha/mm/tlbflush.c | 96 + arch/arm/mm/flush.c | 2 + arch/arm64/Kconfig | 30 + arch/arm64/include/asm/kvm_host.h | 2 - arch/arm64/kernel/Makefile | 3 + arch/arm64/kernel/cpu_errata.c | 24 +- arch/arm64/kernel/cpufeature.c | 2 +- arch/arm64/kernel/entry.S | 22 +- arch/arm64/kernel/ptrace.c | 50 + arch/arm64/kernel/signal.c | 25 +- arch/arm64/kernel/topology.c | 11 +- arch/arm64/kvm/arch_timer.c | 3 +- arch/arm64/kvm/arm.c | 18 +- arch/arm64/kvm/mmu.c | 25 +- arch/arm64/kvm/vgic/vgic-its.c | 8 + arch/arm64/kvm/vgic/vgic.c | 9 +- arch/arm64/mm/fault.c | 15 +- arch/arm64/net/bpf_jit_comp.c | 2 +- arch/arm64/tools/cpucaps | 2 +- arch/loongarch/kernel/machine_kexec.c | 5 +- arch/loongarch/kernel/module-sections.c | 38 +- arch/loongarch/kernel/setup.c | 1 + arch/loongarch/kernel/smp.c | 129 +- arch/loongarch/mm/hugetlbpage.c | 3 +- arch/loongarch/net/bpf_jit.c | 5 +- arch/mips/Kbuild | 6 - arch/mips/include/asm/uasm.h | 2 - arch/mips/kernel/ftrace.c | 25 +- arch/nios2/include/asm/checksum.h | 2 +- arch/powerpc/include/asm/book3s/64/pgtable.h | 16 + arch/powerpc/include/asm/xive.h | 4 +- arch/powerpc/kernel/iommu.c | 2 +- arch/powerpc/kernel/setup-common.c | 1 - arch/powerpc/kexec/ranges.c | 12 +- arch/powerpc/mm/book3s64/pgtable.c | 13 +- arch/powerpc/platforms/powernv/smp.c | 8 +- arch/powerpc/platforms/pseries/iommu.c | 3 +- arch/powerpc/platforms/pseries/smp.c | 8 +- arch/powerpc/sysdev/xive/common.c | 10 +- arch/riscv/include/asm/asm-prototypes.h | 1 - arch/riscv/include/asm/asm.h | 23 + arch/riscv/include/asm/processor.h | 1 + arch/riscv/include/asm/thread_info.h | 4 - arch/riscv/kernel/asm-offsets.c | 6 + arch/riscv/kernel/entry.S | 79 +- arch/riscv/kernel/probes/kprobes_trampoline.S | 3 + arch/riscv/kernel/traps.c | 30 +- arch/riscv/kvm/vmid.c | 2 +- arch/s390/appldata/appldata_base.c | 117 +- arch/s390/appldata/appldata_mem.c | 2 +- arch/s390/include/asm/appldata.h | 2 +- arch/s390/include/asm/cpu_mf.h | 53 - arch/s390/include/asm/dma.h | 2 +- arch/s390/include/asm/nmi.h | 3 + arch/s390/kernel/cpcmd.c | 2 +- arch/s390/kernel/dis.c | 2 +- arch/s390/kernel/nmi.c | 5 +- arch/s390/kernel/perf_cpum_sf.c | 52 + arch/s390/kernel/process.c | 2 +- arch/s390/kvm/interrupt.c | 24 +- arch/s390/kvm/kvm-s390.c | 7 +- arch/s390/kvm/priv.c | 3 +- arch/s390/lib/spinlock.c | 2 +- arch/s390/mm/fault.c | 15 +- arch/s390/mm/maccess.c | 2 +- arch/s390/pci/pci_sysfs.c | 3 + arch/sparc/kernel/Makefile | 1 - arch/sparc/lib/Makefile | 1 - arch/sparc/mm/Makefile | 1 - arch/sparc/prom/Makefile | 1 - arch/um/kernel/skas/syscall.c | 34 +- arch/x86/events/amd/core.c | 12 +- arch/x86/events/amd/lbr.c | 3 +- arch/x86/events/intel/core.c | 14 +- arch/x86/events/intel/ds.c | 48 +- arch/x86/events/intel/uncore_snbep.c | 5 - arch/x86/events/perf_event.h | 12 +- arch/x86/kernel/alternative.c | 10 - arch/x86/kernel/cpu/amd.c | 11 + arch/x86/kernel/cpu/mce/severity.c | 12 +- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 13 +- arch/x86/kernel/ftrace.c | 3 +- arch/x86/kvm/mmu/mmu.c | 4 +- arch/x86/kvm/svm/nested.c | 34 +- arch/x86/kvm/svm/sev.c | 33 +- arch/x86/kvm/svm/svm.c | 24 +- arch/x86/kvm/vmx/nested.c | 9 +- arch/x86/kvm/x86.c | 5 +- arch/x86/kvm/x86.h | 5 +- arch/x86/net/bpf_jit_comp.c | 4 +- arch/x86/pci/fixup.c | 89 + block/bfq-cgroup.c | 15 +- block/bfq-iosched.c | 8 +- block/bfq-iosched.h | 2 +- block/blk-cgroup.c | 18 +- block/blk-cgroup.h | 2 + block/blk-core.c | 1 + block/blk-iocost.c | 25 +- block/blk-iolatency.c | 19 +- block/blk-mq.c | 28 +- block/blk-rq-qos.c | 2 + block/blk-rq-qos.h | 18 +- block/blk-throttle.c | 15 +- block/blk-wbt.c | 2 + block/ioprio.c | 7 +- crypto/Kconfig | 1 + crypto/af_alg.c | 2 + crypto/algif_skcipher.c | 8 +- crypto/asymmetric_keys/restrict.c | 8 +- crypto/drbg.c | 11 +- crypto/jitterentropy-kcapi.c | 195 +- crypto/jitterentropy.c | 143 +- crypto/jitterentropy.h | 10 +- drivers/acpi/acpi_tad.c | 188 +- drivers/acpi/battery.c | 8 +- drivers/acpi/bus.c | 54 +- drivers/acpi/processor_idle.c | 4 +- drivers/android/binder.c | 3 +- drivers/ata/libata-core.c | 5 +- drivers/ata/libata-eh.c | 6 + drivers/ata/libata-scsi.c | 93 + drivers/ata/libata.h | 2 + drivers/ata/sata_dwc_460ex.c | 9 +- drivers/base/core.c | 38 +- drivers/block/drbd/drbd_receiver.c | 3 + drivers/block/loop.c | 40 +- drivers/block/nbd.c | 1 + drivers/block/null_blk/main.c | 16 +- drivers/block/ublk_drv.c | 4 + drivers/block/zram/zram_drv.c | 21 +- drivers/bluetooth/btintel.c | 15 +- drivers/bluetooth/btqcomsmd.c | 10 +- drivers/bluetooth/btusb.c | 4 + drivers/bus/mhi/ep/ring.c | 12 +- drivers/bus/mhi/host/pci_generic.c | 20 +- drivers/char/hw_random/core.c | 153 +- drivers/char/hw_random/stm32-rng.c | 12 +- drivers/clk/sunxi-ng/ccu-sun50i-h616.c | 64 +- drivers/clocksource/samsung_pwm_timer.c | 22 +- drivers/cpufreq/amd-pstate.c | 7 +- drivers/crypto/hisilicon/qm.c | 38 +- drivers/crypto/keembay/keembay-ocs-aes-core.c | 4 +- drivers/crypto/qat/qat_common/adf_init.c | 14 + drivers/crypto/stm32/stm32-cryp.c | 8 +- .../crypto/virtio/virtio_crypto_akcipher_algs.c | 91 +- .../crypto/virtio/virtio_crypto_skcipher_algs.c | 13 +- drivers/cxl/core/hdm.c | 48 +- drivers/cxl/core/mbox.c | 15 +- drivers/cxl/core/port.c | 23 +- drivers/cxl/core/region.c | 29 +- drivers/cxl/cxl.h | 3 +- drivers/dma-buf/dma-buf.c | 15 + drivers/dma-buf/dma-heap.c | 80 +- drivers/dma-buf/udmabuf.c | 11 +- drivers/dma/dmaengine.c | 30 + drivers/dma/dw-edma/dw-edma-core.c | 90 +- drivers/dma/dw-edma/dw-edma-pcie.c | 3 + drivers/dma/dw-edma/dw-edma-v0-core.c | 17 + drivers/dma/idxd/init.c | 36 +- drivers/dma/ti/k3-udma-glue.c | 15 +- drivers/dma/xilinx/xilinx_dma.c | 14 +- drivers/edac/amd64_edac.c | 2 +- drivers/edac/igen6_edac.c | 6 + drivers/firewire/core-topology.c | 40 +- drivers/firmware/arm_ffa/driver.c | 4 +- drivers/firmware/arm_scmi/bus.c | 428 ++- drivers/firmware/arm_scmi/common.h | 66 +- drivers/firmware/arm_scmi/driver.c | 699 ++--- drivers/firmware/arm_scmi/mailbox.c | 32 +- drivers/firmware/arm_scmi/optee.c | 6 +- drivers/firmware/arm_scmi/smc.c | 18 +- drivers/firmware/arm_scmi/virtio.c | 4 +- drivers/firmware/efi/mokvar-table.c | 42 +- drivers/gpio/gpio-exar.c | 2 +- drivers/gpio/gpio-mvebu.c | 6 +- drivers/gpio/gpio-mxc.c | 161 +- drivers/gpio/gpio-pca953x.c | 18 +- drivers/gpio/gpio-xilinx.c | 9 +- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c | 13 +- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 27 +- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 3 +- drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 30 +- drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 79 +- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 42 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 75 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 108 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 55 +- drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 2 + drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 - drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 14 +- drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 17 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 54 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 18 +- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 46 +- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 33 +- drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 137 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 39 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 150 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 21 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 20 +- drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 9 + drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 25 +- drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c | 24 +- drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 20 +- drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 24 +- drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c | 1 + drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c | 2 + drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c | 1 + drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c | 1 + drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 8 +- drivers/gpu/drm/amd/amdgpu/psp_v12_0.c | 8 +- drivers/gpu/drm/amd/amdgpu/psp_v13_0.c | 14 +- drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.c | 14 +- drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 8 +- drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 25 +- drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 23 +- drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c | 2 + drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c | 4 + drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c | 3 + drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c | 58 +- drivers/gpu/drm/amd/amdgpu/vi.c | 21 + drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 13 +- drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 17 + drivers/gpu/drm/amd/amdkfd/kfd_device.c | 5 + .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 14 + .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 2 + drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 56 +- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 4 +- .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 24 +- drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c | 19 +- drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 11 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 43 +- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 2 +- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 8 +- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c | 10 +- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h | 8 +- .../drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 15 +- .../amd/display/dc/clk_mgr/dce110/dce110_clk_mgr.c | 2 +- drivers/gpu/drm/amd/display/dc/core/dc.c | 19 +- drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 14 +- drivers/gpu/drm/amd/display/dc/core/dc_link_dpcd.c | 3 +- drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 2 +- drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c | 40 +- drivers/gpu/drm/amd/display/dc/dc_dmub_srv.h | 3 + drivers/gpu/drm/amd/display/dc/dc_link.h | 3 + drivers/gpu/drm/amd/display/dc/dc_types.h | 2 +- drivers/gpu/drm/amd/display/dc/dce/Makefile | 2 +- drivers/gpu/drm/amd/display/dc/dce/dmub_abm.c | 282 +- drivers/gpu/drm/amd/display/dc/dce/dmub_abm_lcd.c | 286 ++ drivers/gpu/drm/amd/display/dc/dce/dmub_abm_lcd.h | 46 + .../amd/display/dc/dce110/dce110_hw_sequencer.c | 5 +- .../drm/amd/display/dc/dce112/dce112_resource.c | 5 +- .../gpu/drm/amd/display/dc/dce60/dce60_resource.c | 1 - .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 4 +- .../gpu/drm/amd/display/dc/dcn20/dcn20_hubbub.c | 3 +- drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c | 3 +- drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 17 +- .../gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 12 +- .../drm/amd/display/dc/dcn201/dcn201_resource.c | 4 +- drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hwseq.c | 24 +- .../gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 3 +- drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c | 4 +- .../gpu/drm/amd/display/dc/dcn314/dcn314_optc.c | 7 + drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c | 7 + .../gpu/drm/amd/display/dc/dcn32/dcn32_resource.c | 7 +- .../drm/amd/display/dc/dcn321/dcn321_resource.c | 2 +- .../gpu/drm/amd/display/dc/dml/dcn302/dcn302_fpu.c | 10 + .../gpu/drm/amd/display/dc/dml/dcn303/dcn303_fpu.c | 10 + .../gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c | 10 + .../gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c | 10 + drivers/gpu/drm/amd/display/dc/inc/hw/abm.h | 4 + .../gpu/drm/amd/display/dc/link/link_hwss_dio.c | 5 +- .../gpu/drm/amd/display/dc/link/link_hwss_hpo_dp.c | 3 +- drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h | 18 + drivers/gpu/drm/amd/pm/amdgpu_pm.c | 2 + drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 39 +- .../gpu/drm/amd/pm/powerplay/hwmgr/ppatomctrl.c | 10 +- .../gpu/drm/amd/pm/powerplay/hwmgr/ppatomfwctrl.c | 11 +- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 7 +- drivers/gpu/drm/aspeed/aspeed_gfx_drv.c | 5 +- drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 22 +- drivers/gpu/drm/display/drm_dp_helper.c | 4 +- drivers/gpu/drm/drm_fb_helper.c | 8 +- drivers/gpu/drm/etnaviv/etnaviv_sched.c | 13 +- drivers/gpu/drm/gud/gud_pipe.c | 1 + drivers/gpu/drm/i915/display/icl_dsi.c | 4 +- drivers/gpu/drm/i915/display/intel_bios.c | 36 +- drivers/gpu/drm/i915/display/intel_dmc.c | 21 +- drivers/gpu/drm/i915/display/intel_dp.c | 8 +- drivers/gpu/drm/i915/display/intel_hdcp.c | 14 +- drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +- .../gpu/drm/i915/gt/intel_execlists_submission.c | 34 +- drivers/gpu/drm/i915/gt/intel_rps.c | 3 +- drivers/gpu/drm/lima/lima_sched.c | 13 +- drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 3 +- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 2 + drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 4 +- .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c | 33 +- .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 35 +- .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c | 11 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 4 +- drivers/gpu/drm/msm/msm_gem_submit.c | 3 +- drivers/gpu/drm/msm/msm_gpu.c | 31 +- drivers/gpu/drm/msm/msm_ringbuffer.c | 22 +- drivers/gpu/drm/msm/msm_ringbuffer.h | 1 + drivers/gpu/drm/nouveau/include/nvkm/core/client.h | 1 + drivers/gpu/drm/nouveau/nouveau_chan.c | 9 +- drivers/gpu/drm/nouveau/nouveau_gem.c | 11 +- drivers/gpu/drm/nouveau/nvkm/core/client.c | 1 + drivers/gpu/drm/nouveau/nvkm/core/object.c | 26 +- drivers/gpu/drm/panfrost/panfrost_job.c | 16 +- drivers/gpu/drm/panfrost/panfrost_mmu.c | 13 +- drivers/gpu/drm/radeon/radeon_bios.c | 6 +- drivers/gpu/drm/radeon/radeon_fb.c | 9 +- drivers/gpu/drm/radeon/radeon_gem.c | 4 + drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 4 + drivers/gpu/drm/scheduler/sched_main.c | 33 +- drivers/gpu/drm/tegra/gr2d.c | 8 +- drivers/gpu/drm/tegra/gr3d.c | 8 +- drivers/gpu/drm/tiny/simpledrm.c | 10 +- drivers/gpu/drm/v3d/v3d_sched.c | 106 +- drivers/gpu/drm/vc4/vc4_bo.c | 13 +- drivers/gpu/drm/vc4/vc4_drv.c | 5 +- drivers/gpu/drm/vc4/vc4_hvs.c | 2 +- drivers/gpu/drm/vc4/vc4_v3d.c | 10 +- drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 6 +- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 22 +- drivers/gpu/drm/xlnx/zynqmp_dpsub.c | 2 +- drivers/hid/hid-alps.c | 21 +- drivers/hid/hid-core.c | 38 +- drivers/hid/hid-logitech-hidpp.c | 27 +- drivers/hid/hid-mcp2221.c | 17 +- drivers/hid/hid-nintendo.c | 46 +- drivers/hid/hid-sony.c | 36 +- drivers/hid/hid-steam.c | 243 +- drivers/hid/i2c-hid/i2c-hid-core.c | 7 +- drivers/hid/intel-ish-hid/ishtp/bus.c | 2 + drivers/hid/intel-ish-hid/ishtp/client.c | 4 +- drivers/hid/uhid.c | 8 +- drivers/hid/usbhid/hid-core.c | 11 +- drivers/hv/channel_mgmt.c | 12 +- drivers/hv/connection.c | 1 - drivers/hv/vmbus_drv.c | 16 +- drivers/hwmon/drivetemp.c | 10 +- drivers/hwmon/lm90.c | 26 +- drivers/hwmon/pmbus/pmbus_core.c | 60 +- drivers/hwmon/pwm-fan.c | 13 +- drivers/hwmon/sht3x.c | 9 +- .../hwtracing/coresight/coresight-etm3x-sysfs.c | 15 +- drivers/hwtracing/coresight/coresight-etm4x-core.c | 83 +- drivers/hwtracing/coresight/coresight-platform.c | 48 +- drivers/hwtracing/coresight/coresight-syscfg.c | 2 + drivers/i2c/busses/i2c-at91-master.c | 8 +- drivers/i2c/busses/i2c-mxs.c | 5 +- drivers/i2c/busses/i2c-qcom-cci.c | 4 +- drivers/i2c/busses/i2c-wmt.c | 2 +- drivers/i2c/i2c-core-base.c | 14 + drivers/i3c/master.c | 58 +- drivers/i3c/master/mipi-i3c-hci/core.c | 2 + drivers/i3c/master/mipi-i3c-hci/dma.c | 27 +- drivers/i3c/master/mipi-i3c-hci/hci.h | 1 + drivers/iio/accel/kxcjk-1013.c | 2 +- drivers/iio/accel/sca3000.c | 2 +- drivers/iio/accel/st_accel_core.c | 10 +- drivers/iio/adc/ad_sigma_delta.c | 26 +- drivers/iio/adc/aspeed_adc.c | 13 +- drivers/iio/adc/axp288_adc.c | 8 + drivers/iio/adc/max1363.c | 8 + drivers/iio/adc/stm32-adc.c | 13 +- drivers/iio/adc/sun4i-gpadc-iio.c | 10 +- drivers/iio/adc/xilinx-xadc-core.c | 9 +- drivers/iio/cdc/ad7150.c | 8 +- drivers/iio/common/st_sensors/st_sensors_core.c | 72 +- drivers/iio/common/st_sensors/st_sensors_trigger.c | 20 +- drivers/iio/frequency/admv1013.c | 2 +- drivers/iio/gyro/adis16136.c | 2 +- drivers/iio/imu/adis16400.c | 2 +- drivers/iio/imu/adis16480.c | 4 +- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 18 +- drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_core.c | 65 +- drivers/iio/industrialio-buffer.c | 5 +- drivers/iio/industrialio-trigger.c | 2 + drivers/iio/light/gp2ap020a00f.c | 2 + drivers/iio/light/ltrf216a.c | 13 +- drivers/iio/pressure/bmp280-core.c | 2 +- drivers/iio/pressure/dps310.c | 2 +- drivers/iio/proximity/isl29501.c | 2 +- drivers/iio/proximity/pulsedlight-lidar-lite-v2.c | 4 +- drivers/iio/proximity/sx9324.c | 2 +- drivers/iio/proximity/vcnl3020.c | 24 +- drivers/infiniband/core/counters.c | 9 +- drivers/infiniband/hw/bnxt_re/ib_verbs.c | 2 + drivers/infiniband/hw/cxgb4/mem.c | 46 +- drivers/infiniband/hw/erdma/erdma_cm.c | 6 +- drivers/infiniband/hw/erdma/erdma_eq.c | 3 +- drivers/infiniband/hw/erdma/erdma_verbs.c | 23 +- drivers/infiniband/hw/erdma/erdma_verbs.h | 15 + drivers/infiniband/hw/hns/hns_roce_cq.c | 6 +- drivers/infiniband/hw/hns/hns_roce_device.h | 1 + drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 130 +- drivers/infiniband/hw/hns/hns_roce_main.c | 5 +- drivers/infiniband/hw/hns/hns_roce_mr.c | 6 +- drivers/infiniband/hw/hns/hns_roce_srq.c | 2 +- drivers/infiniband/hw/irdma/hw.c | 7 +- drivers/infiniband/hw/irdma/main.h | 3 +- drivers/infiniband/hw/irdma/utils.c | 12 +- drivers/infiniband/hw/irdma/verbs.c | 21 +- drivers/infiniband/hw/mlx5/cq.c | 11 +- drivers/infiniband/hw/mlx5/main.c | 55 +- drivers/infiniband/hw/mlx5/mlx5_ib.h | 35 +- drivers/infiniband/hw/mlx5/mr.c | 385 ++- drivers/infiniband/hw/mlx5/odp.c | 59 +- drivers/infiniband/hw/mlx5/umr.c | 87 +- drivers/infiniband/sw/rdmavt/vt.c | 4 +- drivers/infiniband/sw/rxe/rxe_qp.c | 9 + drivers/infiniband/sw/rxe/rxe_srq.c | 7 +- drivers/infiniband/sw/siw/siw_cm.c | 48 +- drivers/infiniband/sw/siw/siw_qp_tx.c | 2 + drivers/input/keyboard/atkbd.c | 8 + drivers/input/keyboard/lkkbd.c | 2 + drivers/input/mouse/alps.c | 2 + drivers/input/mouse/synaptics.c | 7 +- drivers/input/serio/i8042-acpipnpio.h | 9 + drivers/input/touchscreen/s6sy761.c | 14 +- drivers/interconnect/core.c | 16 +- drivers/iommu/amd/iommu.c | 43 +- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 46 +- drivers/iommu/intel/dmar.c | 22 +- drivers/iommu/intel/iommu.c | 28 +- drivers/iommu/intel/iommu.h | 6 +- drivers/iommu/intel/pasid.c | 22 +- drivers/iommu/msm_iommu.c | 9 +- drivers/leds/leds-an30259a.c | 14 +- drivers/mailbox/arm_mhu.c | 1 + drivers/mailbox/arm_mhu_db.c | 1 - drivers/mailbox/hi3660-mailbox.c | 1 + drivers/mailbox/hi6220-mailbox.c | 1 + drivers/mailbox/imx-mailbox.c | 3 +- drivers/mailbox/mailbox-mpfs.c | 1 + drivers/mailbox/mailbox.c | 1 + drivers/mailbox/mtk-adsp-mailbox.c | 3 +- drivers/mailbox/mtk-cmdq-mailbox.c | 2 +- drivers/mailbox/omap-mailbox.c | 2 +- drivers/mailbox/platform_mhu.c | 1 + drivers/mailbox/rockchip-mailbox.c | 2 +- drivers/mailbox/sprd-mailbox.c | 2 +- drivers/mailbox/stm32-ipcc.c | 1 + drivers/mailbox/tegra-hsp.c | 1 - drivers/mailbox/zynqmp-ipi-mailbox.c | 137 +- drivers/md/dm-bio-prison-v1.c | 6 +- drivers/md/dm-bufio.c | 30 +- drivers/md/dm-cache-metadata.c | 7 +- drivers/md/dm-cache-target.c | 129 +- drivers/md/dm-crypt.c | 17 +- drivers/md/dm-ebs-target.c | 5 +- drivers/md/dm-era-target.c | 58 +- drivers/md/dm-exception-store.h | 44 +- drivers/md/dm-integrity.c | 5 +- drivers/md/dm-io.c | 24 +- drivers/md/dm-ioctl.c | 99 +- drivers/md/dm-kcopyd.c | 20 +- drivers/md/dm-log.c | 24 +- drivers/md/dm-mpath.c | 33 +- drivers/md/dm-path-selector.h | 27 +- drivers/md/dm-ps-queue-length.c | 4 +- drivers/md/dm-ps-round-robin.c | 13 +- drivers/md/dm-ps-service-time.c | 8 +- drivers/md/dm-raid.c | 12 +- drivers/md/dm-raid1.c | 46 +- drivers/md/dm-region-hash.c | 6 +- drivers/md/dm-snap-persistent.c | 8 +- drivers/md/dm-snap-transient.c | 8 +- drivers/md/dm-snap.c | 27 +- drivers/md/dm-table.c | 2 +- drivers/md/dm-thin-metadata.c | 20 +- drivers/md/dm-thin.c | 24 +- drivers/md/dm-uevent.c | 2 +- drivers/md/dm-verity-fec.c | 4 +- drivers/md/dm.c | 12 +- drivers/md/dm.h | 12 +- drivers/md/md-cluster.c | 11 +- drivers/md/md.c | 3 +- drivers/md/persistent-data/dm-array.c | 37 +- drivers/md/persistent-data/dm-block-manager.c | 6 +- drivers/md/persistent-data/dm-btree.c | 6 +- drivers/md/raid1.c | 12 +- drivers/md/raid10.c | 72 +- drivers/md/raid5.c | 12 +- drivers/media/common/videobuf2/videobuf2-dma-sg.c | 1 + drivers/media/pci/ivtv/ivtvfb.c | 4 +- .../media/platform/mediatek/mdp3/mtk-mdp3-core.c | 5 + .../mediatek/vcodec/vdec/vdec_h264_req_if.c | 9 +- .../platform/mediatek/vcodec/venc/venc_h264_if.c | 5 +- drivers/media/platform/verisilicon/hantro.h | 2 + drivers/media/platform/verisilicon/hantro_drv.c | 89 +- drivers/media/platform/verisilicon/imx8m_vpu_hw.c | 8 + drivers/media/test-drivers/vivid/vivid-core.c | 4 +- drivers/media/v4l2-core/v4l2-mem2mem.c | 23 + drivers/memstick/core/memstick.c | 8 +- drivers/memstick/host/rtsx_usb_ms.c | 31 +- drivers/mfd/sm501.c | 18 +- drivers/misc/habanalabs/common/habanalabs.h | 5 - drivers/misc/habanalabs/common/memory.c | 236 +- drivers/misc/habanalabs/gaudi/gaudi.c | 19 + drivers/misc/habanalabs/gaudi2/gaudi2.c | 7 + drivers/misc/sgi-gru/grufault.c | 101 +- drivers/misc/sgi-gru/gruprocfs.c | 1 - drivers/misc/sgi-gru/grutables.h | 1 - drivers/mmc/host/cavium-octeon.c | 5 +- drivers/mmc/host/cavium-thunderx.c | 5 +- drivers/mmc/host/mtk-sd.c | 1 + drivers/mmc/host/sdhci-sprd.c | 4 + drivers/mmc/host/via-sdmmc.c | 4 + drivers/mtd/devices/block2mtd.c | 2 +- drivers/mtd/maps/vmu-flash.c | 12 +- drivers/mtd/mtdcore.c | 124 +- drivers/mtd/mtdcore.h | 1 + drivers/mtd/mtdpart.c | 14 +- drivers/mtd/nand/raw/cadence-nand-controller.c | 6 +- drivers/mtd/nand/raw/vf610_nfc.c | 85 +- drivers/mtd/nand/spi/core.c | 37 +- drivers/net/amt.c | 51 +- drivers/net/bonding/bond_main.c | 70 +- drivers/net/can/dev/skb.c | 2 + drivers/net/can/usb/gs_usb.c | 159 +- drivers/net/dsa/b53/b53_common.c | 8 +- drivers/net/dsa/microchip/ksz_common.h | 2 +- drivers/net/ethernet/amazon/ena/ena_com.c | 25 +- drivers/net/ethernet/amazon/ena/ena_com.h | 14 - drivers/net/ethernet/amazon/ena/ena_eth_com.c | 37 +- drivers/net/ethernet/amazon/ena/ena_netdev.c | 3 + drivers/net/ethernet/amazon/ena/ena_regs_defs.h | 1 + drivers/net/ethernet/broadcom/bcmsysport.c | 4 +- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 70 +- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 2 +- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 15 +- drivers/net/ethernet/brocade/bna/bnad.c | 16 +- drivers/net/ethernet/cavium/liquidio/lio_main.c | 27 - .../net/ethernet/cavium/liquidio/octeon_device.h | 3 - .../net/ethernet/cavium/liquidio/octeon_mailbox.c | 33 +- .../chelsio/inline_crypto/ch_ktls/chcr_ktls.c | 4 +- drivers/net/ethernet/freescale/enetc/enetc.c | 3 + .../net/ethernet/freescale/enetc/enetc_ethtool.c | 10 +- drivers/net/ethernet/ibm/ibmveth.c | 79 +- drivers/net/ethernet/ibm/ibmveth.h | 1 - drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 31 +- drivers/net/ethernet/intel/ice/ice.h | 2 + drivers/net/ethernet/intel/ice/ice_eswitch.c | 2 +- drivers/net/ethernet/intel/ice/ice_lib.c | 18 +- drivers/net/ethernet/intel/ice/ice_main.c | 66 +- drivers/net/ethernet/intel/ice/ice_ptp.c | 70 +- drivers/net/ethernet/intel/ice/ice_ptp.h | 8 + drivers/net/ethernet/intel/ice/ice_txrx.c | 6 +- drivers/net/ethernet/intel/ice/ice_xsk.c | 3 +- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 3 +- drivers/net/ethernet/marvell/octeontx2/af/cgx.c | 12 + drivers/net/ethernet/marvell/octeontx2/af/cgx.h | 1 + drivers/net/ethernet/marvell/octeontx2/af/mcs.c | 4 +- drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 2 + .../net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 79 + .../net/ethernet/marvell/octeontx2/af/rvu_nix.c | 22 +- .../net/ethernet/marvell/octeontx2/af/rvu_npc.c | 69 +- .../net/ethernet/marvell/octeontx2/nic/otx2_vf.c | 20 +- drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 +- drivers/net/ethernet/mellanox/mlx4/srq.c | 14 +- drivers/net/ethernet/mellanox/mlx5/core/cq.c | 23 +- drivers/net/ethernet/mellanox/mlx5/core/en.h | 12 + .../ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c | 10 +- .../net/ethernet/mellanox/mlx5/core/en/tc_priv.h | 1 + drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 6 +- .../mellanox/mlx5/core/en_accel/ipsec_rxtx.c | 16 +- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 38 +- drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 6 +- drivers/net/ethernet/mellanox/mlx5/core/en_stats.c | 9 +- drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 4 +- drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 13 +- drivers/net/ethernet/mellanox/mlx5/core/eswitch.h | 4 +- .../ethernet/mellanox/mlx5/core/eswitch_offloads.c | 30 +- .../net/ethernet/mellanox/mlx5/core/fpga/conn.c | 17 +- .../net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 3 +- drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c | 12 +- .../net/ethernet/mellanox/mlx5/core/mlx5_core.h | 3 +- drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c | 3 +- drivers/net/ethernet/mellanox/mlx5/core/port.c | 4 +- .../ethernet/mellanox/mlx5/core/steering/dr_send.c | 28 +- drivers/net/ethernet/mellanox/mlx5/core/vport.c | 78 +- .../ethernet/microchip/lan966x/lan966x_ethtool.c | 18 +- .../net/ethernet/microchip/lan966x/lan966x_main.c | 2 - .../net/ethernet/microchip/lan966x/lan966x_main.h | 4 +- .../net/ethernet/microchip/sparx5/sparx5_main.c | 1 + .../net/ethernet/microchip/sparx5/sparx5_main.h | 1 + .../net/ethernet/microchip/sparx5/sparx5_netdev.c | 1 + drivers/net/ethernet/microsoft/mana/mana_en.c | 13 +- drivers/net/ethernet/mscc/ocelot_stats.c | 2 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | 467 +-- drivers/net/ethernet/renesas/ravb_main.c | 8 +- drivers/net/ethernet/renesas/ravb_ptp.c | 37 +- drivers/net/ethernet/sfc/ef100_netdev.c | 6 +- drivers/net/ethernet/sfc/ef100_nic.c | 47 +- drivers/net/ethernet/stmicro/stmmac/common.h | 56 +- drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 15 +- drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c | 15 +- drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c | 15 +- drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | 15 +- drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 + .../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 125 +- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 191 +- drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c | 8 +- drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c | 18 +- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 4 +- drivers/net/gtp.c | 18 +- drivers/net/hyperv/netvsc.c | 20 +- drivers/net/ieee802154/mac802154_hwsim.c | 9 +- drivers/net/phy/phy_device.c | 19 +- drivers/net/tap.c | 55 +- drivers/net/team/team.c | 161 +- drivers/net/team/team_mode_loadbalance.c | 4 +- drivers/net/thunderbolt.c | 12 + drivers/net/usb/ax88179_178a.c | 6 +- drivers/net/usb/qmi_wwan.c | 1 + drivers/net/vxlan/vxlan_core.c | 44 +- drivers/net/vxlan/vxlan_private.h | 4 +- drivers/net/wireguard/noise.c | 7 +- drivers/net/wireguard/queueing.h | 2 + drivers/net/wireless/ath/ath11k/dp_rx.c | 10 +- drivers/net/wireless/ath/ath11k/mac.c | 1 + drivers/net/wireless/ath/ath11k/mhi.c | 6 +- drivers/net/wireless/ath/ath11k/pci.c | 7 + drivers/net/wireless/ath/ath11k/wmi.c | 29 +- drivers/net/wireless/ath/wcn36xx/dxe.c | 2 +- .../wireless/broadcom/brcm80211/brcmfmac/core.c | 27 +- .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 4 + drivers/net/wireless/intel/iwlegacy/3945-mac.c | 1 + drivers/net/wireless/intel/iwlwifi/dvm/main.c | 4 +- drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c | 28 +- drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 3 + drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 18 +- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 47 +- drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 9 +- drivers/net/wireless/intersil/p54/fwio.c | 42 +- drivers/net/wireless/marvell/libertas/tx.c | 7 - .../net/wireless/mediatek/mt76/mt76_connac_mcu.c | 4 +- .../net/wireless/mediatek/mt76/mt7915/debugfs.c | 5 + drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 33 +- drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h | 1 + drivers/net/wireless/mediatek/mt76/mt7915/init.c | 9 +- drivers/net/wireless/mediatek/mt76/mt7915/main.c | 17 +- drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 15 +- drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h | 3 +- drivers/net/wireless/mediatek/mt76/mt7921/main.c | 8 +- drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h | 2 + drivers/net/wireless/mediatek/mt76/tx.c | 1 - drivers/net/wireless/microchip/wilc1000/wlan_cfg.c | 37 +- drivers/net/wireless/microchip/wilc1000/wlan_cfg.h | 5 +- .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 19 +- drivers/net/wireless/realtek/rtw88/debug.c | 303 +- drivers/net/wireless/realtek/rtw88/debug.h | 2 + drivers/net/wireless/realtek/rtw88/main.c | 20 +- drivers/net/wireless/realtek/rtw88/main.h | 3 +- drivers/net/wireless/realtek/rtw89/core.c | 8 +- drivers/net/wireless/realtek/rtw89/mac80211.c | 11 +- drivers/net/wireless/realtek/rtw89/pci.c | 7 +- drivers/net/wireless/silabs/wfx/hif_tx.c | 4 +- drivers/net/wireless/st/cw1200/bh.c | 8 +- drivers/net/wireless/st/cw1200/txrx.c | 14 + drivers/net/wireless/ti/wl12xx/main.c | 6 +- drivers/net/wireless/ti/wl18xx/main.c | 2 +- drivers/net/wireless/ti/wlcore/main.c | 10 +- drivers/net/wireless/ti/wlcore/wlcore.h | 2 +- drivers/net/xen-netfront.c | 16 +- drivers/ntb/ntb_transport.c | 18 +- drivers/nvdimm/nd_virtio.c | 32 +- drivers/nvdimm/virtio_pmem.h | 2 + drivers/nvme/host/apple.c | 38 +- drivers/nvme/host/core.c | 3 + drivers/nvme/host/fabrics.c | 8 +- drivers/nvme/host/fc.c | 7 +- drivers/nvme/host/multipath.c | 5 +- drivers/nvme/host/pci.c | 18 +- drivers/nvme/host/rdma.c | 8 +- drivers/nvme/host/tcp.c | 33 +- drivers/nvme/target/admin-cmd.c | 31 +- drivers/nvme/target/auth.c | 20 +- drivers/nvme/target/configfs.c | 9 +- drivers/nvme/target/core.c | 94 +- drivers/nvme/target/discovery.c | 37 +- drivers/nvme/target/fabrics-cmd-auth.c | 100 +- drivers/nvme/target/fabrics-cmd.c | 56 +- drivers/nvme/target/nvmet.h | 23 +- drivers/nvme/target/rdma.c | 1 + drivers/nvme/target/tcp.c | 8 + drivers/of/irq.c | 14 +- drivers/of/overlay.c | 17 +- drivers/of/unittest.c | 7 +- drivers/opp/core.c | 6 +- drivers/pci/controller/dwc/pcie-designware-ep.c | 20 + drivers/pci/endpoint/functions/pci-epf-ntb.c | 5 + drivers/pci/endpoint/functions/pci-epf-test.c | 16 +- drivers/pci/endpoint/functions/pci-epf-vntb.c | 5 + drivers/pci/hotplug/pnv_php.c | 2 +- drivers/pci/hotplug/rpaphp_slot.c | 2 +- drivers/pci/pci-driver.c | 187 +- drivers/pci/pci-sysfs.c | 125 +- drivers/pci/pci.c | 20 +- drivers/pci/pci.h | 41 +- drivers/pci/rebar.c | 19 +- drivers/pci/search.c | 4 +- drivers/pci/setup-bus.c | 56 +- drivers/pci/slot.c | 46 +- drivers/perf/riscv_pmu_legacy.c | 5 +- drivers/perf/riscv_pmu_sbi.c | 103 +- drivers/phy/qualcomm/phy-qcom-qusb2.c | 16 +- drivers/pinctrl/core.c | 3 + drivers/pinctrl/core.h | 1 + drivers/pinctrl/freescale/pinctrl-scu.c | 3 +- drivers/pinctrl/mediatek/pinctrl-moore.c | 6 +- drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 14 +- drivers/pinctrl/mediatek/pinctrl-paris.c | 7 +- drivers/pinctrl/pinctrl-amd.c | 9 + drivers/pinctrl/pinmux.c | 175 +- drivers/pinctrl/sunxi/pinctrl-sunxi.c | 88 +- drivers/pinctrl/sunxi/pinctrl-sunxi.h | 7 + drivers/platform/x86/amd/pmc.c | 26 +- drivers/platform/x86/asus-wmi.c | 6 +- drivers/platform/x86/dell/dell-laptop.c | 28 +- drivers/platform/x86/dell/dell-smbios-base.c | 25 + drivers/platform/x86/dell/dell-smbios.h | 5 + drivers/platform/x86/dell/dell-wmi-base.c | 2 +- drivers/platform/x86/huawei-wmi.c | 4 +- drivers/platform/x86/intel/int1092/intel_sar.c | 39 +- drivers/platform/x86/lg-laptop.c | 26 +- drivers/platform/x86/system76_acpi.c | 4 +- drivers/platform/x86/thinkpad_acpi.c | 4 +- drivers/platform/x86/toshiba_acpi.c | 4 +- drivers/platform/x86/x86-android-tablets.c | 6 +- drivers/power/supply/charger-manager.c | 60 +- drivers/power/supply/ds2780_battery.c | 2 +- drivers/power/supply/lp8788-charger.c | 29 +- drivers/power/supply/max17040_battery.c | 37 +- drivers/power/supply/rt9455_charger.c | 26 +- drivers/ptp/ptp_ocp.c | 3 +- drivers/ptp/ptp_private.h | 1 + drivers/ptp/ptp_sysfs.c | 2 +- drivers/pwm/pwm-samsung.c | 22 +- drivers/regulator/ltc3676.c | 15 +- drivers/remoteproc/qcom_wcnss.c | 23 +- drivers/rtc/dev.c | 2 +- drivers/rtc/rtc-mpfs.c | 6 +- drivers/rtc/rtc-rzn1.c | 16 +- drivers/rtc/rtc-spear.c | 11 +- drivers/s390/block/dasd_diag.c | 2 +- drivers/s390/block/dasd_eckd.c | 15 +- drivers/s390/block/dasd_fba.c | 2 +- drivers/s390/block/dcssblk.c | 2 +- drivers/s390/char/con3215.c | 2 +- drivers/s390/char/monwriter.c | 2 +- drivers/s390/cio/vfio_ccw_cp.c | 13 + drivers/s390/cio/vfio_ccw_cp.h | 8 + drivers/s390/crypto/pkey_api.c | 120 +- drivers/s390/crypto/vfio_ap_ops.c | 142 +- drivers/s390/crypto/zcrypt_api.c | 3 + drivers/s390/crypto/zcrypt_ccamisc.c | 64 +- drivers/s390/crypto/zcrypt_ccamisc.h | 6 +- drivers/s390/net/ctcm_mpc.c | 13 +- drivers/s390/net/ism.h | 2 + drivers/s390/net/ism_drv.c | 45 +- drivers/s390/net/netiucv.c | 2 +- drivers/s390/virtio/virtio_ccw.c | 4 - drivers/scsi/ch.c | 30 +- drivers/scsi/hisi_sas/hisi_sas.h | 4 +- drivers/scsi/hisi_sas/hisi_sas_main.c | 48 +- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 279 +- drivers/scsi/hosts.c | 2 + drivers/scsi/imm.c | 1 + drivers/scsi/iscsi_tcp.c | 1 + drivers/scsi/libiscsi.c | 14 +- drivers/scsi/libsas/sas_expander.c | 14 +- drivers/scsi/lpfc/lpfc_init.c | 2 +- drivers/scsi/mpi3mr/mpi3mr.h | 11 +- drivers/scsi/mpi3mr/mpi3mr_app.c | 11 +- drivers/scsi/mpi3mr/mpi3mr_fw.c | 148 +- drivers/scsi/qedi/qedi_main.c | 3 +- drivers/scsi/qla2xxx/qla_bsg.c | 47 +- drivers/scsi/qla2xxx/qla_init.c | 17 + drivers/scsi/qla2xxx/qla_iocb.c | 12 +- drivers/scsi/qla2xxx/qla_isr.c | 25 +- drivers/scsi/qla2xxx/qla_mbx.c | 6 +- drivers/scsi/qla2xxx/qla_mid.c | 41 +- drivers/scsi/qla2xxx/qla_nvme.c | 10 +- drivers/scsi/qla2xxx/qla_os.c | 33 +- drivers/scsi/qla2xxx/qla_target.c | 5 +- drivers/scsi/qla2xxx/qla_target.h | 1 + drivers/scsi/scsi_error.c | 28 +- drivers/scsi/scsi_priv.h | 1 + drivers/scsi/sd.c | 25 +- drivers/scsi/st.c | 18 +- drivers/scsi/xen-scsifront.c | 1 + drivers/soc/aspeed/aspeed-lpc-snoop.c | 33 +- drivers/soc/imx/imx8m-blk-ctrl.c | 34 +- drivers/soc/imx/imx8mp-blk-ctrl.c | 18 +- drivers/soc/imx/imx93-blk-ctrl.c | 54 +- drivers/soc/qcom/icc-bwmon.c | 2 + drivers/soc/rockchip/pm_domains.c | 20 +- drivers/soc/xilinx/zynqmp_power.c | 10 +- drivers/soundwire/generic_bandwidth_allocation.c | 35 +- drivers/spi/spi-bcm63xx.c | 72 +- drivers/spi/spi-davinci.c | 5 +- drivers/spi/spi-dw-dma.c | 2 +- drivers/spi/spi-fsl-lpspi.c | 9 +- drivers/spi/spi-fsl-qspi.c | 42 +- drivers/spi/spi-fsl-spi.c | 97 +- drivers/spi/spi-hisi-kunpeng.c | 95 +- drivers/spi/spi-microchip-core-qspi.c | 79 +- drivers/spi/spi-microchip-core.c | 4 + drivers/spi/spi-mpc52xx.c | 66 +- drivers/spi/spi-oc-tiny.c | 24 +- drivers/spi/spi-qcom-qspi.c | 45 +- drivers/spi/spi-rockchip.c | 2 +- drivers/spi/spi-rspi.c | 14 +- drivers/spi/spi-tegra114.c | 7 + drivers/spi/spi-tegra210-quad.c | 20 + drivers/staging/greybus/raw.c | 90 +- drivers/staging/greybus/uart.c | 3 +- drivers/staging/media/atomisp/i2c/atomisp-gc2235.c | 29 +- .../media/deprecated/saa7146/av7110/av7110.h | 4 +- .../media/deprecated/saa7146/av7110/av7110_ca.c | 26 +- drivers/staging/media/rkvdec/rkvdec.c | 4 +- drivers/staging/most/Kconfig | 2 - drivers/staging/most/Makefile | 1 - drivers/staging/most/i2c/Kconfig | 13 - drivers/staging/most/i2c/Makefile | 4 - drivers/staging/most/i2c/i2c.c | 371 --- drivers/staging/rtl8723bs/core/rtw_mlme.c | 5 +- drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 22 +- drivers/staging/sm750fb/sm750.c | 2 +- drivers/staging/sm750fb/sm750.h | 2 +- drivers/staging/sm750fb/sm750_accel.c | 6 +- drivers/staging/sm750fb/sm750_accel.h | 4 +- drivers/target/iscsi/iscsi_target_configfs.c | 26 +- drivers/tee/optee/ffa_abi.c | 16 +- drivers/tee/optee/smc_abi.c | 17 +- drivers/thermal/thermal_hwmon.c | 89 +- drivers/thunderbolt/ctl.c | 63 +- drivers/thunderbolt/quirks.c | 3 + drivers/thunderbolt/xdomain.c | 4 + drivers/tty/amiserial.c | 9 +- drivers/tty/n_gsm.c | 90 +- drivers/tty/pty.c | 2 +- drivers/tty/serial/8250/8250_bcm7271.c | 2 +- drivers/tty/serial/8250/8250_core.c | 2 +- drivers/tty/serial/imx.c | 26 +- drivers/tty/serial/kgdboc.c | 9 + drivers/tty/serial/max3100.c | 13 +- drivers/tty/serial/qcom_geni_serial.c | 5 +- drivers/tty/serial/sc16is7xx.c | 22 +- drivers/tty/serial/serial-tegra.c | 18 +- drivers/tty/serial/serial_core.c | 48 +- drivers/tty/serial/vt8500_serial.c | 1 + drivers/tty/tty_io.c | 80 +- drivers/tty/tty_port.c | 75 +- drivers/tty/vcc.c | 5 +- drivers/tty/vt/vc_screen.c | 25 +- drivers/tty/vt/vt.c | 7 +- drivers/ufs/core/ufshcd.c | 28 +- drivers/ufs/host/ufs-exynos.c | 17 +- drivers/ufs/host/ufs-exynos.h | 3 +- drivers/ufs/host/ufs-qcom.c | 13 +- drivers/usb/cdns3/cdns3-gadget.c | 4 + drivers/usb/cdns3/cdns3-pci-wrap.c | 5 + drivers/usb/chipidea/ci_hdrc_tegra.c | 4 +- drivers/usb/chipidea/udc.c | 4 + drivers/usb/class/cdc-acm.c | 41 +- drivers/usb/class/cdc-acm.h | 1 - drivers/usb/core/hub.c | 7 +- drivers/usb/core/message.c | 8 +- drivers/usb/dwc2/hcd.c | 3 +- drivers/usb/dwc3/core.c | 19 +- drivers/usb/dwc3/core.h | 23 + drivers/usb/dwc3/dwc3-am62.c | 1 + drivers/usb/dwc3/ep0.c | 9 + drivers/usb/dwc3/gadget.c | 112 +- drivers/usb/gadget/function/f_ecm.c | 41 +- drivers/usb/gadget/function/f_eem.c | 59 +- drivers/usb/gadget/function/f_fs.c | 241 +- drivers/usb/gadget/function/f_hid.c | 17 +- drivers/usb/gadget/function/f_mass_storage.c | 3 + drivers/usb/gadget/function/f_midi.c | 6 +- drivers/usb/gadget/function/f_printer.c | 10 +- drivers/usb/gadget/function/f_rndis.c | 42 +- drivers/usb/gadget/function/f_subset.c | 57 +- drivers/usb/gadget/function/f_uac1.c | 13 +- drivers/usb/gadget/function/f_uac1_legacy.c | 6 + drivers/usb/gadget/function/f_uac2.c | 13 +- drivers/usb/gadget/function/u_ecm.h | 21 +- drivers/usb/gadget/function/u_eem.h | 21 +- drivers/usb/gadget/function/u_fs.h | 2 - drivers/usb/gadget/function/u_gether.h | 22 +- drivers/usb/gadget/function/u_rndis.h | 31 +- drivers/usb/gadget/legacy/g_ffs.c | 9 - drivers/usb/gadget/legacy/inode.c | 7 +- drivers/usb/gadget/udc/aspeed-vhub/core.c | 4 + drivers/usb/gadget/udc/aspeed-vhub/dev.c | 2 +- drivers/usb/gadget/udc/aspeed-vhub/hub.c | 5 +- drivers/usb/gadget/udc/aspeed-vhub/vhub.h | 1 + drivers/usb/gadget/udc/at91_udc.c | 33 +- drivers/usb/gadget/udc/core.c | 7 +- drivers/usb/gadget/udc/dummy_hcd.c | 4 + drivers/usb/host/ehci-sched.c | 11 +- drivers/usb/host/fotg210-hcd.c | 6 +- drivers/usb/host/octeon-hcd.c | 2 +- drivers/usb/host/ohci-da8xx.c | 2 + drivers/usb/host/ohci-s3c2410.c | 1 + drivers/usb/host/ohci-spear.c | 4 +- drivers/usb/host/ohci-st.c | 1 + drivers/usb/host/xhci.c | 11 +- drivers/usb/misc/iowarrior.c | 57 +- drivers/usb/serial/ark3116.c | 7 +- drivers/usb/serial/belkin_sa.c | 12 +- drivers/usb/serial/bus.c | 6 +- drivers/usb/serial/ch341.c | 37 +- drivers/usb/serial/cp210x.c | 9 +- drivers/usb/serial/digi_acceleport.c | 7 +- drivers/usb/serial/f81232.c | 4 +- drivers/usb/serial/f81534.c | 4 +- drivers/usb/serial/ftdi_sio.c | 10 +- drivers/usb/serial/generic.c | 10 +- drivers/usb/serial/io_edgeport.c | 6 +- drivers/usb/serial/io_ti.c | 9 +- drivers/usb/serial/keyspan.c | 5 +- drivers/usb/serial/keyspan_pda.c | 8 +- drivers/usb/serial/mct_u232.c | 6 +- drivers/usb/serial/mos7720.c | 9 +- drivers/usb/serial/mos7840.c | 7 +- drivers/usb/serial/mxuport.c | 6 +- drivers/usb/serial/option.c | 14 + drivers/usb/serial/pl2303.c | 14 +- drivers/usb/serial/quatech2.c | 27 +- drivers/usb/serial/ssu100.c | 18 +- drivers/usb/serial/ti_usb_3410_5052.c | 10 +- drivers/usb/serial/upd78f0730.c | 7 +- drivers/usb/serial/usb-serial.c | 127 +- drivers/usb/serial/usb_debug.c | 13 +- drivers/usb/serial/whiteheat.c | 7 +- drivers/usb/serial/xr_serial.c | 4 +- drivers/usb/storage/realtek_cr.c | 9 +- drivers/usb/storage/sierra_ms.c | 7 + drivers/usb/typec/anx7411.c | 5 +- drivers/usb/typec/tcpm/tcpci_maxim.c | 9 + drivers/usb/typec/tcpm/tcpci_rt1711h.c | 13 +- drivers/usb/typec/tcpm/tcpm.c | 53 +- drivers/usb/typec/tipd/core.c | 3 +- drivers/usb/typec/ucsi/displayport.c | 9 +- drivers/usb/typec/ucsi/ucsi.c | 43 +- drivers/usb/typec/ucsi/ucsi.h | 11 + drivers/usb/typec/ucsi/ucsi_acpi.c | 32 + drivers/usb/usbip/usbip_common.c | 1 + drivers/vdpa/mlx5/core/mlx5_vdpa.h | 2 + drivers/vdpa/mlx5/core/mr.c | 3 + drivers/vdpa/mlx5/core/resources.c | 11 +- drivers/vdpa/mlx5/net/mlx5_vnet.c | 9 +- drivers/vdpa/vdpa_sim/vdpa_sim.c | 11 +- drivers/vdpa/vdpa_user/iova_domain.c | 11 +- drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c | 22 +- drivers/vfio/pci/mlx5/main.c | 6 +- drivers/vhost/iotlb.c | 47 +- drivers/vhost/vdpa.c | 11 +- drivers/vhost/vhost.c | 116 +- drivers/video/fbdev/arcfb.c | 3 + drivers/video/fbdev/broadsheetfb.c | 4 +- drivers/video/fbdev/cobalt_lcdfb.c | 6 + drivers/video/fbdev/core/fb_sys_fops.c | 8 +- drivers/video/fbdev/core/fbcon.c | 2 - drivers/video/fbdev/core/fbmem.c | 29 +- drivers/video/fbdev/core/fbsysfs.c | 13 +- drivers/video/fbdev/hecubafb.c | 4 +- drivers/video/fbdev/metronomefb.c | 4 +- drivers/video/fbdev/omap2/omapfb/omapfb-main.c | 11 +- drivers/video/fbdev/ps3fb.c | 5 +- drivers/video/fbdev/pvr2fb.c | 3 + drivers/video/fbdev/sh_mobile_lcdcfb.c | 5 +- drivers/video/fbdev/sm712fb.c | 10 +- drivers/video/fbdev/ssd1307fb.c | 126 +- drivers/virt/acrn/irqfd.c | 75 +- drivers/virt/nitro_enclaves/ne_misc_dev.c | 1 + drivers/virtio/virtio.c | 29 + drivers/virtio/virtio_mmio.c | 66 +- drivers/watchdog/at91sam9_wdt.c | 4 +- drivers/watchdog/cpu5wdt.c | 2 +- drivers/watchdog/rtd119x_wdt.c | 21 +- drivers/xen/events/events_2l.c | 8 +- drivers/xen/events/events_base.c | 449 +-- drivers/xen/events/events_internal.h | 1 - drivers/xen/gntdev-dmabuf.c | 31 +- drivers/xen/pvcalls-front.c | 88 +- fs/9p/vfs_inode_dotl.c | 2 +- fs/Kconfig | 1 - fs/Makefile | 1 - fs/afs/inode.c | 1 + fs/afs/internal.h | 2 + fs/afs/rxrpc.c | 79 +- fs/afs/super.c | 2 +- fs/autofs/waitq.c | 25 +- fs/btrfs/acl.c | 3 + fs/btrfs/block-group.c | 3 + fs/btrfs/block-rsv.c | 19 +- fs/btrfs/ctree.c | 65 +- fs/btrfs/ctree.h | 23 +- fs/btrfs/dev-replace.c | 1 + fs/btrfs/disk-io.c | 5 + fs/btrfs/extent-tree.c | 46 +- fs/btrfs/extent_io.c | 173 +- fs/btrfs/file.c | 105 +- fs/btrfs/free-space-tree.c | 10 +- fs/btrfs/inode.c | 82 +- fs/btrfs/ioctl.c | 68 +- fs/btrfs/lzo.c | 14 +- fs/btrfs/qgroup.c | 24 +- fs/btrfs/reflink.c | 58 + fs/btrfs/relocation.c | 87 +- fs/btrfs/scrub.c | 9 +- fs/btrfs/transaction.c | 21 +- fs/btrfs/tree-log.c | 105 +- fs/btrfs/volumes.c | 243 +- fs/ceph/dir.c | 10 +- fs/ceph/export.c | 23 +- fs/ceph/mds_client.c | 63 +- fs/ceph/mds_client.h | 1 + fs/ceph/super.h | 9 + fs/ceph/xattr.c | 16 + fs/coredump.c | 16 +- fs/dcache.c | 4 +- fs/dlm/config.c | 4 +- fs/dlm/lock.c | 2 + fs/dlm/lowcomms.c | 197 +- fs/dlm/lowcomms.h | 5 +- fs/dlm/midcomms.c | 10 +- fs/erofs/decompressor_lzma.c | 18 +- fs/erofs/xattr.c | 5 +- fs/erofs/zdata.c | 46 +- fs/erofs/zmap.c | 21 +- fs/exec.c | 23 +- fs/exfat/dir.c | 24 +- fs/exfat/exfat_fs.h | 3 +- fs/exfat/fatent.c | 10 + fs/exfat/namei.c | 28 +- fs/exfat/nls.c | 24 +- fs/exfat/super.c | 32 +- fs/ext2/inode.c | 3 +- fs/ext2/xattr.c | 4 +- fs/ext4/ext4.h | 29 +- fs/ext4/extents.c | 20 +- fs/ext4/extents_status.c | 7 +- fs/ext4/extents_status.h | 1 + fs/ext4/inode.c | 57 +- fs/ext4/ioctl.c | 5 + fs/ext4/mballoc.c | 217 +- fs/ext4/mballoc.h | 4 +- fs/ext4/migrate.c | 14 +- fs/ext4/super.c | 61 +- fs/ext4/xattr.c | 2 +- fs/f2fs/checkpoint.c | 7 +- fs/f2fs/compress.c | 10 +- fs/f2fs/data.c | 14 +- fs/f2fs/debug.c | 4 - fs/f2fs/dir.c | 1 + fs/f2fs/extent_cache.c | 153 +- fs/f2fs/f2fs.h | 69 +- fs/f2fs/file.c | 32 +- fs/f2fs/gc.c | 70 +- fs/f2fs/gc.h | 20 - fs/f2fs/inode.c | 8 +- fs/f2fs/node.c | 78 +- fs/f2fs/recovery.c | 33 +- fs/f2fs/segment.c | 37 +- fs/f2fs/super.c | 58 +- fs/f2fs/sysfs.c | 42 +- fs/fcntl.c | 3 + fs/fsopen.c | 3 + fs/fuse/inode.c | 2 + fs/gfs2/glock.c | 35 +- fs/gfs2/glock.h | 1 + fs/gfs2/incore.h | 1 + fs/gfs2/lock_dlm.c | 12 +- fs/gfs2/ops_fstype.c | 13 +- fs/gfs2/super.c | 7 +- fs/hfs/bfind.c | 3 + fs/hfs/btree.c | 57 +- fs/hfs/extent.c | 2 +- fs/hfs/hfs_fs.h | 1 + fs/inode.c | 24 +- fs/jfs/jfs_dtree.c | 18 +- fs/libfs.c | 36 +- fs/lockd/clntproc.c | 3 + fs/lockd/svc.c | 6 +- fs/lockd/svc4proc.c | 4 +- fs/lockd/svcproc.c | 4 +- fs/lockd/svcsubs.c | 47 +- fs/mbcache.c | 1 + fs/namei.c | 4 + fs/namespace.c | 123 +- fs/nfs/blocklayout/dev.c | 19 +- fs/nfs/callback_xdr.c | 6 +- fs/nfs/delegation.c | 27 +- fs/nfs/flexfilelayout/flexfilelayout.c | 3 +- fs/nfs/nfs4proc.c | 32 +- fs/nfs/nfs4session.c | 16 +- fs/nfs/pnfs.c | 58 +- fs/nfs/pnfs.h | 17 +- fs/nfsd/export.c | 31 +- fs/nfsd/export.h | 4 +- fs/nfsd/filecache.c | 67 +- fs/nfsd/lockd.c | 6 +- fs/nfsd/netns.h | 5 +- fs/nfsd/nfs2acl.c | 21 +- fs/nfsd/nfs3acl.c | 17 +- fs/nfsd/nfs3proc.c | 38 + fs/nfsd/nfs4layouts.c | 21 +- fs/nfsd/nfs4proc.c | 36 +- fs/nfsd/nfs4state.c | 33 +- fs/nfsd/trace.h | 4 +- fs/nfsd/vfs.c | 36 +- fs/nilfs2/page.c | 17 +- fs/notify/mark.c | 50 +- fs/ntfs/Kconfig | 80 - fs/ntfs/Makefile | 15 - fs/ntfs/aops.c | 1761 ----------- fs/ntfs/aops.h | 88 - fs/ntfs/attrib.c | 2624 ---------------- fs/ntfs/attrib.h | 102 - fs/ntfs/bitmap.c | 179 -- fs/ntfs/bitmap.h | 104 - fs/ntfs/collate.c | 110 - fs/ntfs/collate.h | 36 - fs/ntfs/compress.c | 950 ------ fs/ntfs/debug.c | 159 - fs/ntfs/debug.h | 57 - fs/ntfs/dir.c | 1538 ---------- fs/ntfs/dir.h | 34 - fs/ntfs/endian.h | 79 - fs/ntfs/file.c | 2006 ------------ fs/ntfs/index.c | 440 --- fs/ntfs/index.h | 134 - fs/ntfs/inode.c | 3100 ------------------- fs/ntfs/inode.h | 310 -- fs/ntfs/layout.h | 2421 --------------- fs/ntfs/lcnalloc.c | 1000 ------ fs/ntfs/lcnalloc.h | 131 - fs/ntfs/logfile.c | 849 ------ fs/ntfs/logfile.h | 295 -- fs/ntfs/malloc.h | 77 - fs/ntfs/mft.c | 2906 ------------------ fs/ntfs/mft.h | 110 - fs/ntfs/mst.c | 189 -- fs/ntfs/namei.c | 391 --- fs/ntfs/ntfs.h | 150 - fs/ntfs/quota.c | 103 - fs/ntfs/quota.h | 21 - fs/ntfs/runlist.c | 1893 ------------ fs/ntfs/runlist.h | 88 - fs/ntfs/super.c | 3194 -------------------- fs/ntfs/sysctl.c | 69 - fs/ntfs/sysctl.h | 27 - fs/ntfs/time.h | 89 - fs/ntfs/types.h | 55 - fs/ntfs/unistr.c | 384 --- fs/ntfs/upcase.c | 73 - fs/ntfs/usnjrnl.c | 70 - fs/ntfs/usnjrnl.h | 191 -- fs/ntfs/volume.h | 164 - fs/ntfs3/attrib.c | 27 +- fs/ntfs3/file.c | 43 +- fs/ntfs3/frecord.c | 86 +- fs/ntfs3/fslog.c | 16 + fs/ntfs3/index.c | 10 + fs/ntfs3/inode.c | 17 +- fs/ntfs3/namei.c | 10 +- fs/ntfs3/ntfs_fs.h | 24 +- fs/ntfs3/record.c | 91 +- fs/ntfs3/super.c | 16 +- fs/ocfs2/cluster/heartbeat.c | 168 +- fs/ocfs2/cluster/nodemanager.c | 19 +- fs/ocfs2/cluster/nodemanager.h | 2 + fs/ocfs2/cluster/tcp.c | 104 +- fs/ocfs2/cluster/tcp.h | 1 + fs/ocfs2/dir.c | 71 +- fs/ocfs2/dlm/dlmcommon.h | 2 + fs/ocfs2/dlm/dlmdebug.c | 5 +- fs/ocfs2/dlm/dlmrecovery.c | 2 +- fs/ocfs2/inode.c | 129 + fs/ocfs2/namei.c | 8 +- fs/overlayfs/file.c | 19 +- fs/pipe.c | 6 +- fs/proc/task_mmu.c | 3 + fs/reiserfs/namei.c | 61 +- fs/smb/client/cached_dir.c | 122 +- fs/smb/client/cifsacl.c | 71 +- fs/smb/client/cifsfs.c | 1 + fs/smb/client/cifsglob.h | 15 +- fs/smb/client/connect.c | 172 +- fs/smb/client/dir.c | 39 +- fs/smb/client/file.c | 41 +- fs/smb/client/fs_context.c | 6 + fs/smb/client/inode.c | 40 +- fs/smb/client/link.c | 15 +- fs/smb/client/misc.c | 72 +- fs/smb/client/readdir.c | 17 +- fs/smb/client/sess.c | 104 +- fs/smb/client/smb1ops.c | 21 +- fs/smb/client/smb2file.c | 19 +- fs/smb/client/smb2misc.c | 15 +- fs/smb/client/smb2ops.c | 107 +- fs/smb/client/smb2pdu.c | 96 +- fs/smb/client/smb2pdu.h | 9 - fs/smb/client/smb2proto.h | 4 +- fs/smb/client/smb2transport.c | 58 +- fs/smb/client/smbdirect.c | 22 +- fs/smb/client/transport.c | 69 +- fs/smb/common/smb2pdu.h | 11 + fs/smb/server/auth.c | 22 +- fs/smb/server/connection.c | 23 + fs/smb/server/connection.h | 14 + fs/smb/server/ksmbd_work.c | 3 - fs/smb/server/ksmbd_work.h | 1 - fs/smb/server/mgmt/share_config.c | 7 +- fs/smb/server/mgmt/tree_connect.c | 28 +- fs/smb/server/mgmt/user_config.c | 11 + fs/smb/server/mgmt/user_session.c | 29 +- fs/smb/server/mgmt/user_session.h | 2 + fs/smb/server/misc.c | 33 - fs/smb/server/misc.h | 1 - fs/smb/server/oplock.c | 133 +- fs/smb/server/oplock.h | 2 +- fs/smb/server/server.c | 26 +- fs/smb/server/smb2ops.c | 1 - fs/smb/server/smb2pdu.c | 292 +- fs/smb/server/smb2pdu.h | 8 - fs/smb/server/smb_common.c | 10 +- fs/smb/server/smb_common.h | 2 +- fs/smb/server/smbacl.c | 317 +- fs/smb/server/smbacl.h | 4 +- fs/smb/server/transport_ipc.c | 5 +- fs/smb/server/transport_rdma.c | 4 +- fs/smb/server/vfs.c | 94 +- fs/smb/server/vfs_cache.c | 135 +- fs/unicode/utf8-core.c | 21 +- fs/userfaultfd.c | 11 + fs/verity/Kconfig | 3 + fs/xfs/libxfs/xfs_alloc.c | 46 +- fs/xfs/libxfs/xfs_attr.c | 74 +- fs/xfs/libxfs/xfs_ialloc.c | 32 +- fs/xfs/libxfs/xfs_sb.c | 17 +- fs/xfs/xfs_buf_item.c | 299 +- fs/xfs/xfs_buf_item.h | 3 +- fs/xfs/xfs_fsmap.c | 2 +- fs/xfs/xfs_icache.c | 8 + fs/xfs/xfs_inode.c | 2 +- fs/xfs/xfs_ioctl.c | 2 +- fs/xfs/xfs_iops.c | 2 +- fs/xfs/xfs_log_recover.c | 13 +- include/acpi/acpi_bus.h | 6 + include/acpi/battery.h | 4 +- include/clocksource/samsung_pwm.h | 2 +- include/drm/gpu_scheduler.h | 29 +- include/linux/blkdev.h | 1 + include/linux/bpf.h | 42 +- include/linux/can/skb.h | 2 + include/linux/cgroup-defs.h | 5 +- include/linux/cgroup.h | 1 + include/linux/compiler_attributes.h | 13 + include/linux/device-mapper.h | 23 +- include/linux/device.h | 3 + include/linux/dm-dirty-log.h | 2 +- include/linux/dm-region-hash.h | 6 +- include/linux/dma-buf.h | 1 + include/linux/dma/k3-udma-glue.h | 3 +- include/linux/dmaengine.h | 7 + include/linux/f2fs_fs.h | 1 + include/linux/fb.h | 115 + include/linux/fs.h | 2 + include/linux/fsnotify_backend.h | 1 + include/linux/ftrace.h | 5 +- include/linux/futex.h | 14 +- include/linux/hid.h | 10 +- include/linux/highmem.h | 44 + include/linux/hw_random.h | 2 + include/linux/i2c.h | 1 + include/linux/i3c/master.h | 3 + include/linux/ieee80211.h | 12 +- include/linux/if_team.h | 3 +- include/linux/if_vlan.h | 3 + include/linux/iio/common/st_sensors.h | 4 - include/linux/ima.h | 1 + include/linux/io_uring.h | 2 + include/linux/iommu.h | 2 + include/linux/ism.h | 23 + include/linux/kasan.h | 6 +- include/linux/key-type.h | 1 + include/linux/key.h | 5 + include/linux/libata.h | 3 + include/linux/list.h | 15 + include/linux/lockd/bind.h | 12 +- include/linux/lockd/lockd.h | 2 +- include/linux/memory_hotplug.h | 2 +- include/linux/mlx5/cq.h | 1 + include/linux/mlx5/driver.h | 1 - include/linux/mlx5/mlx5_ifc.h | 13 +- include/linux/mlx5/vport.h | 6 +- include/linux/mm.h | 2 +- include/linux/mm_types.h | 3 + include/linux/mount.h | 2 +- include/linux/mtd/mtd.h | 2 +- include/linux/netdevice.h | 4 + include/linux/netfilter.h | 12 + include/linux/nfs_xdr.h | 1 - include/linux/ntb.h | 24 + include/linux/nvme.h | 4 +- include/linux/of.h | 6 + include/linux/of_device.h | 11 - include/linux/of_platform.h | 5 + include/linux/pagemap.h | 48 + include/linux/pci.h | 7 +- include/linux/perf/riscv_pmu.h | 5 +- include/linux/perf_event.h | 1 - include/linux/power_supply.h | 6 +- include/linux/psi.h | 4 +- include/linux/qcom-geni-se.h | 15 +- include/linux/sched.h | 2 +- include/linux/sched/signal.h | 27 +- include/linux/sched/user.h | 11 +- include/linux/scmi_protocol.h | 5 - include/linux/seq_buf.h | 27 +- include/linux/skbuff.h | 22 +- include/linux/stmmac.h | 1 - include/linux/sunrpc/svc_rdma.h | 1 + include/linux/sunrpc/xdr.h | 1 - include/linux/trace_recursion.h | 9 + include/linux/trace_seq.h | 2 + include/linux/tty.h | 4 +- include/linux/tty_driver.h | 6 + include/linux/tty_port.h | 22 +- include/linux/unicode.h | 1 + include/linux/usb/gadget.h | 2 + include/linux/usb/serial.h | 3 +- include/linux/userfaultfd_k.h | 7 + include/linux/virtio.h | 2 +- include/media/v4l2-mem2mem.h | 21 + include/net/af_vsock.h | 3 + include/net/amt.h | 4 - include/net/ax25.h | 1 - include/net/bluetooth/hci.h | 9 + include/net/bluetooth/hci_core.h | 5 +- include/net/bluetooth/l2cap.h | 1 + include/net/bluetooth/mgmt.h | 2 +- include/net/bluetooth/rfcomm.h | 1 + include/net/cfg80211.h | 105 +- include/net/codel_impl.h | 1 + include/net/dropreason.h | 3 + include/net/dsa.h | 1 + include/net/inet_connection_sock.h | 11 +- include/net/ip.h | 17 +- include/net/ip6_route.h | 2 +- include/net/ip_vs.h | 2 +- include/net/netfilter/nf_conntrack_expect.h | 16 +- include/net/netfilter/nf_conntrack_timeout.h | 27 +- include/net/netfilter/nf_queue.h | 1 + include/net/netfilter/nf_tables.h | 16 +- include/net/netfilter/nft_fib.h | 2 +- include/net/netfilter/nft_meta.h | 4 +- include/net/netfilter/nft_reject.h | 3 +- include/net/netns/mpls.h | 1 + include/net/netns/xfrm.h | 1 + include/net/nexthop.h | 6 +- include/net/pkt_cls.h | 45 +- include/net/pkt_sched.h | 3 +- include/net/route.h | 2 +- include/net/sch_generic.h | 21 +- include/net/secure_seq.h | 47 +- include/net/sock.h | 19 +- include/net/strparser.h | 10 +- include/net/tc_act/tc_pedit.h | 18 +- include/net/tcp.h | 14 +- include/net/tls.h | 12 +- include/scsi/scsi_host.h | 9 +- include/trace/events/btrfs.h | 4 +- include/trace/events/rv.h | 76 +- include/uapi/linux/ioprio.h | 100 +- include/uapi/linux/netfilter/nf_conntrack_common.h | 1 + include/uapi/linux/nexthop.h | 7 +- include/uapi/linux/stddef.h | 5 + include/uapi/linux/virtio_crypto.h | 1 + include/xen/events.h | 4 +- io_uring/cancel.c | 33 +- io_uring/cancel.h | 2 + io_uring/io-wq.c | 96 +- io_uring/io-wq.h | 4 +- io_uring/io_uring.c | 108 +- io_uring/io_uring.h | 44 +- io_uring/poll.c | 42 +- io_uring/rsrc.c | 7 +- io_uring/rw.c | 18 - io_uring/sqpoll.c | 7 + io_uring/tctx.c | 1 + io_uring/timeout.c | 46 +- kernel/audit_tree.c | 36 +- kernel/bpf/arraymap.c | 30 +- kernel/bpf/bpf_struct_ops.c | 75 +- kernel/bpf/btf.c | 5 + kernel/bpf/cgroup.c | 23 + kernel/bpf/core.c | 1 + kernel/bpf/hashtab.c | 63 +- kernel/bpf/helpers.c | 102 +- kernel/bpf/mmap_unlock_work.h | 51 +- kernel/bpf/queue_stack_maps.c | 8 +- kernel/bpf/stackmap.c | 85 +- kernel/bpf/syscall.c | 93 +- kernel/bpf/task_iter.c | 14 +- kernel/bpf/trampoline.c | 54 +- kernel/bpf/verifier.c | 104 +- kernel/cgroup/Makefile | 2 +- kernel/cgroup/cgroup.c | 53 +- kernel/cgroup/cpuset-internal.h | 222 ++ kernel/cgroup/cpuset-v1.c | 3 + kernel/cgroup/cpuset.c | 222 +- kernel/cgroup/rstat.c | 19 +- kernel/dma/direct.c | 56 +- kernel/events/core.c | 111 +- kernel/exit.c | 51 +- kernel/fork.c | 38 +- kernel/futex/core.c | 49 +- kernel/kprobes.c | 8 +- kernel/params.c | 61 +- kernel/pid_namespace.c | 5 +- kernel/rcu/tasks.h | 82 +- kernel/rcu/tree.h | 13 +- kernel/rcu/tree_plugin.h | 42 +- kernel/sched/core.c | 50 + kernel/sched/deadline.c | 7 +- kernel/sched/psi.c | 69 +- kernel/sched/rt.c | 52 +- kernel/sched/sched.h | 1 + kernel/signal.c | 4 + kernel/time/namespace.c | 5 + kernel/trace/blktrace.c | 3 +- kernel/trace/bpf_trace.c | 6 +- kernel/trace/fgraph.c | 1 + kernel/trace/ftrace.c | 76 +- kernel/trace/trace.c | 103 +- kernel/trace/trace.h | 4 +- kernel/trace/trace_events_filter.c | 6 + kernel/trace/trace_events_hist.c | 102 +- kernel/trace/trace_events_synth.c | 10 + kernel/trace/trace_events_user.c | 26 +- kernel/trace/trace_functions.c | 2 +- kernel/trace/trace_seq.c | 6 +- kernel/trace/trace_stack.c | 2 +- kernel/trace/trace_synth.h | 1 + kernel/watch_queue.c | 11 +- kernel/workqueue.c | 24 +- lib/Kconfig.debug | 2 + lib/seq_buf.c | 52 +- lib/test_kprobes.c | 28 +- mm/damon/core.c | 32 +- mm/filemap.c | 2 +- mm/huge_memory.c | 17 + mm/hugetlb.c | 56 +- mm/kasan/quarantine.c | 39 +- mm/kasan/report.c | 4 +- mm/kasan/shadow.c | 111 +- mm/khugepaged.c | 3 + mm/kmemleak.c | 190 +- mm/memcontrol.c | 2 +- mm/memory_hotplug.c | 3 +- mm/mempolicy.c | 2 + mm/migrate.c | 27 +- mm/mlock.c | 2 +- mm/mmap.c | 100 +- mm/mremap.c | 70 +- mm/page_alloc.c | 14 +- mm/page_table_check.c | 20 +- mm/pagewalk.c | 8 + mm/ptdump.c | 7 + mm/readahead.c | 13 - mm/rmap.c | 6 +- mm/secretmem.c | 119 +- mm/shmem.c | 13 +- mm/slab.h | 5 + mm/slub.c | 9 +- mm/userfaultfd.c | 22 +- mm/vmalloc.c | 4 +- mm/vmscan.c | 18 +- net/8021q/vlan.c | 7 +- net/8021q/vlan_dev.c | 65 +- net/9p/trans_fd.c | 1 + net/9p/trans_xen.c | 79 +- net/ax25/af_ax25.c | 30 +- net/ax25/ax25_route.c | 74 - net/bluetooth/6lowpan.c | 49 +- net/bluetooth/af_bluetooth.c | 10 +- net/bluetooth/hci_conn.c | 98 +- net/bluetooth/hci_core.c | 45 +- net/bluetooth/hci_debugfs.c | 2 +- net/bluetooth/hci_event.c | 129 +- net/bluetooth/hci_request.c | 2 +- net/bluetooth/hci_sock.c | 2 + net/bluetooth/hci_sync.c | 43 +- net/bluetooth/iso.c | 129 +- net/bluetooth/l2cap_core.c | 64 +- net/bluetooth/l2cap_sock.c | 59 +- net/bluetooth/mgmt.c | 273 +- net/bluetooth/mgmt_util.c | 46 + net/bluetooth/mgmt_util.h | 3 + net/bluetooth/rfcomm/core.c | 134 +- net/bluetooth/rfcomm/sock.c | 5 +- net/bluetooth/rfcomm/tty.c | 9 +- net/bluetooth/sco.c | 6 +- net/bridge/br_arp_nd_proxy.c | 24 +- net/bridge/br_cfm.c | 11 +- net/bridge/br_device.c | 1 - net/bridge/br_input.c | 35 +- net/bridge/br_mrp.c | 13 +- net/bridge/br_multicast.c | 45 +- net/bridge/br_private.h | 26 +- net/bridge/netfilter/ebt_dnat.c | 4 +- net/bridge/netfilter/ebt_redirect.c | 16 +- net/bridge/netfilter/ebtable_broute.c | 2 +- net/bridge/netfilter/ebtable_filter.c | 2 +- net/bridge/netfilter/ebtable_nat.c | 2 +- net/bridge/netfilter/ebtables.c | 71 +- net/can/af_can.c | 6 +- net/can/bcm.c | 2 + net/can/isotp.c | 11 +- net/can/j1939/socket.c | 1 + net/can/j1939/transport.c | 2 + net/can/raw.c | 7 +- net/ceph/auth_x.c | 5 + net/ceph/messenger.c | 1 + net/core/bpf_sk_storage.c | 2 - net/core/dev.c | 75 +- net/core/dst.c | 8 + net/core/filter.c | 4 +- net/core/flow_dissector.c | 26 +- net/core/netpoll.c | 10 +- net/core/page_pool.c | 3 +- net/core/pktgen.c | 5 +- net/core/secure_seq.c | 80 +- net/core/skmsg.c | 22 +- net/core/sock.c | 30 +- net/dccp/timer.c | 4 +- net/dsa/dsa2.c | 35 +- net/ethtool/channels.c | 9 +- net/ethtool/ioctl.c | 11 +- net/hsr/hsr_framereg.c | 4 +- net/ieee802154/core.c | 8 +- net/ife/ife.c | 14 +- net/ipv4/af_inet.c | 1 + net/ipv4/esp4.c | 8 +- net/ipv4/fib_semantics.c | 5 +- net/ipv4/fib_trie.c | 2 - net/ipv4/igmp.c | 14 +- net/ipv4/inet_connection_sock.c | 10 +- net/ipv4/inet_diag.c | 4 +- net/ipv4/ipconfig.c | 90 +- net/ipv4/ipmr.c | 6 +- net/ipv4/ipmr_base.c | 2 +- net/ipv4/netfilter/iptable_nat.c | 4 +- net/ipv4/netfilter/nft_dup_ipv4.c | 3 +- net/ipv4/nexthop.c | 115 +- net/ipv4/route.c | 9 +- net/ipv4/syncookies.c | 10 +- net/ipv4/tcp.c | 18 +- net/ipv4/tcp_cong.c | 4 +- net/ipv4/tcp_dctcp.c | 4 +- net/ipv4/tcp_fastopen.c | 7 +- net/ipv4/tcp_input.c | 70 +- net/ipv4/tcp_ipv4.c | 43 +- net/ipv4/tcp_metrics.c | 6 +- net/ipv4/tcp_minisocks.c | 16 +- net/ipv4/tcp_output.c | 8 +- net/ipv4/tcp_timer.c | 5 +- net/ipv4/udp.c | 65 + net/ipv4/udp_bpf.c | 9 + net/ipv4/udp_tunnel_nic.c | 32 +- net/ipv4/xfrm4_input.c | 5 +- net/ipv6/esp6.c | 8 +- net/ipv6/exthdrs.c | 26 +- net/ipv6/ioam6.c | 32 +- net/ipv6/ioam6_iptunnel.c | 9 +- net/ipv6/ip6_flowlabel.c | 20 + net/ipv6/ip6_gre.c | 5 - net/ipv6/ip6_input.c | 1 + net/ipv6/ip6_output.c | 30 +- net/ipv6/ip6mr.c | 5 +- net/ipv6/netfilter/ip6table_nat.c | 4 +- net/ipv6/netfilter/nft_dup_ipv6.c | 3 +- net/ipv6/route.c | 6 +- net/ipv6/rpl_iptunnel.c | 9 +- net/ipv6/seg6_iptunnel.c | 2 +- net/ipv6/syncookies.c | 11 +- net/ipv6/tcp_ipv6.c | 43 +- net/ipv6/udp.c | 50 + net/ipv6/xfrm6_input.c | 5 +- net/iucv/af_iucv.c | 42 +- net/kcm/kcmsock.c | 21 +- net/l2tp/l2tp_core.c | 16 +- net/l2tp/l2tp_core.h | 3 +- net/l2tp/l2tp_debugfs.c | 4 + net/l2tp/l2tp_netlink.c | 20 +- net/l2tp/l2tp_ppp.c | 151 +- net/mac80211/agg-rx.c | 2 +- net/mac80211/chan.c | 37 +- net/mac80211/fils_aead.c | 8 + net/mac80211/ibss.c | 9 +- net/mac80211/mesh_pathtbl.c | 16 +- net/mac80211/mlme.c | 10 +- net/mac80211/rc80211_minstrel_ht.c | 30 +- net/mac80211/sta_info.c | 85 +- net/mac80211/tx.c | 11 + net/mctp/device.c | 21 +- net/mctp/route.c | 43 +- net/mpls/af_mpls.c | 40 +- net/mptcp/options.c | 70 +- net/mptcp/pm_netlink.c | 10 +- net/mptcp/pm_userspace.c | 37 +- net/mptcp/protocol.c | 45 +- net/mptcp/protocol.h | 11 +- net/ncsi/ncsi-manage.c | 2 + net/netfilter/core.c | 6 +- net/netfilter/ipset/ip_set_bitmap_gen.h | 2 +- net/netfilter/ipvs/ip_vs_conn.c | 3 + net/netfilter/ipvs/ip_vs_core.c | 11 +- net/netfilter/ipvs/ip_vs_lblc.c | 4 + net/netfilter/ipvs/ip_vs_lblcr.c | 3 + net/netfilter/ipvs/ip_vs_sync.c | 33 +- net/netfilter/ipvs/ip_vs_xmit.c | 49 +- net/netfilter/nf_conntrack_bpf.c | 85 +- net/netfilter/nf_conntrack_core.c | 39 +- net/netfilter/nf_conntrack_expect.c | 148 +- net/netfilter/nf_conntrack_h323_main.c | 4 +- net/netfilter/nf_conntrack_helper.c | 10 +- net/netfilter/nf_conntrack_netlink.c | 24 +- net/netfilter/nf_conntrack_sip.c | 13 +- net/netfilter/nf_conntrack_timeout.c | 27 +- net/netfilter/nf_flow_table_ip.c | 3 + net/netfilter/nf_nat_bpf.c | 3 + net/netfilter/nf_nat_core.c | 15 +- net/netfilter/nf_synproxy_core.c | 40 +- net/netfilter/nf_tables_api.c | 149 +- net/netfilter/nf_tables_core.c | 6 +- net/netfilter/nf_tables_trace.c | 2 +- net/netfilter/nfnetlink_cttimeout.c | 114 +- net/netfilter/nfnetlink_log.c | 23 +- net/netfilter/nfnetlink_queue.c | 186 +- net/netfilter/nft_bitwise.c | 21 +- net/netfilter/nft_byteorder.c | 16 +- net/netfilter/nft_cmp.c | 9 +- net/netfilter/nft_compat.c | 33 +- net/netfilter/nft_connlimit.c | 3 +- net/netfilter/nft_counter.c | 3 +- net/netfilter/nft_ct.c | 24 +- net/netfilter/nft_dup_netdev.c | 3 +- net/netfilter/nft_dynset.c | 28 +- net/netfilter/nft_exthdr.c | 9 +- net/netfilter/nft_fib.c | 11 +- net/netfilter/nft_fib_netdev.c | 29 +- net/netfilter/nft_flow_offload.c | 14 +- net/netfilter/nft_fwd_netdev.c | 6 +- net/netfilter/nft_hash.c | 4 +- net/netfilter/nft_immediate.c | 3 +- net/netfilter/nft_last.c | 3 +- net/netfilter/nft_limit.c | 5 +- net/netfilter/nft_log.c | 3 +- net/netfilter/nft_lookup.c | 17 +- net/netfilter/nft_masq.c | 3 +- net/netfilter/nft_meta.c | 5 +- net/netfilter/nft_nat.c | 3 +- net/netfilter/nft_numgen.c | 6 +- net/netfilter/nft_objref.c | 6 +- net/netfilter/nft_osf.c | 3 +- net/netfilter/nft_payload.c | 6 +- net/netfilter/nft_queue.c | 6 +- net/netfilter/nft_quota.c | 3 +- net/netfilter/nft_range.c | 3 +- net/netfilter/nft_redir.c | 3 +- net/netfilter/nft_reject.c | 3 +- net/netfilter/nft_rt.c | 2 +- net/netfilter/nft_set_bitmap.c | 4 +- net/netfilter/nft_set_hash.c | 8 +- net/netfilter/nft_set_pipapo.c | 26 +- net/netfilter/nft_set_rbtree.c | 10 +- net/netfilter/nft_socket.c | 2 +- net/netfilter/nft_synproxy.c | 3 +- net/netfilter/nft_tproxy.c | 2 +- net/netfilter/nft_tunnel.c | 2 +- net/netfilter/nft_xfrm.c | 2 +- net/netfilter/xt_CT.c | 2 +- net/netfilter/xt_IDLETIMER.c | 52 +- net/netlink/af_netlink.c | 6 +- net/netlink/genetlink.c | 28 +- net/nfc/nci/core.c | 9 + net/openvswitch/actions.c | 7 +- net/openvswitch/conntrack.c | 71 +- net/openvswitch/datapath.c | 8 + net/packet/af_packet.c | 103 +- net/phonet/socket.c | 10 +- net/qrtr/mhi.c | 61 +- net/rds/rdma_transport.c | 38 +- net/rds/tcp.c | 66 +- net/rxrpc/ar-internal.h | 9 +- net/rxrpc/call_accept.c | 5 + net/rxrpc/conn_event.c | 34 +- net/rxrpc/output.c | 12 +- net/rxrpc/peer_event.c | 17 +- net/rxrpc/proc.c | 4 +- net/rxrpc/recvmsg.c | 16 +- net/rxrpc/rxkad.c | 5 +- net/sched/act_api.c | 46 +- net/sched/act_ife.c | 32 +- net/sched/act_mirred.c | 14 +- net/sched/act_pedit.c | 11 +- net/sched/cls_api.c | 93 +- net/sched/cls_basic.c | 6 +- net/sched/cls_bpf.c | 8 +- net/sched/cls_cgroup.c | 2 +- net/sched/cls_flow.c | 2 +- net/sched/cls_flower.c | 34 +- net/sched/cls_fw.c | 4 +- net/sched/cls_matchall.c | 6 +- net/sched/cls_route.c | 4 +- net/sched/cls_u32.c | 23 +- net/sched/em_text.c | 3 + net/sched/sch_cake.c | 2 +- net/sched/sch_codel.c | 14 +- net/sched/sch_drr.c | 2 +- net/sched/sch_ets.c | 2 +- net/sched/sch_fifo.c | 13 +- net/sched/sch_fq.c | 18 +- net/sched/sch_fq_codel.c | 18 +- net/sched/sch_fq_pie.c | 14 +- net/sched/sch_generic.c | 47 +- net/sched/sch_gred.c | 4 +- net/sched/sch_hfsc.c | 2 +- net/sched/sch_hhf.c | 12 +- net/sched/sch_htb.c | 2 +- net/sched/sch_multiq.c | 2 +- net/sched/sch_netem.c | 5 +- net/sched/sch_pie.c | 12 +- net/sched/sch_plug.c | 2 +- net/sched/sch_prio.c | 2 +- net/sched/sch_qfq.c | 2 +- net/sched/sch_sfb.c | 2 +- net/sched/sch_sfq.c | 2 +- net/sctp/bind_addr.c | 11 +- net/sctp/inqueue.c | 6 +- net/sctp/ipv6.c | 10 +- net/sctp/protocol.c | 5 +- net/sctp/sm_make_chunk.c | 17 +- net/sctp/sm_statefuns.c | 36 +- net/sctp/socket.c | 39 +- net/smc/af_smc.c | 117 +- net/smc/smc.h | 6 +- net/strparser/strparser.c | 6 +- net/sunrpc/auth_gss/gss_krb5_mech.c | 17 +- net/sunrpc/auth_gss/gss_krb5_unseal.c | 3 + net/sunrpc/auth_gss/gss_rpc_xdr.c | 15 +- net/sunrpc/auth_gss/svcauth_gss.c | 193 +- net/sunrpc/clnt.c | 22 +- net/sunrpc/svc.c | 13 +- net/sunrpc/svcsock.c | 3 + net/sunrpc/xdr.c | 7 - net/sunrpc/xprtrdma/svc_rdma_pcl.c | 2 +- net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 22 +- net/sunrpc/xprtrdma/svc_rdma_rw.c | 36 +- net/sunrpc/xprtrdma/svc_rdma_sendto.c | 47 +- net/sunrpc/xprtrdma/svc_rdma_transport.c | 125 +- net/sunrpc/xprtsock.c | 29 +- net/tipc/core.c | 4 +- net/tipc/crypto.c | 20 +- net/tipc/node.c | 12 +- net/tipc/topsrv.c | 80 +- net/tipc/udp_media.c | 75 +- net/tls/tls_device.c | 4 +- net/tls/tls_sw.c | 2 + net/vmw_vsock/af_vsock.c | 55 +- net/vmw_vsock/virtio_transport_common.c | 3 +- net/wireless/core.c | 39 +- net/wireless/core.h | 4 +- net/wireless/lib80211_crypt_tkip.c | 13 +- net/wireless/nl80211.c | 13 +- net/wireless/pmsr.c | 6 +- net/wireless/scan.c | 38 +- net/wireless/sme.c | 6 +- net/xfrm/espintcp.c | 1 + net/xfrm/xfrm_device.c | 19 +- net/xfrm/xfrm_input.c | 15 +- net/xfrm/xfrm_policy.c | 21 +- net/xfrm/xfrm_state.c | 144 +- net/xfrm/xfrm_user.c | 10 +- samples/ftrace/ftrace-direct-multi-modify.c | 13 +- samples/pidfd/Makefile | 2 +- security/apparmor/domain.c | 27 +- security/apparmor/include/cred.h | 6 +- security/apparmor/include/label.h | 6 +- security/apparmor/include/match.h | 12 +- security/apparmor/include/policy.h | 2 + security/apparmor/include/task.h | 17 +- security/apparmor/match.c | 22 +- security/apparmor/policy.c | 21 +- security/apparmor/task.c | 32 +- security/integrity/ima/ima_appraise.c | 21 +- security/integrity/ima/ima_kexec.c | 35 + security/keys/key.c | 19 +- security/keys/keyctl.c | 15 +- security/keys/keyring.c | 150 +- security/keys/persistent.c | 55 +- security/keys/process_keys.c | 5 +- security/keys/trusted-keys/trusted_tpm1.c | 6 +- security/keys/trusted-keys/trusted_tpm2.c | 2 +- security/landlock/fs.c | 10 +- security/selinux/avc.c | 5 +- security/selinux/hooks.c | 9 +- security/selinux/selinuxfs.c | 40 +- security/selinux/ss/policydb.c | 4 + sound/core/oss/mixer_oss.c | 32 + sound/core/oss/pcm_oss.c | 29 +- sound/core/seq/oss/seq_oss_event.c | 6 +- sound/core/seq/oss/seq_oss_event.h | 3 +- sound/core/seq/oss/seq_oss_ioctl.c | 5 +- sound/core/seq/oss/seq_oss_midi.c | 6 +- sound/core/seq/oss/seq_oss_midi.h | 2 +- sound/core/seq/oss/seq_oss_readq.c | 85 +- sound/core/seq/oss/seq_oss_rw.c | 5 +- sound/core/seq/seq_clientmgr.c | 60 +- sound/core/seq/seq_compat.c | 4 +- sound/core/seq/seq_fifo.c | 98 +- sound/core/seq/seq_fifo.h | 1 + sound/drivers/mtpav.c | 6 +- sound/pci/hda/cs35l41_hda.c | 74 +- sound/pci/hda/cs35l41_hda.h | 4 + sound/soc/amd/acp/acp-mach-common.c | 371 ++- sound/soc/amd/yc/acp6x-mach.c | 7 + sound/soc/codecs/adau1372.c | 18 +- sound/soc/codecs/cs42l52.c | 2 +- sound/soc/codecs/cs42l56.c | 2 +- sound/soc/codecs/hdac_hda.c | 4 +- sound/soc/codecs/max98371.c | 2 +- sound/soc/codecs/nau8822.c | 4 +- sound/soc/codecs/pcm3168a.c | 2 +- sound/soc/codecs/rt274.c | 4 +- sound/soc/codecs/rt286.c | 2 +- sound/soc/codecs/tas2562.c | 8 +- sound/soc/codecs/wm8903.c | 2 +- sound/soc/codecs/wm8978.c | 4 +- sound/soc/intel/avs/pcm.c | 6 +- sound/soc/qcom/lpass-cdc-dma.c | 2 +- sound/soc/qcom/lpass-cpu.c | 4 +- sound/soc/qcom/qdsp6/q6asm.c | 5 + sound/soc/samsung/i2s.c | 8 + sound/soc/soc-topology.c | 37 +- sound/soc/sof/intel/hda.c | 5 + sound/soc/sof/ipc4-pcm.c | 17 +- sound/soc/sof/ipc4-topology.c | 7 +- sound/soc/stm/stm32_spdifrx.c | 2 +- sound/soc/tegra/tegra186_asrc.c | 2 +- sound/usb/caiaq/device.c | 3 + sound/usb/card.h | 3 +- sound/usb/endpoint.c | 16 +- sound/usb/line6/playback.c | 7 + sound/usb/misc/ua101.c | 9 + sound/usb/pcm.c | 3 +- sound/usb/quirks.c | 4 +- tools/gpio/Makefile | 6 + tools/perf/tests/bpf.c | 3 +- tools/perf/util/parse-events.c | 2 +- tools/testing/cxl/test/cxl.c | 14 +- tools/testing/selftests/bpf/progs/bpf_iter_tcp4.c | 4 +- tools/testing/selftests/bpf/progs/bpf_iter_tcp6.c | 4 +- .../selftests/bpf/progs/test_global_func16.c | 2 +- .../selftests/bpf/verifier/atomic_cmpxchg.c | 11 - tools/testing/selftests/bpf/verifier/basic_stack.c | 12 +- tools/testing/selftests/bpf/verifier/calls.c | 4 +- tools/testing/selftests/bpf/verifier/raw_stack.c | 8 +- tools/testing/selftests/bpf/verifier/var_off.c | 57 +- .../test.d/filter/event-filter-incomplete.tc | 24 + .../testing/selftests/net/forwarding/tc_actions.sh | 3 - tools/testing/selftests/net/tls.c | 584 ++++ tools/testing/selftests/vm/memfd_secret.c | 30 +- virt/kvm/kvm_main.c | 3 +- 1911 files changed, 31056 insertions(+), 45393 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/1887 io-wq: order the exit bit against worker creation task work
6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Brauner <[email protected]>
Commit 0e5663856b69219ef2f02e04bac9f5c5be19718a upstream.
io_wq_exit_workers() cancels task work for queued worker creation with task_work_cancel_match(). That has a plain load of task->task_works.
io_queue_worker_create() adds the new entry and tests IO_WQ_BIT_EXIT to cancel it if the workqueue is already on its way out.
That must be ordered. task_work_add() has a full barrier via cmpxchg(). But io_wq_exit_start() sets the bit with set_bit() which doesn't have any memory ordering.
So afaict, on weakly ordered architectures the exiting task may load task_works before the store of the bit is visible. The other side tests the bit before the store is visible as well. So the entry remains queued with worker_refs and the exiting task waits on worker_done indefinitely.
If the task still has rings then io_uring_del_tctx_node() provides the barrier via test_and_set_bit() in io_wq_set_exit_on_idle(). When it has closed all rings though that barrier is gone.
Add the barrier after the set_bit().
--- io_uring/io-wq.c | 2 ++ 1 file changed, 2 insertions(+)
io_uring/io-wq.c +2 -0
@@ -1251,6 +1251,8 @@ static bool io_task_work_match(struct cavoid io_wq_exit_start (struct io_wq *wq) {set_bit (IO_WQ_BIT_EXIT , &wq->state); +/* Pairs with task_work_add() in io_queue_worker_create(). */ +smp_mb__after_atomic (); }static void io_wq_cancel_tw_create (struct io_wq *wq)
Greg Kroah-Hartman
maintainerPATCH 2/1887 io_uring/io-wq: dont lose the signal that ends work
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit 63c103279a95e82280092f2f4232e91e8117a252 upstream.
When a thread exits, only its tracked requests are cancelled. Then its io-wq is torn down. io_wq_exit_workers() signals every worker, to get it out of an interruptible sleep, and waits for all of them to exit. Before they do, they go through the work that is left. Unbounded work is cancelled. Bounded work is run, as it is expected to end by itself.
Not all of it does. An open has no file yet, so it counts as bounded, and the open of a FIFO waits for the other end. That is what the signal is for. But the workers are signalled once, and a worker that hasn't started the work by then loses the signal:
io_wq_exit_workers() io_worker_handle_work()
io_wq_worker_wake()
set TIF_NOTIFY_SIGNAL
io_assign_current_work()
io_run_task_work()
clear TIF_NOTIFY_SIGNAL
io_wq_submit_work()
fifo_open()
wait_for_partner()
wait_for_completion_timeout()The thread never gets out of do_exit():
IORING_OP_OPENAT of a FIFO without a writer, IOSQE_ASYNC exit of the thread that has submitted it
hangs in more than 9 of 10 attempts (4 CPUs, KVM), until the process is killed.
Set TIF_NOTIFY_SIGNAL for bounded work that is started with IO_WQ_BIT_EXIT set. The bit is set before the workers are signalled, and it is tested after the flag has been cleared, with clear_notify_signal() providing the barrier. So either the flag stays, or the bit is seen.
Work that is started while the io-wq exits is treated like work that is being run at that time: it isn't interrupted unless it waits interruptibly.
--- io_uring/io-wq.c | 7 +++++++ 1 file changed, 7 insertions(+)
io_uring/io-wq.c +7 -0
@@ -598,8 +598,15 @@ static void io_worker_handle_work(struct next_hashed =wq_next_work (work); +/* +* io_wq_exit_workers() signals us once, so that we +* don't sleep for ever. If that was before this work +* became the current one, the signal is gone. +*/ if (unlikely (do_kill) && (work->flags &IO_WQ_WORK_UNBOUND )) work->flags |=IO_WQ_WORK_CANCEL ; +else if (unlikely (do_kill)) +set_notify_signal (current); wq->do_work (work);io_assign_current_work (worker,NULL );
Greg Kroah-Hartman
maintainerPATCH 3/1887 io_uring/io-wq: dont hide a link from cancellations
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit 436d48a2ed13112d2d27085325838e5bce6b4507 upstream.
A task that exits cancels its tracked requests and waits until they are gone. io_uring_cancel_generic() looks everywhere a request can be, and goes to sleep if it found nothing to cancel. It is woken up each time one of the requests of the task is completed by task work or freed.
When io-wq is done with a request that has a link, there is a time in which the next request of the link can't be found:
io_worker_handle_work()
io_assign_current_work(worker, NULL)
io_wq_free_work(work)
io_req_find_next() // takes the link off the request
io_free_req() // task work for the task
io_assign_current_work(worker, linked)
io_run_task_work()
cond_resched()
worker->cur_work = linked
It is not pending, it is not the current work of a worker, and it is not yet on the list that it is about to be parked on. If the pass that the exiting task makes because of io_free_req() falls into that time, it finds nothing and the task goes to sleep. The worker then runs the link, which IO_WQ_BIT_EXIT doesn't prevent for bounded work. If that parks the request nothing is completed or freed, and nobody wakes up the task. If it is the process that exits it can't be killed any more either.
NOP, IOSQE_ASYNC | IOSQE_IO_LINK
FUTEX_WAIT, FUTEX2_PRIVATE
exit of the thread, or of the process, up to 63us later
With four of these per round 5 to 8 of 10,000 rounds hang (4 CPUs, KVM):
io_uring_cancel_generic
do_exit
Commit f8b632e89a10 ("io_uring: tighten task exit cancellations") is about the same gap, and makes the task look again for whatever happens before io_free_req().
Free the request once the link is the current work of the worker, or pending. Whoever is woken up by that can find the link, until it is parked where cancellations look as well. To do so split io_wq_free_work() in two.
[ 6.1: io-wq calls back through struct io_wq_data, so the split is a new
->put_work callback next to ->free_work, and io_put_req_find_next() is folded into io_wq_put_work(). io_wq_put_work() keeps the link check of 6.1, without the REQ_F_CQE_SKIP condition that commit 5530a5102e3c adds in 7.3 ]
--- io_uring/io-wq.c | 22 ++++++++++++++++++---- io_uring/io-wq.h | 4 +++- io_uring/io_uring.c | 42 ++++++++++++++++++++++-------------------- io_uring/io_uring.h | 3 ++- io_uring/tctx.c | 1 + 5 files changed, 46 insertions(+), 26 deletions(-)
io_uring/io-wq.c +18 -4
@@ -118,6 +118,7 @@ struct io_wqe {struct io_wq {unsigned long state; +put_work_fn *put_work;free_work_fn *free_work;io_wq_work_fn *do_work;
@@ -593,8 +594,9 @@ static void io_worker_handle_work(struct/* handle a whole dependent link */ do { bool do_kill = test_bit(IO_WQ_BIT_EXIT, &wq->state); - struct io_wq_work *next_hashed, *linked; + struct io_wq_work *next_hashed, *linked, *done = work; unsigned int hash = io_get_work_hash(work); + bool last; next_hashed = wq_next_work(work);
@@ -610,7 +612,7 @@ static void io_worker_handle_work(struct wq->do_work (work);io_assign_current_work (worker,NULL ); - linked = wq->free_work (work); + last = wq->put_work (work, &linked); work = next_hashed;if (!work && linked && !io_wq_is_hashed (linked)) { work = linked;
@@ -619,6 +621,13 @@ static void io_worker_handle_work(structio_assign_current_work (worker, work);if (linked)io_wqe_enqueue (wqe, linked); +/* +* Not before the link is current or pending work again. +* This may be the last time that a task is woken up +* which exits and looks for requests to cancel. +*/ +if (last) + wq->free_work (done);if (hash !=-1U && !next_hashed) {/* serialize hash clear with wake_up() */
@@ -899,9 +908,13 @@ static void io_run_cancel(struct io_wq_wstruct io_wq *wq = wqe->wq;do { +struct io_wq_work *linked; + work->flags |=IO_WQ_WORK_CANCEL ; wq->do_work (work); - work = wq->free_work (work); +if (wq->put_work (work, &linked)) + wq->free_work (work); + work = linked; }while (work); }
@@ -1170,7 +1183,7 @@ struct io_wq *io_wq_create(unsigned bounstruct io_wq *wq;cpumask_var_t allowed_mask; -if (WARN_ON_ONCE (!data->free_work || !data->do_work)) +if (WARN_ON_ONCE (!data->put_work || !data->free_work || !data->do_work))return ERR_PTR (-EINVAL );if (WARN_ON_ONCE (!bounded))return ERR_PTR (-EINVAL );
@@ -1184,6 +1197,7 @@ struct io_wq *io_wq_create(unsigned bounrefcount_inc (&data->hash->refs); wq->hash = data->hash; + wq->put_work = data->put_work; wq->free_work = data->free_work; wq->do_work = data->do_work;
io_uring/io-wq.h +3 -1
@@ -21,7 +21,8 @@ enum io_wq_cancel { IO_WQ_CANCEL_NOTFOUND, /* work not found */ }; -typedef struct io_wq_work *(free_work_fn )(struct io_wq_work *); +typedef bool (put_work_fn )(struct io_wq_work *,struct io_wq_work **); +typedef void (free_work_fn )(struct io_wq_work *);typedef void (io_wq_work_fn )(struct io_wq_work *);struct io_wq_hash {
@@ -40,6 +41,7 @@ struct io_wq_data {struct io_wq_hash *hash;struct task_struct *task;io_wq_work_fn *do_work; +put_work_fn *put_work;free_work_fn *free_work; };
io_uring/io_uring.c +22 -20
63 lines not on this page · raw message
io_uring/io_uring.h +2 -1
@@ -70,7 +70,8 @@ int io_do_iopoll(struct io_ring_ctx *ctxvoid io_free_batch_list (struct io_ring_ctx *ctx,struct io_wq_work_node *node);int io_req_prep_async (struct io_kiocb *req); -struct io_wq_work *io_wq_free_work (struct io_wq_work *work); +bool io_wq_put_work (struct io_wq_work *work,struct io_wq_work **linked); +void io_wq_free_work (struct io_wq_work *work);void io_wq_submit_work (struct io_wq_work *work);void io_free_req (struct io_kiocb *req);
io_uring/tctx.c +1 -0
@@ -35,6 +35,7 @@ static struct io_wq *io_init_wq_offload( data.hash = hash; data.task = task; + data.put_work = io_wq_put_work; data.free_work = io_wq_free_work; data.do_work = io_wq_submit_work;
Greg Kroah-Hartman
maintainerPATCH 4/1887 io_uring: dont flood a cancelling task with task_work
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit 22e643e61b9b6299b42ff7d88bab48bccada8a5d upstream.
io_ring_exit_work() asks each task which has used the ring to remove its tctx node, by task_work, and repeats that until the list is empty. io_tctx_exit_cb() doesn't touch the node while the task is in io_uring_cancel_generic(), which removes all the nodes at its end. So the work item queues the callback again as soon as it has completed, for nothing.
That is more than a waste of time. task_work_run() only returns when it finds the list empty. If the rings are released from inside the cancellation, because requests of other rings held the last references to their files, up to 64 work items keep sending callbacks to the one task which is running them. It never finds the list empty, never gets back to the cancellation, the nodes stay, and so it goes on: a task with 60 pairs of rings which poll each other ran 280000 callbacks in 5 seconds, 20 seconds after exit_group(). It ends when all the senders happen to be late at the same time. Until then the task keeps a CPU and the work items busy.
An exiting task can't be killed meanwhile. execve() cancels the requests in the same way, so a live task can get stuck there as well, for minutes. If it takes more than five, the work items run into the WARN_ON_ONCE(time_after(jiffies, timeout)) of io_ring_exit_work(). No privilege is needed for any of this.
If the callback has met a task in cancellation, wait a little before it is sent again. Nobody has to wake the work item up for that: either the node is gone by then, or it is the turn of the next round.
--- io_uring/io_uring.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
io_uring/io_uring.c +11 -1
@@ -2829,6 +2829,7 @@ struct io_tctx_exit {struct callback_head task_work;struct completion completion;struct io_ring_ctx *ctx; +bool in_cancel; };static __cold void io_tctx_exit_cb (struct callback_head *cb)
@@ -2843,7 +2844,8 @@ static __cold void io_tctx_exit_cb(struc* tctx can be NULL if the queueing of this task_work raced with * work cancelation off the exec path. */ -if (tctx && !atomic_read (&tctx->in_idle)) + work->in_cancel = tctx &&atomic_read (&tctx->in_idle); +if (tctx && !work->in_cancel)io_uring_del_tctx_node ((unsigned long )work->ctx);complete (&work->completion); }
@@ -2931,6 +2933,14 @@ static __cold void io_ring_exit_work(str* wait is marked as interruptible. */ wait_for_completion_interruptible (&exit.completion); +/* +* The task removes the node when it is done with its +* cancellation. Give it the time for that: it doesn't get back +* to it as long as it finds new task_work each time it has run +* the old one, and we may be one of many who send it. +*/ +if (exit.in_cancel) +schedule_timeout_idle (HZ /20 );mutex_lock (&ctx->uring_lock); }mutex_unlock (&ctx->uring_lock);
Greg Kroah-Hartman
maintainerPATCH 5/1887 io_uring/io-wq: dont strand work when a worker exits
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit ad41f325be1271b22d99353819c90f0d5e45acc8 upstream.
A worker exits if its idle timeout fired and it isn't the last one, if its affinity was changed, or if the wq is marked exit-on-idle. It decides so after it found the work list empty, and until io_worker_exit() is through it stays on the free list and in ->nr_running:
worker io_wq_enqueue()io_acct_run_queue() == false
queues work
io_acct_activate_free_worker()
wake_up_process(worker)
// found one, nothing to createacct->nr_workers--
breakio_worker_exit()
Nobody is going to look at the work. If other workers exist, it has to wait until one of them finishes what it is blocked on or hits its idle timeout. If not, which is possible for the affinity and the exit-on-idle case, it sits there until something else is queued. For exit-on-idle it takes a task that closes its last ring and sets up a new one while the workers are on their way out.
Make the worker take itself off the free list when it gives up its ->nr_workers slot, then leave ->nr_running, and only then take the final look at the work list. That look and queueing work are both done under acct->lock, so either the worker sees the work and stays, or the enqueue side sees that the worker is gone and wakes or creates another one. If it wants to stay and finds that its slot has been taken, a worker has been created in its place, which is going to look at the work list, and it can leave after all.
[ 6.1: no exit-on-idle state, per-node io_wqe with ->lock for the
workers and non-atomic worker flags; io_acct_run_queue() drops acct->lock itself here ]
--- io_uring/io-wq.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-)
io_uring/io-wq.c +38 -1
@@ -642,6 +642,36 @@ static void io_worker_handle_work(struct }while (1 ); } +/* +* The worker has decided to exit, and has given up its ->nr_workers slot and +* its place on the free list. io_wqe_enqueue() may have picked it from that +* list, or seen it running, after it last looked at the work list. Leave +* ->nr_running as well and check again. Returns false if the worker has to +* stay. +*/ +static bool io_worker_retire (struct io_wqe *wqe,struct io_worker *worker) +{ +struct io_wqe_acct *acct =io_wqe_get_acct (worker); + +/* turns io_wqe_dec_running() and the scheduler hooks into no-ops */ + worker->flags &= ~IO_WORKER_F_UP ; +atomic_dec (&acct->nr_running); +if (!io_acct_run_queue (acct)) +return true; + +raw_spin_lock (&wqe->lock); +if (acct->nr_workers >= acct->max_workers) { +/* a worker was created in our place, the work is its business */ +raw_spin_unlock (&wqe->lock); +return true; + } + acct->nr_workers++; +raw_spin_unlock (&wqe->lock); +atomic_inc (&acct->nr_running); + worker->flags |=IO_WORKER_F_UP ; +return false; +} +static int io_wqe_worker (void *data) {struct io_worker *worker = data;
@@ -670,9 +700,16 @@ static int io_wqe_worker(void *data)*/ if (last_timeout && (exit_mask || acct->nr_workers >1 )) { acct->nr_workers--; +if (worker->flags &IO_WORKER_F_FREE ) { + worker->flags &= ~IO_WORKER_F_FREE ; +hlist_nulls_del_init_rcu (&worker->nulls_node); + }raw_spin_unlock (&wqe->lock);__set_current_state (TASK_RUNNING ); -break ; +if (io_worker_retire (wqe, worker)) +break ; + last_timeout = false; +continue ; } last_timeout = false;__io_worker_idle (wqe, worker);
Greg Kroah-Hartman
maintainerPATCH 6/1887 io_uring/io-wq: dont exit with a creation pending
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit e231d2e8f80d3649ecd3851b7f2abdfbe606c04b upstream.
A worker that is the last one to go to sleep while work is pending asks for another worker. io_wq_dec_running() bumps ->nr_running on behalf of the new worker and queues create_worker_cb() as task_work for the owner of the io-wq. Until that has run, everybody else takes it that a worker is running which is going to look after the work list: io_wq_enqueue() doesn't create one, and other workers that go to sleep don't find themselves to be the last.
If the worker that made the request exits, io_worker_exit() cancels the task_work, and io_worker_cancel_cb() drops ->nr_running without a look at the work list:
worker A worker B io_wq_enqueue()
blocks, work is pending
nr_running++
queues create_worker_cb()
wakes, handles the work
idle timeout, decides to exit
picks up work 1
queues work 2 B is on the free list
still: wakes B
work 1 blocks
nr_running 2 -> 1io_worker_exit()
io_worker_cancel_cb()
nr_running 1 -> 0
Work 2 has to wait for work 1, although there is room for more workers. It takes an owner that doesn't get around to run its task_work for the time of the idle timeout, less if the worker exits because its affinity was changed or the io-wq is marked exit-on-idle.
Let the worker stay around until its request has been dealt with. Only the worker itself sets ->create_state, so it can't be set behind its back once it has decided to leave.
--- io_uring/io-wq.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
io_uring/io-wq.c +5 -1
@@ -697,8 +697,12 @@ static int io_wqe_worker(void *data)/* * Last sleep timed out. Exit if we're not the last worker, * or if someone modified our affinity. +* Not as long as a request of ours for another worker is +* pending, though. It is accounted as a running worker, which +* others rely on, and io_worker_exit() would cancel it. */ -if (last_timeout && (exit_mask || acct->nr_workers >1 )) { +if (last_timeout && (exit_mask || acct->nr_workers >1 ) && + !test_bit (0 , &worker->create_state)) { acct->nr_workers--;if (worker->flags &IO_WORKER_F_FREE ) { worker->flags &= ~IO_WORKER_F_FREE ;
Greg Kroah-Hartman
maintainerPATCH 7/1887 io_uring/io-wq: let cancel find picked up hashed work
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit e9efeb4fc97b0879512a3c3b995ed448f2487e12 upstream.
io_get_next_work() takes all the work items that share a hash off the work list in one go, and the worker runs them one after the other. Only the one it is working on is visible as ->cur_work. The others are neither on the list nor current, so io_wq_cancel_cb() can't find them.
IORING_OP_ASYNC_CANCEL and IORING_REGISTER_SYNC_CANCEL return -ENOENT for a request that has not even been started, e.g. a buffered write queued behind another write to the same file that is blocked, and the request is carried out. The cancellation done for a task or ring that goes away gets there in the end, as it keeps trying, but it has to wait for each item to become current.
Keep a pointer to the remainder of the chain next to ->cur_work, and have io_wq_worker_cancel() look at it. The items on it belong to the worker, which needs ->lock to move on to the next one. Matching work is flagged with IO_WQ_WORK_CANCEL and fails with -ECANCELED when its turn comes. The worker isn't signalled for it, that would interrupt the unrelated work it is busy with. As the request isn't gone yet, it is reported like running work, with -EALREADY.
[ 6.1: ->next_work is the item being picked up here, which
io_wq_worker_cancel() checks next to ->cur_work, so the chain remainder is a new ->chain_work, set when the item is picked up as well. work->flags is not atomic here ]
--- io_uring/io-wq.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
io_uring/io-wq.c +20 -0
@@ -53,6 +53,8 @@ struct io_worker {struct io_wq_work *cur_work;struct io_wq_work *next_work; +/* rest of the hashed chain ->next_work or ->cur_work came with */ +struct io_wq_work *chain_work;raw_spinlock_t lock;struct completion ref_done;
@@ -548,6 +550,9 @@ static void io_assign_current_work(strucraw_spin_lock (&worker->lock); worker->cur_work = work; worker->next_work =NULL ; +/* stays valid while in between two items of a chain */ +if (work) + worker->chain_work =wq_next_work (work);raw_spin_unlock (&worker->lock); }
@@ -584,6 +589,7 @@ static void io_worker_handle_work(struct*/ raw_spin_lock (&worker->lock); worker->next_work = work; + worker->chain_work =wq_next_work (work);raw_spin_unlock (&worker->lock); }else {break ;
@@ -1073,6 +1079,7 @@ static bool __io_wq_worker_cancel(structstatic bool io_wq_worker_cancel (struct io_worker *worker,void *data) {struct io_cb_cancel_data *match = data; +struct io_wq_work *work;/* * Hold the lock to avoid ->cur_work going out of scope, caller
@@ -1082,6 +1089,19 @@ static bool io_wq_worker_cancel(struct iif (__io_wq_worker_cancel (worker, match, worker->cur_work) ||__io_wq_worker_cancel (worker, match, worker->next_work)) match->nr_running++; +/* +* Hashed work is taken off the work list a chain at a time, what the +* worker hasn't started yet can only be found here. It doesn't move on +* without the lock. Just mark the work, it fails once it is its turn. +*/ +for (work = worker->chain_work; work; work =wq_next_work (work)) { +if (match->nr_running && !match->cancel_all) +break ; +if (match->fn (work, match->data)) { + work->flags |=IO_WQ_WORK_CANCEL ; + match->nr_running++; + } + }raw_spin_unlock (&worker->lock);return match->nr_running && !match->cancel_all;
Greg Kroah-Hartman
maintainerPATCH 8/1887 io_uring/poll: dont lose a cancel as io-wq arms poll
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit 6d2d4c2530e95ff6ddeb98195d49d99dbca14369 upstream.
A request on a pollable file that was forced to io-wq is issued without blocking there. If that ends in -EAGAIN, io_wq_submit_work() arms poll for it and returns. It looks at IO_WQ_WORK_CANCEL once, before it issues the request.
Somebody who wants to cancel the request in between finds it running:
io-wq worker io_try_cancel()
io_wq_submit_work()
IO_WQ_WORK_CANCEL isn't set
io_issue_sqe() = -EAGAIN
io_async_cancel_one()
sets IO_WQ_WORK_CANCEL signals the worker = -EALREADY
io_poll_cancel() = -ENOENT
...
= -ENOENT
io_arm_poll_handler() = IO_APOLL_OK
return
Nobody looks at the flag again, and the signal doesn't matter to a worker that doesn't sleep. The request is armed as if nothing had happened:
- a linked timeout completes with -ENOENT, and the request it was meant to limit waits for as long as it takes.
- IORING_OP_ASYNC_CANCEL returns -EALREADY, and the request stays.
- IORING_REGISTER_SYNC_CANCEL waits for the request to complete if it gets -EALREADY. Since commit 5623eb1ed035 ("io_uring/tctx: add separate lock for list of tctx's in ctx") it doesn't sleep but spins, so its next attempt finds the armed poll.
The same goes for a multishot poll, recv or accept that is armed from io-wq.
With a read of an empty pipe, IOSQE_ASYNC, and a linked timeout of 5ms or a cancel in the same submission, in a guest that is slow enough (TCG, KASAN), the request is lost in 21 of 24 rounds of 40 or 100 attempts.
While it arms poll from io-wq, __io_arm_poll_handler() owns the request. Look at the flag once the request is in the hash table. The table is searched and the request is added with ->uring_lock held, and the flag is set before the search. So either the search finds the request, or it came first and the flag is seen. With the request marked as cancelled, the task work that is queued, right away or because ownership can't be released, fails it with -ECANCELED.
What the canceller is told doesn't change. In this window a linked timeout still completes with -ENOENT rather than -ETIME, a cancel request with -EALREADY, and one with IORING_ASYNC_CANCEL_ALL or _ANY with a count that doesn't include the request. But the request is cancelled, so what is new is a request that completes with -ECANCELED after such a result.
This doesn't help in two cases:
- IORING_ASYNC_CANCEL_ALL and _ANY, if the work is flagged after the test added here, while io-wq still has it as the current work of the worker. io_cancel_cb() stamps it with the sequence of the cancel, so the search of the hash table on behalf of the same cancel takes it for done and skips it.
- requests that are parked elsewhere by io-wq, like IORING_OP_FUTEX_WAIT and IORING_OP_WAITID. They have the same problem.
[ 6.1: work->flags is not atomic here, the hash table has its own locks
]
--- io_uring/poll.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
io_uring/poll.c +11 -0
@@ -652,6 +652,17 @@ static int __io_arm_poll_handler(structio_poll_add_hash (req); +/* +* Whoever tried to cancel the request while io-wq was running it has +* flagged the work item. If it searched the hash table before the +* request got there it found nothing, and it won't come back. Both +* the search and the insertion are done with the hash bucket lock +* held, and the flag is set before the search. If the search came +* first, the flag is visible by now. +*/ +if (ipt->owning && (req->work.flags &IO_WQ_WORK_CANCEL )) +io_poll_mark_cancelled (req); +if (mask && (poll->events &EPOLLET ) &&io_poll_can_finish_inline (req, ipt)) {__io_poll_execute (req, mask);
Greg Kroah-Hartman
maintainerPATCH 9/1887 io_uring/cancel: dont forget that the work was running
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit 8aa0e5db4845fb5ac11abe40d7b1cac0656c3ee3 upstream.
If the request to be cancelled is being run by io-wq, io_async_cancel_one() flags the work, signals the worker and returns -EALREADY. Since commit ccbf726171b7 ("io_uring: perform poll removal even if async work removal is successful") io_try_cancel() goes on regardless, as poll may be armed for the request. If it isn't, and nothing else turns up, the result is the -ENOENT of the last search.
__io_async_cancel() makes up for that. On -ENOENT it tries the io-wq of every task that uses the ring, and that of the caller is one of them. So the work is found a second time, and the result is -EALREADY after all.
Unless the worker is done with it by then. If the work is flagged before io_wq_submit_work() looks at IO_WQ_WORK_CANCEL, all the worker does is to queue the request to be failed by task work. Then it isn't anywhere to be found until the task work has run, and
- IORING_REGISTER_SYNC_CANCEL returns -ENOENT,
- IORING_OP_ASYNC_CANCEL completes with -ENOENT,
for a request that they have just cancelled, and that completes with -ECANCELED.
With a read of an empty pipe, IOSQE_ASYNC, and a sync cancel right behind it, 1 to 3 of 1,000,000 calls return -ENOENT, and 50 to 110 with IORING_SETUP_DEFER_TASKRUN (4 CPUs, KVM). Nothing is written to the pipe, and all of these reads end with -ECANCELED.
Remember that the work was found. IORING_OP_ASYNC_CANCEL completes with -EALREADY, as it does if the worker is a bit slower. For IORING_REGISTER_SYNC_CANCEL it means to try again, which ends with 0.
The result of a linked timeout, which calls io_try_cancel() by itself, and the number that is returned for IORING_ASYNC_CANCEL_ALL and _ANY don't change.
--- io_uring/cancel.c | 13 ++++++++++++- io_uring/cancel.h | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-)
io_uring/cancel.c +12 -1
@@ -114,6 +114,8 @@ int io_try_cancel(struct io_uring_task **/ if (!ret)return 0 ; +if (ret == -EALREADY ) + cd->running = true; ret =io_poll_cancel (ctx, cd, issue_flags);if (ret != -ENOENT )
@@ -162,6 +164,7 @@ static int __io_async_cancel(struct io_cstruct io_tctx_node *node;int ret, nr =0 ; + cd->running = false; do { ret = io_try_cancel(tctx, cd, issue_flags); if (ret == -ENOENT)
@@ -185,7 +188,15 @@ static int __io_async_cancel(struct io_c } }io_ring_submit_unlock (ctx, issue_flags); -return all ? nr : ret; +if (all) +return nr; +/* +* The worker may be done with the work that was found running, and +* flagged, above. That isn't the same as not having found it. +*/ +if (ret == -ENOENT && cd->running) + ret = -EALREADY ; +return ret; }int io_async_cancel (struct io_kiocb *req,unsigned int issue_flags)
io_uring/cancel.h +2 -0
@@ -9,6 +9,8 @@ struct io_cancel_data {u8 opcode;u32 flags;int seq; +/* io_try_cancel() has found it being run by io-wq, and flagged it */ +bool running; };int io_async_cancel_prep (struct io_kiocb *req,const struct io_uring_sqe *sqe);
Greg Kroah-Hartman
maintainerPATCH 10/1887 io_uring/cancel: recognize "no timeout" on 32-bit
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit 3774e4d4c8533da2caae95556c4d635c7c4f45b8 upstream.
IORING_REGISTER_SYNC_CANCEL waits without a limit if both fields of io_uring_sync_cancel_reg::timeout are -1. io_sync_cancel() compares them with -1UL. They are of type long long. With a long of 32 bits -1UL is 4294967295, which is what it stays when it is converted for the comparison, and the fields are never equal to it.
So { -1, -1 } is taken for a timeout. ktime_set() takes the nanoseconds as an unsigned long, so what becomes of it is -1s + 4294967295ns = 3.29s.
If the request is being run by io-wq and can't be interrupted, the call returns -ETIME after that time, rather than waiting for the request to be gone. On i386, with a buffered read from a null_blk device that takes 4s to complete a request, IOSQE_ASYNC, that is what each call does.
--- io_uring/cancel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
io_uring/cancel.c +1 -1
@@ -306,7 +306,7 @@ int io_sync_cancel(struct io_ring_ctx *cif (ret != -EALREADY ) goto out; -if (sc.timeout.tv_sec !=-1UL || sc.timeout.tv_nsec !=-1UL ) { +if (sc.timeout.tv_sec !=-1 || sc.timeout.tv_nsec !=-1 ) {struct timespec64 ts = { .tv_sec = sc.timeout.tv_sec, .tv_nsec = sc.timeout.tv_nsec
Greg Kroah-Hartman
maintainerPATCH 11/1887 io_uring/cancel: let CANCEL_ALL find parked requests
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit fe6ca13c98b1223f6005f32913ebd32e4df64b77 upstream.
A cancellation with IORING_ASYNC_CANCEL_ALL or _ANY goes on until it finds nothing more. A request may stay where it was found for a while after it has been cancelled, so each one that matches is stamped with the sequence number of the cancellation, and is skipped from then on.
io_cancel_cb() does so for io-wq work as well. There is no need to:
pending work is taken off the list, and the workers are looked at once per call. And it does harm. A request that is run by io-wq may be parked while it still is the current work of the worker: poll gets armed for it, or it is put on ->futex_list or ->waitid_list.
io-wq worker io_try_cancel()
io_wq_submit_work()
io_arm_poll_handler()
io_poll_add_hash()
io_async_cancel_one()
io_cancel_cb()
stamps the request
sets IO_WQ_WORK_CANCEL = -EALREADY
io_poll_cancel()
skips the request
= -ENOENT
io_assign_current_work(NULL)
The flag comes too late for the worker to see it, and the search that would have found the request takes it for done. The cancellation returns, and the request stays.
With a multishot poll, IOSQE_ASYNC, and IORING_OP_ASYNC_CANCEL with IORING_ASYNC_CANCEL_ALL up to 63us later, that happens to 4 of 1,000 requests (4 CPUs, KVM).
Take the stamp off again if the work matches. If the request is found on one of the lists it gets a new one, and io_cancel_cb() doesn't match it a second time.
__io_async_cancel() tries the io-wq of the caller twice. So far the stamp has kept it from counting work that is running there the second time. Skip it instead, so that the number that is returned stays the same.
[ 6.1: no ->cancel_seq_set, a request is skipped when ->work.cancel_seq
equals the sequence of the cancellation, so set it back to the one before ]
--- io_uring/cancel.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
io_uring/cancel.c +14 -4
@@ -69,7 +69,16 @@ static bool io_cancel_cb(struct io_wq_wo struct io_kiocb *req = container_of(work, struct io_kiocb, work);struct io_cancel_data *cd = data; -return io_cancel_req_match (req, cd); +if (!io_cancel_req_match (req, cd)) +return false; +/* +* Pending work is gone once it has matched. Work that is running may +* park the request where the same cancellation looks next. Don't make +* it skip the request as one that it has dealt with. +*/ +if (cd->flags & (IORING_ASYNC_CANCEL_ALL |IORING_ASYNC_CANCEL_ANY )) + req->work.cancel_seq = cd->seq -1 ; +return true; } static int io_async_cancel_one(struct io_uring_task *tctx,
@@ -178,9 +187,10 @@ static int __io_async_cancel(struct io_cio_ring_submit_lock (ctx, issue_flags); ret = -ENOENT ;list_for_each_entry (node, &ctx->tctx_list, ctx_node) { -struct io_uring_task *tctx = node->task->io_uring; - - ret =io_async_cancel_one (tctx, cd); +/* has been done above, don't count what is running there */ +if (all && node->task->io_uring == tctx) +continue ; + ret =io_async_cancel_one (node->task->io_uring, cd);if (ret != -ENOENT ) {if (!all)break ;
Greg Kroah-Hartman
maintainerPATCH 12/1887 io_uring/wait: look at all CQ waiters on wake up
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit 356f92f2412686f822383b784fa102924407457a upstream.
io_wake_function() returns -1 if the waiter it is called for doesn't have enough events yet, which makes __wake_up_common() stop walking the wait queue. That assumes that the waiters behind it can't be satisfied either. Each waiter has its own target though, computed from the min_complete it passed in:
thread A: io_uring_enter(GETEVENTS, min_complete = 10) // queued first thread B: io_uring_enter(GETEVENTS, min_complete = 1)
one CQE is posted: A isn't woken, and B isn't even considered
B keeps sleeping with the event it asked for sitting in the CQ ring, until A's demand is met or a timeout or signal ends the wait.
Return 0 to carry on with the next waiter. Only waiters whose condition is met are woken, like before.
--- io_uring/io_uring.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
io_uring/io_uring.c +2 -1
@@ -2368,7 +2368,8 @@ static int io_wake_function(struct wait_*/ if (io_should_wake (iowq) ||io_has_work (ctx))return autoremove_wake_function (curr, mode, wake_flags, key); -return -1 ; +/* keep going, a waiter further down may be content with less */ +return 0 ; }int io_run_task_work_sig (struct io_ring_ctx *ctx)
Greg Kroah-Hartman
maintainerPATCH 13/1887 io_uring/poll: drop stale double poll entry on rearm
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit f2dbe87968a3aef74a11c025776d293b80964d3f upstream.
A file that uses two wait queues for poll, e.g. a tty, gets a second io_poll entry, which IORING_OP_POLL_ADD keeps in ->async_data until the request is freed. io_poll_add() can run more than once for a request
though: IORING_OP_POLL_REMOVE with one of the update flags disarms and rearms it, and io_poll_task_func() reissues it if a wake up turns out to be spurious. The second poll_wait() of the new round then finds *poll_ptr set, with ->head cleared by the disarm, and __io_queue_proc() fails what it takes for a third wait queue with -EINVAL.
For an update that means that the poll request is completed with -ECANCELED, while the update itself reports success. For a spurious wake up, e.g. tcsetattr() on the polled tty, the poll request fails with -EINVAL.
Free the old entry and clear the poll flags before arming, which is what io_arm_apoll() does for internal polling. All entries have been removed from their wait queues at that point.
--- io_uring/poll.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
io_uring/poll.c +12 -0
@@ -999,6 +999,18 @@ int io_poll_add(struct io_kiocb *req, unif (req->ctx->flags & (IORING_SETUP_SQPOLL |IORING_SETUP_SINGLE_ISSUER )) req->flags |=REQ_F_HASH_LOCKED ; +/* +* A poll update or a spurious wake up arms the request again. Forget +* the entries of the previous round like io_arm_apoll() does, a stale +* second entry would be taken for a third wait queue. +*/ +if (req_has_async_data (req)) { +kfree (req->async_data); + req->async_data =NULL ; + req->flags &= ~REQ_F_ASYNC_DATA ; + } + req->flags &= ~(REQ_F_SINGLE_POLL |REQ_F_DOUBLE_POLL ); + ret =__io_arm_poll_handler (req, poll, &ipt, poll->events, issue_flags);if (ret >0 ) {io_req_set_res (req, ipt.result_mask,0 );
Greg Kroah-Hartman
maintainerPATCH 14/1887 io_uring/timeout: dont skip over reached sequences
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit c6c0b3eba88c3b13ca11ea112404982e86d58f7a upstream.
io_flush_timeouts() copes with the wrap of the CQ sequence by looking at the distance from ->cq_last_tm_flush. That relies on the target of each pending timeout being at or ahead of the last flush.
io_timeout() breaks that. It sets ->cq_last_tm_flush to the current sequence, on the assumption that nothing has been posted since the last flush. That isn't true. A multishot request posts its CQEs right when it is issued or retried, but they are committed, and the timeouts flushed, at the end of the submission or task_work run:
X: IORING_OP_TIMEOUT, off == 1 target_seq == N + 1
io_submit_sqes()
multishot recv, posts two CQEs sequence == N + 2
Y: IORING_OP_TIMEOUT, off == 100 ->cq_last_tm_flush = N + 2 io_flush_timeouts()
X: events_needed = N + 1 - (N + 2) // 0xffffffff
events_got = 0 // not yet
X isn't completed although the completions it was waiting for have happened, only its timer can end it now. And as the list is sorted and the walk ends at the first timeout that isn't due, it gets in the way of the ones behind it. The insertion sort has the same problem, it measures the distance of the pending targets from the current sequence.
->cq_last_tm_flush only needs to be brought up to date if no timeout is waiting for a sequence, as io_flush_timeouts() isn't called before the first one is set up. Otherwise it is current enough. Timeouts with a sequence come first in the list, so looking at the first entry will do. Use the last flush as the base for the insertion sort as well.
--- io_uring/timeout.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)
io_uring/timeout.c +14 -7
@@ -534,8 +534,9 @@ int io_timeout(struct io_kiocb *req, uns struct io_timeout *timeout = io_kiocb_to_cmd(req, struct io_timeout);struct io_ring_ctx *ctx = req->ctx;struct io_timeout_data *data = req->async_data; +struct io_timeout *first;struct list_head *entry; -u32 tail, off = timeout->off; +u32 tail, base, off = timeout->off;spin_lock_irq (&ctx->timeout_lock);
@@ -552,11 +553,17 @@ int io_timeout(struct io_kiocb *req, uns tail =data_race (ctx->cached_cq_tail) -atomic_read (&ctx->cq_timeouts); timeout->target_seq = tail + off; -/* Update the last seq here in case io_flush_timeouts() hasn't. -* This is safe because ->completion_lock is held, and submissions -* and completions are never mixed in the same ->completion_lock section. +/* +* Update the last seq here in case io_flush_timeouts() hasn't, it only +* gets called once sequences are in use. Leave it alone if there are +* timeouts waiting for one. CQEs may have been posted since the last +* flush, and a target that has been reached must not fall behind it. */ - ctx->cq_last_tm_flush = tail; + first = list_first_entry_or_null(&ctx->timeout_list, struct io_timeout, + list); +if (!first ||io_is_timeout_noseq (cmd_to_io_kiocb (first))) + ctx->cq_last_tm_flush = tail; + base = ctx->cq_last_tm_flush;/* * Insertion sort, ensuring the first entry in the list is always
@@ -568,8 +575,8 @@ int io_timeout(struct io_kiocb *req, unsif (io_is_timeout_noseq (nxt))continue ; -/* nxt.seq is behind @tail, otherwise would've been completed */ -if (off >= nextt->target_seq - tail) +/* no target is behind the last flush, see io_flush_timeouts() */ +if (timeout->target_seq - base >= nextt->target_seq - base)break ; } add:
Greg Kroah-Hartman
maintainerPATCH 15/1887 io_uring/sqpoll: let the thread sleep on disabled rings
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit d492dcbb3b81c1c2d0aabef41fa1307093f3a556 upstream.
__io_sq_thread() doesn't submit anything as long as the ring has IORING_SETUP_R_DISABLED set. The check that keeps the SQPOLL thread from going to sleep while the SQ ring holds entries doesn't know about that. If an application fills in SQEs first and enables the ring later, the thread finds that there is work each time it is about to sleep, goes around, doesn't submit it, and so on. It uses up a CPU until the ring gets enabled.
Entries in the SQ ring of a disabled ring are no reason to stay awake. io_register_enable_rings() clears the flag and then wakes the thread, and the flag is looked at after prepare_to_wait(), so the thread can't miss that.
--- io_uring/sqpoll.c | 7 +++++++ 1 file changed, 7 insertions(+)
io_uring/sqpoll.c +7 -0
@@ -293,6 +293,13 @@ static int io_sq_thread(void *data)*/ smp_mb__after_atomic (); +/* +* Nothing gets submitted before the ring is +* enabled, which comes with a wake up. +*/ +if (READ_ONCE (ctx->flags) &IORING_SETUP_R_DISABLED ) +continue ; +if (io_sqring_entries (ctx)) { needs_sched = false;break ;
Greg Kroah-Hartman
maintainerPATCH 16/1887 io_uring: dont pass restart error codes to userspace
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit e1a64bc64897f4c2fe460922c345f2ed8f889b5f upstream.
-ERESTARTSYS and friends are instructions for the system call exit code, which either restarts the call or turns them into -EINTR. They are not supposed to be seen by applications. A request isn't a system call, nobody looks at what it returns before that is put into a CQE.
The read/write and the networking opcodes convert these codes to -EINTR by hand. The others don't. An io-wq worker that is blocked in the open of a FIFO, a tty or some other device, or in a splice from an empty pipe, and that gets interrupted because the request is cancelled, completes it with -512:
IORING_OP_OPENAT, IOSQE_ASYNC // FIFO without a writer
IORING_OP_ASYNC_CANCEL // -EALREADY, worker is signalled
CQE of the open: res == -512
There are more candidates, like whatever a file system or driver returns from ->flush(), ->fsync(), ->fallocate() or ->uring_cmd(), or breaking a lease or delegation.
Take care of it in io_issue_sqe(), which all of them go through. The helper is moved from rw.c as is. The cost is a compare and a branch that is not taken per request.
--- io_uring/io_uring.c | 8 +++++++- io_uring/io_uring.h | 18 ++++++++++++++++++ io_uring/rw.c | 18 ------------------ 3 files changed, 25 insertions(+), 19 deletions(-)
io_uring/io_uring.c +7 -1
@@ -1741,12 +1741,18 @@ static int io_issue_sqe(struct io_kiocb }if (ret ==IOU_OK ) { +/* not all handlers take care of the internal restart codes */ +if (unlikely (req->cqe.res <= -ERESTARTSYS )) + req->cqe.res =io_fixup_restart_res (req->cqe.res);if (issue_flags &IO_URING_F_COMPLETE_DEFER )io_req_complete_defer (req);else io_req_complete_post (req); - }else if (ret !=IOU_ISSUE_SKIP_COMPLETE ) + }else if (ret !=IOU_ISSUE_SKIP_COMPLETE ) { +if (unlikely (ret <= -ERESTARTSYS )) + ret =io_fixup_restart_res (ret);return ret; + }/* If the op doesn't have a file, we're not polling for it */ if ((req->ctx->flags &IORING_SETUP_IOPOLL ) && def->iopoll_queue)
io_uring/io_uring.h +18 -0
@@ -155,6 +155,24 @@ static inline bool __io_fill_cqe_req(strreturn true; } +static inline ssize_t io_fixup_restart_res (ssize_t ret) +{ +switch (ret) { +case -ERESTARTSYS : +case -ERESTARTNOINTR : +case -ERESTARTNOHAND : +case -ERESTART_RESTARTBLOCK : +/* +* We can't just restart the syscall, since previously +* submitted sqes may already be in progress. Just fail +* this IO with EINTR. +*/ +return -EINTR ; +default : +return ret; + } +} +static inline void req_set_fail (struct io_kiocb *req) { req->flags |=REQ_F_FAIL ;
io_uring/rw.c +0 -18
@@ -129,24 +129,6 @@ void io_readv_writev_cleanup(struct io_kkfree (io->free_iovec); } -static inline ssize_t io_fixup_restart_res (ssize_t ret) -{ -switch (ret) { -case -ERESTARTSYS : -case -ERESTARTNOINTR : -case -ERESTARTNOHAND : -case -ERESTART_RESTARTBLOCK : -/* -* We can't just restart the syscall, since previously -* submitted sqes may already be in progress. Just fail -* this IO with EINTR. -*/ -return -EINTR ; -default : -return ret; - } -} -static inline void io_rw_done (struct kiocb *kiocb,ssize_t ret) {/* IO was queued async, completion will happen later */
Greg Kroah-Hartman
maintainerPATCH 17/1887 io_uring: look up the file before queueing to io-wq
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
Commit 98bc044d5a5374f8d3605fe55a8e2df6d6fc3f82 upstream.
io_prep_async_work() decides by the file of a request what kind of work it is for io-wq. I/O on regular files and block devices is bounded work, limited to min(SQ entries, 4 * CPUs) workers, for anything else that may block indefinitely the limit is RLIMIT_NPROC. Writes to a regular file are hashed by the inode, so that they are run one after the other instead of having a bunch of workers fight for the inode lock.
Since the file is only assigned when a request is issued, a request that is queued without an attempt to issue it, REQ_F_FORCE_ASYNC, doesn't have one at that point. io_prep_async_work() takes that for "not a regular file or block device":
- Reads and writes end up as unbound work. 32 reads with IOSQE_ASYNC from a slow block device on a ring with 4 SQ entries get 32 workers, not 4.
- Writes aren't hashed. Four buffered writes to one file get four workers, three of which do nothing but wait for the lock.
The late assignment is for the benefit of links, where a request may use a fixed file that one of its predecessors installs. By the time a request gets to io_queue_iowq() these are done, it is as good as issued. Assign the file there.
io_assign_file() moves up and is forced inline. With a third caller the compiler may stop inlining it, and every request that is issued would pay for a call.
IORING_OP_SPLICE is left as it is, unbound and not hashed. The file of the request is where it writes to, which says nothing about how long it
takes: a splice from an empty pipe or a socket into a regular file waits for its input. As bounded work, four of these on a ring with 4 SQ entries keep all other bounded work of the task from running, and as hashed work one of them blocks all writes to that file.
REQ_F_FORCE_ASYNC is not only set for IOSQE_ASYNC. What changes, and brings back what was the case before the file assignment was deferred:
- Requests with IOSQE_ASYNC or IOSQE_IO_DRAIN, and all requests that are submitted while a drain is active: reads and writes on regular files and block devices count against the limit for bounded workers, including the one set with IORING_REGISTER_IOWQ_MAX_WORKERS, so fewer of them run at the same time.
- Of these, writes to one regular file are run one at a time, unless they are O_DIRECT and the filesystem has FOP_DIO_PARALLEL_WRITE.
- IORING_OP_FALLOCATE and IORING_OP_FTRUNCATE, which always go to io-wq, are run one at a time per file, and in turn with these writes.
- The descriptor or the fixed file slot is looked up when the request is queued, not when a worker gets around to it, so closing or replacing it in between no longer has an effect on the request.
--- io_uring/io_uring.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-)
io_uring/io_uring.c +28 -13
@@ -417,17 +417,45 @@ static void io_prep_async_link(struct io } } +/* Called for every request that is issued: keep it inline */ +static __always_inline bool io_assign_file(struct io_kiocb *req, +unsigned int issue_flags) +{ +if (req->file || !io_op_defs[req->opcode].needs_file) +return true; + +if (req->flags &REQ_F_FIXED_FILE ) + req->file =io_file_get_fixed (req, req->cqe.fd, issue_flags); +else + req->file =io_file_get_normal (req, req->cqe.fd); + +return !!req->file; +} +static void io_queue_iowq (struct io_kiocb *req) {struct io_uring_task *tctx = req->task->io_uring;BUG_ON (!tctx); +lockdep_assert_held (&req->ctx->uring_lock);if ((current->flags &PF_KTHREAD ) || !tctx->io_wq) {io_req_task_queue_fail (req, -ECANCELED );return ; } +/* +* The file is looked up as late as possible, as it may be the result +* of an earlier request of the link. This one is up now, and what kind +* of work it is depends on the file. If that fails, leave the error +* handling to the worker. +* +* Not for a splice: whatever it writes to, it may wait for its input +* for ever. It has to remain unbound work that isn't hashed. +*/ +if (req->opcode !=IORING_OP_SPLICE ) +io_assign_file (req,0 ); +/* init ->work of the whole link before punting */ io_prep_async_link (req);
@@ -1693,19 +1721,6 @@ static void io_clean_op(struct io_kiocb req->flags &= ~IO_REQ_CLEAN_FLAGS ; } -static bool io_assign_file (struct io_kiocb *req,unsigned int issue_flags) -{ -if (req->file || !io_op_defs[req->opcode].needs_file) -return true; - -if (req->flags &REQ_F_FIXED_FILE ) - req->file =io_file_get_fixed (req, req->cqe.fd, issue_flags); -else - req->file =io_file_get_normal (req, req->cqe.fd); - -return !!req->file; -} -#define REQ_ISSUE_SLOW_FLAGS (REQ_F_CREDS | REQ_F_ARM_LTIMEOUT)static int io_issue_sqe (struct io_kiocb *req,unsigned int issue_flags)
Greg Kroah-Hartman
maintainerPATCH 18/1887 io_uring/poll: avoid retry wakeup loss when dropping ownership
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juanlu Herrero <[email protected]>
Commit 937d38dcacd675dc0572d6c9b6743960df3128ed upstream.
If a wakeup sets IO_POLL_RETRY_FLAG between the owning task consuming the existing instance of IO_POLL_RETRY_FLAG and the loop check of io_poll_check_events(), then we stall on processing the request until an unrelated wakeup comes along.
Using atomic_cmpxchg instead of atomic_sub_return to guarantee both the count v and poll_refs are 0 and no wake-ups are missed.
--- io_uring/poll.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
io_uring/poll.c +2 -2
@@ -325,8 +325,8 @@ static int io_poll_check_events(struct i* Release all references, retry if someone tried to restart * task_work while we were executing it. */ - }while (atomic_sub_return (v &IO_POLL_REF_MASK , &req->poll_refs) & -IO_POLL_REF_MASK ); + v &=IO_POLL_REF_MASK ; + }while (atomic_cmpxchg (&req->poll_refs, v,0 ) != v);return IOU_POLL_NO_ACTION ; }
Greg Kroah-Hartman
maintainerPATCH 19/1887 io_uring/timeout: dont put a sequence target behind the last flush
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
Commit fdfce905a58edea053ee7b68b5bd4348dd1b36e0 upstream.
io_timeout_fn() and io_kill_timeout() bump ->cq_timeouts when a timeout fires, but its CQE is only posted later from task_work. Until then the sequence io_timeout() computes is one below the last flush per fired timeout. Now that ->cq_last_tm_flush is kept while sequence timeouts are pending, a timeout armed in that window with a small offset gets a target behind the base. Its distance from the base wraps, and it's never completed by events, only by its timer. With DEFER_TASKRUN that window is as wide as the application makes it, as submission runs before the local task_work.
Nothing but those in flight CQEs separates the two, so use the last flush as the base for the target when the sequence is behind it.
--- io_uring/timeout.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
io_uring/timeout.c +9 -1
@@ -551,7 +551,6 @@ int io_timeout(struct io_kiocb *req, uns } tail =data_race (ctx->cached_cq_tail) -atomic_read (&ctx->cq_timeouts); - timeout->target_seq = tail + off;/* * Update the last seq here in case io_flush_timeouts() hasn't, it only
@@ -566,6 +565,15 @@ int io_timeout(struct io_kiocb *req, uns base = ctx->cq_last_tm_flush;/* +* A fired timeout bumps ->cq_timeouts before its CQE is posted, which +* leaves the sequence behind the last flush until it is. Nothing else +* separates the two then, so count from the flush. +*/ +if ((s32)(tail - base) <0 ) + tail = base; + timeout->target_seq = tail + off; + +/* * Insertion sort, ensuring the first entry in the list is always * the one we need first. */
Greg Kroah-Hartman
maintainerPATCH 20/1887 io_uring/timeout: dont flush with the sequence behind the last flush
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
Commit 85f85d573ffa7772e1ad4504d0cec5113a5c5cf1 upstream.
io_flush_timeouts() measures the events since the last flush as the distance of the current sequence from ->cq_last_tm_flush. A fired timeout bumps ->cq_timeouts before its CQE is posted, so until it is the sequence can be behind the last flush, and the distance wraps:
last flush: seq 100, cq_last_tm_flush = 100
Y: IORING_OP_TIMEOUT, off 50, target_seq 150 pure timeout A fires, cq_timeouts = 1 task_work posts A's CQE, cached_cq_tail = 101 pure timeout B fires before the flush, cq_timeouts = 2 io_flush_timeouts(): seq = 99, events_got = 0xffffffff
Y, and every sequence timeout behind it, is ended with -ETIME although no event happened. Two timeouts expiring close together is all it takes, a completion with IOSQE_CQE_SKIP_SUCCESS after a single one does it too.
Nothing but those in flight CQEs separates the two, so count from the last flush when the sequence is behind it, as io_timeout() does.
--- io_uring/timeout.c | 8 ++++++++ 1 file changed, 8 insertions(+)
io_uring/timeout.c +8 -0
@@ -78,6 +78,14 @@ __cold void io_flush_timeouts(struct io_spin_lock_irq (&ctx->timeout_lock); seq = ctx->cached_cq_tail -atomic_read (&ctx->cq_timeouts); +/* +* A fired timeout bumps ->cq_timeouts before its CQE is posted, which +* leaves the sequence behind the last flush until it is. No event has +* happened then, see io_timeout(). +*/ +if ((s32)(seq - ctx->cq_last_tm_flush) <0 ) + seq = ctx->cq_last_tm_flush; +list_for_each_entry_safe (timeout, tmp, &ctx->timeout_list, list) {struct io_kiocb *req =cmd_to_io_kiocb (timeout);u32 events_needed, events_got;
Greg Kroah-Hartman
maintainerPATCH 21/1887 io_uring/timeout: dont lose a cancel as io-wq arms a timeout
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
Commit 89f193dc3ef462059387e9691bf6af4b1808379a upstream.
An IORING_OP_TIMEOUT run by io-wq, because of IOSQE_ASYNC, has the same problem as poll, futex and waitid. io_wq_submit_work() looks at IO_WQ_WORK_CANCEL once, before it issues the request. A cancel in between flags the work, gets -EALREADY, and searches ->timeout_list in vain, while the worker then adds the request and starts the timer:
io-wq worker io_try_cancel()
io_wq_submit_work()
IO_WQ_WORK_CANCEL isn't set
io_async_cancel_one()
sets IO_WQ_WORK_CANCEL = -EALREADY
io_timeout_cancel() = -ENOENT
io_timeout()
adds the request to ->timeout_list
hrtimer_start()
= IOU_ISSUE_SKIP_COMPLETE
Nobody looks at the flag again, and the timeout runs its course. At ring exit, io_uring_try_cancel_requests() cancels io-wq work and then kills the timeouts the same way, so an exiting task can get stuck for the full duration of such a timeout.
Look at the flag under ->timeout_lock, which the search takes as well, and fail the request if it is set. If the search came first, the flag is visible. If it comes later, it finds the request on the list.
[ 6.1: adds IO_URING_F_IOWQ, which io_wq_submit_work() didn't pass yet,
and the __io_wq_cancel_seen()/io_wq_cancel_seen() helpers that the futex/waitid fix 5cb049d2203d brought upstream; work->flags is not atomic and ->timeout_lock isn't raw here ]
--- include/linux/io_uring.h | 2 ++ io_uring/io_uring.c | 2 +- io_uring/io_uring.h | 23 +++++++++++++++++++++++ io_uring/timeout.c | 7 +++++++ 4 files changed, 33 insertions(+), 1 deletion(-)
include/linux/io_uring.h +2 -0
@@ -19,6 +19,8 @@ enum io_uring_cmd_flags {/* the request is executed from poll, it should not be freed */ IO_URING_F_MULTISHOT =32 , +/* executed by io-wq */ + IO_URING_F_IOWQ = 64, }; struct io_uring_cmd {
io_uring/io_uring.c +1 -1
@@ -1816,7 +1816,7 @@ void io_wq_submit_work(struct io_wq_work { struct io_kiocb *req = container_of(work, struct io_kiocb, work);const struct io_op_def *def = &io_op_defs[req->opcode]; -unsigned int issue_flags =IO_URING_F_UNLOCKED ; +unsigned int issue_flags =IO_URING_F_UNLOCKED |IO_URING_F_IOWQ ;bool needs_poll = false;int ret =0 , err = -ECANCELED ;
io_uring/io_uring.h +23 -0
@@ -221,6 +221,29 @@ static inline void io_ring_submit_lock(slockdep_assert_held (&ctx->uring_lock); } +/* +* For a handler that is run by io-wq and parks the request on a list where +* cancellations find it, rather than completing it. Whoever tried to cancel +* the request before that found it running. It has flagged the work item, +* has searched the list in vain, and won't come back. To be called with +* the lock the search takes held: if the search came first, the flag is +* visible. For most lists that is ->uring_lock, timeouts use ->timeout_lock. +*/ +static inline bool __io_wq_cancel_seen (struct io_kiocb *req, +unsigned int issue_flags) +{ +return (issue_flags &IO_URING_F_IOWQ ) && + (req->work.flags &IO_WQ_WORK_CANCEL ); +} + +static inline bool io_wq_cancel_seen (struct io_kiocb *req, +unsigned int issue_flags) +{ +lockdep_assert_held (&req->ctx->uring_lock); + +return __io_wq_cancel_seen (req, issue_flags); +} +static inline void io_commit_cqring (struct io_ring_ctx *ctx) {/* order cqe stores with ring update */
io_uring/timeout.c +7 -0
@@ -548,6 +548,13 @@ int io_timeout(struct io_kiocb *req, unsspin_lock_irq (&ctx->timeout_lock); +/* the list is searched under ->timeout_lock, see io_wq_cancel_seen() */ +if (__io_wq_cancel_seen (req, issue_flags)) { +spin_unlock_irq (&ctx->timeout_lock); +io_req_task_queue_fail (req, -ECANCELED ); +return IOU_ISSUE_SKIP_COMPLETE ; + } +/* * sqe->off holds how many events that need to occur for this * timeout event to be satisfied. If it isn't set, then this is
Greg Kroah-Hartman
maintainerPATCH 22/1887 io_uring/poll: dont loop on HUP with multiple references
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
Commit cf1d5c9d335e2c673811da641531da82cb01393a upstream.
io_poll_check_events() drops down to one reference when a multishot request sees HUP with more than one, so that the loop goes around once more. It did so by subtracting one less than it had. With the cmpxchg that only takes the local count down: the exchange fails, the next pass reads the unchanged count, and goes through the same motions again. The loop then only ends once io_poll_issue() stops the request.
Drop the extra references from the counter instead, and loop once more without trying the exchange. The next pass sees one reference, like it did before, and ends unless a wake up came in.
--- io_uring/poll.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
io_uring/poll.c +13 -4
@@ -239,12 +239,14 @@ enum {static int io_poll_check_events (struct io_kiocb *req,bool *locked) {struct io_ring_ctx *ctx = req->ctx; +bool again;int v;if (unlikely (io_should_terminate_tw (ctx)))return -ECANCELED ; do { + again = false; v = atomic_read(&req->poll_refs); /* tw handler should be the owner, and so have some references */
@@ -305,10 +307,17 @@ static int io_poll_check_events(struct i }else {int ret; -/* multiple refs and HUP, ensure we loop once more */ +/* +* Multiple refs and HUP, ensure we loop once more. Drop +* down to one ref now, so the next pass ends unless a +* wake up came in. +*/ if ((req->cqe.res & (POLLHUP |POLLRDHUP )) && - (v &IO_POLL_REF_MASK ) !=1 ) - v--; + (v &IO_POLL_REF_MASK ) !=1 ) { +atomic_sub ((v &IO_POLL_REF_MASK ) -1 , + &req->poll_refs); + again = true; + } ret =io_poll_issue (req, locked);io_kbuf_recycle (req,0 );
@@ -326,7 +335,7 @@ static int io_poll_check_events(struct i* task_work while we were executing it. */ v &=IO_POLL_REF_MASK ; - }while (atomic_cmpxchg (&req->poll_refs, v,0 ) != v); + }while (again ||atomic_cmpxchg (&req->poll_refs, v,0 ) != v);return IOU_POLL_NO_ACTION ; }
Greg Kroah-Hartman
maintainerPATCH 23/1887 mips: unhide uasm_in_compat_space_p() declaration
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit e9f98feb17207addcd66435d8211ccf9c0a563dd upstream.
uasm_in_compat_space_p() has a conditional declaration but is defined unconditionally because of another local user, which causes a warning:
arch/mips/mm/uasm.c:421:5: error: no previous prototype for 'uasm_in_compat_space_p' [-Werror=missing-prototypes]
Make the declaration unconditional to avoid this.
--- arch/mips/include/asm/uasm.h | 2 -- 1 file changed, 2 deletions(-)
arch/mips/include/asm/uasm.h +0 -2
@@ -193,9 +193,7 @@ struct uasm_label {void uasm_build_label (struct uasm_label **lab,u32 *addr,int lid); -#ifdef CONFIG_64BIT int uasm_in_compat_space_p (long addr); -#endif int uasm_rel_hi (long val);int uasm_rel_lo (long val);void UASM_i_LA_mostly (u32 **buf,unsigned int rs,long addr);
Greg Kroah-Hartman
maintainerPATCH 24/1887 apparmor: fix out-of-bounds write when null terminating a label vec
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hyunwoo Kim <[email protected]>
[ Upstream commit 9f1e40193eef7f047e6b77cfb4b4cafdecd7a123 ]
aa_vec_unique() null terminates at vec[n - dups] when VEC_FLAG_TERMINATE is passed. If the components are all distinct no duplicates are dropped, dups is 0 and the terminator goes to vec[n], so the caller has to provide room for n + 1 entries.
aa_label_strn_parse() sets up its vector with vec_setup(profile, vec, len, gfp) and then calls aa_vec_unique(vec, len, VEC_FLAG_TERMINATE), but vec_setup() does not reserve the terminator entry. Up to LOCAL_VEC_ENTRIES it uses the local array of LOCAL_VEC_ENTRIES pointers, above that it allocates exactly len pointers. The terminator therefore lands one entry past the end of the local array when len is LOCAL_VEC_ENTRIES, and one entry past the end of the allocation when len is larger.
len comes from the number of "//&" separated components in the label name and label_count_strn_entries() does not bound it. An unprivileged task reaches the parse by writing to /proc/self/attr/apparmor/current or through lsm_set_self_attr(2), both of which go through do_setattr(), and the name is parsed before the change_profile permission is checked.
The query_label() path behind the securityfs .access file, which is mode 0666, performs no permission check at all. Every component has to resolve to a loaded profile, so a system with policy loaded is required.
The other two VEC_FLAG_TERMINATE users work on a label vec that aa_label_alloc() has already sized with "+ 1 for null terminator entry on vec". Reserve the same entry in vec_setup() and DEFINE_VEC(). Passing len + 1 from the caller instead would move len == LOCAL_VEC_ENTRIES out of the local array and into kzalloc().
--- security/apparmor/include/label.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
security/apparmor/include/label.h +3 -3
@@ -22,7 +22,7 @@ struct aa_ns;#define LOCAL_VEC_ENTRIES 8#define DEFINE_VEC (T ,V ) \ - struct aa_ ## T *(_ ## V ## _localtmp)[LOCAL_VEC_ENTRIES]; \ + struct aa_ ## T *(_ ## V ## _localtmp)[LOCAL_VEC_ENTRIES + 1]; \ struct aa_ ## T **(V)#define vec_setup (T ,V ,N ,GFP ) \
@@ -30,10 +30,10 @@ struct aa_ns;if ((N ) <=LOCAL_VEC_ENTRIES ) { \typeof (N) i; \ (V) = (_ ## V ## _localtmp); \ - for (i = 0; i < (N); i++) \ + for (i = 0; i <= (N); i++) \ (V)[i] = NULL; \ } else \ - (V) = kzalloc(sizeof(struct aa_ ## T *) * (N), (GFP)); \ + (V) = kcalloc((N) + 1, sizeof(struct aa_ ## T *), (GFP)); \ (V) ? 0 : -ENOMEM; \ })
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 25/1887 nfsd: fix nfsd_file leak on inter-server COPY setup failure
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Layton <[email protected]>
[ Upstream commit 88a76145451d703eedd867b5989bf73d17340399 ]
When nfsd4_setup_inter_ssc() fails, nfsd4_copy() returns nfserr_offload_denied directly, bypassing the out: label where release_copy_files() would drop the nf_dst reference taken by nfs4_preprocess_stateid_op(). Each failed inter-server COPY leaks one nfsd_file, pinning file/inode/dentry/vfsmount.
Fix by setting status and jumping to out: instead of returning directly.
--- fs/nfsd/nfs4proc.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
fs/nfsd/nfs4proc.c +5 -3
@@ -1777,12 +1777,14 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, goto out; } status =nfsd4_setup_inter_ssc (rqstp, cstate, copy); -if (status) -return nfserr_offload_denied; +if (status) { + status = nfserr_offload_denied; + goto out; + } }else { status =nfsd4_setup_intra_ssc (rqstp, cstate, copy);if (status) -return status; + goto out; } memcpy(©->fh, &cstate->current_fh.fh_handle,
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 26/1887 ceph: bound copied dentry name length in NFS export get_name
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Bommarito <[email protected]>
[ Upstream commit eff8013c5a8916613c742ae5a2cc341cb605c0ae ]
ceph_get_name() copies the MDS-supplied name into the caller's NAME_MAX-sized buffer with memcpy(name, rinfo->dname, rinfo->dname_len) and then writes name[rinfo->dname_len] = 0, without checking dname_len against NAME_MAX. A malicious or buggy MDS that returns a LOOKUPNAME reply with dname_len > NAME_MAX overflows the buffer. __get_snap_name() copies rde->name / rde->name_len the same unchecked way.
Impact: a malicious or compromised Ceph MDS overflows the NAME_MAX name buffer in a client's NFS-export get_name path, a slab out-of-bounds write reported by KASAN. Reachable when a CephFS mount is re-exported over NFS.
Add ceph_export_copy_name(), which rejects lengths above NAME_MAX with -ENAMETOOLONG before the copy, and use it in both ceph_get_name() and __get_snap_name().
--- fs/ceph/export.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-)
fs/ceph/export.c +18 -5
@@ -433,6 +433,16 @@ static struct dentry *ceph_fh_to_parent(struct super_block *sb,return dentry; } +static int ceph_export_copy_name (char *name,const char *src,u32 len) +{ +if (len >NAME_MAX ) +return -ENAMETOOLONG ; + +memcpy (name, src, len); + name[len] ='\0' ; +return 0 ; +} +static int __get_snap_name (struct dentry *parent,char *name,struct dentry *child) {
@@ -498,9 +508,8 @@ static int __get_snap_name(struct dentry *parent, char *name,BUG_ON (!rde->inode.in);if (ceph_snap (inode) ==le64_to_cpu (rde->inode.in->snapid)) { -memcpy (name, rde->name, rde->name_len); - name[rde->name_len] ='\0' ; - err =0 ; + err =ceph_export_copy_name (name, rde->name, + rde->name_len); goto out; } }
@@ -562,8 +571,12 @@ static int ceph_get_name(struct dentry *parent, char *name,if (!err) {struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info; -memcpy (name, rinfo->dname, rinfo->dname_len); - name[rinfo->dname_len] =0 ; + + err =ceph_export_copy_name (name, rinfo->dname, + rinfo->dname_len); + } + +if (!err) {dout ("get_name %p ino %llx.%llx name %s\n" , child,ceph_vinop (inode), name); }else {
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 27/1887 smb: client: fix OOB read/write from unvalidated DataOffset in coalesce_t2()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Frank Sorenson <[email protected]>
[ Upstream commit 6343c1da561962688f203362d80d6a3bfa39fa1b ]
coalesce_t2() computes data pointers directly from server-supplied DataOffset fields with no validation against buffer bounds:
data_area_of_tgt = (char *)&pSMBt->hdr.Protocol +
get_unaligned_le16(&pSMBt->t2_rsp.DataOffset);
data_area_of_src = (char *)&pSMBs->hdr.Protocol +
get_unaligned_le16(&pSMBs->t2_rsp.DataOffset);
data_area_of_tgt += total_in_tgt;
...
memcpy(data_area_of_tgt, data_area_of_src, total_in_src);A small DataOffset can push a pointer below the actual byte area, overwriting header fields; a large one can push it past the buffer end, causing out-of-bounds heap reads (source) or writes (target). The BCC overflow guard does not prevent this: BCC reflects how much data is present, while DataOffset controls where in the buffer it starts.
The "validate target area" comment present since the function was first written in 2005 was a placeholder that was never implemented.
Add lower- and upper-bound checks for both data pointers before the memcpy, and before any target header fields are modified.
--- fs/smb/client/smb1ops.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-)
fs/smb/client/smb1ops.c +20 -1
@@ -325,12 +325,31 @@ coalesce_t2(char *second_buf, struct smb_hdr *target_hdr) data_area_of_tgt = (char *)&pSMBt->hdr.Protocol +get_unaligned_le16 (&pSMBt->t2_rsp.DataOffset); -/* validate target area */ data_area_of_src = (char *)&pSMBs->hdr.Protocol +get_unaligned_le16 (&pSMBs->t2_rsp.DataOffset); data_area_of_tgt += total_in_tgt; +/* +* DataOffset fields are server-supplied and not validated against +* buffer bounds; check both data pointers before mutating the +* target header. +*/ +if (data_area_of_tgt < (char *)target_hdr + +sizeof (struct smb_t2_rsp ) +sizeof (__le16) || + data_area_of_tgt + total_in_src > + (char *)target_hdr + CIFSMaxBufSize +MAX_CIFS_HDR_SIZE ) { +cifs_dbg (VFS ,"%s: target data area out of bounds\n" , __func__); +return -EPROTO ; + } +if (data_area_of_src < second_buf + +sizeof (struct smb_t2_rsp ) +sizeof (__le16) || + data_area_of_src + total_in_src > + second_buf +smbCalcSize ((struct smb_hdr *)second_buf)) { +cifs_dbg (VFS ,"%s: secondary data area out of bounds\n" , __func__); +return -EPROTO ; + } + total_in_tgt += total_in_src;/* is the result too big for the field? */ if (total_in_tgt >USHRT_MAX ) {
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 28/1887 HID: sony: fix UAF of ghl_poke_timer / ghl_urb at driver unbind
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Doruk Tan Ozturk <[email protected]>
[ Upstream commit a26705bd2e2728833e7a538ce91e58a5eeff496a ]
For GHL (Guitar Hero Live) dongles, sony_probe() arms a periodic timer:ghl_magic_poke() (the timer callback) submits sc->ghl_urb, and the URB completion ghl_magic_poke_cb() re-arms the timer with mod_timer().
sony_remove() drained the timer with timer_delete_sync() and then freed the URB with usb_free_urb():
timer_delete_sync(&sc->ghl_poke_timer); usb_free_urb(sc->ghl_urb);
timer_delete_sync() does not block re-arming, and while the URB is in flight the timer is not pending, so the sync delete is a no-op. A URB completion that runs after the delete re-arms the timer, and usb_free_urb() only drops a reference -- it does not kill an in-flight URB. sc is allocated with devm_kzalloc() and freed once sony_remove() returns, so the re-armed ghl_poke_timer (embedded in sc) then fires on freed memory, a use-after-free from timer softirq. This is a disconnect/rmmod race.
Poison the URB first, then shut the timer down, before freeing the URB. usb_poison_urb() kills any in-flight URB and permanently rejects further submissions, so a poke timer that is still pending cannot re-submit the URB from ghl_magic_poke() in the window before timer_shutdown_sync() runs. usb_kill_urb() would not suffice: it only cancels the in-flight URB and leaves it submittable once it returns, so the pending timer could re-submit it and put a fresh URB in flight over the freed sc. timer_shutdown_sync() then drains any last callback and blocks re-arming. The probe error path is unaffected: it is only reached before the timer is armed.
Reproduced under KASAN on next-20260710 via dummy_hcd + raw-gadget emulation of the GHL PS4 dongle (VID 0x1430 / PID 0x07bb): hid-sony binds and arms the poke timer, the poke URB is held in flight, the driver is unbound (freeing sc), then the URB is released. The completion re-arms the timer on the freed sc, and the re-armed timer fires ~8 s later:
BUG: KASAN: slab-use-after-free in ghl_magic_poke+0x98/0xb0 Read of size 8 at addr ffff88810b02fd50 by task swapper/0/0 ghl_magic_poke+0x98/0xb0 call_timer_fn+0x35/0x2b0 __run_timers+0x69c/0x9a0 run_timer_softirq+0x173/0x2a0 Allocated by task 169: sony_probe Freed by task 338: devres_release_group <- hid_device_remove (sony_remove)
Found by 0sec (https://0sec.ai) using automated source analysis.
--- drivers/hid/hid-sony.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/hid/hid-sony.c +3 -1
@@ -3085,7 +3085,9 @@ static void sony_remove(struct hid_device *hdev)struct sony_sc *sc =hid_get_drvdata (hdev);if (sc->quirks & (GHL_GUITAR_PS3WIIU |GHL_GUITAR_PS4 )) { -del_timer_sync (&sc->ghl_poke_timer); +/* poison, not kill: a pending timer must not re-submit during teardown */ +usb_poison_urb (sc->ghl_urb); +timer_shutdown_sync (&sc->ghl_poke_timer);usb_free_urb (sc->ghl_urb); }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 29/1887 nouveau/gem: reserve the bo in the info ioctl around the vma lookup
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Airlie <[email protected]>
[ Upstream commit 5e17160d41d92823f3379c1982e1369680c5ce4d ]
In the non-uvmm path, there could be a race between the info lookup finding the vma, and the gem close path closing the vma leading to a use-after-free.
Spotted with the help of Opus 4.6.
--- drivers/gpu/drm/nouveau/nouveau_gem.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
drivers/gpu/drm/nouveau/nouveau_gem.c +10 -1
@@ -277,11 +277,20 @@ nouveau_gem_info(struct drm_file *file_priv, struct drm_gem_object *gem, rep->domain =NOUVEAU_GEM_DOMAIN_VRAM ; rep->offset = nvbo->offset;if (vmm->vmm.object.oclass >=NVIF_CLASS_VMM_NV50 ) { +int ret; + + ret =ttm_bo_reserve (&nvbo->bo, false, false,NULL ); +if (ret) +return ret; + vma =nouveau_vma_find (nvbo, vmm); -if (!vma) +if (!vma) { +ttm_bo_unreserve (&nvbo->bo);return -EINVAL ; + } rep->offset = vma->addr; +ttm_bo_unreserve (&nvbo->bo); } rep->size = nvbo->bo.base.size;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 30/1887 ocfs2: validate dx_root extent list fields during block read
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Joseph Qi <[email protected]>
[ Upstream commit 775c17386a6fd695f999d4cda90e3931386570dd ]
Patch series "ocfs2: consolidate extent list validation into block read callbacks".
ocfs2 validates extent list fields (l_count, l_next_free_rec) at various points during extent tree traversal. This is fragile because each caller must remember to check for corrupted on-disk data before using it.
This series moves those checks into the block read validation callbacks (ocfs2_validate_dx_root and ocfs2_validate_extent_block), so corrupted fields are caught early at block read time. Redundant post-read checks are then removed.
This patch (of 4):
Move the extent list l_count validation from ocfs2_dx_dir_lookup_rec() into ocfs2_validate_dx_root(), so that corrupted on-disk fields are caught early at block read time rather than during directory lookups.
Additionally, add a l_next_free_rec <= l_count check to prevent out-of-bounds access when iterating over extent records.
Both checks are skipped for inline dx roots (OCFS2_DX_FLAG_INLINE), which use dr_entries instead of dr_list.
Stable-dep-of: bc70726ddad5 ("ocfs2: validate directory-index entry counts when reading metadata")
--- fs/ocfs2/dir.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-)
fs/ocfs2/dir.c +25 -1
@@ -580,7 +580,7 @@ static int ocfs2_validate_dx_root(struct super_block *sb,mlog (ML_ERROR ,"Checksum failed for dir index root block %llu\n" , (unsigned long long )bh->b_blocknr); -return ret; + goto bail; }if (!OCFS2_IS_VALID_DX_ROOT (dx_root)) {
@@ -588,8 +588,32 @@ static int ocfs2_validate_dx_root(struct super_block *sb,"Dir Index Root # %llu has bad signature %.*s\n" , (unsigned long long )le64_to_cpu (dx_root->dr_blkno), 7, dx_root->dr_signature); + goto bail; + } + +if (!(dx_root->dr_flags &OCFS2_DX_FLAG_INLINE )) { +struct ocfs2_extent_list *el = &dx_root->dr_list; + +if (le16_to_cpu (el->l_count) !=ocfs2_extent_recs_per_dx_root (sb)) { + ret =ocfs2_error (sb, +"Dir Index Root # %llu has invalid l_count %u (expected %u)\n" , + (unsigned long long )le64_to_cpu (dx_root->dr_blkno), +le16_to_cpu (el->l_count), +ocfs2_extent_recs_per_dx_root (sb)); + goto bail; + } + +if (le16_to_cpu (el->l_next_free_rec) >le16_to_cpu (el->l_count)) { + ret =ocfs2_error (sb, +"Dir Index Root # %llu has invalid l_next_free_rec %u (l_count %u)\n" , + (unsigned long long )le64_to_cpu (dx_root->dr_blkno), +le16_to_cpu (el->l_next_free_rec), +le16_to_cpu (el->l_count)); + goto bail; + } } +bail:return ret; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 31/1887 ocfs2: validate directory-index entry counts when reading metadata
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Doruk Tan Ozturk <[email protected]>
[ Upstream commit bc70726ddad53c7e9a9a85915bf2415b0d4f42f9 ]
ocfs2_validate_dx_leaf() and ocfs2_validate_dx_root() check the ECC and signature of an indexed-directory block before it reaches higher-level callers, but neither validator bounds the ocfs2_dx_entry_list counts against the capacity of the block that holds them.
ocfs2_dx_dir_search() then walks
for (i = 0; i < le16_to_cpu(entry_list->de_num_used); i++) dx_entry = &entry_list->de_entries[i];
over de_num_used entries with no bounds check. entry_list is either dx_leaf->dl_list (from ocfs2_read_dx_leaf) or, for an inline root, dx_root->dr_entries. A crafted on-disk image can set de_num_used (and de_count, which is the __counted_by_le() bound of de_entries) to 0xffff and make the walk read far past the end of the 4KB metadata block, giving a slab out-of-bounds read reachable from any path lookup, stat() or open() on an indexed directory once the image is mounted.
Commit 775c17386a6f ("ocfs2: validate dx_root extent list fields during block read") already bounds dr_list for the non-inline dx_root, but left the inline dr_entries path and the dx_leaf dl_list unchecked. Add the same read-time validation for both entry lists: de_count must equal the capacity of the block (ocfs2_dx_entries_per_leaf()/per_root()) and de_num_used must not exceed de_count, rejecting corrupted metadata with -EFSCORRUPTED before ocfs2_dx_dir_search() can walk an out-of-range entry array.
de_count is always written as exactly the block capacity when a leaf or inline root is formatted, so the equality check does not reject any valid image.
Found by 0sec automated security-research tooling (https://0sec.ai).
--- fs/ocfs2/dir.c | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-)
fs/ocfs2/dir.c +41 -4
@@ -611,6 +611,28 @@ static int ocfs2_validate_dx_root(struct super_block *sb, le16_to_cpu(el->l_count)); goto bail; } + }else { +struct ocfs2_dx_entry_list *dl_list = &dx_root->dr_entries; + +if (le16_to_cpu (dl_list->de_count) != +ocfs2_dx_entries_per_root (sb)) { + ret =ocfs2_error (sb, +"Dir Index Root # %llu has invalid de_count %u (expected %u)\n" , + (unsigned long long )le64_to_cpu (dx_root->dr_blkno), +le16_to_cpu (dl_list->de_count), +ocfs2_dx_entries_per_root (sb)); + goto bail; + } + +if (le16_to_cpu (dl_list->de_num_used) > +le16_to_cpu (dl_list->de_count)) { + ret =ocfs2_error (sb, +"Dir Index Root # %llu has invalid de_num_used %u (de_count %u)\n" , + (unsigned long long )le64_to_cpu (dx_root->dr_blkno), +le16_to_cpu (dl_list->de_num_used), +le16_to_cpu (dl_list->de_count)); + goto bail; + } } bail:
@@ -650,10 +672,25 @@ static int ocfs2_validate_dx_leaf(struct super_block *sb,return ret; } -if (!OCFS2_IS_VALID_DX_LEAF (dx_leaf)) { - ret =ocfs2_error (sb,"Dir Index Leaf has bad signature %.*s\n" , -7 , dx_leaf->dl_signature); - } +if (!OCFS2_IS_VALID_DX_LEAF (dx_leaf)) +return ocfs2_error (sb,"Dir Index Leaf has bad signature %.*s\n" , +7 , dx_leaf->dl_signature); + +if (le16_to_cpu (dx_leaf->dl_list.de_count) != +ocfs2_dx_entries_per_leaf (sb)) +return ocfs2_error (sb, +"Dir Index Leaf # %llu has invalid de_count %u (expected %u)\n" , + (unsigned long long )le64_to_cpu (dx_leaf->dl_blkno), +le16_to_cpu (dx_leaf->dl_list.de_count), +ocfs2_dx_entries_per_leaf (sb)); + +if (le16_to_cpu (dx_leaf->dl_list.de_num_used) > +le16_to_cpu (dx_leaf->dl_list.de_count)) +return ocfs2_error (sb, +"Dir Index Leaf # %llu has invalid de_num_used %u (de_count %u)\n" , + (unsigned long long )le64_to_cpu (dx_leaf->dl_blkno), +le16_to_cpu (dx_leaf->dl_list.de_num_used), +le16_to_cpu (dx_leaf->dl_list.de_count));return ret; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 32/1887 wifi: rtl8xxxu: fix use-after-free from rx_urb_wq on stop
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fan Wu <[email protected]>
[ Upstream commit 6c080026ecc17eecb103f8927c64ea73a74bb818 ]
rtl8xxxu arms rx_urb_wq from the RX completion path:rtl8xxxu_rx_complete() hands the URB to rtl8xxxu_queue_rx_urb(), which queues it on rx_urb_pending_list and, once the list grows past RTL8XXXU_RX_URB_PENDING_WATER, schedules rx_urb_wq. The worker rtl8xxxu_rx_urb_work() drains rx_urb_pending_list, recovers priv through container_of, and resubmits each URB through rtl8xxxu_submit_rx_urb(), which anchors it on rx_anchor and dereferences priv->udev.
rtl8xxxu_stop() cancels the sibling work items (c2hcmd_work, ra_watchdog, update_beacon_work) but never cancels rx_urb_wq, so a worker armed during the last burst of RX traffic can run rtl8xxxu_rx_urb_work() after rtl8xxxu_disconnect() has called ieee80211_free_hw(), which frees priv, producing a use-after-free. The window opens under active RX traffic (pending count above the watermark) followed by a disconnect.
There are two teardown races to close:
* rtl8xxxu_queue_rx_urb() decided whether to enqueue under rx_urb_lock but called schedule_work() after dropping the lock. A completion that observed shutdown == false and released the lock could then call schedule_work() after rtl8xxxu_stop() had set shutdown and cancel_work_sync() had already returned, arming the worker to run after the teardown. Move schedule_work() under the same !shutdown branch so the arming decision is atomic with the shutdown check.
* rtl8xxxu_rx_urb_work() anchors every URB it drained back onto rx_anchor through rtl8xxxu_submit_rx_urb(). A worker still running when usb_kill_anchored_urbs(&priv->rx_anchor) returned would submit a URB that escaped the kill. In rtl8xxxu_stop(), call cancel_work_sync(&priv->rx_urb_wq) before the kill so the worker is drained first.
After priv->shutdown is set under rx_urb_lock, completions can no longer queue rx_urb_wq. cancel_work_sync() then drains the last queued or running worker, and the following usb_kill_anchored_urbs() kills the URBs it may have submitted.
rtl8xxxu_disconnect() is covered because ieee80211_unregister_hw() guarantees .stop() runs for a live interface before ieee80211_free_hw() frees priv. The probe error path needs no cancel: rx_urb_wq is INIT_WORK()'d there but cannot have been scheduled, since no URB is submitted before ieee80211_register_hw() succeeds.
This bug was found by static analysis.
--- .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +14 -5
@@ -5263,14 +5263,19 @@ static void rtl8xxxu_queue_rx_urb(struct rtl8xxxu_priv *priv, {struct sk_buff *skb;unsigned long flags; -int pending =0 ;spin_lock_irqsave (&priv->rx_urb_lock, flags);if (!priv->shutdown) {list_add_tail (&rx_urb->list, &priv->rx_urb_pending_list); priv->rx_urb_pending_count++; - pending = priv->rx_urb_pending_count; +/* +* Arm the worker under rx_urb_lock so this is atomic with the +* shutdown check: moving it out of the lock would let a +* completion arm the work after rtl8xxxu_stop() canceled it. +*/ +if (priv->rx_urb_pending_count >RTL8XXXU_RX_URB_PENDING_WATER ) +schedule_work (&priv->rx_urb_wq); }else { skb = (struct sk_buff *)rx_urb->urb.context;dev_kfree_skb_irq (skb);
@@ -5278,9 +5283,6 @@ static void rtl8xxxu_queue_rx_urb(struct rtl8xxxu_priv *priv, }spin_unlock_irqrestore (&priv->rx_urb_lock, flags); - -if (pending >RTL8XXXU_RX_URB_PENDING_WATER ) -schedule_work (&priv->rx_urb_wq); }static void rtl8xxxu_rx_urb_work (struct work_struct *work)
@@ -6529,6 +6531,13 @@ static void rtl8xxxu_stop(struct ieee80211_hw *hw) priv->shutdown = true;spin_unlock_irqrestore (&priv->rx_urb_lock, flags); +/* +* Cancel before killing rx_anchor: the worker re-anchors every URB +* it drained via rtl8xxxu_submit_rx_urb(), so a worker still running +* after the kill could submit a URB that escapes it. +*/ +cancel_work_sync (&priv->rx_urb_wq); +usb_kill_anchored_urbs (&priv->rx_anchor);usb_kill_anchored_urbs (&priv->tx_anchor);if (priv->usb_interrupts)
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 33/1887 usb: storage: realtek_cr: fix use-after-free on disconnect
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Myeonghun Pak <[email protected]>
[ Upstream commit 4ffee1aebb0c0ffcda9faffd17834ea9b00d42cc ]
realtek_cr_destructor() calls timer_delete() before the chip containing the timer is freed. The timer callback may still be running and can rearm itself, resulting in a use-after-free.
Use timer_shutdown_sync() to wait for the callback and prevent further rearming. Do this unconditionally because ss_en may be changed after the timer is armed.
Move timer_setup() into init_realtek_cr() so the timer is initialized before any failure path can invoke the destructor.
Found by static analysis.
--- drivers/usb/storage/realtek_cr.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
drivers/usb/storage/realtek_cr.c +4 -5
@@ -915,7 +915,6 @@ static int realtek_cr_autosuspend_setup(struct us_data *us) us->proto_handler = rts51x_invoke_transport; chip->timer_expires =0 ; -timer_setup (&chip->rts51x_suspend_timer, rts51x_suspend_timer_fn,0 );fw5895_init (us);/* enable autosuspend function of the usb device */
@@ -933,10 +932,7 @@ static void realtek_cr_destructor(void *extra)return ;#ifdef CONFIG_REALTEK_AUTOPM -if (ss_en) { -del_timer (&chip->rts51x_suspend_timer); - chip->timer_expires =0 ; - } +timer_shutdown_sync (&chip->rts51x_suspend_timer);#endif kfree (chip->status); }
@@ -981,6 +977,9 @@ static int init_realtek_cr(struct us_data *us) us->extra = chip; us->extra_destructor = realtek_cr_destructor; +#ifdef CONFIG_REALTEK_AUTOPM +timer_setup (&chip->rts51x_suspend_timer, rts51x_suspend_timer_fn,0 ); +#endif us->max_lun = chip->max_lun =rts51x_get_max_lun (us); chip->us = us;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 34/1887 staging: rtl8723bs: fix spacing around operators
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vivek BalachandharTN <[email protected]>
[ Upstream commit 2038fe84b8bdf894b634f777096685e78e8f3774 ]
Fix several instances where operators lacked spaces around them. This improves readability and brings the driver closer to kernel coding-style guidelines. No functional change.
For this stable dependency, retain only the spacing change to the IE advance in rtw_restruct_wmm_ie(). This supplies the exact context needed by target commit 28a289beaf226 ("staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie()"). Drop the unrelated operator-spacing hunks.
Keep the existing bounds-first WMM match condition from stable commit 4dd2d9cf563c5 (upstream a75281626fc8f); applying the older condition would undo its out-of-bounds-read fix. No functional change.
Stable-dep-of: 28a289beaf22 ("staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie()")
--- drivers/staging/rtl8723bs/core/rtw_mlme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/staging/rtl8723bs/core/rtw_mlme.c +1 -1
@@ -2025,7 +2025,7 @@ int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_break ; } - i += (in_ie[i+1 ]+2 );/* to the next IE element */ + i += (in_ie[i +1 ] +2 );/* to the next IE element */ }return ielength;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 35/1887 staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Muhammad Bilal <[email protected]>
[ Upstream commit 28a289beaf226b30b1e6e7d7b1a2946fe2d6e852 ]
rtw_restruct_wmm_ie() scans in_ie for a WMM IE with:
while (i < in_len) {
...
if (i + 5 < in_len && in_ie[i] == 0xDD && ...) {
...
break;
}
i += (in_ie[i + 1] + 2); /* to the next IE element */
}When the "i + 5 < in_len" match check fails simply because i is within 5 bytes of the end of the buffer (i.e. no WMM IE was found near the tail of in_ie), execution falls through to
"i += (in_ie[i + 1] + 2)", which reads in_ie[i + 1]. If i == in_len
- 1 at that point, this is a 1-byte out-of-bounds read of an attacker-influenced IE buffer built from association/scan data.
Commit a75281626fc8f ("staging: rtl8723bs: fix potential out-of-bounds read in rtw_restruct_wmm_ie") added the "i + 5 < in_len" guard to the match condition itself, but did not add an equivalent guard before the fallthrough advance, so the same class of OOB read remained reachable through the non-matching path.
Add an explicit bounds check before advancing to the next IE.
--- drivers/staging/rtl8723bs/core/rtw_mlme.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/staging/rtl8723bs/core/rtw_mlme.c +3 -0
@@ -2025,6 +2025,9 @@ int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_break ; } +if (i +1 >= in_len) +break ; + i += (in_ie[i +1 ] +2 );/* to the next IE element */ }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 36/1887 ftrace: Take trace_array reference before accessing its ftrace_ops
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt <[email protected]>
[ Upstream commit 9100191e5acb2e5ea2313f436667bb5fce129f47 ]
The trace instance files set_ftrace_filter and set_ftrace_notrace was updated to work with specific trace instances (trace_arrays). The issue is that when these files are opened, there is a small race window where it will use the ftrace_ops from the inode->private pointer to get a reference to the trace_array and then take its reference. The problem is that the ftrace_ops itself could be freed. If the rmdir on the instance happens at the same time the set_ftrace_filter file is opened, the rmdir could have also freed the ftrace_ops and referencing it will cause a use-after-free bug and crash the kernel.
Instead, pass in the trace_array as the file private data (NULL for the top level instance), and then pass both the trace_array and the ftrace_ops to the ftrace_regex_open() function. If the trace_array is NULL, then it just uses the ftrace_ops without the need to take its reference (like normal). If the ftrace_ops is NULL, that is only the case for the top level instance and the global_ops can be used.
This allows the trace_array to have its reference incremented before touching the ftrace_ops that could also be freed when the instance is.
--- include/linux/ftrace.h | 5 +-- kernel/trace/ftrace.c | 59 ++++++++++++++++++++++------------ kernel/trace/trace.h | 4 +-- kernel/trace/trace_functions.c | 2 +- kernel/trace/trace_stack.c | 2 +- 5 files changed, 46 insertions(+), 26 deletions(-)
include/linux/ftrace.h +3 -2
@@ -644,8 +644,9 @@ unsigned long ftrace_get_addr_new(struct dyn_ftrace *rec);unsigned long ftrace_get_addr_curr (struct dyn_ftrace *rec);extern ftrace_func_t ftrace_trace_function; +struct trace_array ; -int ftrace_regex_open (struct ftrace_ops *ops,int flag, +int ftrace_regex_open (struct trace_array *tr,struct ftrace_ops *ops,int flag,struct inode *inode,struct file *file);ssize_t ftrace_filter_write (struct file *file,const char __user *ubuf,size_t cnt,loff_t *ppos);
@@ -859,7 +860,7 @@ static inline unsigned long ftrace_location(unsigned long ip)* have them defined when ftrace is not enabled, but these * functions may still be called. Use a macro instead of inline. */ -#define ftrace_regex_open (ops, flag, inod, file) ({ -ENODEV; }) +#define ftrace_regex_open (tr, ops, flag, inode, file) ({ -ENODEV; })#define ftrace_set_early_filter (ops, buf, enable) do { } while (0)#define ftrace_set_filter_ip (ops, ip, remove, reset) ({ -ENODEV; })#define ftrace_set_filter_ips (ops, ips, cnt, remove, reset) ({ -ENODEV; })
kernel/trace/ftrace.c +39 -20
121 lines not on this page · raw message
kernel/trace/trace.h +2 -2
@@ -1092,7 +1092,7 @@ extern void clear_ftrace_function_probes(struct trace_array *tr);int register_ftrace_command (struct ftrace_func_command *cmd);int unregister_ftrace_command (struct ftrace_func_command *cmd); -void ftrace_create_filter_files (struct ftrace_ops *ops, +void ftrace_create_filter_files (struct trace_array *tr,struct dentry *parent);void ftrace_destroy_filter_files (struct ftrace_ops *ops);
@@ -1115,11 +1115,11 @@ static inline void clear_ftrace_function_probes(struct trace_array *tr) { } +#define ftrace_create_filter_files (tr, parent) do { } while (0)/* * The ops parameter passed in is usually undefined. * This must be a macro. */ -#define ftrace_create_filter_files (ops, parent) do { } while (0)#define ftrace_destroy_filter_files (ops) do { } while (0)#endif /* CONFIG_FUNCTION_TRACER && CONFIG_DYNAMIC_FTRACE */
kernel/trace/trace_functions.c +1 -1
@@ -90,7 +90,7 @@ int ftrace_create_function_files(struct trace_array *tr,if (!tr->ops)return -EINVAL ; -ftrace_create_filter_files (tr->ops, parent); +ftrace_create_filter_files (tr, parent);return 0 ; }
kernel/trace/trace_stack.c +1 -1
@@ -499,7 +499,7 @@ stack_trace_filter_open(struct inode *inode, struct file *file)struct ftrace_ops *ops = inode->i_private;/* Checks for tracefs lockdown */ -return ftrace_regex_open (ops,FTRACE_ITER_FILTER , +return ftrace_regex_open (NULL , ops,FTRACE_ITER_FILTER , inode, file); }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 37/1887 nvme: add missing SRCU grace period in error path
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tristan Madani <[email protected]>
[ Upstream commit ef248d5de4469fb6bbaf8dbe0c4c47800080d648 ]
nvme_alloc_ns() error path at out_unlink_ns removes ns from the namespace head siblings list with list_del_rcu(&ns->siblings) but does not wait for SRCU readers before freeing the namespace struct. Multipath code iterates the head->list under srcu_read_lock() in nvme_find_path() and nvme_mpath_revalidate_paths(), so a concurrent reader can still hold a reference to ns when kfree(ns) runs.
The normal removal path in nvme_ns_remove() correctly calls synchronize_srcu(&ns->head->srcu) after list_del_rcu() to wait for in-progress readers. Add the same grace period in the error path.
--- drivers/nvme/host/core.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/nvme/host/core.c +3 -0
@@ -4437,6 +4437,9 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, struct nvme_ns_info *info)if (list_empty (&ns->head->list))list_del_init (&ns->head->entry);mutex_unlock (&ctrl->subsys->lock); + +/* guarantee not available in head->list */ +synchronize_srcu (&ns->head->srcu);nvme_put_ns_head (ns->head); out_cleanup_disk:put_disk (disk);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 38/1887 KVM: s390: Zero initialize data structures for inject_pfault_token
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Borntraeger <[email protected]>
[ Upstream commit 4e2c7f7cbc27418f9a290399b986c1b85ff93b90 ]
__kvm_inject_pfault_token() only sets .type and .u.ext.ext_params2 of the on-stack struct kvm_s390_irq but the full ext substructure is copied into the cpu local variable on inject. ext_params and pad contain stale stack values.
Interrupt delivery only uses ext_params2, so nothing leaks to the guest, but a host user can use the migration ioctls to get to the data.
Fix by zero-initializing the irq struct.
Do the same for the inti data structure.
Message-ID: <[email protected]>
--- arch/s390/kvm/kvm-s390.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/s390/kvm/kvm-s390.c +2 -2
@@ -4430,8 +4430,8 @@ long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)static void __kvm_inject_pfault_token (struct kvm_vcpu *vcpu,bool start_token,unsigned long token) { -struct kvm_s390_interrupt inti; -struct kvm_s390_irq irq; +struct kvm_s390_interrupt inti = {}; +struct kvm_s390_irq irq = {};if (start_token) { irq.u.ext.ext_params2 = token;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 39/1887 scsi: qla2xxx: Zero dport diagnostics buffer to avoid info leak
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nilesh Javali <[email protected]>
[ Upstream commit a152edab3854f01dd2daf3eaf8f32cbabdb3834e ]
qla2x00_do_dport_diagnostics() allocates the qla_dport_diag response buffer with kmalloc_obj() (non-zeroing) and, on success, copies the full sizeof(*dd) back to user space via sg_copy_from_buffer(). The inbound sg_copy_to_buffer() only fills as many bytes as the user request payload provides, and qla26xx_dport_diagnostics() zeroes only dd->buf. The options and unused[] fields are therefore copied out uninitialized, leaking kernel heap contents to user space.
Allocate with kzalloc_obj(), matching qla2x00_do_dport_diagnostics_v2().
--- drivers/scsi/qla2xxx/qla_bsg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/qla2xxx/qla_bsg.c +1 -1
@@ -2412,7 +2412,7 @@ qla2x00_do_dport_diagnostics(struct bsg_job *bsg_job) !IS_QLA28XX(vha->hw))return -EPERM ; - dd =kmalloc (sizeof (*dd),GFP_KERNEL ); + dd =kzalloc (sizeof (*dd),GFP_KERNEL );if (!dd) {ql_log (ql_log_warn, vha,0x70db ,"Failed to allocate memory for dport.\n" );
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 40/1887 scsi: qla2xxx: Fix queue teardown NULL dma_free and bitmap locking
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nilesh Javali <[email protected]>
[ Upstream commit 34a40e0dff940ac5eba494a69b553ea571e24873 ]
qla25xx_free_req_que() and qla25xx_free_rsp_que() have two pre-existing bugs exposed on the error path of qla25xx_create_{req,rsp}_que():
1. When dma_alloc_coherent() fails during queue creation, the error path calls the free function with req->ring / rsp->ring still NULL (from kzalloc). The unconditional dma_free_coherent() with a NULL cpu_addr is undefined behavior and can panic.
2. The free functions clear req_qid_map / rsp_qid_map under vport_lock, but the create functions protect the same bitmaps with mq_lock. This provides no mutual exclusion. Additionally, the create error path clears the bit and releases mq_lock before calling the free function, creating a window where another thread can allocate the same que_id and have its ha->req_q_map entry clobbered by the subsequent lockless NULL assignment in the free function.
Fix by:
- Guarding dma_free_coherent() with a NULL check on the ring pointer.
- Using mq_lock (the lock held by all creators) in the free functions to atomically NULL the map entry and clear the bitmap bit.
- Removing the now-redundant clear_bit blocks from the create error paths since the free functions handle it atomically.
Backport adaptation for the stable tree: the 29xx IOCB size-selection helpers are absent, and queue creation still allocates fixed-size entries. Initialize the local req_entry_size and rsp_entry_size values with sizeof(request_t) and sizeof(response_t), respectively, so DMA freeing continues to match allocation without adding helper functions or 29xx support. Retain all NULL-ring guards, mq_lock protection, and removal of the premature bitmap clears.
Keep the response-ring cleanup layout used by upstream so target commit 19788a55cab61d78e33e0914a5a31d27843e8a4a applies unchanged.
Stable-dep-of: 19788a55cab6 ("scsi: qla2xxx: Fix use-after-free of qpair work on queue teardown")
--- drivers/scsi/qla2xxx/qla_mid.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-)
drivers/scsi/qla2xxx/qla_mid.c +15 -14
@@ -583,16 +583,19 @@ qla25xx_free_req_que(struct scsi_qla_host *vha, struct req_que *req) {struct qla_hw_data *ha = vha->hw;uint16_t que_id = req->id; +size_t req_entry_size =sizeof (request_t); -dma_free_coherent (&ha->pdev->dev, (req->length +1 ) * -sizeof (request_t), req->ring, req->dma); +if (req->ring) +dma_free_coherent (&ha->pdev->dev, + (req->length +1 ) * req_entry_size, + req->ring, req->dma); req->ring =NULL ; req->dma =0 ;if (que_id) { +mutex_lock (&ha->mq_lock); ha->req_q_map[que_id] =NULL ; -mutex_lock (&ha->vport_lock);clear_bit (que_id, ha->req_qid_map); -mutex_unlock (&ha->vport_lock); +mutex_unlock (&ha->mq_lock); }kfree (req->outstanding_cmds);kfree (req);
@@ -603,6 +606,7 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) {struct qla_hw_data *ha = vha->hw;uint16_t que_id = rsp->id; +size_t rsp_entry_size =sizeof (response_t);if (rsp->msix && rsp->msix->have_irq) {free_irq (rsp->msix->vector, rsp->msix->handle);
@@ -610,15 +614,18 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) rsp->msix->in_use =0 ; rsp->msix->handle =NULL ; } -dma_free_coherent (&ha->pdev->dev, (rsp->length +1 ) * -sizeof (response_t), rsp->ring, rsp->dma); + +if (rsp->ring) +dma_free_coherent (&ha->pdev->dev, + (rsp->length +1 ) * rsp_entry_size, + rsp->ring, rsp->dma); rsp->ring =NULL ; rsp->dma =0 ;if (que_id) { +mutex_lock (&ha->mq_lock); ha->rsp_q_map[que_id] =NULL ; -mutex_lock (&ha->vport_lock);clear_bit (que_id, ha->rsp_qid_map); -mutex_unlock (&ha->vport_lock); +mutex_unlock (&ha->mq_lock); }kfree (rsp); }
@@ -803,9 +810,6 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options,if (ret !=QLA_SUCCESS ) {ql_log (ql_log_fatal, base_vha,0x00df ,"%s failed.\n" , __func__); -mutex_lock (&ha->mq_lock); -clear_bit (que_id, ha->req_qid_map); -mutex_unlock (&ha->mq_lock); goto que_failed; } vha->flags.qpairs_req_created =1 ;
@@ -917,9 +921,6 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options,if (ret !=QLA_SUCCESS ) {ql_log (ql_log_fatal, base_vha,0x00e7 ,"%s failed.\n" , __func__); -mutex_lock (&ha->mq_lock); -clear_bit (que_id, ha->rsp_qid_map); -mutex_unlock (&ha->mq_lock); goto que_failed; } vha->flags.qpairs_rsp_created =1 ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 41/1887 scsi: qla2xxx: Fix use-after-free of qpair work on queue teardown
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nilesh Javali <[email protected]>
[ Upstream commit 19788a55cab61d78e33e0914a5a31d27843e8a4a ]
The response queue MSI-X handler qla2xxx_msix_rsp_q() schedules qla_do_work() via queue_work(ha->wq, &qpair->q_work). qla_do_work() dereferences the qpair (vha, rsp) and takes qpair->qp_lock.
During teardown, qla2xxx_delete_qpair() deletes the response queue, which calls free_irq() in qla25xx_free_rsp_que(), and then frees the queue and the qpair. free_irq() waits for running hardirq handlers but does not cancel work already placed on ha->wq. A still-pending q_work then runs qla_do_work() against the freed qpair and response queue, causing a use-after-free. This is especially likely during full adapter teardown, where destroy_workqueue(ha->wq) forces pending work to run after the queue pairs have been freed.
Flush the work item with cancel_work_sync() in qla25xx_free_rsp_que() after free_irq() has released the interrupt (so no new work can be queued) and before the response queue and qpair memory are freed (so the flushed handler still sees valid memory). Guard on rsp->qpair and ha->wq to match the INIT_WORK() condition and avoid operating on an uninitialized work_struct.
--- drivers/scsi/qla2xxx/qla_mid.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/scsi/qla2xxx/qla_mid.c +4 -0
@@ -615,6 +615,10 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) rsp->msix->handle =NULL ; } +/* Flush any queued response work before freeing the queue/qpair. */ +if (rsp->qpair && ha->wq) +cancel_work_sync (&rsp->qpair->q_work); +if (rsp->ring) dma_free_coherent(&ha->pdev->dev, (rsp->length + 1) * rsp_entry_size,
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 42/1887 scsi: qla2xxx: Validate BSG request_len before reading vendor_cmd[]
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nilesh Javali <[email protected]>
[ Upstream commit 4cf38dd9465736141263ebb63375868311a0ec81 ]
The FC BSG transport allocates job->request via memdup_user() using the exact user-supplied request_len. For FC_BSG_HST_VENDOR, fc_bsg_host_dispatch() only guarantees request_len covers msgcode and vendor_id; it does not account for the vendor_cmd[] flexible array.
qla2xxx then reads the command selector vendor_cmd[0] and, in several sub-handlers, vendor_cmd[1]/[2] or structures overlaid on the vendor command area without verifying request_len. A caller holding CAP_SYS_RAWIO can submit a short request whose vendor_id matches the host, triggering out-of-bounds heap reads (KASAN-detectable, and able to mis-select a command or panic).
Add a central guard in qla2x00_process_vendor_specific() so the selector is always in bounds, restrict the early vendor_cmd[0] read in qla24xx_bsg_request() to sufficiently long vendor messages, and add request_len checks to the sub-handlers that read further:qla24xx_proc_fcp_prio_cfg_cmd(), qla2x00_process_loopback(), qla84xx_reset(), qla84xx_updatefw(), qla2x00_read_optrom(), qla2x00_update_optrom(), qlafx00_mgmt_cmd() and qla28xx_validate_flash_image().
--- drivers/scsi/qla2xxx/qla_bsg.c | 45 ++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/qla_bsg.c +43 -2
@@ -158,6 +158,12 @@ qla24xx_proc_fcp_prio_cfg_cmd(struct bsg_job *bsg_job) goto exit_fcp_prio_cfg; } +if (bsg_job->request_len < +sizeof (struct fc_bsg_request ) +2 *sizeof (uint32_t )) { + ret = -EINVAL ; + goto exit_fcp_prio_cfg; + } +/* Get the sub command */ oper = bsg_request->rqst_data.h_vendor.vendor_cmd[1 ];
@@ -756,6 +762,10 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)return -EIO ; } +if (bsg_job->request_len < +sizeof (struct fc_bsg_request ) +3 *sizeof (uint32_t )) +return -EINVAL ; +memset (&elreq,0 ,sizeof (elreq)); elreq.req_sg_cnt = dma_map_sg(&ha->pdev->dev,
@@ -988,6 +998,10 @@ qla84xx_reset(struct bsg_job *bsg_job)return -EINVAL ; } +if (bsg_job->request_len < +sizeof (struct fc_bsg_request ) +2 *sizeof (uint32_t )) +return -EINVAL ; + flag = bsg_request->rqst_data.h_vendor.vendor_cmd[1 ]; rval =qla84xx_reset_chip (vha, flag ==A84_ISSUE_RESET_DIAG_FW );
@@ -1032,6 +1046,10 @@ qla84xx_updatefw(struct bsg_job *bsg_job)return -EINVAL ; } +if (bsg_job->request_len < +sizeof (struct fc_bsg_request ) +2 *sizeof (uint32_t )) +return -EINVAL ; + sg_cnt =dma_map_sg (&ha->pdev->dev, bsg_job->request_payload.sg_list, bsg_job->request_payload.sg_cnt,DMA_TO_DEVICE );if (!sg_cnt) {
@@ -1482,6 +1500,10 @@ qla2x00_read_optrom(struct bsg_job *bsg_job)struct qla_hw_data *ha = vha->hw;int rval =0 ; +if (bsg_job->request_len < +sizeof (struct fc_bsg_request ) +2 *sizeof (uint32_t )) +return -EINVAL ; +if (ha->flags.nic_core_reset_hdlr_active)return -EBUSY ;
@@ -1519,6 +1541,10 @@ qla2x00_update_optrom(struct bsg_job *bsg_job)struct qla_hw_data *ha = vha->hw;int rval =0 ; +if (bsg_job->request_len < +sizeof (struct fc_bsg_request ) +2 *sizeof (uint32_t )) +return -EINVAL ; +mutex_lock (&ha->optrom_mutex); rval =qla2x00_optrom_setup (bsg_job, vha,1 );if (rval) {
@@ -2010,6 +2036,11 @@ qlafx00_mgmt_cmd(struct bsg_job *bsg_job)struct fc_port *fcport;char *type ="FC_BSG_HST_FX_MGMT" ; +if (bsg_job->request_len < +sizeof (struct fc_bsg_request ) +sizeof (uint32_t ) + +sizeof (struct qla_mt_iocb_rqst_fx00 )) +return -EINVAL ; +/* Copy the IOCB specific information */ piocb_rqst = (struct qla_mt_iocb_rqst_fx00 *) &bsg_request->rqst_data.h_vendor.vendor_cmd[1 ];
@@ -2899,6 +2930,13 @@ qla2x00_process_vendor_specific(struct scsi_qla_host *vha, struct bsg_job *bsg_j {struct fc_bsg_request *bsg_request = bsg_job->request; +if (bsg_job->request_len < +sizeof (struct fc_bsg_request ) +sizeof (uint32_t )) { +ql_log (ql_log_warn, vha,0x7000 , +"BSG request too small for vendor cmd.\n" ); +return -EINVAL ; + } +ql_dbg (ql_dbg_edif, vha,0x911b ,"%s FC_BSG_HST_VENDOR cmd[0]=0x%x\n" , __func__, bsg_request->rqst_data.h_vendor.vendor_cmd[0 ]);
@@ -3024,8 +3062,11 @@ qla24xx_bsg_request(struct bsg_job *bsg_job) }/* Disable port will bring down the chip, allow enable command */ -if (bsg_request->rqst_data.h_vendor.vendor_cmd[0 ] ==QL_VND_MANAGE_HOST_PORT || - bsg_request->rqst_data.h_vendor.vendor_cmd[0 ] ==QL_VND_GET_HOST_STATS ) +if (bsg_request->msgcode ==FC_BSG_HST_VENDOR && + bsg_job->request_len >= +sizeof (struct fc_bsg_request ) +sizeof (uint32_t ) && + (bsg_request->rqst_data.h_vendor.vendor_cmd[0 ] ==QL_VND_MANAGE_HOST_PORT || + bsg_request->rqst_data.h_vendor.vendor_cmd[0 ] ==QL_VND_GET_HOST_STATS )) goto skip_chip_chk;if (vha->hw->flags.port_isolated) {
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 43/1887 f2fs: embed f2fs_gc_kthread in f2fs_sb_info
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 3d7bca9d583793bb7d0bac0d95a24ddd2e129eed ]
Instead of allocating f2fs_gc_kthread dynamically, embed it in f2fs_sb_info. This simplifies lifetime management and prepares for fixing race conditions during teardown.
- __sbi_store - remount|shutdown
- f2fs_stop_gc_thread
- access sbi->gc_thread
- sbi->gc_thread = NULL
- access sbi->gc_thread->f2fs_gc_task
--- fs/f2fs/debug.c | 4 ---- fs/f2fs/f2fs.h | 22 +++++++++++++++++++++- fs/f2fs/gc.c | 33 ++++++++++++--------------------- fs/f2fs/gc.h | 20 -------------------- fs/f2fs/segment.c | 9 ++++----- fs/f2fs/super.c | 4 ++-- fs/f2fs/sysfs.c | 14 +++++++------- 7 files changed, 46 insertions(+), 60 deletions(-)
fs/f2fs/debug.c +0 -4
@@ -280,10 +280,6 @@ static void update_mem_info(struct f2fs_sb_info *sbi) get_cache: si->cache_mem =0 ; -/* build gc */ -if (sbi->gc_thread) - si->cache_mem +=sizeof (struct f2fs_gc_kthread ); -/* build merge flush thread */ if (SM_I (sbi)->fcc_info) si->cache_mem +=sizeof (struct flush_cmd_control );
fs/f2fs/f2fs.h +21 -1
@@ -1599,6 +1599,26 @@ struct decompress_io_ctx {#define MAX_COMPRESS_LOG_SIZE 8#define MAX_COMPRESS_WINDOW_SIZE (log_size) ((PAGE_SIZE) << (log_size)) +struct f2fs_gc_kthread { +struct task_struct *f2fs_gc_task; +wait_queue_head_t gc_wait_queue_head; + +/* for gc sleep time */ +unsigned int urgent_sleep_time; +unsigned int min_sleep_time; +unsigned int max_sleep_time; +unsigned int no_gc_sleep_time; + +/* for changing gc mode */ +unsigned int gc_wake; + +/* for GC_MERGE mount option */ +wait_queue_head_t fggc_wq;/* +* caller of f2fs_balance_fs() +* will wait on this wait queue. +*/ +}; +struct f2fs_sb_info {struct super_block *sb;/* pointer to VFS super block */ struct proc_dir_entry *s_proc;/* proc entry */
@@ -1715,7 +1735,7 @@ struct f2fs_sb_info {* semaphore for GC, avoid * race between GC and GC or CP */ -struct f2fs_gc_kthread *gc_thread;/* GC thread */ +struct f2fs_gc_kthread gc_thread;/* GC thread */ struct atgc_management am;/* atgc management */ unsigned int cur_victim_sec;/* current victim section num */ unsigned int gc_mode;/* current GC state */
fs/f2fs/gc.c +12 -21
@@ -31,9 +31,9 @@ static unsigned int count_bits(const unsigned long *addr,static int gc_thread_func (void *data) {struct f2fs_sb_info *sbi = data; -struct f2fs_gc_kthread *gc_th = sbi->gc_thread; -wait_queue_head_t *wq = &sbi->gc_thread->gc_wait_queue_head; -wait_queue_head_t *fggc_wq = &sbi->gc_thread->fggc_wq; +struct f2fs_gc_kthread *gc_th = &sbi->gc_thread; +wait_queue_head_t *wq = &sbi->gc_thread.gc_wait_queue_head; +wait_queue_head_t *fggc_wq = &sbi->gc_thread.fggc_wq;unsigned int wait_ms;struct f2fs_gc_control gc_control = { .victim_segno =NULL_SEGNO ,
@@ -169,16 +169,10 @@ static int gc_thread_func(void *data)int f2fs_start_gc_thread (struct f2fs_sb_info *sbi) { -struct f2fs_gc_kthread *gc_th; +struct f2fs_gc_kthread *gc_th = &sbi->gc_thread;dev_t dev = sbi->sb->s_bdev->bd_dev;int err =0 ; - gc_th =f2fs_kmalloc (sbi,sizeof (struct f2fs_gc_kthread ),GFP_KERNEL ); -if (!gc_th) { - err = -ENOMEM ; - goto out; - } - gc_th->urgent_sleep_time =DEF_GC_THREAD_URGENT_SLEEP_TIME ; gc_th->min_sleep_time =DEF_GC_THREAD_MIN_SLEEP_TIME ; gc_th->max_sleep_time =DEF_GC_THREAD_MAX_SLEEP_TIME ;
@@ -186,30 +180,27 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi) gc_th->gc_wake =0 ; - sbi->gc_thread = gc_th; -init_waitqueue_head (&sbi->gc_thread->gc_wait_queue_head); -init_waitqueue_head (&sbi->gc_thread->fggc_wq); - sbi->gc_thread->f2fs_gc_task =kthread_run (gc_thread_func, sbi, +init_waitqueue_head (&gc_th->gc_wait_queue_head); +init_waitqueue_head (&gc_th->fggc_wq); + gc_th->f2fs_gc_task =kthread_run (gc_thread_func, sbi,"f2fs_gc-%u:%u" ,MAJOR (dev),MINOR (dev));if (IS_ERR (gc_th->f2fs_gc_task)) { err =PTR_ERR (gc_th->f2fs_gc_task); -kfree (gc_th); - sbi->gc_thread =NULL ; + gc_th->f2fs_gc_task =NULL ; } -out:return err; }void f2fs_stop_gc_thread (struct f2fs_sb_info *sbi) { -struct f2fs_gc_kthread *gc_th = sbi->gc_thread; +struct f2fs_gc_kthread *gc_th = &sbi->gc_thread; -if (!gc_th) +if (!gc_th->f2fs_gc_task)return ; +kthread_stop (gc_th->f2fs_gc_task); + gc_th->f2fs_gc_task =NULL ;wake_up_all (&gc_th->fggc_wq); -kfree (gc_th); - sbi->gc_thread =NULL ; }static int select_gc_type (struct f2fs_sb_info *sbi,int gc_type)
fs/f2fs/gc.h +0 -20
@@ -32,26 +32,6 @@#define NR_GC_CHECKPOINT_SECS (3)/* data/node/dentry sections */ -struct f2fs_gc_kthread { -struct task_struct *f2fs_gc_task; -wait_queue_head_t gc_wait_queue_head; - -/* for gc sleep time */ -unsigned int urgent_sleep_time; -unsigned int min_sleep_time; -unsigned int max_sleep_time; -unsigned int no_gc_sleep_time; - -/* for changing gc mode */ -unsigned int gc_wake; - -/* for GC_MERGE mount option */ -wait_queue_head_t fggc_wq;/* -* caller of f2fs_balance_fs() -* will wait on this wait queue. -*/ -}; -struct gc_inode_list {struct list_head ilist;struct radix_tree_root iroot;
fs/f2fs/segment.c +4 -5
@@ -415,15 +415,14 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)f2fs_submit_merged_write (sbi,DATA );f2fs_submit_all_merged_ipu_writes (sbi); -if (test_opt (sbi,GC_MERGE ) && sbi->gc_thread && - sbi->gc_thread->f2fs_gc_task) { +if (test_opt (sbi,GC_MERGE ) && sbi->gc_thread.f2fs_gc_task) {DEFINE_WAIT (wait); -prepare_to_wait (&sbi->gc_thread->fggc_wq, &wait, +prepare_to_wait (&sbi->gc_thread.fggc_wq, &wait,TASK_UNINTERRUPTIBLE ); -wake_up (&sbi->gc_thread->gc_wait_queue_head); +wake_up (&sbi->gc_thread.gc_wait_queue_head);io_schedule (); -finish_wait (&sbi->gc_thread->fggc_wq, &wait); +finish_wait (&sbi->gc_thread.fggc_wq, &wait); }else {struct f2fs_gc_control gc_control = { .victim_segno =NULL_SEGNO ,
fs/f2fs/super.c +2 -2
@@ -2393,11 +2393,11 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)if ((*flags &SB_RDONLY ) || (F2FS_OPTION (sbi).bggc_mode ==BGGC_MODE_OFF && !test_opt (sbi,GC_MERGE ))) { -if (sbi->gc_thread) { +if (sbi->gc_thread.f2fs_gc_task) {f2fs_stop_gc_thread (sbi); need_restart_gc = true; } - }else if (!sbi->gc_thread) { + }else if (!sbi->gc_thread.f2fs_gc_task) { err =f2fs_start_gc_thread (sbi);if (err) goto restore_opts;
fs/f2fs/sysfs.c +7 -7
@@ -68,7 +68,7 @@ static ssize_t f2fs_sbi_show(struct f2fs_attr *a,static unsigned char *__struct_ptr (struct f2fs_sb_info *sbi,int struct_type) {if (struct_type ==GC_THREAD ) -return (unsigned char *)sbi->gc_thread; +return (unsigned char *)&sbi->gc_thread;else if (struct_type ==SM_INFO )return (unsigned char *)SM_I (sbi);else if (struct_type ==DCC_INFO )
@@ -543,20 +543,20 @@ static ssize_t __sbi_store(struct f2fs_attr *a, sbi->gc_mode =GC_NORMAL ; }else if (t ==1 ) { sbi->gc_mode =GC_URGENT_HIGH ; -if (sbi->gc_thread) { - sbi->gc_thread->gc_wake =1 ; +if (sbi->gc_thread.f2fs_gc_task) { + sbi->gc_thread.gc_wake =1 ;wake_up_interruptible_all ( - &sbi->gc_thread->gc_wait_queue_head); + &sbi->gc_thread.gc_wait_queue_head);wake_up_discard_thread (sbi, true); } }else if (t ==2 ) { sbi->gc_mode =GC_URGENT_LOW ; }else if (t ==3 ) { sbi->gc_mode =GC_URGENT_MID ; -if (sbi->gc_thread) { - sbi->gc_thread->gc_wake =1 ; +if (sbi->gc_thread.f2fs_gc_task) { + sbi->gc_thread.gc_wake =1 ;wake_up_interruptible_all ( - &sbi->gc_thread->gc_wait_queue_head); + &sbi->gc_thread.gc_wait_queue_head); } }else {return -EINVAL ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 44/1887 Bluetooth: btqcomsmd: Convert to platform remove callback returning void
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
[ Upstream commit 4a62832f565c950d645a4f7b199a0a7985815940 ]
The .remove() callback for a platform driver returns an int which makes many driver authors wrongly assume it's possible to do error handling by returning an error code. However the value returned is ignored (apart from emitting a warning) and this typically results in resource leaks.
To improve here there is a quest to make the remove callback return void. In the first step of this quest all drivers are converted to .remove_new(), which already returns void. Eventually after all drivers are converted, .remove_new() will be renamed to .remove().
Trivially convert this driver from always returning zero in the remove callback to the void returning variant.
Stable-dep-of: f5a427b16e45 ("Bluetooth: btqcomsmd: destroy RPMsg endpoints before freeing hci_dev")
--- drivers/bluetooth/btqcomsmd.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/bluetooth/btqcomsmd.c +2 -4
@@ -197,7 +197,7 @@ static int btqcomsmd_probe(struct platform_device *pdev)return ret; } -static int btqcomsmd_remove (struct platform_device *pdev) +static void btqcomsmd_remove (struct platform_device *pdev) {struct btqcomsmd *btq =platform_get_drvdata (pdev);
@@ -206,8 +206,6 @@ static int btqcomsmd_remove(struct platform_device *pdev)rpmsg_destroy_ept (btq->cmd_channel);rpmsg_destroy_ept (btq->acl_channel); - -return 0 ; }static const struct of_device_id btqcomsmd_of_match[] = {
@@ -218,7 +216,7 @@ MODULE_DEVICE_TABLE(of, btqcomsmd_of_match);static struct platform_driver btqcomsmd_driver = { .probe = btqcomsmd_probe, - .remove = btqcomsmd_remove, + .remove_new = btqcomsmd_remove, .driver = { .name ="btqcomsmd" , .of_match_table = btqcomsmd_of_match,
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 45/1887 Bluetooth: btqcomsmd: destroy RPMsg endpoints before freeing hci_dev
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xu Rao <[email protected]>
[ Upstream commit f5a427b16e45210dee656b0860728f3d496dee85 ]
The command and ACL RPMsg endpoints store struct btqcomsmd as their callback private data. The receive callbacks dereference btq->hdev without taking an hci_dev reference.
The current teardown order frees the hci_dev before destroying the RPMsg endpoints in both the hci_register_dev() error path and the driver remove path. If WCNSS delivers data in that window, the endpoint callback can run with an already freed hci_dev and pass it to the Bluetooth core.
For qcom_smd endpoints, rpmsg_destroy_ept() closes the channel and clears the callback under the channel recv_lock. The receive path holds the same lock while invoking the callback, so destroying the endpoints first both prevents new callbacks and serializes with any callback already running.
Destroy the command and ACL endpoints before hci_free_dev(). Keep hci_unregister_dev() first during remove so the HCI core stops issuing operations before the transport endpoints are shut down. In the full registration-error cleanup path, return directly after freeing the hci_dev to avoid falling through to the partial-construction labels and destroying the endpoints twice.
--- drivers/bluetooth/btqcomsmd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/bluetooth/btqcomsmd.c +5 -1
@@ -188,7 +188,10 @@ static int btqcomsmd_probe(struct platform_device *pdev)return 0 ; hci_free_dev: +rpmsg_destroy_ept (btq->cmd_channel); +rpmsg_destroy_ept (btq->acl_channel);hci_free_dev (hdev); +return ret; destroy_cmd_channel:rpmsg_destroy_ept (btq->cmd_channel); destroy_acl_channel:
@@ -202,10 +205,11 @@ static void btqcomsmd_remove(struct platform_device *pdev)struct btqcomsmd *btq =platform_get_drvdata (pdev);hci_unregister_dev (btq->hdev); -hci_free_dev (btq->hdev);rpmsg_destroy_ept (btq->cmd_channel);rpmsg_destroy_ept (btq->acl_channel); + +hci_free_dev (btq->hdev); }static const struct of_device_id btqcomsmd_of_match[] = {
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 46/1887 genetlink: pin family module during policy dump
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: XingWang Xiang <[email protected]>
[ Upstream commit 6a1094c34d176827b2b173e163dcc964a13af93f ]
The generic netlink controller's policy dump keeps pointers to the target family's operation and policy tables in its callback state. A dump may be split across multiple skbs and remain pending after the initial request.
Netlink pins the module which owns the dump callback, but in this case that is the controller's owner rather than the target family's owner. The target family can consequently be unregistered and its module unloaded while a policy dump is pending. Advancing the dump then dereferences policy memory from the unloaded module.
Take a reference to the target family's module when the dump starts. Drop it from the error and done paths. This matches the lifetime for which the dump context retains the family and policy pointers.
--- net/netlink/genetlink.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-)
net/netlink/genetlink.c +21 -7
@@ -1159,6 +1159,7 @@ static int genl_ctrl_event(int event, const struct genl_family *family,struct ctrl_dump_policy_ctx {struct netlink_policy_dump_state *state;const struct genl_family *rt; +struct module *owner;unsigned int opidx;u32 op;u16 fam_id;
@@ -1202,6 +1203,9 @@ static int ctrl_dumppolicy_start(struct netlink_callback *cb)return -ENOENT ; ctx->rt = rt; + ctx->owner = rt->module; +if (!try_module_get (ctx->owner)) +return -ENOENT ;if (tb[CTRL_ATTR_OP ]) { ctx->single_op = true;
@@ -1210,14 +1214,19 @@ static int ctrl_dumppolicy_start(struct netlink_callback *cb) err =genl_get_cmd (ctx->op, rt, &op);if (err) {NL_SET_BAD_ATTR (cb->extack, tb[CTRL_ATTR_OP ]); -return err; + goto err_put_owner; } -if (!op.policy) -return -ENODATA ; +if (!op.policy) { + err = -ENODATA ; + goto err_put_owner; + } -return netlink_policy_dump_add_policy (&ctx->state, op.policy, - op.maxattr); + err =netlink_policy_dump_add_policy (&ctx->state, op.policy, + op.maxattr); +if (err) + goto err_free_state; +return 0 ; }for (i =0 ; i <genl_get_cmd_cnt (rt); i++) {
@@ -1232,12 +1241,16 @@ static int ctrl_dumppolicy_start(struct netlink_callback *cb) } } -if (!ctx->state) -return -ENODATA ; +if (!ctx->state) { + err = -ENODATA ; + goto err_put_owner; + }return 0 ; err_free_state:netlink_policy_dump_free (ctx->state); +err_put_owner: +module_put (ctx->owner);return err; }
@@ -1372,6 +1385,7 @@ static int ctrl_dumppolicy_done(struct netlink_callback *cb)struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx;netlink_policy_dump_free (ctx->state); +module_put (ctx->owner);return 0 ; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 47/1887 net: bridge: use option bits for CFM/MRP frame handlers
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhiling Zou <[email protected]>
[ Upstream commit 7a49e6b16f36b8e085521699adbca3e321b6dd0c ]
CFM and MRP register a global br_frame_type whose hlist_node is linked into the per-bridge frame_type_list when the first MEP/MRP instance is created. Enabling the protocol on multiple bridges therefore inserts the same node into multiple lists. Unregistering it on one bridge then corrupts list state belonging to another.
These handlers can only be installed once per bridge, and they are uncommon. Track their per-bridge enable state with net_bridge option bits, which already live on the Rx hot cache line, and dispatch the matching handler directly from the receive path. Check both bits together first as an unlikely case.
Remove the generic frame_type_list and br_frame_type helpers, which have had no other users since CFM and MRP were added. That shrinks struct net_bridge by 8 bytes and drops the list walk from the fast path. When neither protocol is compiled in, BR_CFM_MRP_OPTS is 0 and the compiler prunes the branch.
--- net/bridge/br_cfm.c | 11 +++-------- net/bridge/br_device.c | 1 - net/bridge/br_input.c | 35 ++++++++++++++--------------------- net/bridge/br_mrp.c | 13 +++---------- net/bridge/br_private.h | 26 +++++++++++++++----------- 5 files changed, 35 insertions(+), 51 deletions(-)
net/bridge/br_cfm.c +3 -8
@@ -367,7 +367,7 @@ static u32 ccm_tlv_extract(struct sk_buff *skb, u32 index, }/* note: already called with rcu_read_lock */ -static int br_cfm_frame_rx (struct net_bridge_port *port,struct sk_buff *skb) +int br_cfm_frame_rx (struct net_bridge_port *port,struct sk_buff *skb) {u32 mdlevel, interval, size, index, max;const struct br_cfm_common_hdr *hdr;
@@ -489,11 +489,6 @@ static int br_cfm_frame_rx(struct net_bridge_port *port, struct sk_buff *skb)return 1 ; } -static struct br_frame_type cfm_frame_type__read_mostly = { - .type =cpu_to_be16 (ETH_P_CFM ), - .frame_handler = br_cfm_frame_rx, -}; - int br_cfm_mep_create(struct net_bridge *br, const u32 instance, struct br_cfm_mep_create *const create,
@@ -559,7 +554,7 @@ int br_cfm_mep_create(struct net_bridge *br,INIT_DELAYED_WORK (&mep->ccm_tx_dwork, ccm_tx_work_expired);if (hlist_empty (&br->mep_list)) -br_add_frame (br, &cfm_frame_type); +br_opt_toggle (br,BROPT_CFM_ENABLED , true);hlist_add_tail_rcu (&mep->head, &br->mep_list);
@@ -588,7 +583,7 @@ static void mep_delete_implementation(struct net_bridge *br,kfree_rcu (mep, rcu);if (hlist_empty (&br->mep_list)) -br_del_frame (br, &cfm_frame_type); +br_opt_toggle (br,BROPT_CFM_ENABLED , false); } int br_cfm_mep_delete(struct net_bridge *br,
net/bridge/br_device.c +0 -1
@@ -508,7 +508,6 @@ void br_dev_setup(struct net_device *dev)spin_lock_init (&br->lock);INIT_LIST_HEAD (&br->port_list);INIT_HLIST_HEAD (&br->fdb_list); -INIT_HLIST_HEAD (&br->frame_type_list);#if IS_ENABLED (CONFIG_BRIDGE_MRP )INIT_HLIST_HEAD (&br->mrp_list);#endif
net/bridge/br_input.c +14 -21
@@ -286,17 +286,25 @@ static int nf_hook_bridge_pre(struct sk_buff *skb, struct sk_buff **pskb)return RX_HANDLER_CONSUMED ; } +#define BR_CFM_MRP_OPTS \ + ((IS_ENABLED(CONFIG_BRIDGE_CFM) ? BIT(BROPT_CFM_ENABLED) : 0UL) | \ + (IS_ENABLED(CONFIG_BRIDGE_MRP) ? BIT(BROPT_MRP_ENABLED) : 0UL)) +/* Return 0 if the frame was not processed otherwise 1 * note: already called with rcu_read_lock */ static int br_process_frame_type (struct net_bridge_port *p,struct sk_buff *skb) { -struct br_frame_type *tmp; +struct net_bridge *br = p->br; + +if (skb->protocol ==htons (ETH_P_CFM ) && +br_opt_get (br,BROPT_CFM_ENABLED )) +return br_cfm_frame_rx (p, skb); -hlist_for_each_entry_rcu (tmp, &p->br->frame_type_list, list) -if (unlikely (tmp->type == skb->protocol)) -return tmp->frame_handler (p, skb); +if (skb->protocol ==htons (ETH_P_MRP ) && +br_opt_get (br,BROPT_MRP_ENABLED )) +return br_mrp_process (p, skb);return 0 ; }
@@ -389,7 +397,8 @@ static rx_handler_result_t br_handle_frame(struct sk_buff **pskb) } } -if (unlikely (br_process_frame_type (p, skb))) +if (unlikely ((READ_ONCE (p->br->options) &BR_CFM_MRP_OPTS ) && +br_process_frame_type (p, skb)))return RX_HANDLER_PASS ; forward:
@@ -430,19 +439,3 @@ rx_handler_func_t *br_get_rx_handler(const struct net_device *dev)return br_handle_frame; } - -void br_add_frame (struct net_bridge *br,struct br_frame_type *ft) -{ -hlist_add_head_rcu (&ft->list, &br->frame_type_list); -} - -void br_del_frame (struct net_bridge *br,struct br_frame_type *ft) -{ -struct br_frame_type *tmp; - -hlist_for_each_entry (tmp, &br->frame_type_list, list) -if (ft == tmp) { -hlist_del_rcu (&ft->list); -return ; - } -}
net/bridge/br_mrp.c +3 -10
@@ -6,13 +6,6 @@static const u8 mrp_test_dmac[ETH_ALEN ] = {0x1 ,0x15 ,0x4e ,0x0 ,0x0 ,0x1 };static const u8 mrp_in_test_dmac[ETH_ALEN ] = {0x1 ,0x15 ,0x4e ,0x0 ,0x0 ,0x3 }; -static int br_mrp_process (struct net_bridge_port *p,struct sk_buff *skb); - -static struct br_frame_type mrp_frame_type__read_mostly = { - .type =cpu_to_be16 (ETH_P_MRP ), - .frame_handler = br_mrp_process, -}; -static bool br_mrp_is_ring_port (struct net_bridge_port *p_port,struct net_bridge_port *s_port,struct net_bridge_port *port)
@@ -486,7 +479,7 @@ static void br_mrp_del_impl(struct net_bridge *br, struct br_mrp *mrp)kfree_rcu (mrp, rcu);if (hlist_empty (&br->mrp_list)) -br_del_frame (br, &mrp_frame_type); +br_opt_toggle (br,BROPT_MRP_ENABLED , false); }/* Adds a new MRP instance.
@@ -536,7 +529,7 @@ int br_mrp_add(struct net_bridge *br, struct br_mrp_instance *instance)rcu_assign_pointer (mrp->s_port, p);if (hlist_empty (&br->mrp_list)) -br_add_frame (br, &mrp_frame_type); +br_opt_toggle (br,BROPT_MRP_ENABLED , true);INIT_DELAYED_WORK (&mrp->test_work, br_mrp_test_work_expired);INIT_DELAYED_WORK (&mrp->in_test_work, br_mrp_in_test_work_expired);
@@ -1241,7 +1234,7 @@ static int br_mrp_rcv(struct net_bridge_port *p,* normal forwarding. * note: already called with rcu_read_lock */ -static int br_mrp_process (struct net_bridge_port *p,struct sk_buff *skb) +int br_mrp_process (struct net_bridge_port *p,struct sk_buff *skb) {/* If there is no MRP instance do normal forwarding */ if (likely (!(p->flags &BR_MRP_AWARE )))
net/bridge/br_private.h +15 -11
@@ -459,12 +459,13 @@ enum net_bridge_opts {BROPT_VLAN_BRIDGE_BINDING ,BROPT_MCAST_VLAN_SNOOPING_ENABLED ,BROPT_MST_ENABLED , +BROPT_CFM_ENABLED , + BROPT_MRP_ENABLED, };struct net_bridge {spinlock_t lock;spinlock_t hash_lock; -struct hlist_head frame_type_list;struct net_device *dev;unsigned long options;/* These fields are accessed on each packet */
@@ -861,16 +862,6 @@ int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev);int br_handle_frame_finish (struct net *net,struct sock *sk,struct sk_buff *skb);rx_handler_func_t *br_get_rx_handler (const struct net_device *dev); -struct br_frame_type { -__be16 type; -int (*frame_handler)(struct net_bridge_port *port, -struct sk_buff *skb); -struct hlist_node list; -}; - -void br_add_frame (struct net_bridge *br,struct br_frame_type *ft); -void br_del_frame (struct net_bridge *br,struct br_frame_type *ft); -static inline bool br_rx_handler_check_rcu (const struct net_device *dev) {return rcu_dereference (dev->rx_handler) ==br_get_rx_handler (dev);
@@ -1931,6 +1922,7 @@ int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p,bool br_mrp_enabled (struct net_bridge *br);void br_mrp_port_del (struct net_bridge *br,struct net_bridge_port *p);int br_mrp_fill_info (struct sk_buff *skb,struct net_bridge *br); +int br_mrp_process (struct net_bridge_port *p,struct sk_buff *skb);#else static inline int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p, struct nlattr *attr, int cmd,
@@ -1954,6 +1946,11 @@ static inline int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br) return 0; } +static inline int br_mrp_process (struct net_bridge_port *p,struct sk_buff *skb) +{ +return 0 ; +} +#endif /* br_cfm.c */
@@ -1962,6 +1959,7 @@ int br_cfm_parse(struct net_bridge *br, struct net_bridge_port *p, struct nlattr *attr, int cmd, struct netlink_ext_ack *extack);bool br_cfm_created (struct net_bridge *br);void br_cfm_port_del (struct net_bridge *br,struct net_bridge_port *p); +int br_cfm_frame_rx (struct net_bridge_port *port,struct sk_buff *skb);int br_cfm_config_fill_info (struct sk_buff *skb,struct net_bridge *br); int br_cfm_status_fill_info(struct sk_buff *skb, struct net_bridge *br,
@@ -1986,6 +1984,12 @@ static inline void br_cfm_port_del(struct net_bridge *br, { } +static inline int br_cfm_frame_rx (struct net_bridge_port *port, +struct sk_buff *skb) +{ +return 0 ; +} +static inline int br_cfm_config_fill_info (struct sk_buff *skb,struct net_bridge *br) {return -EOPNOTSUPP ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 48/1887 landlock: Fix use-after-free of the sources parent directory
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Norbert Szetei <[email protected]>
[ Upstream commit 2c6dc792538260a8087ac5b22c31b3b8e47c85d6 ]
current_check_refer_path() reads old_dentry->d_parent without holding a reference nor a lock on it, and then dereferences it in collect_domain_accesses() and in the audit record.
A reference on a child does not pin its parent: __d_move() reassigns dentry->d_parent and drops the reference the child held on its former parent. hook_path_rename() is not affected because the rename path calls lock_rename() before the hook, so the source cannot be reparented under it. hook_path_link() has no such protection: filename_linkat() holds a reference on the source dentry but neither locks nor references its parent, so a concurrent rename(2) can reparent the source while security_path_link() runs, and the former parent can then be removed and freed while the hook walks it.
A process can trigger this after entering a Landlock domain that handles at least one filesystem access right. The process can then race a linkat(2) loop against rename(2) and rmdir(2):
BUG: KASAN: slab-use-after-free in collect_domain_accesses+0x278/0x290 Read of size 4 at addr ffff888160bd53f4 by task llrepro2/549 collect_domain_accesses+0x278/0x290 current_check_refer_path+0x952/0x1120 security_path_link+0x1be/0x320 filename_linkat+0x342/0x6d0 __x64_sys_linkat+0xfa/0x150 Freed by task 562: kmem_cache_free+0x139/0x4c0 i_callback+0x4b/0x80 rcu_core+0x7dc/0x10a0
Take a reference on the dentry selected as the source parent, using dget() for the common-mount-root case and dget_parent() otherwise. Release it after the hierarchy walk and synchronous audit logging.
--- security/landlock/fs.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
security/landlock/fs.c +6 -4
@@ -911,17 +911,19 @@ static int current_check_refer_path(struct dentry *const old_dentry,/* * old_dentry may be the root of the common mount point and * !IS_ROOT(old_dentry) at the same time (e.g. with open_tree() and -* OPEN_TREE_CLONE). We do not need to call dget(old_parent) because -* we keep a reference to old_dentry. +* OPEN_TREE_CLONE). Pin the dentry used as old_parent in either case. +* Otherwise, dget_parent() safely fetches and pins the current parent +* against a concurrent rename(2). */ - old_parent = (old_dentry == mnt_dir.dentry) ? old_dentry : - old_dentry->d_parent; + old_parent = (old_dentry == mnt_dir.dentry) ?dget (old_dentry) : +dget_parent (old_dentry);/* new_dir->dentry is equal to new_dentry->d_parent */ allow_parent1 =collect_domain_accesses (dom, mnt_dir.dentry, old_parent, &layer_masks_parent1); allow_parent2 =collect_domain_accesses ( dom, mnt_dir.dentry, new_dir->dentry, &layer_masks_parent2); +dput (old_parent);if (allow_parent1 && allow_parent2)return 0 ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 49/1887 smb: client: fix heap overflow in DACL owner/group rewrite
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bjoern Doebel <[email protected]>
[ Upstream commit 0ee150794c75bcd0be0e24ff3394f433cbae18cc ]
When id_mode_to_cifs_acl rewrites an existing DACL, it allocates a buffer sized according to the on-disk DACL length reported by dacl_ptr->size. However, replace_sids_and_copy_aces may rewrite each ACE with a new owner/group SID obtained from the cifs.idmap upcall. Those SIDs can have up to SID_MAX_SUB_AUTHORITIES (15) sub-authorities, making each ACE up to 76 bytes (sizeof(struct smb_ace)).
If the original DACL contains short SIDs (e.g., 1 sub-authority) while the replacement SIDs are long, the rewritten ACEs overflow the allocation.
Fix this by always budgeting for worst-case SID expansion: allocate sizeof(struct smb_acl) plus num_aces * sizeof(struct smb_ace), which covers the smb_acl header and room for every ACE at maximum SID size. This replaces the previous split logic that used dacl_ptr->size for cifsacl mounts but num_aces * sizeof(struct smb_ace) for mode_from_sid
mounts: both paths can trigger the same rewrite and need the same headroom.
KASAN reports this as:
BUG: KASAN: slab-out-of-bounds in build_sec_desc+0x1e8a/0x2680 [cifs] Write of size 4 at addr ffff8881a5e25374 by task chown/5298 ... The buggy address is located 0 bytes to the right of allocated 884-byte region [ffff8881a5e25000, ffff8881a5e25374)
--- fs/smb/client/cifsacl.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
fs/smb/client/cifsacl.c +7 -5
@@ -1751,11 +1751,13 @@ id_mode_to_cifs_acl(struct inode *inode, const char *path, __u64 *pnmode,cifs_put_tlink (tlink);return rc; } -if (mode_from_sid) - nsecdesclen += -le32_to_cpu (dacl_ptr->num_aces) *sizeof (struct cifs_ace ); -else /* cifsacl */ - nsecdesclen +=le16_to_cpu (dacl_ptr->size); +/* +* Worst case: every ACE is rewritten with a new SID of +* SID_MAX_SUB_AUTHORITIES sub-auths -> sizeof(cifs_ace) each, +* plus the cifs_acl header replace_sids_and_copy_aces() emits. +*/ + nsecdesclen +=sizeof (struct cifs_acl ) + +le32_to_cpu (dacl_ptr->num_aces) *sizeof (struct cifs_ace ); } }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 50/1887 ALSA: usb-audio: Optimize the copy of packet sizes for implicit fb handling
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
[ Upstream commit 36adb51ac0b19edb32ffeea3fe66b174bad25ead ]
We did manual copies over loop for the packet data update of the implicit feedback, but this can be optimized with a simple memcpy().
Along with it, change the data type of snd_usb_packet_info struct to align with other (from uint32_t to int).
No functional changes but only code optimizations.
Stable-dep-of: 76a986c980bb ("ALSA: usb-audio: Clamp implicit feedback packet count to URB capacity")
--- sound/usb/card.h | 2 +- sound/usb/endpoint.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-)
sound/usb/card.h +1 -1
@@ -89,7 +89,7 @@ struct snd_usb_endpoint {struct snd_urb_ctx urb[MAX_URBS ];struct snd_usb_packet_info { -uint32_t packet_size[MAX_PACKS_HS ]; +int packet_size[MAX_PACKS_HS ];int packets; } next_packet[MAX_URBS ];unsigned int next_packet_head;/* ring buffer offset to read */
sound/usb/endpoint.c +3 -3
@@ -478,7 +478,7 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,unsigned long flags;struct snd_usb_packet_info *packet;struct snd_urb_ctx *ctx =NULL ; -int err, i; +int err;spin_lock_irqsave (&ep->lock, flags); if ((!implicit_fb || ep->next_packet_queued > 0) &&
@@ -498,8 +498,8 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,/* copy over the length information */ if (implicit_fb) { ctx->packets = packet->packets; -for (i =0 ; i < packet->packets; i++) - ctx->packet_size[i] = packet->packet_size[i]; +memcpy (ctx->packet_size, packet->packet_size, + packet->packets *sizeof (packet->packet_size[0 ])); }/* call the data handler to fill in playback data */
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 51/1887 ALSA: usb-audio: Clamp implicit feedback packet count to URB capacity
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiang Mei <[email protected]>
[ Upstream commit 76a986c980bb502c7688d605ac7a67fd257a9a1b ]
data_ep_set_params() allocates each data URB for exactly u->packets isochronous frames, so urb->iso_frame_desc[] has u->packets slots and ctx->packets is the driver's only record of that limit. For an implicit feedback sink, snd_usb_queue_pending_output_urbs() overwrites it with the sync source's packet count, which is calculated independently from the capture endpoint's parameters. When that count is larger, prepare_playback_urb() and prepare_silent_urb() can write iso_frame_desc[] past the allocation; their existing bounds limit payload bytes, not the descriptor index.
The reproducer uses a high-speed UAC2 device declaring bInterval 1 for implicit feedback capture (8 packets) and bInterval 4 for playback (1 packet). On the first capture completion after the stream starts, it accesses seven descriptors spanning 112 bytes beyond the one-packet URB:
BUG: KASAN: slab-out-of-bounds in prepare_playback_urb (sound/usb/pcm.c:1560) Write of size 4 at addr ffff88801e696ad0 by task vhci_rx/178 prepare_playback_urb (sound/usb/pcm.c:1560) prepare_outbound_urb (sound/usb/endpoint.c:340) snd_usb_queue_pending_output_urbs (sound/usb/endpoint.c:501) snd_complete_urb (sound/usb/endpoint.c:1834) __usb_hcd_giveback_urb (drivers/usb/core/hcd.c:1657) usb_hcd_giveback_urb (drivers/usb/core/hcd.c:1741) vhci_rx_loop (drivers/usb/usbip/vhci_rx.c:107) kthread (kernel/kthread.c:436) The buggy address belongs to the object at ffff88801e696a00 which belongs to the cache kmalloc-256 of size 256 The buggy address is located 0 bytes to the right of allocated 208-byte region [ffff88801e696a00, ffff88801e696ad0)
Record the allocated packet count per endpoint and clamp both the adopted count and the packet-size copy to it. Fold the Format Type II delimiter into urb_packs before the allocation loop so the recorded limit matches every URB.
--- sound/usb/card.h | 1 + sound/usb/endpoint.c | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-)
sound/usb/card.h +1 -0
@@ -115,6 +115,7 @@ struct snd_usb_endpoint {unsigned int phase;/* phase accumulator */ unsigned int maxpacksize;/* max packet size in bytes */ unsigned int maxframesize;/* max packet size in frames */ +unsigned int max_urb_packs;/* packets allocated per data URB */ unsigned int max_urb_frames;/* max URB size in frames */ unsigned int curpacksize;/* current packet size in bytes (for capture) */ unsigned int curframesize;/* current packet size in frames (for capture) */
sound/usb/endpoint.c +7 -5
@@ -497,9 +497,10 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,/* copy over the length information */ if (implicit_fb) { - ctx->packets = packet->packets; + ctx->packets =min_t (int, packet->packets, + ep->max_urb_packs);memcpy (ctx->packet_size, packet->packet_size, - packet->packets *sizeof (packet->packet_size[0 ])); + ctx->packets *sizeof (packet->packet_size[0 ])); }/* call the data handler to fill in playback data */
@@ -1252,15 +1253,16 @@ static int data_ep_set_params(struct snd_usb_endpoint *ep) ep->nurbs =min (max_urbs, urbs_per_period * ep->cur_buffer_periods); } +if (fmt->fmt_type ==UAC_FORMAT_TYPE_II ) + urb_packs++;/* for transfer delimiter */ + ep->max_urb_packs = urb_packs; +/* allocate and initialize data urbs */ for (i =0 ; i < ep->nurbs; i++) {struct snd_urb_ctx *u = &ep->urb[i]; u->index = i; u->ep = ep; u->packets = urb_packs; - -if (fmt->fmt_type ==UAC_FORMAT_TYPE_II ) - u->packets++;/* for transfer delimiter */ u->buffer_size = maxsize * u->packets; u->urb =usb_alloc_urb (u->packets,GFP_KERNEL );if (!u->urb)
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 52/1887 exec: Cleanup POSIX timers right after de_thread()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hyunwoo Kim <[email protected]>
[ Upstream commit acb03d3881818581052924a9bbbe92b8741ed448 ]
A per-thread CPU timer holds a reference to the PID of the thread it is attached to and, while it is armed, its node is queued in that thread's posix_cputimers. The task is looked up by that PID.
When a non-leader thread exec()s, de_thread() changes which task owns that PID. pid_task(timer->it.cpu.pid, PIDTYPE_PID) then returns NULL, but the node is still queued on tsk, which is alive. timer_lock_sighand() takes a failed lookup to mean that the node is already dequeued, so it has nothing to undo.
begin_new_exec() calls posix_cpu_timers_exit(me) right after exec_task_namespaces() and that removes the leftover node, so the state normally stays invisible. But bprm->point_of_no_return is set before de_thread(), so if unshare_files(), set_mm_exe_file(), exec_mmap() or exec_task_namespaces() fails, the task dies before it gets there. exit_itimers() then frees the k_itimer while its node is still queued, and reaping tsk later erases that freed node from the rbtree.
In short:
the non-leader thread B the parent
timer_create(CLOCK_THREAD_CPUTIME_ID)
timer_settime()
arm_timer() // the node is queued on B
execve()
de_thread(B)
exchange_tids(B, leader) // B's PID now belongs to the leader release_task(leader)
__exit_signal(leader)
posix_cpu_timers_exit(leader) // cleans leader's queue, not B's __unhash_process(leader) // that PID has no task anymore
exec_mmap()
mmap_read_lock_killable(old_mm)
kill(B, SIGKILL)
// -EINTR
get_signal()
do_exit()
exit_itimers()
posix_timer_delete()
posix_cpu_timer_del()
posix_timer_unhash_and_free() // freed while still queued
wait4()
release_task(B)
posix_cpu_timers_exit(B)
cleanup_timerqueue()
timerqueue_del() // use-after-free
Move the POSIX timer cleanup right after de_thread() before any of the later failure conditions brings the task into do_exit().
[ tglx: Move the cleanup right after de_thread() ]
--- fs/exec.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-)
fs/exec.c +15 -8
@@ -1268,6 +1268,21 @@ int begin_new_exec(struct linux_binprm * bprm)if (retval) goto out; +/* +* This must be done here to ensure that POSIX CPU timers which were +* armed on the current task are dequeued from me::posix_cputimers. +* Otherwise in case of a TID switch the deletion of the related POSIX +* timer would not remove an enqueued timer because the TID lookup +* of the old TID fails. +*/ +#ifdef CONFIG_POSIX_TIMERS +spin_lock_irq (&me->sighand->siglock); +posix_cpu_timers_exit (me); +spin_unlock_irq (&me->sighand->siglock); +exit_itimers (me); +flush_itimer_signals (); +#endif +/* * Cancel any io_uring activity across execve */
@@ -1316,14 +1331,6 @@ int begin_new_exec(struct linux_binprm * bprm) bprm->mm =NULL ; -#ifdef CONFIG_POSIX_TIMERS -spin_lock_irq (&me->sighand->siglock); -posix_cpu_timers_exit (me); -spin_unlock_irq (&me->sighand->siglock); -exit_itimers (me); -flush_itimer_signals (); -#endif -/* * Make the signal table private. */
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 53/1887 wifi: libipw: reject TKIP frames without a full MIC
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daehyeon Ko <[email protected]>
[ Upstream commit 06f42accaf3c6aecab1dcc57f68dde6c06c8b380 ]
libipw_michael_mic_verify() assumes that an skb contains an eight-byte Michael MIC. A short TKIP frame makes the unsigned payload length wrap, causing michael_mic() to read past the skb.
Check that the MIC is present before verifying it, and use the existing MICHAEL_MIC_LEN constant for all MIC lengths in the verifier.
--- net/wireless/lib80211_crypt_tkip.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
net/wireless/lib80211_crypt_tkip.c +8 -5
@@ -38,6 +38,7 @@ MODULE_DESCRIPTION("lib80211 crypt: TKIP");MODULE_LICENSE ("GPL" );#define TKIP_HDR_LEN 8 +#define MICHAEL_MIC_LEN 8struct lib80211_tkip_data {#define TKIP_KEY_LEN 32
@@ -585,16 +586,18 @@ static int lib80211_michael_mic_verify(struct sk_buff *skb, int keyidx, int hdr_len, void *priv) { struct lib80211_tkip_data *tkey = priv; -u8 mic[8 ]; +u8 mic[MICHAEL_MIC_LEN ]; -if (!tkey->key_set) +if (!tkey->key_set || skb->len < hdr_len +MICHAEL_MIC_LEN )return -1 ;michael_mic_hdr (skb, tkey->rx_hdr);if (michael_mic (tkey->rx_tfm_michael, &tkey->key[24 ], tkey->rx_hdr, - skb->data + hdr_len, skb->len -8 - hdr_len, mic)) + skb->data + hdr_len, + skb->len -MICHAEL_MIC_LEN - hdr_len, mic))return -1 ; -if (memcmp (mic, skb->data + skb->len -8 ,8 ) !=0 ) { +if (memcmp (mic, skb->data + skb->len -MICHAEL_MIC_LEN , +MICHAEL_MIC_LEN ) !=0 ) {struct ieee80211_hdr *hdr; hdr = (struct ieee80211_hdr *)skb->data; printk(KERN_DEBUG "%s: Michael MIC verification failed for "
@@ -612,7 +615,7 @@ static int lib80211_michael_mic_verify(struct sk_buff *skb, int keyidx, tkey->rx_iv32 = tkey->rx_iv32_new; tkey->rx_iv16 = tkey->rx_iv16_new; -skb_trim (skb, skb->len -8 ); +skb_trim (skb, skb->len -MICHAEL_MIC_LEN );return 0 ; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 54/1887 smb: client: fix use-after-free of iface in cifs_try_adding_channels()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Joseph Qi <[email protected]>
[ Upstream commit d034e836eefd7ce75e588f7031cffbeec594f5ac ]
cifs_try_adding_channels() iterates ses->iface_list with list_for_each_entry_safe_from(), which captures the next entry (niface) under iface_lock. The loop body then drops iface_lock for the whole duration of cifs_ses_add_channel().
A concurrent interface refresh (SMB3_request_interfaces() -> parse_server_interfaces()) marks all ifaces inactive and removes and frees any that are not re-advertised via list_del() + kref_put(), where release_iface() is a bare kfree(). Since niface typically has no channel holding a reference, the list reference is its last and it can be freed inside the unlocked window. On continue, the iterator advance step then dereferences niface->iface_head.next, and the loop body reads iface->rdma_capable/is_active, both on freed memory.
Fix this by never keeping an unreferenced list pointer across the unlocked window. Each channel attempt now re-scans the list from the head under iface_lock, takes a kref on the selected candidate, and passes only that referenced candidate to cifs_ses_add_channel(). weight_fulfilled still tracks selection progress, so restarting the scan preserves the original weighted distribution and the weight_fulfilled-before-kref_put ordering on the failure path.
Add a per-pass attempts cap so a flapping interface refresh cannot keep the inner loop spinning within a single tries increment.
--- fs/smb/client/sess.c | 106 ++++++++++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 42 deletions(-)
fs/smb/client/sess.c +64 -42
@@ -163,9 +163,9 @@ int cifs_try_adding_channels(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses)int old_chan_count, new_chan_count;int left;int rc =0 ; -int tries =0 ; +int tries =0 , attempts;size_t iface_weight =0 , iface_min_speed =0 ; -struct cifs_server_iface *iface =NULL , *niface =NULL ; +struct cifs_server_iface *iface =NULL , *candidate =NULL ;struct cifs_server_iface *last_iface =NULL ;spin_lock (&ses->chan_lock);
@@ -211,67 +211,89 @@ int cifs_try_adding_channels(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses)break ; } -if (!iface) - iface = list_first_entry(&ses->iface_list, struct cifs_server_iface, - iface_head); last_iface = list_last_entry(&ses->iface_list, struct cifs_server_iface, iface_head); iface_min_speed = last_iface->speed; +spin_unlock (&ses->iface_lock); -list_for_each_entry_safe_from (iface, niface, &ses->iface_list, - iface_head) { -/* do not mix rdma and non-rdma interfaces */ -if (iface->rdma_capable != ses->server->rdma) -continue ; - -/* skip ifaces that are unusable */ -if (!iface->is_active || - (is_ses_using_iface (ses, iface) && - !iface->rss_capable)) -continue ; + attempts =0 ; +while (left >0 ) { +spin_lock (&ses->iface_lock); -/* check if we already allocated enough channels */ - iface_weight = iface->speed / iface_min_speed; +/* +* iface_lock must be dropped while opening a channel, +* and a concurrent interface refresh may remove and +* free entries during that window, so no list entry +* may be kept across it without a reference. Scan +* the list from the beginning each time and only pass +* a referenced candidate to cifs_ses_add_channel(); +* weight_fulfilled tracks the progress so that no +* iface is selected beyond its weight. +*/ + candidate =NULL ; +list_for_each_entry (iface, &ses->iface_list, iface_head) { +/* do not mix rdma and non-rdma interfaces */ +if (iface->rdma_capable != ses->server->rdma) +continue ; + +/* skip ifaces that are unusable */ +if (!iface->is_active || + (is_ses_using_iface (ses, iface) && + !iface->rss_capable)) +continue ; + +/* check if we already allocated enough channels */ + iface_weight = iface->speed / iface_min_speed; + +if (iface->weight_fulfilled >= iface_weight) +continue ; + +/* take ref before unlock */ +kref_get (&iface->refcount); + candidate = iface; +break ; + } -if (iface->weight_fulfilled >= iface_weight) -continue ; +if (!candidate) { +/* no usable iface. reset weight_fulfilled and start over */ +list_for_each_entry (iface, &ses->iface_list, iface_head) + iface->weight_fulfilled =0 ; +spin_unlock (&ses->iface_lock); +break ; + } -/* take ref before unlock */ -kref_get (&iface->refcount); + attempts++; +if (attempts >3 * ses->chan_max) { +kref_put (&candidate->refcount, release_iface); +spin_unlock (&ses->iface_lock); +break ; + }spin_unlock (&ses->iface_lock); - rc =cifs_ses_add_channel (cifs_sb, ses, iface); + rc =cifs_ses_add_channel (cifs_sb, ses, candidate);spin_lock (&ses->iface_lock);if (rc) {cifs_dbg (VFS ,"failed to open extra channel on iface:%pIS rc=%d\n" , - &iface->sockaddr, + &candidate->sockaddr, rc);/* failure to add chan should increase weight */ - iface->weight_fulfilled++; -kref_put (&iface->refcount, release_iface); + candidate->weight_fulfilled++; +kref_put (&candidate->refcount, release_iface); +spin_unlock (&ses->iface_lock);continue ; } - iface->num_channels++; - iface->weight_fulfilled++; + candidate->num_channels++; + candidate->weight_fulfilled++;cifs_dbg (VFS ,"successfully opened new channel on iface:%pIS\n" , - &iface->sockaddr); -break ; - } - -/* reached end of list. reset weight_fulfilled and start over */ -if (list_entry_is_head (iface, &ses->iface_list, iface_head)) { -list_for_each_entry (iface, &ses->iface_list, iface_head) - iface->weight_fulfilled =0 ; + &candidate->sockaddr);spin_unlock (&ses->iface_lock); - iface =NULL ; -continue ; - } -spin_unlock (&ses->iface_lock); - left--; - new_chan_count++; + left--; + new_chan_count++; +break ; + } }return new_chan_count - old_chan_count;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 55/1887 smb: client: fix OOB struct field reads in move_smb2_ea_to_cifs()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Frank Sorenson <[email protected]>
[ Upstream commit eeb5ef6083e1cefa2ef75041b5597ff228b8d7bb ]
In move_smb2_ea_to_cifs(), the while (src_size > 0) loop condition is insufficient. It allows iteration to continue even if the remaining src_size is too small to contain a complete smb2_ea_info structure. Consequently, reads of ea_name_length and ea_value_length can occur out-of-bounds.
Fix this by ensuring src_size >= sizeof(*src) before attempting to read any structure fields. Additionally, reject any next_entry_offset that is smaller than sizeof(*src) or that would advance the pointer beyond the available buffer.
Note that for calls where the server returns a malformed EA list, the error returned to userspace changes from -ENODATA (getxattr) or -ERANGE (listxattr) to -EIO. This correctly signals a server protocol error rather than misleadingly indicating "attribute not present" or "output buffer too small".
--- fs/smb/client/smb2ops.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)
fs/smb/client/smb2ops.c +16 -8
@@ -1005,8 +1005,9 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size,char *name, *value;size_t buf_size = dst_size;size_t name_len, value_len, user_name_len; +u32 next_off; -while (src_size >0 ) { +while (src_size >=sizeof (*src)) { name_len = (size_t )src->ea_name_length; value_len = (size_t )le16_to_cpu (src->ea_value_length);
@@ -1061,14 +1062,21 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size,if (!src->next_entry_offset)break ; -if (src_size <le32_to_cpu (src->next_entry_offset)) { -/* stop before overrun buffer */ - rc = -ERANGE ; -break ; + next_off =le32_to_cpu (src->next_entry_offset); +if (next_off <sizeof (*src) || src_size < next_off) { +cifs_dbg (FYI ,"EA next_entry_offset %u out of range [%zu, %zu]\n" , + next_off,sizeof (*src), src_size); + rc = -EIO ; + goto out; + } + src_size -= next_off; + src = (void *)((char *)src + next_off); +if (src_size >0 && src_size <sizeof (*src)) { +cifs_dbg (FYI ,"EA next_entry_offset %u left truncated entry (%zu bytes)\n" , + next_off, src_size); + rc = -EIO ; + goto out; } - src_size -=le32_to_cpu (src->next_entry_offset); - src = (void *)((char *)src + -le32_to_cpu (src->next_entry_offset)); }/* didn't find the named attribute */
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 56/1887 vlan: require the MAC header to be present in __vlan_insert_inner_tag()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiang Mei <[email protected]>
[ Upstream commit ab888242fce4f16f6c4d4c6ec53939ad36aa3b3a ]
__vlan_insert_inner_tag() only guarantees head room via skb_cow_head(), never that mac_len bytes of MAC header are present. Its ETH_HLEN wrappers - __vlan_insert_tag() under skb_vlan_push(), and vlan_insert_tag() under validate_xmit_vlan() on the generic transmit path - therefore rewrite the first 16 bytes at skb->data: a 12-byte memmove plus two 2-byte stores at +12 and +14. No caller supplies the bound, while the pop helpers use skb_ensure_writable()/pskb_may_pull().
An IFF_TUN device has hard_header_len == 0, so packet_snd() accepts a one-byte AF_PACKET/SOCK_RAW frame. The first vlan push only sets a hwaccel tag; the next - clsact "action vlan push" or bpf_skb_vlan_push() - enters the helper with skb->len still 1. The head comes from skbuff_small_head without __GFP_ZERO, so each push drags bytes from beyond skb->tail into the frame. After three the one-byte send leaves as 13 bytes carrying 11 bytes of uninitialised slab:
0000: 5a b3 62 12 80 88 ff ff 00 b3 62 12 81
`------------------------------'
only 0x5a was sent; the rest is slab, here the top 56 bits of a linear-map address
Require the MAC header the helper rewrites to be present, so such a frame is dropped rather than transmitted.
--- include/linux/if_vlan.h | 3 +++ 1 file changed, 3 insertions(+)
include/linux/if_vlan.h +3 -0
@@ -351,6 +351,9 @@ static inline int __vlan_insert_inner_tag(struct sk_buff *skb, {struct vlan_ethhdr *veth; +if (unlikely (!pskb_may_pull (skb, mac_len))) +return -EINVAL ; +if (skb_cow_head (skb,VLAN_HLEN ) <0 )return -ENOMEM ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 57/1887 pinctrl: sunxi: keep a shadow copy of the data register output latches
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilya Titov <[email protected]>
[ Upstream commit a13f7f5d14af9baf34eb12c25962f8d3542b281d ]
On Allwinner SoCs, reading a bank's data register returns the pin level, not the output latch, for pins that are muxed as inputs. Writing a GPIO therefore corrupts the output latches of all input-muxed pins in the same bank: the read-modify-write in sunxi_pinctrl_gpio_set() reads back their pin levels and writes those into their latches.
This breaks emulated open-drain lines (e.g. a bit-banged I2C bus from i2c-gpio). Such a line is released high by muxing it as input and letting the pull-up raise it, so any concurrent GPIO write in the same bank stores 1 into its latch. Driving the line low afterwards is a non-atomic data-then-mux sequence in sunxi_pinctrl_gpio_direction_output(); if the poisoning write lands between the two steps, the pin actively drives high (push-pull) instead of low.
Observed in practice as sporadic glitches on a T507 board bit-banging I2C on port E while other PE GPIOs are toggled. On a scope the failure is unmistakable: on a clock pulse where SCL should fall to GND, the line instead steps *above* its idle high level for the whole low phase — the pad drives a strong push-pull 3.3 V high, higher than the level the pull-up sustains on the loaded bus — before the next transition recovers it. The same can hit SDA, corrupting data instead of clocks.
Steps to reproduce on any sunxi board with a bit-banged (i2c-gpio) bus:
# background: toggle any other GPIO of the same bank, e.g. line 21 gpioset -c <chip> --toggle 100us 21=0 &
# foreground: keep the bit-banged bus busy
while :; do i2cdetect -y <bus> 0x50 0x57; done
# watch SCL/SDA with a scope or logic analyzer: sporadic clock-low # phases driven high (above the pull-up level) instead of low
The bank spinlock cannot help: the racing write is a perfectly valid whole-register RMW that faithfully writes back what the hardware returned. There are no set/clear registers on this IP to write a single bit atomically.
Fix it the same way gpio-mmio handles hardware whose data register read does not return the output latch: keep a shadow copy of each bank's latches, base the read-modify-write on the shadow, and only write the register. The shadow is seeded from the hardware at probe time so pins left in output mode by the bootloader keep their state. Pins that reach output mode through the gpiolib paths write their value (and thereby their shadow bit) before the mux switch in sunxi_pinctrl_gpio_direction_output(); pins muxed to gpio_out directly through a pinmux node bypass that path, so sunxi_pmx_set() refreshes their shadow bit from the latch (readable once the pin is in output mode) to keep them driving their pre-existing level.
Seeding the shadow reads the PIO registers at probe time, which requires the bus clock to be enabled. The clock was only requested at the very end of probe, after devm_pinctrl_register() had already claimed the pin hogs described in the device tree - which mux pins, and thus access registers, with the clock still gated. Move the request ahead of both. Boards whose bootloader leaves the PIO clock running are unaffected, which is why the pre-existing hog problem has gone unnoticed since commit 950707c0eb5c ("pinctrl: sunxi: add clock support").
--- drivers/pinctrl/sunxi/pinctrl-sunxi.c | 88 +++++++++++++++++++-------- drivers/pinctrl/sunxi/pinctrl-sunxi.h | 7 +++ 2 files changed, 71 insertions(+), 24 deletions(-)
drivers/pinctrl/sunxi/pinctrl-sunxi.c +64 -24
@@ -793,6 +793,21 @@ static void sunxi_pmx_set(struct pinctrl_dev *pctldev,writel ((readl (pctl->membase + reg) & ~mask) | config << shift, pctl->membase + reg); +/* +* A pin muxed to gpio_out directly through a pinmux node bypasses +* sunxi_pinctrl_gpio_set() and drives whatever its output latch +* holds. Now that the pin is in output mode the data register +* reads back the latch, so refresh the shadow to keep such pins +* driving their pre-existing level. +*/ +if (config ==SUN4I_FUNC_OUTPUT ) { +u32 *shadow = &pctl->dat_shadow[pin /PINS_PER_BANK ]; + +sunxi_data_reg (pctl, pin, ®, &shift, &mask); + *shadow = (*shadow & ~mask) | + (readl (pctl->membase + reg) & mask); + } +raw_spin_unlock_irqrestore (&pctl->lock, flags); }
@@ -946,21 +961,29 @@ static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip, unsigned offset, int value) {struct sunxi_pinctrl *pctl =gpiochip_get_data (chip); -u32 reg, shift, mask, val; +u32 *shadow = &pctl->dat_shadow[offset /PINS_PER_BANK ]; +u32 reg, shift, mask;unsigned long flags;sunxi_data_reg (pctl, offset, ®, &shift, &mask);raw_spin_lock_irqsave (&pctl->lock, flags); - val =readl (pctl->membase + reg); - +/* +* Reading the data register returns the pin level, not the output +* latch, for pins muxed as inputs. A read-modify-write based on +* the register would therefore corrupt the latches of input-muxed +* pins in the same bank (e.g. an emulated open-drain I2C line +* released high), making them drive the wrong level once switched +* to output. Base the read-modify-write on a shadow copy of the +* latches instead. +*/ if (value) - val |= mask; + *shadow |= mask;else - val &= ~mask; + *shadow &= ~mask; -writel (val, pctl->membase + reg); +writel (*shadow, pctl->membase + reg);raw_spin_unlock_irqrestore (&pctl->lock, flags); }
@@ -1484,7 +1507,7 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,struct pinctrl_pin_desc *pins;struct sunxi_pinctrl *pctl;struct pinmux_ops *pmxops; -int i, ret, last_pin, pin_idx; +int i, ret, last_pin, pin_idx, nbanks;struct clk *clk; pctl =devm_kzalloc (&pdev->dev,sizeof (*pctl),GFP_KERNEL );
@@ -1518,6 +1541,37 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,if (!pctl->irq_array)return -ENOMEM ; +/* +* The bus clock has to be enabled before the pinctrl device +* registers, as the pin hogs claimed from there access registers. +*/ + ret =of_clk_get_parent_count (node); + clk =devm_clk_get_enabled (&pdev->dev, ret ==1 ?NULL :"apb" ); +if (IS_ERR (clk)) +return PTR_ERR (clk); + +/* +* Seed the output latch shadow from the hardware so pins the +* bootloader left in output mode keep their state; see +* sunxi_pinctrl_gpio_set() for why a shadow is needed. This must +* happen before the pinctrl device registers, as pin hogs can mux +* pins to gpio_out and thereby update the shadow. +*/ + last_pin = pctl->desc->pins[pctl->desc->npins -1 ].pin.number; + nbanks =DIV_ROUND_UP (last_pin +1 - pctl->desc->pin_base, +PINS_PER_BANK ); + pctl->dat_shadow =devm_kcalloc (&pdev->dev, nbanks, +sizeof (*pctl->dat_shadow),GFP_KERNEL ); +if (!pctl->dat_shadow) +return -ENOMEM ; + +for (i =0 ; i < nbanks; i++) { +u32 reg, shift, mask; + +sunxi_data_reg (pctl, i *PINS_PER_BANK , ®, &shift, &mask); + pctl->dat_shadow[i] =readl (pctl->membase + reg); + } + ret =sunxi_pinctrl_build_state (pdev);if (ret) {dev_err (&pdev->dev,"dt probe failed: %d\n" , ret);
@@ -1572,7 +1626,6 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,if (!pctl->chip)return -ENOMEM ; - last_pin = pctl->desc->pins[pctl->desc->npins -1 ].pin.number; pctl->chip->owner =THIS_MODULE ; pctl->chip->request = gpiochip_generic_request; pctl->chip->free = gpiochip_generic_free;
@@ -1605,31 +1658,20 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev, goto gpiochip_error; } - ret =of_clk_get_parent_count (node); - clk =devm_clk_get (&pdev->dev, ret ==1 ?NULL :"apb" ); -if (IS_ERR (clk)) { - ret =PTR_ERR (clk); - goto gpiochip_error; - } - - ret =clk_prepare_enable (clk); -if (ret) - goto gpiochip_error; - pctl->irq =devm_kcalloc (&pdev->dev, pctl->desc->irq_banks,sizeof (*pctl->irq),GFP_KERNEL );if (!pctl->irq) { ret = -ENOMEM ; - goto clk_error; + goto gpiochip_error; }for (i =0 ; i < pctl->desc->irq_banks; i++) { pctl->irq[i] =platform_get_irq (pdev, i);if (pctl->irq[i] <0 ) { ret = pctl->irq[i]; - goto clk_error; + goto gpiochip_error; } }
@@ -1640,7 +1682,7 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,if (!pctl->domain) {dev_err (&pdev->dev,"Couldn't register IRQ domain\n" ); ret = -ENOMEM ; - goto clk_error; + goto gpiochip_error; }for (i =0 ; i < (pctl->desc->irq_banks *IRQ_PER_BANK ); i++) {
@@ -1672,8 +1714,6 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,return 0 ; -clk_error: -clk_disable_unprepare (clk); gpiochip_error:gpiochip_remove (pctl->chip);return ret;
drivers/pinctrl/sunxi/pinctrl-sunxi.h +7 -0
@@ -80,6 +80,7 @@#define IO_BIAS_MASK GENMASK(3, 0)#define SUN4I_FUNC_INPUT 0 +#define SUN4I_FUNC_OUTPUT 1#define SUN4I_FUNC_IRQ 6#define PINCTRL_SUN5I_A10S BIT(1)
@@ -173,6 +174,12 @@ struct sunxi_pinctrl {int *irq;unsigned *irq_array;raw_spinlock_t lock; +/* +* Output latch shadow, one word per bank. Seeded lockless at +* probe before the pinctrl device registers, protected by @lock +* afterwards. +*/ +u32 *dat_shadow;struct pinctrl_dev *pctl_dev;unsigned long variant;u32 bank_mem_size;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 58/1887 perf tools: Fix a asan issue in parse_events_multi_pmu_add()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Namhyung Kim <[email protected]>
commit 66c9598bd8916c6c1319d0100ac916cac89d4b0e upstream
In the parse_events_multi_pmu_add() it passes the 'config' variable twice to parse_events_term__num() - one for config and another for loc_term. I'm not sure about the second one as it's converted to YYLTYPE variable. Asan reports it like below:
In function ‘parse_events_term__num’,
inlined from ‘parse_events_multi_pmu_add’ at util/parse-events.c:1602:6:
util/parse-events.c:2653:64: error: array subscript ‘YYLTYPE[0]’ is partly outside
array bounds of ‘char[8]’ [-Werror=array-bounds]
2653 | .err_term = loc_term ? loc_term->first_column : 0,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
util/parse-events.c: In function ‘parse_events_multi_pmu_add’:
util/parse-events.c:1587:15: note: object ‘config’ of size 8
1587 | char *config;
| ^~~~~~cc1: all warnings being treated as errors
--- tools/perf/util/parse-events.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/parse-events.c +1 -1
@@ -1585,7 +1585,7 @@ int parse_events_multi_pmu_add(struct parse_events_state *parse_state,if (parse_events_term__num (&term,PARSE_EVENTS__TERM_TYPE_USER , - config,1 , false, &config, + config,1 , false,NULL ,NULL ) <0 ) {free (config); goto out_err;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 59/1887 perf test bpf: Address error about non-null argument for epoll_pwait 2nd arg
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnaldo Carvalho de Melo <[email protected]>
commit ed847e30f001b207013b6136c264454d7560557f upstream
First noticed on Fedora Rawhide:
tests/bpf.c: In function ‘epoll_pwait_loop’:
tests/bpf.c:36:17: error: argument 2 null where non-null expected [-Werror=nonnull]
36 | epoll_pwait(-(i + 1), NULL, 0, 0, NULL);
| ^~~~~~~~~~~ In file included from tests/bpf.c:5:
/usr/include/sys/epoll.h:134:12: note: in a call to function ‘epoll_pwait’ declared ‘nonnull’
134 | extern int epoll_pwait (int __epfd, struct epoll_event *__events,
| ^~~~~~~~~~~
[perfbuilder@27cfe44d67ed perf-6.5.0-rc2]$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/13/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-13.2.1-20230728/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none --without-cuda-driver --enable-offload-defaulted --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.2.1 20230728 (Red Hat 13.2.1-1) (GCC)
[perfbuilder@27cfe44d67ed perf-6.5.0-rc2]$
Just add that argument to address this compiler warning.
--- tools/perf/tests/bpf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
tools/perf/tests/bpf.c +2 -1
@@ -29,11 +29,12 @@static int epoll_pwait_loop (void ) { +struct epoll_event events;int i;/* Should fail NR_ITERS times */ for (i =0 ; i <NR_ITERS ; i++) -epoll_pwait (-(i +1 ),NULL ,0 ,0 ,NULL ); +epoll_pwait (-(i +1 ), &events,0 ,0 ,NULL );return 0 ; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 60/1887 usb: xhci: bail out of setup if the controller is inaccessible
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Breno Leitao <[email protected]>
[ Upstream commit 78203d5b54a40f0e36196ebf31c9c7a380fc8811 ]
xhci_gen_setup() locates the operational registers using the capability length read from the very first register:
xhci->op_regs = hcd->regs + HC_LENGTH(readl(&xhci->cap_regs->hc_capbase));
If the controller is dead or has dropped off the bus, that read returns ~0, HC_LENGTH() truncates it to 0xff, and op_regs ends up 0xff bytes past the page-aligned MMIO base, i.e. unaligned. The first access through it, xhci_halt() -> xhci_handshake() reading op_regs->status, is then an unaligned readl() on device memory. arm64 faults on unaligned device accesses, so instead of xhci_handshake() catching the all-ones value and returning -ENODEV, setup oopses:
xhci-pci-renesas 0005:08:00.0: Unable to change power state from D3cold to D0, device inaccessible xhci-pci-renesas 0005:08:00.0: xHCI Host Controller
xhci-pci-renesas 0005:08:00.0: new USB bus registered, assigned bus number 1
Unable to handle kernel paging request at virtual address ffff80030a770103
ESR = 0x0000000096000021
FSC = 0x21: alignment fault
Internal error: Oops: 0000000096000021 [#1] SMP
pc : xhci_halt [xhci_hcd]
Call trace:
xhci_halt
xhci_gen_setup
xhci_pci_setup
usb_add_hcd
usb_hcd_pci_probe
xhci_pci_common_probe
xhci_pci_renesas_probeThis was hit with a Renesas uPD720201 that failed to power up ("Unable to change power state from D3cold to D0, device inaccessible") yet still reached the HCD probe path.
Read the capability register once, and if it reads back the all-ones value (as xhci_handshake() and xhci_reset() already test for), abort setup with -ENODEV before op_regs is derived from it. Reading it once also avoids re-reading a register that may change under a concurrent hot-removal.
--- drivers/usb/host/xhci.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
drivers/usb/host/xhci.c +8 -3
@@ -5365,6 +5365,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)*/ struct device *dev = hcd->self.sysdev;int retval; +u32 hc_capbase;/* Accept arbitrarily long scatter-gather lists */ hcd->self.sg_tablesize = ~0 ;
@@ -5385,15 +5386,19 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)mutex_init (&xhci->mutex); xhci->main_hcd = hcd; xhci->cap_regs = hcd->regs; - xhci->op_regs = hcd->regs + -HC_LENGTH (readl (&xhci->cap_regs->hc_capbase)); + hc_capbase =readl (&xhci->cap_regs->hc_capbase); +if (hc_capbase ==U32_MAX ) { +xhci_warn (xhci,"Host controller not accessible, removed?\n" ); +return -ENODEV ; + } + xhci->op_regs = hcd->regs +HC_LENGTH (hc_capbase); xhci->run_regs = hcd->regs + (readl (&xhci->cap_regs->run_regs_off) &RTSOFF_MASK );/* Cache read-only capability registers */ xhci->hcs_params1 =readl (&xhci->cap_regs->hcs_params1); xhci->hcs_params2 =readl (&xhci->cap_regs->hcs_params2); xhci->hcs_params3 =readl (&xhci->cap_regs->hcs_params3); - xhci->hci_version =HC_VERSION (readl (&xhci->cap_regs->hc_capbase)); + xhci->hci_version =HC_VERSION (hc_capbase); xhci->hcc_params =readl (&xhci->cap_regs->hcc_params);if (xhci->hci_version >0x100 ) xhci->hcc_params2 =readl (&xhci->cap_regs->hcc_params2);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 61/1887 gtp: serialize PDP context updates
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qing Ming <[email protected]>
[ Upstream commit 498386b6d402737db1e2eeed4c385acbf0ef9e34 ]
PDP contexts can be deleted through GTP_CMD_DELPDP or while the GTP network device is being unregistered. The latter is serialized by RTNL, but the generic-netlink delete path only holds RCU.
Running both paths concurrently can therefore make both paths delete the same PDP context. The issue was found through static analysis and reproduced on a KASAN-enabled kernel by a simple two-thread program racing GTP_CMD_DELPDP against RTM_DELLINK:
Oops: general protection fault, probably for non-canonical address
KASAN: maybe wild-memory-access in range
[0xdead000000000120-0xdead000000000127]
RIP: gtp_genl_del_pdp+0x1c1/0x420 [gtp]
RBP: dead000000000122The second deletion dereferenced the poisoned hlist pprev pointer.
Serialize gtp_pdp_add(), gtp_genl_del_pdp(), and gtp_dellink() with a shared mutex. Keep the mutex held until the final use of a PDP context in the NEWPDP path, and keep the RCU read-side section around the complete PDP context use in the DELPDP path.
--- drivers/net/gtp.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-)
drivers/net/gtp.c +15 -3
@@ -12,6 +12,7 @@#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt#include <linux/module.h> +#include <linux/mutex.h> #include <linux/skbuff.h> #include <linux/udp.h> #include <linux/rculist.h>
@@ -92,6 +93,7 @@ struct gtp_net { };static u32 gtp_h_initval; +static DEFINE_MUTEX (gtp_pdp_lock);static struct genl_family gtp_genl_family;
@@ -129,7 +131,8 @@ static struct pdp_ctx *gtp0_pdp_find(struct gtp_dev *gtp, u64 tid) head = >p->tid_hash[gtp0_hashfn (tid) % gtp->hash_size]; -hlist_for_each_entry_rcu (pdp, head, hlist_tid) { +hlist_for_each_entry_rcu (pdp, head, hlist_tid, +lockdep_is_held (>p_pdp_lock)) {if (pdp->gtp_version ==GTP_V0 && pdp->u.v0.tid == tid)return pdp;
@@ -145,7 +148,8 @@ static struct pdp_ctx *gtp1_pdp_find(struct gtp_dev *gtp, u32 tid) head = >p->tid_hash[gtp1u_hashfn (tid) % gtp->hash_size]; -hlist_for_each_entry_rcu (pdp, head, hlist_tid) { +hlist_for_each_entry_rcu (pdp, head, hlist_tid, +lockdep_is_held (>p_pdp_lock)) {if (pdp->gtp_version ==GTP_V1 && pdp->u.v1.i_tei == tid)return pdp;
@@ -161,7 +165,8 @@ static struct pdp_ctx *ipv4_pdp_find(struct gtp_dev *gtp, __be32 ms_addr) head = >p->addr_hash[ipv4_hashfn (ms_addr) % gtp->hash_size]; -hlist_for_each_entry_rcu (pdp, head, hlist_addr) { +hlist_for_each_entry_rcu (pdp, head, hlist_addr, +lockdep_is_held (>p_pdp_lock)) {if (pdp->af ==AF_INET && pdp->ms_addr_ip4.s_addr == ms_addr)return pdp;
@@ -1120,9 +1125,11 @@ static void gtp_dellink(struct net_device *dev, struct list_head *head)struct pdp_ctx *pctx;int i; +mutex_lock (>p_pdp_lock);for (i =0 ; i < gtp->hash_size; i++)hlist_for_each_entry_safe (pctx, next, >p->tid_hash[i], hlist_tid)pdp_context_delete (pctx); +mutex_unlock (>p_pdp_lock);list_del (>p->list);unregister_netdevice_queue (dev, head);
@@ -1507,6 +1514,7 @@ static int gtp_genl_new_pdp(struct sk_buff *skb, struct genl_info *info) goto out_unlock; } +mutex_lock (>p_pdp_lock); pctx =gtp_pdp_add (gtp, sk, info);if (IS_ERR (pctx)) { err =PTR_ERR (pctx);
@@ -1514,6 +1522,7 @@ static int gtp_genl_new_pdp(struct sk_buff *skb, struct genl_info *info)gtp_tunnel_notify (pctx,GTP_CMD_NEWPDP ,GFP_KERNEL ); err =0 ; } +mutex_unlock (>p_pdp_lock); out_unlock:rtnl_unlock ();
@@ -1568,6 +1577,8 @@ static int gtp_genl_del_pdp(struct sk_buff *skb, struct genl_info *info)if (!info->attrs[GTPA_VERSION ])return -EINVAL ; +mutex_lock (>p_pdp_lock); +rcu_read_lock (); pctx =gtp_find_pdp (sock_net (skb->sk), info->attrs);
@@ -1588,6 +1599,7 @@ static int gtp_genl_del_pdp(struct sk_buff *skb, struct genl_info *info) out_unlock:rcu_read_unlock (); +mutex_unlock (>p_pdp_lock);return err; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 62/1887 KEYS: trusted: Fix TPM teardown ordering
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chengfeng Ye <[email protected]>
[ Upstream commit 5e2d672280d97d83de43031d93761b12dadd7b8a ]
trusted_tpm_exit() drops the TPM chip reference and frees the digest array before unregistering the trusted key type. key_type_lookup() holds key_types_sem for reading until the key operation finishes, while unregister_key_type() takes it for writing. It therefore provides the synchronization point that must precede backend teardown.
The current order permits this interleaving:
CPU 0 CPU 1
trusted_tpm_exit() key_type_lookup("trusted")
put_device(&chip->dev) trusted_tpm_seal()
kfree(digests) pcrlock()
unregister_key_type() tpm_pcr_extend(..., digests)
CPU 1 can consequently dereference the freed digest array. The chip can also be released before callbacks stop using it.
KASAN reported:
BUG: KASAN: slab-use-after-free in tpm_pcr_extend+0x1f0/0x200
Read of size 2 at addr ffff88810872d000 by task poc/89
Call Trace:
tpm_pcr_extend+0x1f0/0x200
pcrlock+0x42/0x70 [trusted]
trusted_tpm_seal+0x1b6/0x570 [trusted]
trusted_instantiate+0x293/0x340 [trusted]
__key_instantiate_and_link+0xb2/0x2b0
__key_create_or_update+0x61e/0xb50
__do_sys_add_key+0x1b8/0x310
Allocated by task 88:
__kmalloc_noprof+0x1a7/0x490
do_one_initcall+0xa1/0x390
do_init_module+0x2df/0x840
Freed by task 90:
kfree+0x131/0x3c0
trusted_tpm_exit+0x59/0xa0 [trusted]
__do_sys_delete_module+0x346/0x510Move unregister_key_type() before releasing either resource. This stops new lookups and waits for in-flight key operations to finish before the backend state is destroyed.
--- security/keys/trusted-keys/trusted_tpm1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
security/keys/trusted-keys/trusted_tpm1.c +1 -1
@@ -1058,10 +1058,10 @@ static int __init trusted_tpm_init(void)static void trusted_tpm_exit (void ) {if (chip) { +unregister_key_type (&key_type_trusted);put_device (&chip->dev);kfree (digests);trusted_shash_release (); -unregister_key_type (&key_type_trusted); } }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 63/1887 zram: fixup read_block_state()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sergey Senozhatsky <[email protected]>
[ Upstream commit 8b05d2d8af817c6a1e23032df51e7ad83030d543 ]
ac_time is now in seconds, do not use ktime_to_timespec64()
[ Stable tree note: The ac_time conversion described above is not present
here, so retain the ktime_t conversion and microsecond output. Move the timespec64 temporary into the scan loop instead, allowing the follow-up bounds fix to move nr_pages initialization under init_lock cleanly. ]
Stable-dep-of: 391f057f44a5 ("zram: fix out-of-bounds access in read_block_state()")
--- drivers/block/zram/zram_drv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/zram/zram_drv.c +1 -1
@@ -904,7 +904,6 @@ static ssize_t read_block_state(struct file *file, char __user *buf,ssize_t index, written =0 ;struct zram *zram = file->private_data;unsigned long nr_pages = zram->disksize >>PAGE_SHIFT ; -struct timespec64 ts; kbuf =kvmalloc (count,GFP_KERNEL );if (!kbuf)
@@ -919,6 +918,7 @@ static ssize_t read_block_state(struct file *file, char __user *buf,for (index = *ppos; index < nr_pages; index++) {int copied; +struct timespec64 ts;zram_slot_lock (zram, index);if (!zram_allocated (zram, index))
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 64/1887 zram: fix out-of-bounds access in read_block_state()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Longlong Xia <[email protected]>
[ Upstream commit 391f057f44a51cc9418da5cba78b014324174264 ]
read_block_state() calculates nr_pages before taking dev_lock. If the device is reset and reinitialized with a smaller disksize before lock acquisition, nr_pages still describes the old table. The subsequent loop can then call slot_lock() past the end of the newly allocated table.
Read disksize after acquiring dev_lock and checking that the device is initialized. The read lock then keeps the table and its bound stable for the duration of the scan.
--- drivers/block/zram/zram_drv.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/block/zram/zram_drv.c +3 -1
@@ -903,7 +903,7 @@ static ssize_t read_block_state(struct file *file, char __user *buf,char *kbuf;ssize_t index, written =0 ;struct zram *zram = file->private_data; -unsigned long nr_pages = zram->disksize >>PAGE_SHIFT ; +unsigned long nr_pages; kbuf =kvmalloc (count,GFP_KERNEL );if (!kbuf)
@@ -916,6 +916,8 @@ static ssize_t read_block_state(struct file *file, char __user *buf,return -EINVAL ; } + nr_pages = zram->disksize >>PAGE_SHIFT ; +for (index = *ppos; index < nr_pages; index++) {int copied;struct timespec64 ts;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 65/1887 nfsd: release path refs on follow_down() error
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Mason <[email protected]>
[ Upstream commit 6cba08dc1922140d260cfeb30bbda4ee1bf869d8 ]
nfsd_cross_mnt() initializes a local struct path with mntget() and dget() before calling follow_down(). On a negative return the error arm jumps to out without releasing those references:
err = follow_down(&path, follow_flags);
if (err < 0)
goto out;follow_down() never drops the caller's entry-time refs on any error sub-case; for example a pre-cross d_manage() failure leaves path untouched, so the mntget()/dget() taken on entry survive the call.
Every other early-exit arm in nfsd_cross_mnt() (other-namespace return, IS_ERR(exp2), and the success tail after the swap) already calls path_put(&path); the err < 0 arm is the lone omission. The leak inflates mnt_count and d_count on each failed cross-mount, blocking umount and pinning dentries against the shrinker, and is reachable by any authenticated NFS client through nfsd_lookup_dentry or the NFSv4 READDIR encode path.
Fix by calling path_put(&path) before the goto out in the err < 0 arm so the entry-time refs are released on all follow_down() error returns.
--- fs/nfsd/vfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/nfsd/vfs.c +3 -1
@@ -130,8 +130,10 @@ nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,int err =0 ; err =follow_down (&path); -if (err <0 ) +if (err <0 ) { +path_put (&path); goto out; + }if (path.mnt == exp->ex_path.mnt && path.dentry == dentry &&nfsd_mountpoint (dentry, exp) ==2 ) {/* This is only a mountpoint in some other namespace */
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 66/1887 nfsd: size fh_verify server sockaddr slot by xpt_locallen
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Mason <[email protected]>
[ Upstream commit 71d068490098b1d23c63b2345e40675d3a1ca763 ]
The nfsd_fh_verify and nfsd_fh_verify_err tracepoints declare the server sockaddr slot sized by xpt_remotelen but fill it from xpt_local using xpt_locallen:
TP_STRUCT__entry(
...
__sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
...
)
TP_fast_assign(
...
__assign_sockaddr(server, &rqstp->rq_xprt->xpt_local,
rqstp->rq_xprt->xpt_locallen);
...
)When xpt_locallen exceeds xpt_remotelen, __assign_sockaddr's memcpy writes past the reserved ring-buffer slot. In the reverse direction (xpt_locallen < xpt_remotelen) the slot is oversized and the unwritten tail leaks prior ring-buffer contents to trace consumers.
The write-past-end case is reachable on NFS/UDP. svc_xprt_set_remote() is only called from svc_tcp_accept() (net/sunrpc/svcsock.c) and from the RDMA connect path; svc_create_socket() for UDP calls only svc_xprt_set_local(), so xpt_remotelen stays 0 for the xprt's lifetime. Every fh_verify trace for an NFSv2/v3-over-UDP request then copies 16 or 28 bytes from xpt_local into a zero-byte slot.
The other NFSD tracepoints that record the server address (NFSD_TRACE_PROC_CALL_FIELDS, NFSD_TRACE_PROC_RES_FIELDS, SVC_RQST_ENDPOINT_FIELDS) already size the server slot by xpt_locallen; nfsd_fh_verify and nfsd_fh_verify_err were the only exceptions.
Fix by sizing the server slot with xpt_locallen so the declared slot matches the copy length. The client slot and its assignment already agree on xpt_remotelen and are left untouched.
--- fs/nfsd/trace.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/nfsd/trace.h +2 -2
@@ -201,7 +201,7 @@ TRACE_EVENT(nfsd_fh_verify, TP_ARGS(rqstp, fhp, type, access),TP_STRUCT__entry (__field (unsigned int ,netns_ino ) - __sockaddr(server, rqstp->rq_xprt->xpt_remotelen) + __sockaddr(server, rqstp->rq_xprt->xpt_locallen) __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)__field (u32, xid) __field(u32, fh_hash)
@@ -240,7 +240,7 @@ TRACE_EVENT_CONDITION(nfsd_fh_verify_err, TP_CONDITION(error), TP_STRUCT__entry( __field(unsigned int, netns_ino) - __sockaddr(server, rqstp->rq_xprt->xpt_remotelen) + __sockaddr(server, rqstp->rq_xprt->xpt_locallen) __sockaddr(client, rqstp->rq_xprt->xpt_remotelen) __field(u32, xid) __field(u32, fh_hash)
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 67/1887 nfsd: check nfsd4_acl_to_attr() return value in nfsd4_create()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Layton <[email protected]>
[ Upstream commit 2c7912732184773dbd371a411da87af1cc080b86 ]
nfsd4_create() stores the return value of nfsd4_acl_to_attr() in status, but the switch(create->cr_type) block unconditionally overwrites it in every branch. ACL translation errors are silently discarded, and the CREATE proceeds without the requested ACL.
Add an early exit check after nfsd4_acl_to_attr(), matching the pattern already used in nfsd4_setattr().
--- fs/nfsd/nfs4proc.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
fs/nfsd/nfs4proc.c +17 -0
@@ -761,7 +761,23 @@ nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,if (status)return status; +/* Sanitize cr_type to avoid returning ATTRNOTSUPP. */ +switch (create->cr_type) { +case NF4LNK : +case NF4BLK : +case NF4CHR : +case NF4SOCK : +case NF4FIFO : +case NF4DIR : +break ; +default : + status = nfserr_badtype; + goto out_aftermask; + } + status =nfsd4_acl_to_attr (create->cr_type, create->cr_acl, &attrs); +if (status != nfs_ok) + goto out_aftermask; current->fs->umask = create->cr_umask;switch (create->cr_type) {case NF4LNK :
@@ -828,6 +844,7 @@ nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,fh_put (&resfh); out_umask: current->fs->umask =0 ; +out_aftermask:nfsd_attrs_free (&attrs);return status; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 68/1887 nfsd: fix clock domain mismatch in clients_still_reclaiming()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Layton <[email protected]>
[ Upstream commit 09ea3eb9a518565f5bca386e81b993ed8825f5e8 ]
clients_still_reclaiming() computes a deadline from nn->boot_time (CLOCK_REALTIME, ~1.7 billion) but compares it against ktime_get_boottime_seconds() (CLOCK_BOOTTIME, seconds since boot). The comparison is always false — it would take ~54 years of uptime for BOOTTIME to exceed the REALTIME-derived deadline.
This means any client can hold the server in grace indefinitely by sending CLAIM_PREVIOUS OPEN requests, blocking all non-reclaim operations for all other clients.
Add boot_time_bt (CLOCK_BOOTTIME) alongside the existing boot_time and use it for the deadline computation. boot_time (CLOCK_REALTIME) is preserved for its cl_boot clientid-nonce role.
--- fs/nfsd/netns.h | 1 + fs/nfsd/nfs4state.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-)
fs/nfsd/netns.h +1 -0
@@ -67,6 +67,7 @@ struct nfsd_net {bool grace_end_forced;bool client_tracking_active;time64_t boot_time; +time64_t boot_time_bt;/* same instant in CLOCK_BOOTTIME */ struct dentry *nfsd_client_dir;
fs/nfsd/nfs4state.c +2 -1
@@ -6029,7 +6029,7 @@ bool nfsd4_force_end_grace(struct nfsd_net *nn)*/ static bool clients_still_reclaiming (struct nfsd_net *nn) { -time64_t double_grace_period_end = nn->boot_time + +time64_t double_grace_period_end = nn->boot_time_bt +2 * nn->nfsd4_lease;if (READ_ONCE (nn->grace_end_forced))
@@ -8277,6 +8277,7 @@ static int nfs4_state_create_net(struct net *net) nn->conf_name_tree =RB_ROOT ; nn->unconf_name_tree =RB_ROOT ; nn->boot_time =ktime_get_real_seconds (); + nn->boot_time_bt =ktime_get_boottime_seconds (); nn->grace_ended = false; nn->grace_end_forced = false; nn->client_tracking_active = false;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 69/1887 nfsd: gate nfs2 setacl by argp->mask
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chuck Lever <[email protected]>
[ Upstream commit a3a7e20ed66d3f04d37883c398da8a113b430769 ]
The NFSACL v2 SETACL path shares the decoder convention used by its v3 sibling: nfsaclsvc_decode_setaclargs() fills in argp->acl_access only when NFS_ACL is set in the request mask and argp->acl_default only when NFS_DFACL is set, leaving the other pointer NULL because the argument buffer is zeroed up to pc_argzero before decode.
nfsacld_proc_setacl() then hands both pointers to set_posix_acl() unconditionally. set_posix_acl(idmap, dentry, type, NULL) is the VFS "remove this ACL type" operation, so an omitted arm is indistinguishable from an explicit request to delete that ACL. A SETACL carrying only NFS_ACL silently strips the directory's default ACL; mask=0 strips both.
This is the same defect just fixed in nfsd3_proc_setacl(); apply the same remedy. Gate each set_posix_acl() call on its mask bit and initialize error to 0 so that a request with neither bit set leaves the on-disk ACLs untouched and returns success. The out_drop_lock path and the unconditional posix_acl_release() in nfsaclsvc_release_setacl() already tolerate the skipped arms.
--- fs/nfsd/nfs2acl.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-)
fs/nfsd/nfs2acl.c +13 -8
@@ -115,14 +115,19 @@ static __be32 nfsacld_proc_setacl(struct svc_rqst *rqstp)inode_lock (inode); - error =set_posix_acl (&init_user_ns, inode,ACL_TYPE_ACCESS , - argp->acl_access); -if (error) - goto out_drop_lock; - error =set_posix_acl (&init_user_ns, inode,ACL_TYPE_DEFAULT , - argp->acl_default); -if (error) - goto out_drop_lock; + error =0 ; +if (argp->mask &NFS_ACL ) { + error =set_posix_acl (&init_user_ns, inode,ACL_TYPE_ACCESS , + argp->acl_access); +if (error) + goto out_drop_lock; + } +if (argp->mask &NFS_DFACL ) { + error =set_posix_acl (&init_user_ns, inode,ACL_TYPE_DEFAULT , + argp->acl_default); +if (error) + goto out_drop_lock; + }inode_unlock (inode);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 70/1887 coresight: etm3x: Fix cntr_val_show() to match cntr_val_store() behavior
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuan-Wei Chiu <[email protected]>
[ Upstream commit 41fb4e925528aefa4b7a5f76c7f81db99c0d0f38 ]
The cntr_val_show() function was intended to print the values of all counters using a loop. However, due to a buffer overwrite issue with sprintf(), it effectively only displayed the value of the last counter.
The companion function, cntr_val_store(), allows users to modify a specific counter selected by 'cntr_idx'. To maintain consistency between read and write operations and to align with the ETM4x driver behavior, modify cntr_val_show() to report only the value of the currently selected counter.
This change removes the loop and the "counter %d:" prefix, printing only the hexadecimal value. It also adopts sysfs_emit() for standard sysfs output formatting.
--- .../hwtracing/coresight/coresight-etm3x-sysfs.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-)
drivers/hwtracing/coresight/coresight-etm3x-sysfs.c +4 -11
@@ -716,26 +716,19 @@ static DEVICE_ATTR_RW(cntr_rld_event);static ssize_t cntr_val_show (struct device *dev,struct device_attribute *attr,char *buf) { -int i, ret =0 ;u32 val;struct etm_drvdata *drvdata =dev_get_drvdata (dev->parent);struct etm_config *config = &drvdata->config;if (!local_read (&drvdata->mode)) {spin_lock (&drvdata->spinlock); -for (i =0 ; i < drvdata->nr_cntr; i++) - ret +=sprintf (buf,"counter %d: %x\n" , - i, config->cntr_val[i]); + val = config->cntr_val[config->cntr_idx];spin_unlock (&drvdata->spinlock); -return ret; - } - -for (i =0 ; i < drvdata->nr_cntr; i++) { - val =etm_readl (drvdata,ETMCNTVRn (i)); - ret +=sprintf (buf,"counter %d: %x\n" , i, val); + }else { + val =etm_readl (drvdata,ETMCNTVRn (config->cntr_idx)); } -return ret; +return sysfs_emit (buf,"%#x\n" , val); } static ssize_t cntr_val_store(struct device *dev,
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 71/1887 kasan: fix lockdep report invalid wait context
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zqiang <[email protected]>
[ Upstream commit be41d814c6c7bbf3ffa66faeefa01f6cea8e3c98 ]
For kernels built with the following options and booting
CONFIG_SLUB=yCONFIG_DEBUG_LOCKDEP=yCONFIG_PROVE_LOCKING=yCONFIG_PROVE_RAW_LOCK_NESTING=y
[ 0.523115] [ BUG: Invalid wait context ]
[ 0.523315] 6.3.0-rc1-yocto-standard+ #739 Not tainted
[ 0.523649] -----------------------------
[ 0.523663] swapper/0/0 is trying to lock:
[ 0.523663] ffff888035611360 (&c->lock){....}-{3:3}, at: put_cpu_partial+0x2e/0x1e0
[ 0.523663] other info that might help us debug this:
[ 0.523663] context-{2:2}
[ 0.523663] no locks held by swapper/0/0.
[ 0.523663] stack backtrace:
[ 0.523663] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.3.0-rc1-yocto-standard+ #739
[ 0.523663] Call Trace:
[ 0.523663] <IRQ>
[ 0.523663] dump_stack_lvl+0x64/0xb0
[ 0.523663] dump_stack+0x10/0x20
[ 0.523663] __lock_acquire+0x6c4/0x3c10
[ 0.523663] lock_acquire+0x188/0x460
[ 0.523663] put_cpu_partial+0x5a/0x1e0
[ 0.523663] __slab_free+0x39a/0x520
[ 0.523663] ___cache_free+0xa9/0xc0
[ 0.523663] qlist_free_all+0x7a/0x160
[ 0.523663] per_cpu_remove_cache+0x5c/0x70
[ 0.523663] __flush_smp_call_function_queue+0xfc/0x330
[ 0.523663] generic_smp_call_function_single_interrupt+0x13/0x20
[ 0.523663] __sysvec_call_function+0x86/0x2e0
[ 0.523663] sysvec_call_function+0x73/0x90
[ 0.523663] </IRQ>
[ 0.523663] <TASK>
[ 0.523663] asm_sysvec_call_function+0x1b/0x20
[ 0.523663] RIP: 0010:default_idle+0x13/0x20
[ 0.523663] RSP: 0000:ffffffff83e07dc0 EFLAGS: 00000246
[ 0.523663] RAX: 0000000000000000 RBX: ffffffff83e1e200 RCX: ffffffff82a83293
[ 0.523663] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff8119a6b1
[ 0.523663] RBP: ffffffff83e07dc8 R08: 0000000000000001 R09: ffffed1006ac0d66
[ 0.523663] R10: ffff888035606b2b R11: ffffed1006ac0d65 R12: 0000000000000000
[ 0.523663] R13: ffffffff83e1e200 R14: ffffffff84a7d980 R15: 0000000000000000
[ 0.523663] default_idle_call+0x6c/0xa0
[ 0.523663] do_idle+0x2e1/0x330
[ 0.523663] cpu_startup_entry+0x20/0x30
[ 0.523663] rest_init+0x152/0x240
[ 0.523663] arch_call_rest_init+0x13/0x40
[ 0.523663] start_kernel+0x331/0x470
[ 0.523663] x86_64_start_reservations+0x18/0x40
[ 0.523663] x86_64_start_kernel+0xbb/0x120
[ 0.523663] secondary_startup_64_no_verify+0xe0/0xeb
[ 0.523663] </TASK>The local_lock_irqsave() is invoked in put_cpu_partial() and happens in IPI context, due to the CONFIG_PROVE_RAW_LOCK_NESTING=y (the LD_WAIT_CONFIG not equal to LD_WAIT_SPIN), so acquire local_lock in IPI context will trigger above calltrace.
This commit therefore moves qlist_free_all() from hard-irq context to task context.
Stable-dep-of: 8790303cbaac ("kasan: fix cache shrink race with CPU hotplug")
--- mm/kasan/quarantine.c | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-)
mm/kasan/quarantine.c +8 -26
@@ -99,7 +99,6 @@ static unsigned long quarantine_size;static DEFINE_RAW_SPINLOCK (quarantine_lock);DEFINE_STATIC_SRCU (remove_cache_srcu); -#ifdef CONFIG_PREEMPT_RTstruct cpu_shrink_qlist {raw_spinlock_t lock;struct qlist_head qlist;
@@ -108,7 +107,6 @@ struct cpu_shrink_qlist { static DEFINE_PER_CPU(struct cpu_shrink_qlist, shrink_qlist) = { .lock =__RAW_SPIN_LOCK_UNLOCKED (shrink_qlist.lock), }; -#endif /* Maximum size of the global queue. */ static unsigned long quarantine_max_size;
@@ -319,16 +317,6 @@ static void qlist_move_cache(struct qlist_head *from, } } -#ifndef CONFIG_PREEMPT_RT -static void __per_cpu_remove_cache (struct qlist_head *q,void *arg) -{ -struct kmem_cache *cache = arg; -struct qlist_head to_free =QLIST_INIT ; - -qlist_move_cache (q, &to_free, cache); -qlist_free_all (&to_free, cache); -} -#else static void __per_cpu_remove_cache (struct qlist_head *q,void *arg) {struct kmem_cache *cache = arg;
@@ -340,7 +328,6 @@ static void __per_cpu_remove_cache(struct qlist_head *q, void *arg)qlist_move_cache (q, &sq->qlist, cache);raw_spin_unlock_irqrestore (&sq->lock, flags); } -#endif static void per_cpu_remove_cache (void *arg) {
@@ -362,6 +349,8 @@ void kasan_quarantine_remove_cache(struct kmem_cache *cache) {unsigned long flags, i;struct qlist_head to_free =QLIST_INIT ; +int cpu; +struct cpu_shrink_qlist *sq;/* * Must be careful to not miss any objects that are being moved from
@@ -372,20 +361,13 @@ void kasan_quarantine_remove_cache(struct kmem_cache *cache)*/ on_each_cpu (per_cpu_remove_cache, cache,1 ); -#ifdef CONFIG_PREEMPT_RT - { -int cpu; -struct cpu_shrink_qlist *sq; - -for_each_online_cpu (cpu) { - sq =per_cpu_ptr (&shrink_qlist, cpu); -raw_spin_lock_irqsave (&sq->lock, flags); -qlist_move_cache (&sq->qlist, &to_free, cache); -raw_spin_unlock_irqrestore (&sq->lock, flags); - } -qlist_free_all (&to_free, cache); +for_each_online_cpu (cpu) { + sq =per_cpu_ptr (&shrink_qlist, cpu); +raw_spin_lock_irqsave (&sq->lock, flags); +qlist_move_cache (&sq->qlist, &to_free, cache); +raw_spin_unlock_irqrestore (&sq->lock, flags); } -#endif +qlist_free_all (&to_free, cache);raw_spin_lock_irqsave (&quarantine_lock, flags);for (i =0 ; i <QUARANTINE_BATCHES ; i++) {
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 72/1887 kasan: fix cache shrink race with CPU hotplug
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hui Su <[email protected]>
[ Upstream commit 8790303cbaac52a11dfed4aab261f8ea60682525 ]
kasan_quarantine_remove_cache() first invokes per_cpu_remove_cache() on all online CPUs. Each callback moves objects belonging to the cache from cpu_quarantine to the CPU's shrink_qlist, where they can later be freed from task context.
kmem_cache_destroy() invokes the quarantine removal path while holding cpus_read_lock(), but kmem_cache_shrink() does not. The latter can therefore race with CPU offlining as follows:
kmem_cache_shrink() CPU hotplug
------------------- -----------
on_each_cpu()
CPU1 moves objects to
CPU1's shrink_qlist
on_each_cpu() returns
CPU1 goes offline kasan_cpu_offline()
drains cpu_quarantine leaves shrink_qlist untouched
for_each_online_cpu()
skips CPU1
The objects left on CPU1's shrink_qlist are not returned to the slab allocator. This may prevent kmem_cache_shrink() from releasing slabs that would otherwise become empty. If CPU1 remains offline, a later kmem_cache_destroy() also skips the list and can report that the cache still contains objects.
An intermittent occurrence was observed with a virtio-9p filesystem. The mount and umount commands both returned 0, but the kernel logged the following during the userspace-triggered teardown:
[ 2994.380134][ T111] BUG 9p-fcall-cache-1 (Tainted: G B ): Objects remaining on __kmem_cache_shutdown() [ 2994.381140][ T111] Object 0xff11000004361118 @offset=4376 [ 2994.381607][ T111] Allocated in p9_fcall_init+0x201/0x400 age=19564 cpu=1 pid=104 [ 2994.382591][ T111] p9_fcall_init+0x201/0x400 [ 2994.382810][ T111] p9_tag_alloc+0x12f/0x700 [ 2994.382982][ T111] p9_client_prepare_req+0x102/0x3e0 [ 2994.383165][ T111] p9_client_rpc+0x1ab/0xa50 [ 2994.383334][ T111] p9_client_getattr_dotl+0xb0/0x1a0 [ 2994.383515][ T111] v9fs_vfs_getattr_dotl+0x115/0x360 [ 2994.383719][ T111] vfs_getattr_nosec+0x22c/0x3a0 [ 2994.383910][ T111] vfs_statx+0xd7/0x170 [ 2994.384062][ T111] vfs_fstatat+0x45/0x80 [ 2994.384215][ T111] __do_sys_newfstatat+0x84/0xe0 [ 2994.384386][ T111] do_syscall_64+0x115/0x6a0 [ 2994.384566][ T111] entry_SYSCALL_64_after_hwframe+0x77/0x7f [ 2994.399720][ T111] WARNING: mm/slub.c:1244 at __kmem_cache_shutdown+0x363/0x500, CPU#0: busybox/111 [ 2994.405655][ T111] Call Trace: [ 2994.406325][ T111] kmem_cache_destroy+0x73/0x1b0 [ 2994.406630][ T111] p9_client_destroy+0x271/0x3c0 [ 2994.407210][ T111] v9fs_session_close+0x3c/0x260 [ 2994.407409][ T111] v9fs_kill_super+0x48/0x90 [ 2994.407584][ T111] deactivate_locked_super+0xa3/0x160 [ 2994.407778][ T111] cleanup_mnt+0x1dd/0x3e0
Thus, a successful umount left objects in the 9p fcall cache and prevented the cache from being destroyed cleanly.
Per-CPU shrink_qlist storage exists for every possible CPU, and each list is protected by its own raw spinlock. Iterate over possible CPUs so that a list populated before its CPU went offline is drained as well.
for_each_possible_cpu() can do more work than for_each_online_cpu(), but this change only affects CONFIG_KASAN_GENERIC kernels. The extra work is limited to cache shrink and cache destruction paths and does not affect the normal allocation/free fast path. It adds one raw-spinlock-protected scan of each possible CPU's shrink list. These lists are normally empty; a non-empty list is traversed to remove objects belonging to the cache being shrunk or destroyed.
--- mm/kasan/quarantine.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
mm/kasan/quarantine.c +6 -1
@@ -361,7 +361,12 @@ void kasan_quarantine_remove_cache(struct kmem_cache *cache)*/ on_each_cpu (per_cpu_remove_cache, cache,1 ); -for_each_online_cpu (cpu) { +/* +* A CPU can go offline after on_each_cpu() returns, leaving cache +* objects on that CPU's shrink list. Scan all possible CPUs to +* drain those lists. +*/ +for_each_possible_cpu (cpu) { sq =per_cpu_ptr (&shrink_qlist, cpu);raw_spin_lock_irqsave (&sq->lock, flags);qlist_move_cache (&sq->qlist, &to_free, cache);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 73/1887 ACPI: TAD: Rearrange RT data validation checking
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit 3329a1416c3350449081ca5daaa94802a65b2992 ]
Move RT data validation checks from acpi_tad_set_real_time() to a separate function called acpi_tad_rt_is_invalid() and use it also in acpi_tad_get_real_time() to validate data coming from the platform firmware.
Also make acpi_tad_set_real_time() return -EINVAL when the RT data passed to it is invalid (instead of -ERANGE which is somewhat confusing) and introduce ACPI_TAD_TZ_UNSPEC to represent the "unspecified timezone" value.
Stable-dep-of: a3df8bbe0a70 ("ACPI: TAD: Add locking around AML evaluations")
--- drivers/acpi/acpi_tad.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-)
drivers/acpi/acpi_tad.c +20 -6
@@ -48,6 +48,9 @@ MODULE_AUTHOR("Rafael J. Wysocki");/* Special value for disabled timer or expired timer wake policy. */ #define ACPI_TAD_WAKE_DISABLED (~(u32)0) +/* ACPI TAD RTC */ +#define ACPI_TAD_TZ_UNSPEC 2047 +struct acpi_tad_driver_data {u32 capabilities; };
@@ -66,6 +69,16 @@ struct acpi_tad_rt {u8 padding[3 ];/* must be 0 */ } __packed; +static bool acpi_tad_rt_is_invalid (struct acpi_tad_rt *rt) +{ +return rt->year <1900 || rt->year >9999 || + rt->month <1 || rt->month >12 || + rt->hour >23 || rt->minute >59 || rt->second >59 || + rt->tz <-1440 || + (rt->tz >1440 && rt->tz !=ACPI_TAD_TZ_UNSPEC ) || + rt->daylight >3 ; +} +static int acpi_tad_set_real_time (struct device *dev,struct acpi_tad_rt *rt) {acpi_handle handle =ACPI_HANDLE (dev);
@@ -79,12 +92,8 @@ static int acpi_tad_set_real_time(struct device *dev, struct acpi_tad_rt *rt)unsigned long long retval;acpi_status status; -if (rt->year <1900 || rt->year >9999 || - rt->month <1 || rt->month >12 || - rt->hour >23 || rt->minute >59 || rt->second >59 || - rt->tz <-1440 || (rt->tz >1440 && rt->tz !=2047 ) || - rt->daylight >3 ) -return -ERANGE ; +if (acpi_tad_rt_is_invalid (rt)) +return -EINVAL ; args[0 ].buffer.pointer = (u8 *)rt; args[0 ].buffer.length =sizeof (*rt);
@@ -131,6 +140,11 @@ static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt) goto out_free;memcpy (rt, data,sizeof (*rt)); +if (acpi_tad_rt_is_invalid (rt)) { + ret = -ENODATA ; + goto out_free; + } + ret =0 ; out_free:
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 74/1887 ACPI: TAD: Split three functions to untangle runtime PM handling
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit b14b77bbea0a82cb66f1538824783e63d4128510 ]
Move the core functionality of acpi_tad_get_real_time(), acpi_tad_wake_set(), and acpi_tad_wake_read() into separate functions called __acpi_tad_get_real_time(), __acpi_tad_wake_set(), and __acpi_tad_wake_read(), respectively, which can be called from code blocks following a single runtime resume of the device.
This will facilitate adding alarm support to the RTC class device interface of the driver going forward.
No intentional functional impact.
Stable-dep-of: a3df8bbe0a70 ("ACPI: TAD: Add locking around AML evaluations")
--- drivers/acpi/acpi_tad.c | 128 ++++++++++++++++++++++++++-------------- 1 file changed, 84 insertions(+), 44 deletions(-)
drivers/acpi/acpi_tad.c +84 -44
@@ -110,7 +110,7 @@ static int acpi_tad_set_real_time(struct device *dev, struct acpi_tad_rt *rt)return 0 ; } -static int acpi_tad_get_real_time (struct device *dev,struct acpi_tad_rt *rt) +static int acpi_tad_evaluate_grt (struct device *dev,struct acpi_tad_rt *rt) {acpi_handle handle =ACPI_HANDLE (dev);struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER };
@@ -119,12 +119,7 @@ static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)acpi_status status;int ret = -EIO ; -pm_runtime_get_sync (dev); - status =acpi_evaluate_object (handle,"_GRT" ,NULL , &output); - -pm_runtime_put_sync (dev); -if (ACPI_FAILURE (status)) goto out_free;
@@ -140,11 +135,6 @@ static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt) goto out_free;memcpy (rt, data,sizeof (*rt)); -if (acpi_tad_rt_is_invalid (rt)) { - ret = -ENODATA ; - goto out_free; - } - ret =0 ; out_free:
@@ -152,6 +142,82 @@ static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)return ret; } +static int __acpi_tad_get_real_time (struct device *dev,struct acpi_tad_rt *rt) +{ +int ret; + + ret =acpi_tad_evaluate_grt (dev, rt); +if (ret) +return ret; + +if (acpi_tad_rt_is_invalid (rt)) +return -ENODATA ; + +return 0 ; +} + +static int acpi_tad_get_real_time (struct device *dev,struct acpi_tad_rt *rt) +{ +int ret; + +pm_runtime_get_sync (dev); + + ret =__acpi_tad_get_real_time (dev, rt); + +pm_runtime_put_sync (dev); + +return ret; +} + +static int __acpi_tad_wake_set (struct device *dev,char *method,u32 timer_id, +u32 value) +{ +acpi_handle handle =ACPI_HANDLE (dev); +union acpi_object args[] = { + { .type =ACPI_TYPE_INTEGER , }, + { .type =ACPI_TYPE_INTEGER , }, + }; +struct acpi_object_list arg_list = { + .pointer = args, + .count =ARRAY_SIZE (args), + }; +unsigned long long retval; +acpi_status status; + + args[0 ].integer.value = timer_id; + args[1 ].integer.value = value; + + status =acpi_evaluate_integer (handle, method, &arg_list, &retval); +if (ACPI_FAILURE (status) || retval) +return -EIO ; + +return 0 ; +} + +static int __acpi_tad_wake_read (struct device *dev,char *method,u32 timer_id, +unsigned long long *retval) +{ +acpi_handle handle =ACPI_HANDLE (dev); +union acpi_object args[] = { + { .type =ACPI_TYPE_INTEGER , }, + }; +struct acpi_object_list arg_list = { + .pointer = args, + .count =ARRAY_SIZE (args), + }; +acpi_status status; + + args[0 ].integer.value = timer_id; + + status =acpi_evaluate_integer (handle, method, &arg_list, retval); +if (ACPI_FAILURE (status)) +return -EIO ; + +return 0 ; +} + +/* sysfs interface */ +static char *acpi_tad_rt_next_field (char *s,int *val) {char *p;
@@ -264,31 +330,15 @@ static const struct attribute_group acpi_tad_time_attr_group = {static int acpi_tad_wake_set (struct device *dev,char *method,u32 timer_id,u32 value) { -acpi_handle handle =ACPI_HANDLE (dev); -union acpi_object args[] = { - { .type =ACPI_TYPE_INTEGER , }, - { .type =ACPI_TYPE_INTEGER , }, - }; -struct acpi_object_list arg_list = { - .pointer = args, - .count =ARRAY_SIZE (args), - }; -unsigned long long retval; -acpi_status status; - - args[0 ].integer.value = timer_id; - args[1 ].integer.value = value; +int ret;pm_runtime_get_sync (dev); - status =acpi_evaluate_integer (handle, method, &arg_list, &retval); + ret =__acpi_tad_wake_set (dev, method, timer_id, value);pm_runtime_put_sync (dev); -if (ACPI_FAILURE (status) || retval) -return -EIO ; - -return 0 ; +return ret; } static int acpi_tad_wake_write(struct device *dev, const char *buf, char *method,
@@ -314,27 +364,17 @@ static int acpi_tad_wake_write(struct device *dev, const char *buf, char *methodstatic ssize_t acpi_tad_wake_read (struct device *dev,char *buf,char *method,u32 timer_id,const char *specval) { -acpi_handle handle =ACPI_HANDLE (dev); -union acpi_object args[] = { - { .type =ACPI_TYPE_INTEGER , }, - }; -struct acpi_object_list arg_list = { - .pointer = args, - .count =ARRAY_SIZE (args), - };unsigned long long retval; -acpi_status status; - - args[0 ].integer.value = timer_id; +int ret;pm_runtime_get_sync (dev); - status =acpi_evaluate_integer (handle, method, &arg_list, &retval); + ret =__acpi_tad_wake_read (dev, method, timer_id, &retval);pm_runtime_put_sync (dev); -if (ACPI_FAILURE (status)) -return -EIO ; +if (ret) +return ret;if ((u32 )retval ==ACPI_TAD_WAKE_DISABLED )return sprintf (buf,"%s\n" , specval);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 75/1887 ACPI: TAD: Add locking around AML evaluations
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
[ Upstream commit a3df8bbe0a704fa5c1609b9666b594f350558fe0 ]
In the ACPI TAD driver, there are hidden assumptions that the ACPI control methods used by it will not be evaluated concurrently due to ACPICA namespace and interpreter locking.
However, that may not be the case since ACPICA may drop and re-acquire the namespace and interpreter locks during the evaluation of a given object in a few cases, including the one in which the AML in question sleeps causing acpi_ex_system_do_sleep() to be called. In that case, the evaluation of one control method may be started while the evaluation of another one is still in progress.
For this reason, add a global lock to the ACPI TAD driver and acquire it every time before evaluating an ACPI control method, except for the initial evaluation of _GCP in acpi_tad_probe().
--- drivers/acpi/acpi_tad.c | 50 ++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 20 deletions(-)
drivers/acpi/acpi_tad.c +30 -20
@@ -23,6 +23,7 @@#include <linux/acpi.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/mutex.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> #include <linux/suspend.h>
@@ -79,6 +80,8 @@ static bool acpi_tad_rt_is_invalid(struct acpi_tad_rt *rt) rt->daylight >3 ; } +static DEFINE_MUTEX (acpi_tad_aml_lock); +static int acpi_tad_set_real_time (struct device *dev,struct acpi_tad_rt *rt) {acpi_handle handle =ACPI_HANDLE (dev);
@@ -100,6 +103,8 @@ static int acpi_tad_set_real_time(struct device *dev, struct acpi_tad_rt *rt)pm_runtime_get_sync (dev); +guard (mutex)(&acpi_tad_aml_lock); + status =acpi_evaluate_integer (handle,"_SRT" , &arg_list, &retval);pm_runtime_put_sync (dev);
@@ -114,30 +119,27 @@ static int acpi_tad_evaluate_grt(struct device *dev, struct acpi_tad_rt *rt) {acpi_handle handle =ACPI_HANDLE (dev);struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER }; -union acpi_object *out_obj; -struct acpi_tad_rt *data;acpi_status status;int ret = -EIO ; - status =acpi_evaluate_object (handle,"_GRT" ,NULL , &output); -if (ACPI_FAILURE (status)) - goto out_free; - - out_obj = output.pointer; -if (out_obj->type !=ACPI_TYPE_BUFFER ) - goto out_free; +guard (mutex)(&acpi_tad_aml_lock); -if (out_obj->buffer.length !=sizeof (*rt)) - goto out_free; - - data = (struct acpi_tad_rt *)(out_obj->buffer.pointer); -if (!data->valid) - goto out_free; - -memcpy (rt, data,sizeof (*rt)); - ret =0 ; - -out_free: + status =acpi_evaluate_object (handle,"_GRT" ,NULL , &output); +if (ACPI_SUCCESS (status)) { +union acpi_object *out_obj; + + out_obj = output.pointer; +if (out_obj->type ==ACPI_TYPE_BUFFER && + out_obj->buffer.length ==sizeof (*rt)) { +struct acpi_tad_rt *data; + + data = (struct acpi_tad_rt *)(out_obj->buffer.pointer); +if (data->valid) { +memcpy (rt, data,sizeof (*rt)); + ret =0 ; + } + } + }ACPI_FREE (output.pointer);return ret; }
@@ -187,6 +189,8 @@ static int __acpi_tad_wake_set(struct device *dev, char *method, u32 timer_id, args[0 ].integer.value = timer_id; args[1 ].integer.value = value; +guard (mutex)(&acpi_tad_aml_lock); + status =acpi_evaluate_integer (handle, method, &arg_list, &retval);if (ACPI_FAILURE (status) || retval)return -EIO ;
@@ -209,6 +213,8 @@ static int __acpi_tad_wake_read(struct device *dev, char *method, u32 timer_id, args[0 ].integer.value = timer_id; +guard (mutex)(&acpi_tad_aml_lock); + status =acpi_evaluate_integer (handle, method, &arg_list, retval);if (ACPI_FAILURE (status))return -EIO ;
@@ -425,6 +431,8 @@ static int acpi_tad_clear_status(struct device *dev, u32 timer_id)pm_runtime_get_sync (dev); +guard (mutex)(&acpi_tad_aml_lock); + status =acpi_evaluate_integer (handle,"_CWS" , &arg_list, &retval);pm_runtime_put_sync (dev);
@@ -466,6 +474,8 @@ static ssize_t acpi_tad_status_read(struct device *dev, char *buf, u32 timer_id)pm_runtime_get_sync (dev); +guard (mutex)(&acpi_tad_aml_lock); + status =acpi_evaluate_integer (handle,"_GWS" , &arg_list, &retval);pm_runtime_put_sync (dev);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 76/1887 kernel/params.c: Use kstrtobool() instead of strtobool()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit def7b92efd868a6c78da86770704c1a03506016e ]
strtobool() is the same as kstrtobool(). However, the latter is more used within the kernel.
In order to remove strtobool() and slightly simplify kstrtox.h, switch to the other function name.
While at it, include the corresponding header file (<linux/kstrtox.h>)
Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")
--- kernel/params.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/params.c +2 -1
@@ -4,6 +4,7 @@*/ #include <linux/kernel.h> +#include <linux/kstrtox.h> #include <linux/string.h> #include <linux/errno.h> #include <linux/module.h>
@@ -310,7 +311,7 @@ int param_set_bool(const char *val, const struct kernel_param *kp)if (!val) val ="1" ;/* One of =[yYnN01] */ -return strtobool (val, kp->arg); +return kstrtobool (val, kp->arg); }EXPORT_SYMBOL (param_set_bool);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 77/1887 params: Do not go over the limit when getting the string length
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Shevchenko <[email protected]>
[ Upstream commit fd0cd057a1b7351604daa6ffc91dfe28adf7225d ]
We can use strnlen() even on early stages and it prevents from going over the string boundaries in case it's already too long.
Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")
--- kernel/params.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
kernel/params.c +6 -3
@@ -264,7 +264,10 @@ EXPORT_SYMBOL_GPL(param_set_uint_minmax);int param_set_charp (const char *val,const struct kernel_param *kp) { -if (strlen (val) >1024 ) { +size_t len, maxlen =1024 ; + + len =strnlen (val, maxlen +1 ); +if (len == maxlen +1 ) {pr_err ("%s: string parameter too long\n" , kp->name);return -ENOSPC ; }
@@ -274,7 +277,7 @@ int param_set_charp(const char *val, const struct kernel_param *kp)/* This is a hack. We can't kmalloc in early boot, and we * don't need to; this mangled commandline is preserved. */ if (slab_is_available ()) { - *(char **)kp->arg =kmalloc_parameter (strlen (val)+1 ); + *(char **)kp->arg =kmalloc_parameter (len +1 );if (!*(char **)kp->arg)return -ENOMEM ;strcpy (*(char **)kp->arg, val);
@@ -512,7 +515,7 @@ int param_set_copystring(const char *val, const struct kernel_param *kp) {const struct kparam_string *kps = kp->str; -if (strlen (val)+1 > kps->maxlen) { +if (strnlen (val, kps->maxlen) == kps->maxlen) {pr_err ("%s: string doesn't fit in %u chars.\n" , kp->name, kps->maxlen-1 );return -ENOSPC ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 78/1887 params: Use size_add() for kmalloc()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Shevchenko <[email protected]>
[ Upstream commit 0fc79cbc937f2a754a302a710a94b68c61d0a89a ]
Prevent allocations from integer overflow by using size_add().
Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")
--- kernel/params.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/params.c +2 -1
@@ -11,6 +11,7 @@#include <linux/moduleparam.h> #include <linux/device.h> #include <linux/err.h> +#include <linux/overflow.h> #include <linux/slab.h> #include <linux/ctype.h> #include <linux/security.h>
@@ -48,7 +49,7 @@ static void *kmalloc_parameter(unsigned int size) {struct kmalloced_param *p; - p =kmalloc (sizeof (*p) + size,GFP_KERNEL ); + p =kmalloc (size_add (sizeof (*p), size),GFP_KERNEL );if (!p)return NULL ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 79/1887 params: Sort headers
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Shevchenko <[email protected]>
[ Upstream commit a05f096c2c0ca52e8fd34740c7d4b53ab3e7123e ]
Sort the headers in alphabetic order in order to ease the maintenance for this part.
Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")
--- kernel/params.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
kernel/params.c +6 -6
@@ -3,18 +3,18 @@Copyright (C) 2001 Rusty Russell. */ +#include <linux/ctype.h> +#include <linux/device.h> +#include <linux/err.h> +#include <linux/errno.h> #include <linux/kernel.h> #include <linux/kstrtox.h> -#include <linux/string.h> -#include <linux/errno.h> #include <linux/module.h> #include <linux/moduleparam.h> -#include <linux/device.h> -#include <linux/err.h> #include <linux/overflow.h> -#include <linux/slab.h> -#include <linux/ctype.h> #include <linux/security.h> +#include <linux/slab.h> +#include <linux/string.h> #ifdef CONFIG_SYSFS /* Protects all built-in parameters, modules use their own param_lock */
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 80/1887 params: Fix multi-line comment style
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Shevchenko <[email protected]>
[ Upstream commit b5e3f86a47d34f7b8af899f8cc70520f6daf8b53 ]
The multi-line comment style in the file is rather arbitrary. Make it follow the standard one.
Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")
--- kernel/params.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
kernel/params.c +12 -8
@@ -1,8 +1,8 @@// SPDX-License-Identifier: GPL-2.0-or-later -/* Helpers for initial module or kernel cmdline parsing -Copyright (C) 2001 Rusty Russell. - -*/ +/* +* Helpers for initial module or kernel cmdline parsing +* Copyright (C) 2001 Rusty Russell. +*/ #include <linux/ctype.h> #include <linux/device.h> #include <linux/err.h>
@@ -275,8 +275,10 @@ int param_set_charp(const char *val, const struct kernel_param *kp)maybe_kfree_parameter (*(char **)kp->arg); -/* This is a hack. We can't kmalloc in early boot, and we -* don't need to; this mangled commandline is preserved. */ +/* +* This is a hack. We can't kmalloc() in early boot, and we +* don't need to; this mangled commandline is preserved. +*/ if (slab_is_available ()) { *(char **)kp->arg =kmalloc_parameter (len +1 );if (!*(char **)kp->arg)
@@ -741,8 +743,10 @@ void module_param_sysfs_remove(struct module *mod) {if (mod->mkobj.mp) {sysfs_remove_group (&mod->mkobj.kobj, &mod->mkobj.mp->grp); -/* We are positive that no one is using any param -* attrs at this point. Deallocate immediately. */ +/* +* We are positive that no one is using any param +* attrs at this point. Deallocate immediately. +*/ free_module_param_attrs (&mod->mkobj); } }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 81/1887 params: fix charp corruption on allocation failure
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiacheng Yu <[email protected]>
[ Upstream commit 3dfaae04243cde460d82dfc2a7dd0bb6664d20ae ]
param_set_charp() stores charp parameters in allocated memory after slab is available, and releases the previous value when the parameter is updated.
The previous value is released before the replacement allocation succeeds. If kmalloc_parameter() fails, the setter returns -ENOMEM with the parameter left as NULL.
Failing zswap's compressor update before zswap is initialized can later trigger:
BUG: kernel NULL pointer dereference, address: 0000000000000000
RIP: 0010:strcmp+0x10/0x30
Call Trace:
zswap_setup+0x3b1/0x490
zswap_enabled_param_set+0x5b/0xa0
param_attr_store+0x93/0xe0
module_attr_store+0x1c/0x30
kernfs_fop_write_iter+0x116/0x1f0Allocate and copy the replacement first, then replace the parameter value only after allocation succeeds.
--- kernel/params.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
kernel/params.c +8 -6
@@ -265,6 +265,7 @@ EXPORT_SYMBOL_GPL(param_set_uint_minmax);int param_set_charp (const char *val,const struct kernel_param *kp) { +char *tmp;size_t len, maxlen =1024 ; len =strnlen (val, maxlen +1 );
@@ -273,19 +274,20 @@ int param_set_charp(const char *val, const struct kernel_param *kp)return -ENOSPC ; } -maybe_kfree_parameter (*(char **)kp->arg); -/* * This is a hack. We can't kmalloc() in early boot, and we * don't need to; this mangled commandline is preserved. */ if (slab_is_available ()) { - *(char **)kp->arg =kmalloc_parameter (len +1 ); -if (!*(char **)kp->arg) + tmp =kmalloc_parameter (len +1 ); +if (!tmp)return -ENOMEM ; -strcpy (*(char **)kp->arg, val); +memcpy (tmp, val, len +1 ); }else - *(const char **)kp->arg = val; + tmp = (char *)val; + +maybe_kfree_parameter (*(char **)kp->arg); + *(char **)kp->arg = tmp;return 0 ; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 82/1887 dmaengine: Add devm_dma_request_chan()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bence Csókás <[email protected]>
[ Upstream commit 08bf1663c21a3e815eda28fa242d84c945ca3b94 ]
Expand the arsenal of devm functions for DMA devices, this time for requesting channels.
Stable-dep-of: 777979e62711 ("i2c: mxs: fix DMA channel leak on probe error")
--- drivers/dma/dmaengine.c | 30 ++++++++++++++++++++++++++++++ include/linux/dmaengine.h | 7 +++++++ 2 files changed, 37 insertions(+)
drivers/dma/dmaengine.c +30 -0
@@ -933,6 +933,36 @@ void dma_release_channel(struct dma_chan *chan) }EXPORT_SYMBOL_GPL (dma_release_channel); +static void dmaenginem_release_channel (void *chan) +{ +dma_release_channel (chan); +} + +/** +* devm_dma_request_chan - try to allocate an exclusive slave channel +* @dev: pointer to client device structure +* @name: slave channel name +* +* Returns pointer to appropriate DMA channel on success or an error pointer. +* +* The operation is managed and will be undone on driver detach. +*/ + +struct dma_chan *devm_dma_request_chan (struct device *dev,const char *name) +{ +struct dma_chan *chan =dma_request_chan (dev, name); +int ret =0 ; + +if (!IS_ERR (chan)) + ret =devm_add_action_or_reset (dev, dmaenginem_release_channel, chan); + +if (ret) +return ERR_PTR (ret); + +return chan; +} +EXPORT_SYMBOL_GPL (devm_dma_request_chan); +/** * dmaengine_get - register interest in dma_channels */
include/linux/dmaengine.h +7 -0
@@ -1489,6 +1489,7 @@ struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,struct dma_chan *dma_request_chan (struct device *dev,const char *name);struct dma_chan *dma_request_chan_by_mask (const dma_cap_mask_t *mask); +struct dma_chan *devm_dma_request_chan (struct device *dev,const char *name);void dma_release_channel (struct dma_chan *chan);int dma_get_slave_caps (struct dma_chan *chan,struct dma_slave_caps *caps);
@@ -1525,6 +1526,12 @@ static inline struct dma_chan *dma_request_chan_by_mask( {return ERR_PTR (-ENODEV ); } + +static inline struct dma_chan *devm_dma_request_chan (struct device *dev,const char *name) +{ +return ERR_PTR (-ENODEV ); +} +static inline void dma_release_channel (struct dma_chan *chan) { }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 83/1887 i2c: mxs: fix DMA channel leak on probe error
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ruoyu Wang <[email protected]>
[ Upstream commit 777979e627115734052b323d2721cdb500e81dcf ]
mxs_i2c_probe() requests an exclusive DMA channel before resetting the controller and registering the I2C adapter. If either later operation fails, probe returns without releasing the channel because the remove callback is not invoked after a failed probe.
Use devm_dma_request_chan() so the device core releases the channel on probe failure and driver detach. Remove the manual release from the remove callback because the channel is now device-managed.
This issue was found by a static analysis checker and confirmed by manual source review.
--- drivers/i2c/busses/i2c-mxs.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/i2c/busses/i2c-mxs.c +1 -4
@@ -832,7 +832,7 @@ static int mxs_i2c_probe(struct platform_device *pdev) }/* Setup the DMA */ - i2c->dmach =dma_request_chan (dev,"rx-tx" ); + i2c->dmach =devm_dma_request_chan (dev,"rx-tx" );if (IS_ERR (i2c->dmach)) {return dev_err_probe (dev,PTR_ERR (i2c->dmach),"Failed to request dma\n" );
@@ -870,9 +870,6 @@ static int mxs_i2c_remove(struct platform_device *pdev)i2c_del_adapter (&i2c->adapter); -if (i2c->dmach) -dma_release_channel (i2c->dmach); -writel (MXS_I2C_CTRL0_SFTRST , i2c->regs +MXS_I2C_CTRL0_SET );return 0 ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 84/1887 lockd: fix swapped arguments in nlmsvc_match_ip()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oscar Ou <[email protected]>
[ Upstream commit b9060689f49dc663e9a3d069c4a65ff63a836e66 ]
When releasing locks by server IP address via /proc/fs/nfsd/unlock_ip, nlmsvc_unlock_all_by_ip() calls nlm_traverse_files() with the server sockaddr as the opaque @data argument:
nlm_traverse_files(server_addr, nlmsvc_match_ip, NULL);
The match callback is later invoked from nlm_traverse_locks() as:
match(lockhost, host);
where the first argument is the nlm_host that owns the lock, and the second argument is the @data that was originally passed down (here the server sockaddr). This is the convention every other match callback relies on (nlmsvc_mark_host(), nlmsvc_same_host(), nlmsvc_is_client()):
arg1 is the real nlm_host, arg2 is the caller-supplied reference value.
nlmsvc_match_ip() has had these two arguments reversed ever since the unlock-by-IP feature was introduced in commit 4373ea84c84d ("lockd:
unlock lockd locks associated with a given server ip"):
return rpc_cmp_addr(nlm_srcaddr(host), datap);
Here @host is actually the server sockaddr, so nlm_srcaddr(host) dereferences a struct sockaddr as a struct nlm_host and reads garbage at the offset of h_srcaddr; meanwhile @datap is actually the lock owner's nlm_host but is compared as a sockaddr. As a result the comparison practically never matches and locks are not released for the requested IP.
Swap the arguments so the lock owner's source address is compared against the requested server address:
return rpc_cmp_addr(nlm_srcaddr(datap), (struct sockaddr *)host);
--- fs/lockd/svcsubs.c | 2 +- include/linux/lockd/lockd.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
fs/lockd/svcsubs.c +1 -1
@@ -493,7 +493,7 @@ EXPORT_SYMBOL_GPL(nlmsvc_unlock_all_by_sb);static int nlmsvc_match_ip (void *datap,struct nlm_host *host) { -return rpc_cmp_addr (nlm_srcaddr (host), datap); +return rpc_cmp_addr (nlm_srcaddr (datap), (struct sockaddr *)host); }/**
include/linux/lockd/lockd.h +1 -1
@@ -265,7 +265,7 @@ void nsm_release(struct nsm_handle *nsm);* This is used in garbage collection and resource reclaim * A return value != 0 means destroy the lock/block/share */ -typedef int (*nlm_host_match_fn_t )(void *cur,struct nlm_host *ref); +typedef int (*nlm_host_match_fn_t )(void *owner,struct nlm_host *ref);/* * Server-side lock handling
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 85/1887 power: supply: rt9455: Convert to i2cs .probe_new()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
[ Upstream commit 2adfc4370ebb745380a44c3e5418486a32a9ba67 ]
The probe function doesn't make use of the i2c_device_id * parameter so it can be trivially converted.
Stable-dep-of: 3e7a1ebc32fa ("power: supply: rt9455: quiesce delayed work before teardown")
--- drivers/power/supply/rt9455_charger.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/power/supply/rt9455_charger.c +2 -3
@@ -1583,8 +1583,7 @@ static const struct regmap_config rt9455_regmap_config = { .cache_type = REGCACHE_RBTREE, }; -static int rt9455_probe (struct i2c_client *client, -const struct i2c_device_id *id) +static int rt9455_probe (struct i2c_client *client) {struct i2c_adapter *adapter = client->adapter;struct device *dev = &client->dev;
@@ -1741,7 +1740,7 @@ MODULE_DEVICE_TABLE(acpi, rt9455_i2c_acpi_match);#endif static struct i2c_driver rt9455_driver = { - .probe = rt9455_probe, + .probe_new = rt9455_probe, .remove = rt9455_remove, .id_table = rt9455_i2c_id_table, .driver = {
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 86/1887 power: supply: rt9455: quiesce delayed work before teardown
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fan Wu <[email protected]>
[ Upstream commit 3e7a1ebc32fad5a558254a478efd401c17a24381 ]
The threaded IRQ handler can queue pwr_rdy_work, max_charging_time_work and batt_presence_work. pwr_rdy_work and batt_presence_work can also queue max_charging_time_work, while batt_presence_work can requeue itself.
rt9455_remove() cancels max_charging_time_work before batt_presence_work. The latter can therefore queue max_charging_time_work after it has already been cancelled:
rt9455_remove() workqueue
cancel pwr_rdy_work
cancel max_charging_time_work
batt_presence_work queues
max_charging_time_work
cancel batt_presence_work
return
devres frees rt9455_info
max_charging_time_work dereferences
rt9455_info
The IRQ also remains registered until devres cleanup and can queue more work after any of the cancellation calls. If rt9455_hw_init() fails after the IRQ has been requested, probe returns without cancelling work that may already have been queued. A pending callback can then access rt9455_info after it has been freed.
Register rt9455_cancel_all_delayed_works() through devm_add_action_or_reset() right after devm_power_supply_register(). devres invokes the action in reverse registration order, after the managed IRQ has been freed and before rt9455_info is released, so the delayed works are drained in both rt9455_remove() and the probe error path. Cancel pwr_rdy_work and batt_presence_work before max_charging_time_work because both can queue the latter.
This issue was found by an in-house static analysis tool.
--- drivers/power/supply/rt9455_charger.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
drivers/power/supply/rt9455_charger.c +17 -4
@@ -1583,6 +1583,19 @@ static const struct regmap_config rt9455_regmap_config = { .cache_type = REGCACHE_RBTREE, }; +static void rt9455_cancel_all_delayed_works (void *data) +{ +struct rt9455_info *info = data; + +/* +* Both pwr_rdy_work and batt_presence_work can queue +* max_charging_time_work, so cancel them first. +*/ +cancel_delayed_work_sync (&info->pwr_rdy_work); +cancel_delayed_work_sync (&info->batt_presence_work); +cancel_delayed_work_sync (&info->max_charging_time_work); +} +static int rt9455_probe (struct i2c_client *client) {struct i2c_adapter *adapter = client->adapter;
@@ -1673,6 +1686,10 @@ static int rt9455_probe(struct i2c_client *client) goto put_usb_notifier; } + ret =devm_add_action_or_reset (dev, rt9455_cancel_all_delayed_works, info); +if (ret) + goto put_usb_notifier; + ret = devm_request_threaded_irq(dev, client->irq, NULL, rt9455_irq_handler_thread, IRQF_TRIGGER_LOW | IRQF_ONESHOT,
@@ -1713,10 +1730,6 @@ static void rt9455_remove(struct i2c_client *client)if (info->nb.notifier_call)usb_unregister_notifier (info->usb_phy, &info->nb);#endif - -cancel_delayed_work_sync (&info->pwr_rdy_work); -cancel_delayed_work_sync (&info->max_charging_time_work); -cancel_delayed_work_sync (&info->batt_presence_work); }static const struct i2c_device_id rt9455_i2c_id_table[] = {
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 87/1887 i2c: core: Introduce i2c_client_get_device_id helper function
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Angel Iglesias <[email protected]>
[ Upstream commit 662233731d66cf41e7494e532e702849c8ce18f3 ]
Introduces new helper function to aid in .probe_new() refactors. In order to use existing i2c_get_device_id() on the probe callback, the device match table needs to be accessible in that function, which would require bigger refactors in some drivers using the deprecated .probe callback.
This issue was discussed in more detail in the IIO mailing list.
Stable-dep-of: 4e4b9f5ce9df ("power: supply: max17040: drop incorrect I2C functionality check")
--- drivers/i2c/i2c-core-base.c | 14 ++++++++++++++ include/linux/i2c.h | 1 + 2 files changed, 15 insertions(+)
drivers/i2c/i2c-core-base.c +14 -0
@@ -2432,6 +2432,20 @@ int i2c_get_device_id(const struct i2c_client *client, }EXPORT_SYMBOL_GPL (i2c_get_device_id); +/** +* i2c_client_get_device_id - get the driver match table entry of a device +* @client: the device to query. The device must be bound to a driver +* +* Returns a pointer to the matching entry if found, NULL otherwise. +*/ +const struct i2c_device_id *i2c_client_get_device_id (const struct i2c_client *client) +{ +const struct i2c_driver *drv =to_i2c_driver (client->dev.driver); + +return i2c_match_id (drv->id_table, client); +} +EXPORT_SYMBOL_GPL (i2c_client_get_device_id); +/* ---------------------------------------------------- * the i2c address scanning function * Will not work for 10-bit addresses!
include/linux/i2c.h +1 -0
@@ -189,6 +189,7 @@ s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client, u8 *values);int i2c_get_device_id (const struct i2c_client *client,struct i2c_device_identity *id); +const struct i2c_device_id *i2c_client_get_device_id (const struct i2c_client *client);#endif /* I2C */ /**
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 88/1887 power: supply: max17040: Convert to i2cs .probe_new()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
[ Upstream commit a07fca69378c26ea034826feb0011256e25ad237 ]
.probe_new() doesn't get the i2c_device_id * parameter, so determine that explicitly in the probe function.
Stable-dep-of: 4e4b9f5ce9df ("power: supply: max17040: drop incorrect I2C functionality check")
--- drivers/power/supply/max17040_battery.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/power/supply/max17040_battery.c +3 -3
@@ -430,9 +430,9 @@ static const struct power_supply_desc max17040_battery_desc = { .num_properties = ARRAY_SIZE(max17040_battery_props), }; -static int max17040_probe (struct i2c_client *client, -const struct i2c_device_id *id) +static int max17040_probe (struct i2c_client *client) { +const struct i2c_device_id *id =i2c_client_get_device_id (client);struct i2c_adapter *adapter = client->adapter;struct power_supply_config psy_cfg = {};struct max17040_chip *chip;
@@ -599,7 +599,7 @@ static struct i2c_driver max17040_i2c_driver = { .of_match_table = max17040_of_match, .pm = MAX17040_PM_OPS, }, - .probe = max17040_probe, + .probe_new = max17040_probe, .id_table = max17040_id, };module_i2c_driver (max17040_i2c_driver);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 89/1887 power: supply: max17040: drop incorrect I2C functionality check
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jianing Li <[email protected]>
[ Upstream commit 4e4b9f5ce9dfb8ed4b8d1262a504b8043ac09d87 ]
max17040_probe() rejects adapters that do not advertise I2C_FUNC_SMBUS_BYTE. The driver does not issue SMBus byte transactions, however. Its regmap has 8-bit registers and 16-bit big-endian values, for which regmap-i2c supports either raw I2C transfers or SMBus word-data transactions.
Consequently, an adapter providing raw I2C transfers or SMBus word data but not SMBus byte transactions is rejected even though regmap can access the device. Conversely, the current check can pass an adapter that regmap cannot use.
Drop the stale check and let devm_regmap_init_i2c() validate and select the supported transfer method.
--- drivers/power/supply/max17040_battery.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/power/supply/max17040_battery.c +0 -4
@@ -433,16 +433,12 @@ static const struct power_supply_desc max17040_battery_desc = {static int max17040_probe (struct i2c_client *client) {const struct i2c_device_id *id =i2c_client_get_device_id (client); -struct i2c_adapter *adapter = client->adapter;struct power_supply_config psy_cfg = {};struct max17040_chip *chip;enum chip_id chip_id;bool enable_irq = false;int ret; -if (!i2c_check_functionality (adapter,I2C_FUNC_SMBUS_BYTE )) -return -EIO ; - chip =devm_kzalloc (&client->dev,sizeof (*chip),GFP_KERNEL );if (!chip)return -ENOMEM ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 90/1887 mmc: via-sdmmc: cancel card-detect work on remove
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fan Wu <[email protected]>
[ Upstream commit 57e5d877f898d5e5c9d672a77bb6bdd24f0d9bf5 ]
Disabling the device interrupt and freeing the IRQ prevents new card-detect work from being queued, but carddet_work already queued by the handler can still run after via_sd_remove() returns. via_sdc_card_detect() recovers the host through container_of() and dereferences its MMIO base; once remove() returns the host can be freed, so that work would touch freed memory.
Cancel carddet_work after freeing the IRQ and before cancelling finish_bh_work, which the card-detect handler can also queue. carddet_work can re-enable the interrupt through via_reset_pcictrl(); mask it again afterwards.
This issue was found by an in-house static analysis tool and confirmed by manual code review.
--- drivers/mmc/host/via-sdmmc.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/mmc/host/via-sdmmc.c +4 -0
@@ -1208,6 +1208,10 @@ static void via_sd_remove(struct pci_dev *pcidev)free_irq (pcidev->irq, sdhost); +cancel_work_sync (&sdhost->carddet_work); +/* carddet_work may re-enable the interrupt via via_reset_pcictrl(). */ +writeb (0x0 , sdhost->pcictrl_mmiobase +VIA_CRDR_PCIINTCTRL ); +del_timer_sync (&sdhost->timer);tasklet_kill (&sdhost->finish_tasklet);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 91/1887 hwrng: stm32 - Fix runtime PM cleanup on registration failure
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Can Peng <[email protected]>
[ Upstream commit 1163a476a568f6c0f852d469c8e4c5a5f805adac ]
stm32_rng_probe() enables autosuspend and runtime PM before registering the hwrng. If devm_hwrng_register() fails, probe returns with runtime PM left enabled and autosuspend still selected.
The remove callback also only disables runtime PM and does not undo pm_runtime_use_autosuspend().
Use devm_pm_runtime_enable() so runtime PM is unwound automatically on probe failure and driver detach. Since the managed cleanup also disables runtime PM,drop the remove callback.
--- drivers/char/hw_random/stm32-rng.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
drivers/char/hw_random/stm32-rng.c +3 -9
@@ -156,18 +156,13 @@ static int stm32_rng_probe(struct platform_device *ofdev)pm_runtime_set_autosuspend_delay (dev,100 );pm_runtime_use_autosuspend (dev); -pm_runtime_enable (dev); + err =devm_pm_runtime_enable (dev); +if (err) +return err;return devm_hwrng_register (dev, &priv->rng); } -static int stm32_rng_remove (struct platform_device *ofdev) -{ -pm_runtime_disable (&ofdev->dev); - -return 0 ; -} -#ifdef CONFIG_PM static int stm32_rng_runtime_suspend (struct device *dev) {
@@ -209,7 +204,6 @@ static struct platform_driver stm32_rng_driver = { .of_match_table = stm32_rng_match, }, .probe = stm32_rng_probe, - .remove = stm32_rng_remove, };module_platform_driver (stm32_rng_driver);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 92/1887 i3c: master: Do not treat master device as a duplicate target
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <[email protected]>
[ Upstream commit 4dc1b3eeba7991905a5b5b8129ebea51be7d87b7 ]
i3c_master_search_i3c_dev_duplicate() searches the bus for another I3C device with the same PID as the reference device. The search can match master->this, causing the controller itself to be returned as a duplicate.
Since the controller is not a target device, it cannot be a duplicate of one. Exclude master->this from matching so that the function only returns real duplicate target devices.
--- drivers/i3c/master.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/i3c/master.c +2 -1
@@ -1978,7 +1978,8 @@ i3c_master_search_i3c_dev_duplicate(struct i3c_dev_desc *refdev)struct i3c_dev_desc *i3cdev;i3c_bus_for_each_i3cdev (&master->bus, i3cdev) { -if (i3cdev != refdev && i3cdev->info.pid == refdev->info.pid) +if (i3cdev != refdev && i3cdev->info.pid == refdev->info.pid && + i3cdev != master->this)return i3cdev; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 93/1887 i3c: master: Fix use-after-free of master->this
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <[email protected]>
[ Upstream commit feb0ed76601f3c2f91f08688c5a7d8b9d382f720 ]
sysfs attribute callbacks for the master controller device dereference master->this. However, master->this is freed in i3c_master_detach_free_devs() before the master device itself is released.
As a result, sysfs accesses can dereference a freed master->this pointer, leading to a use-after-free.
Keep master->this alive until i3c_masterdev_release(), which is called after the master device and its sysfs state are being torn down. Do not free master->this as part of the normal device detach path.
On the error path in i3c_master_set_info(), reset master->this and bus.cur_master to NULL before freeing the allocated device.
--- drivers/i3c/master.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-)
drivers/i3c/master.c +11 -6
@@ -667,6 +667,11 @@ static struct attribute *i3c_masterdev_attrs[] = { };ATTRIBUTE_GROUPS (i3c_masterdev); +static void i3c_master_free_i3c_dev (struct i3c_dev_desc *dev) +{ +kfree (dev); +} +static void i3c_masterdev_release (struct device *dev) {struct i3c_master_controller *master =dev_to_i3cmaster (dev);
@@ -679,6 +684,8 @@ static void i3c_masterdev_release(struct device *dev)i3c_bus_cleanup (bus);of_node_put (dev->of_node); + +i3c_master_free_i3c_dev (master->this); }static const struct device_type i3c_masterdev_type = {
@@ -866,11 +873,6 @@ static void i3c_device_release(struct device *dev)kfree (i3cdev); } -static void i3c_master_free_i3c_dev (struct i3c_dev_desc *dev) -{ -kfree (dev); -} -static struct i3c_dev_desc *i3c_master_alloc_i3c_dev (struct i3c_master_controller *master,const struct i3c_device_info *info)
@@ -1738,6 +1740,8 @@ int i3c_master_set_info(struct i3c_master_controller *master,return 0 ; err_free_dev: + master->bus.cur_master =NULL ; + master->this =NULL ;i3c_master_free_i3c_dev (i3cdev);return ret;
@@ -1758,7 +1762,8 @@ static void i3c_master_detach_free_devs(struct i3c_master_controller *master) i3cdev->boardinfo->init_dyn_addr, I3C_ADDR_SLOT_FREE); -i3c_master_free_i3c_dev (i3cdev); +if (i3cdev != master->this) +i3c_master_free_i3c_dev (i3cdev); } list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c,
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 94/1887 usb: gadget: f_mass_storage: fix null pointer dereference in fsg_common_set_num_buffers()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeffin Philip <[email protected]>
[ Upstream commit 2c0f5ca48674a5b5f9fa4a9c3325aa48053af0bc ]
Previously fsg_num_buffers_validate() was removed as it was not necessary due to Kconfig setting the limits for n from 2 to 256 with default as 2. However, setting the page content in such a way that kstrtou8() reflects n value as either 0 or 1 bypasses these restrictions leading to a null pointer dereference if n is 0. Fix this by adding a check for n < 2 and returning -EINVAL if n is either 0 or 1 consistent with Kconfig logic.
--- drivers/usb/gadget/function/f_mass_storage.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/usb/gadget/function/f_mass_storage.c +3 -0
@@ -2747,6 +2747,9 @@ int fsg_common_set_num_buffers(struct fsg_common *common, unsigned int n)struct fsg_buffhd *bh, *buffhds;int i; +if (n <2 ) +return -EINVAL ; + buffhds =kcalloc (n,sizeof (*buffhds),GFP_KERNEL );if (!buffhds)return -ENOMEM ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 95/1887 spi: bcm63xx: switch to use modern name
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yang Yingliang <[email protected]>
[ Upstream commit 1a9e76190f72e4e3aaf7eb89da22876846ff9b3d ]
Change legacy name master to modern name host or controller.
No functional changed.
Stable-dep-of: 2b62c2c134fa ("spi: bcm63xx: disable clock on resume failure")
--- drivers/spi/spi-bcm63xx.c | 68 +++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 34 deletions(-)
drivers/spi/spi-bcm63xx.c +34 -34
@@ -196,7 +196,7 @@ static const unsigned int bcm63xx_spi_freq_table[SPI_CLK_MASK][2] = {static void bcm63xx_spi_setup_transfer (struct spi_device *spi,struct spi_transfer *t) { -struct bcm63xx_spi *bs =spi_master_get_devdata (spi->master); +struct bcm63xx_spi *bs =spi_controller_get_devdata (spi->controller);u8 clk_cfg, reg;int i;
@@ -227,7 +227,7 @@ static void bcm63xx_spi_setup_transfer(struct spi_device *spi,static int bcm63xx_txrx_bufs (struct spi_device *spi,struct spi_transfer *first,unsigned int num_transfers) { -struct bcm63xx_spi *bs =spi_master_get_devdata (spi->master); +struct bcm63xx_spi *bs =spi_controller_get_devdata (spi->controller);u16 msg_ctl;u16 cmd;unsigned int i, timeout =0 , prepend_len =0 , len =0 ;
@@ -336,10 +336,10 @@ static int bcm63xx_txrx_bufs(struct spi_device *spi, struct spi_transfer *first,return 0 ; } -static int bcm63xx_spi_transfer_one (struct spi_master *master, +static int bcm63xx_spi_transfer_one (struct spi_controller *host,struct spi_message *m) { -struct bcm63xx_spi *bs =spi_master_get_devdata (master); +struct bcm63xx_spi *bs =spi_controller_get_devdata (host);struct spi_transfer *t, *first =NULL ;struct spi_device *spi = m->spi;int status =0 ;
@@ -409,18 +409,18 @@ static int bcm63xx_spi_transfer_one(struct spi_master *master, } exit: m->status = status; -spi_finalize_current_message (master); +spi_finalize_current_message (host);return 0 ; } -/* This driver supports single master mode only. Hence +/* This driver supports single host mode only. Hence * CMD_DONE is the only interrupt we care about */ static irqreturn_t bcm63xx_spi_interrupt (int irq,void *dev_id) { -struct spi_master *master = (struct spi_master *)dev_id; -struct bcm63xx_spi *bs =spi_master_get_devdata (master); +struct spi_controller *host = (struct spi_controller *)dev_id; +struct bcm63xx_spi *bs =spi_controller_get_devdata (host);u8 intr;/* Read interupts and clear them immediately */
@@ -437,7 +437,7 @@ static irqreturn_t bcm63xx_spi_interrupt(int irq, void *dev_id)static size_t bcm63xx_spi_max_length (struct spi_device *spi) { -struct bcm63xx_spi *bs =spi_master_get_devdata (spi->master); +struct bcm63xx_spi *bs =spi_controller_get_devdata (spi->controller);return bs->fifo_size; }
@@ -505,7 +505,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)const unsigned long *bcm63xx_spireg;struct device *dev = &pdev->dev;int irq, bus_num; -struct spi_master *master; +struct spi_controller *host;struct clk *clk;struct bcm63xx_spi *bs;int ret;
@@ -551,16 +551,16 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)if (IS_ERR (reset))return PTR_ERR (reset); - master =spi_alloc_master (dev,sizeof (*bs)); -if (!master) { + host =spi_alloc_host (dev,sizeof (*bs)); +if (!host) {dev_err (dev,"out of memory\n" );return -ENOMEM ; } - bs =spi_master_get_devdata (master); + bs =spi_controller_get_devdata (host);init_completion (&bs->done); -platform_set_drvdata (pdev, master); +platform_set_drvdata (pdev, host); bs->pdev = pdev; r =platform_get_resource (pdev,IORESOURCE_MEM ,0 );
@@ -576,21 +576,21 @@ static int bcm63xx_spi_probe(struct platform_device *pdev) bs->fifo_size = bs->reg_offsets[SPI_MSG_DATA_SIZE ]; ret =devm_request_irq (&pdev->dev, irq, bcm63xx_spi_interrupt,0 , - pdev->name, master); + pdev->name, host);if (ret) {dev_err (dev,"unable to request irq\n" ); goto out_err; } - master->dev.of_node = dev->of_node; - master->bus_num = bus_num; - master->num_chipselect = num_cs; - master->transfer_one_message = bcm63xx_spi_transfer_one; - master->mode_bits =MODEBITS ; - master->bits_per_word_mask =SPI_BPW_MASK (8 ); - master->max_transfer_size = bcm63xx_spi_max_length; - master->max_message_size = bcm63xx_spi_max_length; - master->auto_runtime_pm = true; + host->dev.of_node = dev->of_node; + host->bus_num = bus_num; + host->num_chipselect = num_cs; + host->transfer_one_message = bcm63xx_spi_transfer_one; + host->mode_bits =MODEBITS ; + host->bits_per_word_mask =SPI_BPW_MASK (8 ); + host->max_transfer_size = bcm63xx_spi_max_length; + host->max_message_size = bcm63xx_spi_max_length; + host->auto_runtime_pm = true; bs->msg_type_shift = bs->reg_offsets[SPI_MSG_TYPE_SHIFT ]; bs->msg_ctl_width = bs->reg_offsets[SPI_MSG_CTL_WIDTH ]; bs->tx_io = (u8 *)(bs->regs + bs->reg_offsets[SPI_MSG_DATA ]);
@@ -614,7 +614,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev) goto out_clk_disable;/* register and we are done */ - ret =devm_spi_register_master (dev, master); + ret =devm_spi_register_controller (dev, host);if (ret) {dev_err (dev,"spi register failed\n" ); goto out_clk_disable;
@@ -628,14 +628,14 @@ static int bcm63xx_spi_probe(struct platform_device *pdev) out_clk_disable:clk_disable_unprepare (clk); out_err: -spi_master_put (master); +spi_controller_put (host);return ret; }static int bcm63xx_spi_remove (struct platform_device *pdev) { -struct spi_master *master =platform_get_drvdata (pdev); -struct bcm63xx_spi *bs =spi_master_get_devdata (master); +struct spi_controller *host =platform_get_drvdata (pdev); +struct bcm63xx_spi *bs =spi_controller_get_devdata (host);/* reset spi block */ bcm_spi_writeb (bs,0 ,SPI_INT_MASK );
@@ -649,10 +649,10 @@ static int bcm63xx_spi_remove(struct platform_device *pdev)#ifdef CONFIG_PM_SLEEP static int bcm63xx_spi_suspend (struct device *dev) { -struct spi_master *master =dev_get_drvdata (dev); -struct bcm63xx_spi *bs =spi_master_get_devdata (master); +struct spi_controller *host =dev_get_drvdata (dev); +struct bcm63xx_spi *bs =spi_controller_get_devdata (host); -spi_master_suspend (master); +spi_controller_suspend (host);clk_disable_unprepare (bs->clk);
@@ -661,15 +661,15 @@ static int bcm63xx_spi_suspend(struct device *dev)static int bcm63xx_spi_resume (struct device *dev) { -struct spi_master *master =dev_get_drvdata (dev); -struct bcm63xx_spi *bs =spi_master_get_devdata (master); +struct spi_controller *host =dev_get_drvdata (dev); +struct bcm63xx_spi *bs =spi_controller_get_devdata (host);int ret; ret =clk_prepare_enable (bs->clk);if (ret)return ret; -spi_master_resume (master); +spi_controller_resume (host);return 0 ; }
Signature · 1 line
2.53.0