linux/drivers
Matthew Brost df72e55e75 drm/pagemap: Fix folio allocation fallback and use-after-put
drm_pagemap_migrate_populate_ram_pfn() had two issues when populating
RAM PFNs with higher-order folios:

1. The higher-order vma_alloc_folio()/folio_alloc() calls did not pass
   __GFP_NOWARN, so a THP allocation failure under memory pressure
   would spam the kernel log, and there was no fallback path despite a
   TODO comment stating one was needed. Add __GFP_NOWARN to the
   higher-order allocation and, on failure, fall back to order-0
   allocations for the entire range originally covered by the failed
   higher-order allocation, leaving MIGRATE_PFN_COMPOUND unset for
   those PFNs.

2. In the free_pages error path, order was computed via
   folio_order(page_folio(page)) *after* put_page(page) had already
   dropped the reference, resulting in a use-after-free/put when that
   was the last reference on the page. Compute order before releasing
   the page.

Introducing the fallback in 1. also requires the source page array
handed to ->copy_to_ram() to be built differently. Both callers only
populated the entry at the head of each source folio, relying on the
copy callback to derive the rest of the folio from the order recorded
in the matching drm_pagemap_addr. Once the destination has been demoted
to order-0 folios the drm_pagemap_addr entries are per-page, so a source
page is needed for every one of them; leaving them NULL makes the copy
callback stop after the first page and the remainder of the range is
never copied.

The source folio is only split later, by migrate_vma_pages() /
migrate_device_pages(), so its order cannot be used to detect the
demotion - test the destination for MIGRATE_PFN_COMPOUND instead. Factor
the array population out into drm_pagemap_migrate_populate_src_pages()
and use it from both drm_pagemap_evict_to_ram() and
__drm_pagemap_migrate_to_ram().

Fixes: ddeda61360 ("drm/pagemap: Allocate folios when possible")
Cc: stable@vger.kernel.org
Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Link: https://patch.msgid.link/20260902063504.3024362-2-matthew.brost@intel.com
2026-09-02 12:25:32 -07:00
..
accel accel/amdxdna: refuse to flush an imported BO 2026-09-01 11:19:33 -07:00
accessibility
acpi Revert "ACPI: scan: Defer device power initialization" 2026-08-27 16:03:20 +02:00
amba
android Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
ata pci-v7.3-changes 2026-08-23 12:44:10 -07:00
atm
auxdisplay auxdisplay for v7.3-1 2026-08-24 08:15:59 -07:00
base mm.git review status for linus..mm-stable 2026-08-27 09:17:06 -07:00
bcma
block mm.git review status for linus..mm-stable 2026-08-27 09:17:06 -07:00
bluetooth Including fixes from Bluetooth, IPSec and Netfilter. 2026-08-27 13:53:43 -07:00
bus Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
cache
cdrom
cdx
char ipmi: Fix some minor issues, add async init 2026-08-28 16:32:12 -07:00
clk MFD for v7.3 2026-08-27 10:45:08 -07:00
clocksource hyperv-next for v7.3-rc1 2026-08-26 16:47:40 -07:00
comedi
connector
counter Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
cpufreq More power management updates for 7.3-rc1 2026-08-26 14:13:26 -07:00
cpuidle MFD for v7.3 2026-08-27 10:45:08 -07:00
crypto dmaengine updates for v7.3 2026-08-24 12:21:15 -07:00
cxl
dax mm.git review status for mm-hotfixes-stable..mm-stable 2026-08-20 18:17:08 -07:00
dca
devfreq
dibs
dio
dma dmaengine updates for v7.3 2026-08-24 12:21:15 -07:00
dma-buf Merge drm/drm-fixes into drm-misc-fixes 2026-09-01 09:38:51 +02:00
dpll
edac
eisa
extcon
firewire firewire updates for v7.3 2026-08-22 08:41:28 -07:00
firmware remoteproc updates for v7.3 2026-08-25 14:03:31 -07:00
fpga Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
fsi
fwctl
gnss
gpib Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
gpio
gpu drm/pagemap: Fix folio allocation fallback and use-after-put 2026-09-02 12:25:32 -07:00
greybus
hid platform-drivers-x86 for v7.3-1 2026-08-24 10:16:35 -07:00
hsi HSI changes for the 7.3 series 2026-08-21 12:01:23 -07:00
hte
hv hyperv-next for v7.3-rc1 2026-08-26 16:47:40 -07:00
hwmon Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
hwspinlock
hwtracing Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
i2c i2c-fixes for v7.3-rc1 2026-08-30 10:53:24 -07:00
i3c
idle
iio More thermal control updates for 7.3-rc1 2026-08-26 14:21:30 -07:00
infiniband Including fixes from Bluetooth, IPSec and Netfilter. 2026-08-27 13:53:43 -07:00
input Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
interconnect
iommu dma-mapping updates for Linux 7.3: 2026-08-24 11:35:46 -07:00
ipack Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
irqchip pci-v7.3-changes 2026-08-23 12:44:10 -07:00
leds LEDs for v7.3 2026-08-27 11:05:51 -07:00
macintosh
mailbox mailbox: add Axiado AX3005 mailbox driver 2026-08-23 15:41:13 -05:00
mcb
md for-7.3/block-20260819 2026-08-20 13:55:16 -07:00
media USB / Thunderbolt changes for 7.3-rc1 2026-08-25 10:44:46 -07:00
memory * Raw NAND changes 2026-08-23 09:11:21 -07:00
memstick
message
mfd MFD for v7.3 2026-08-27 10:45:08 -07:00
misc Merge drm/drm-fixes into drm-misc-fixes 2026-09-01 09:38:51 +02:00
mmc MMC core: 2026-08-21 11:58:08 -07:00
most
mtd This pull request contains updates for UBI and UBIFS: 2026-08-28 10:59:07 -07:00
mux
net Including fixes from Bluetooth, IPSec and Netfilter. 2026-08-27 13:53:43 -07:00
nfc
ntb NTB: ntb_transport: Reject oversized TX buffers 2026-08-20 13:43:24 -07:00
nubus
nvdimm vhost,vdpa,virtio: fixes, features 2026-08-20 17:07:50 -07:00
nvme dmaengine updates for v7.3 2026-08-24 12:21:15 -07:00
nvmem Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
of Devicetree fixes for v7.3, part 1: 2026-08-27 12:53:43 -07:00
opp
parisc
parport
pci hyperv-next for v7.3-rc1 2026-08-26 16:47:40 -07:00
pcmcia
peci
perf RISC-V updates for v7.3 2026-08-20 14:53:54 -07:00
phy Mostly the usual clk driver updates and new SoC additions plus non-critical 2026-08-26 11:14:30 -07:00
pinctrl Pin control bulk changes for kernel v7.3 2026-08-24 08:46:03 -07:00
platform MFD for v7.3 2026-08-27 10:45:08 -07:00
pmdomain Mostly the usual clk driver updates and new SoC additions plus non-critical 2026-08-26 11:14:30 -07:00
pnp
power power sequencing updates for v7.3-rc1 2026-08-26 08:45:09 -07:00
powercap More power management updates for 7.3-rc1 2026-08-26 14:13:26 -07:00
pps
ps3
ptp ptp: netc: fix period truncation and potential divide-by-zero in PEROUT 2026-08-22 12:34:39 -07:00
pwm
rapidio
ras
regulator regulator: Fix for v7.3 2026-08-27 12:21:56 -07:00
remoteproc
resctrl
reset Mostly the usual clk driver updates and new SoC additions plus non-critical 2026-08-26 11:14:30 -07:00
rpmsg
rtc RTC for 7.3 2026-08-28 09:53:43 -07:00
s390 Arm: 2026-08-25 11:48:04 -07:00
sbus
scsi SCSI updates for 7.3 2026-08-29 11:55:36 -07:00
sh
siox
slimbus
soc remoteproc updates for v7.3 2026-08-25 14:03:31 -07:00
soundwire soundwire updates for 7.3 2026-08-24 12:16:16 -07:00
spi spi: Fixes for v7.3 2026-08-27 12:38:05 -07:00
spmi
ssb
staging Staging driver updates for 7.3-rc1 2026-08-25 10:16:19 -07:00
target USB / Thunderbolt changes for 7.3-rc1 2026-08-25 10:44:46 -07:00
tc
tee
thermal MFD for v7.3 2026-08-27 10:45:08 -07:00
thunderbolt
tty TTY / Serial driver updates for 7.3-rc1 2026-08-25 10:59:12 -07:00
ufs SCSI updates for 7.3 2026-08-29 11:55:36 -07:00
uio
usb Including fixes from Bluetooth, IPSec and Netfilter. 2026-08-27 13:53:43 -07:00
vdpa
vfio mm.git review status for mm-hotfixes-stable..mm-stable 2026-08-20 18:17:08 -07:00
vhost vhost,vdpa,virtio: fixes, features 2026-08-20 17:07:50 -07:00
video Backlight for v7.3 2026-08-27 11:16:39 -07:00
virt
virtio
w1
watchdog MFD for v7.3 2026-08-27 10:45:08 -07:00
xen dma-mapping updates for Linux 7.3: 2026-08-24 11:35:46 -07:00
zorro
Kconfig
Makefile