From: sashiko-bot@kernel.org
To: "Sasha Levin" <sashal@kernel.org>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH AUTOSEL 6.18-6.1] drm/amdkfd: add sanity check in svm_range_is_valid
Date: Mon, 19 Oct 2026 15:36:11 +0000 [thread overview]
Message-ID: <sashiko-outbox-177766@kernel.org> (raw)
In-Reply-To: <20261019135441.1420968-503-sashal@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] drm/amdkfd: left-shift overflow of start and size in svm_range_is_valid()
--
commit 0feea440041a7f2032b2a5a7f211d24baae6cfb4
Author: Eric Huang <jinhuieric.huang@amd.com>
drm/amdkfd: add sanity check in svm_range_is_valid
This commit adds zero-size and addition-overflow checks in
svm_range_is_valid() to prevent SVM range calculations from overflowing or
underflowing.
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> index 74a1d3e1d52be..0c81be3cd87e3 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> @@ -3398,7 +3398,13 @@ svm_range_is_valid(struct kfd_process *p, uint64_t start, uint64_t size)
> unsigned long start_unchg = start;
>
> start <<= PAGE_SHIFT;
> - end = start + (size << PAGE_SHIFT);
> +
> + if (size == 0)
> + return -EINVAL;
> +
> + if (check_add_overflow(start, size << PAGE_SHIFT, &end))
> + return -EOVERFLOW;
[Severity: High]
Can start <<= PAGE_SHIFT and size << PAGE_SHIFT still overflow 64-bit
unsigned integers and truncate the upper PAGE_SHIFT bits before
check_add_overflow() runs?
While kfd_ioctl_svm() right-shifts byte-aligned start_addr and size by
PAGE_SHIFT before calling svm_ioctl(), the CRIU restore and resume path
copies raw 64-bit page numbers directly from userspace in
kfd_criu_restore_svm():
drivers/gpu/drm/amd/amdkfd/kfd_svm.c:kfd_criu_restore_svm() {
...
ret = copy_from_user(&criu_svm_md->data, user_priv_ptr + *priv_data_offset,
svm_priv_data_size);
...
}
and passes them unshifted in kfd_criu_resume_svm() -> svm_range_set_attr()
-> svm_range_is_valid():
drivers/gpu/drm/amd/amdkfd/kfd_svm.c:kfd_criu_resume_svm() {
...
ret = svm_range_set_attr(p, mm, criu_svm_md->data.start_addr,
criu_svm_md->data.size, num_attrs + 1,
set_attr);
...
}
If size has upper PAGE_SHIFT bits set (for example, (1ULL << 52) + 1 on
4KB pages), size << PAGE_SHIFT wraps to PAGE_SIZE, so svm_range_is_valid()
only validates 1 page while svm_range_set_attr() passes the untruncated
64-bit size to svm_range_add().
Similarly, if start has upper PAGE_SHIFT bits set (for example,
(1ULL << 52) + valid_pfn with size = 1), start <<= PAGE_SHIFT wraps to a
valid VMA address and svm_range_check_vm(p, start_unchg,
(end - 1) >> PAGE_SHIFT, NULL, NULL) sees start_unchg > last so
interval_tree_iter_first() returns NULL. When svm_range_set_attr() then
creates prange with the untruncated prange->start and calls
svm_range_validate_and_map():
drivers/gpu/drm/amd/amdkfd/kfd_svm.c:svm_range_validate_and_map() {
...
if (!r) {
offset = (addr >> PAGE_SHIFT) - prange->start;
r = svm_range_dma_map(prange, ctx->bitmap, offset, npages,
hmm_range->hmm_pfns);
...
}
offset underflows and causes out-of-bounds array indexing (addr += offset)
in svm_range_dma_map_dev().
Should svm_range_is_valid() also check check_shl_overflow() on start and
size (or reject start and size values with upper PAGE_SHIFT bits set)?
> +
> do {
> vma = vma_lookup(p->mm, start);
> if (!vma || (vma->vm_flags & device_vma))
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261019135441.1420968-503-sashal@kernel.org?part=1
next prev parent reply other threads:[~2026-10-19 15:36 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20261019135441.1420968-1-sashal@kernel.org>
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18-6.6] drm/amdgpu: add buf length check Sasha Levin
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18-5.10] drm/amd/pm: Validate Vega hwmgr PowerPlay table bounds Sasha Levin
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18] drm/amdgpu: validate XCP topology counts before division Sasha Levin
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18] drm/panel-edp: Add BOE NE140QDM-NX2 Sasha Levin
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18-5.10] drm/panel: simple: Add Kyocera tcg070wvlq panel Sasha Levin
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18-6.1] drm/amdgpu/gfx11: WARN() rather than BUG() for invalid SDMA engine Sasha Levin
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18] drm/amdgpu: Validate ATPX buffer length before use Sasha Levin
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18-5.10] drm/amd/pm: Validate legacy hwmgr PP table offsets Sasha Levin
2026-10-19 14:28 ` sashiko-bot
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18] drm/amd/display: Fix rounding errors in CalculatePrefetchSchedule Sasha Levin
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18-5.10] drm/amdgpu: Validate ATIF buffer length before use Sasha Levin
2026-10-19 14:22 ` sashiko-bot
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18-5.10] drm/amdgpu: Add checks to vbios fetch through ATRM Sasha Levin
2026-10-19 13:46 ` [PATCH AUTOSEL 6.18] drm/amd/pm: derive stable PPT limits from PPTable Sasha Levin
2026-10-19 14:32 ` sashiko-bot
2026-10-19 13:46 ` [PATCH AUTOSEL 6.18-6.12] drm/msm/adreno: Add support for A704 GPU Sasha Levin
2026-10-19 13:46 ` [PATCH AUTOSEL 6.18-6.12] drm/xe: only resume exec queues that were actually suspended Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-6.1] drm/amd/pm: Use uploaded size for legacy custom PPTable Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-5.10] gpu: host1x: Wait for timeout worker completion on channel free Sasha Levin
2026-10-19 14:39 ` sashiko-bot
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-5.10] fbdev: udlfb: validate vendor descriptor items Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-5.10] fbdev: maxine: fix 64-bit build error Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18] drm/msm: Move nr_cmds initialization Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18] drm/amdgpu: Fix kobject cleanup in xcp sysfs Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18] drm/amdgpu/mes_v12_0: use mes schedule pipe for legacy queues on unified MES Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-6.1] drm/virtio: reclaim pending vbufs before tearing down vqs Sasha Levin
2026-10-19 13:48 ` [PATCH AUTOSEL 6.18-5.15] drm/amd/pm: Validate Tonga PPTable subtable bounds Sasha Levin
2026-10-19 14:47 ` sashiko-bot
2026-10-19 13:48 ` [PATCH AUTOSEL 6.18-6.12] drm/etnaviv: force flush on power register ops Sasha Levin
2026-10-19 13:48 ` [PATCH AUTOSEL 6.18-5.10] drm/amdgpu: Support some Barco AMD based graphics adapters Sasha Levin
2026-10-19 13:48 ` [PATCH AUTOSEL 6.18-5.10] drm/amd/pm: validate vega10 profile mode inputs Sasha Levin
2026-10-19 13:49 ` [PATCH AUTOSEL 6.18] drm/amdgpu: add check for xcp id Sasha Levin
2026-10-19 13:49 ` [PATCH AUTOSEL 6.18-6.1] drm/amdgpu: add bounds check to prevent array overflow Sasha Levin
2026-10-19 13:49 ` [PATCH AUTOSEL 6.18] drm/msm: detach the ARM DMA mapping before attaching our own domain Sasha Levin
2026-10-19 14:59 ` sashiko-bot
2026-10-19 13:49 ` [PATCH AUTOSEL 6.18-6.6] drm/amd/pm: Validate Vega10 PPTable subtable bounds Sasha Levin
2026-10-19 13:49 ` [PATCH AUTOSEL 6.18] drm/sysfb: simpledrm: Validate mmap size against framebuffer size Sasha Levin
2026-10-19 13:49 ` [PATCH AUTOSEL 6.18-6.12] drm/panel-edp: Support MB116AS01'3 edp panel Sasha Levin
2026-10-19 13:49 ` [PATCH AUTOSEL 6.18-5.10] drm/etnaviv: check all modules for idle after reset Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18] drm/panel: panel-edp: Adjust T8 timing for AUO B116XAK01.6 and B140XTK02.4 Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-5.10] fbdev: omap2: dsi: do not copy isr table Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-6.6] drm/radeon: fix internal display on iMac11, 1 (RV770/DCE3.1) Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18] drm/etnaviv: check MMUv2 status after reset Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-6.6] drm/panel-edp: Add BOE NE160QDM-NY1 panel Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-6.12] drm/amd/display: fix max dispclk_khz/dppclk_khz double 1000 Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18] drm/panel-edp: Add BOE NV116WH2-M30, BOE NT116WHM-N21, BOE NV116FH1-M31, BOE NV116FH1-M30 Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-5.10] drm/rockchip: dw_hdmi: Use resume_early pm ops for system suspend Sasha Levin
2026-10-19 15:06 ` sashiko-bot
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-5.10] drm/amdgpu: Gate debugfs MMIO access on kernel lockdown Sasha Levin
2026-10-19 15:09 ` sashiko-bot
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-5.10] fbcon: Fix KASAN slab-out-of-bounds Read in fbcon_prepare_logo Sasha Levin
2026-10-19 13:51 ` [PATCH AUTOSEL 6.18] drm/amdkfd: use node XCC count for v9 CRIU control stack restore Sasha Levin
2026-10-19 13:51 ` [PATCH AUTOSEL 6.18-5.10] drm/amd/pm: Validate OD DPM triples before mutating tables Sasha Levin
2026-10-19 13:51 ` [PATCH AUTOSEL 6.18] drm/virtio: abort virtqueue wait on device removal to avoid hung task Sasha Levin
2026-10-19 15:24 ` sashiko-bot
2026-10-19 13:51 ` [PATCH AUTOSEL 6.18-5.10] drm/amd/pm: Validate Tonga PowerPlay state array bounds Sasha Levin
2026-10-19 13:51 ` [PATCH AUTOSEL 6.18-5.15] drm/amd/pm: Guard VBIOS AC timing table walk Sasha Levin
2026-10-19 15:20 ` sashiko-bot
2026-10-19 13:52 ` [PATCH AUTOSEL 6.18-6.1] drm/amd/pm: Validate pp_table header before reading size Sasha Levin
2026-10-19 15:31 ` sashiko-bot
2026-10-19 13:52 ` [PATCH AUTOSEL 6.18] drm/msm: Fix barriers accessing ctx vm Sasha Levin
2026-10-19 15:27 ` sashiko-bot
2026-10-19 13:52 ` [PATCH AUTOSEL 6.18-6.1] drm/amdgpu/atomfirmware: WARN() rather than BUG() Sasha Levin
2026-10-19 15:24 ` sashiko-bot
2026-10-19 13:52 ` [PATCH AUTOSEL 6.18] drm/amdgpu/gfx12: set KMD_QUEUE for kernel gfx queues Sasha Levin
2026-10-19 13:52 ` [PATCH AUTOSEL 6.18-6.12] drm/amdgpu: Guard reads in pcie state readout Sasha Levin
2026-10-19 15:24 ` sashiko-bot
2026-10-19 13:52 ` [PATCH AUTOSEL 6.18] drm/amdkfd: Fix signal reset event Sasha Levin
2026-10-19 13:53 ` [PATCH AUTOSEL 6.18-5.10] drm/radeon: avoid double free in r600 DPM cleanup Sasha Levin
2026-10-19 15:33 ` sashiko-bot
2026-10-19 13:53 ` [PATCH AUTOSEL 6.18-6.1] drm/amdkfd: add sanity check in svm_range_is_valid Sasha Levin
2026-10-19 15:36 ` sashiko-bot [this message]
2026-10-19 13:53 ` [PATCH AUTOSEL 6.18] drm/amdgpu/gfx11: set KMD_QUEUE for kernel gfx queues Sasha Levin
2026-10-19 13:53 ` [PATCH AUTOSEL 6.18-5.10] fbdev: platinumfb: add error checking for ioremap calls Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=sashiko-outbox-177766@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=sashal@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox