Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
to consider:
- [Medium] Unconditional use of __GFP_NOWARN suppresses OOM warnings for 
order-0 allocations.
--

--- Patch [1]: [PATCH v2] drm/pagemap: Fix folio allocation fallback and 
use-after-put ---
commit 8cbd3237a69e546db0a488ed740897837ca90e44
Author: Matthew Brost <[email protected]>

drm/pagemap: Fix folio allocation fallback and use-after-put

This commit fixes an issue where higher-order folio allocations lacking
warning suppression would spam the kernel log on failure. It adds a fallback
path to use order-0 allocations for the entire range if the higher-order
allocation fails. It also fixes a use-after-free issue when retrieving the
folio order after the page reference was dropped.

> diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c
> index 15c78eca180b7..aeb8ba0017e5f 100644
> --- a/drivers/gpu/drm/drm_pagemap.c
> +++ b/drivers/gpu/drm/drm_pagemap.c
> @@ -886,11 +886,34 @@ static int drm_pagemap_migrate_populate_ram_pfn(struct 
> vm_area_struct *vas,
>  
>               order = folio_order(page_folio(src_page));
>  
> -             /* TODO: Support fallback to single pages if THP allocation 
> fails */
>               if (vas)
> -                     folio = vma_alloc_folio(GFP_HIGHUSER, order, vas, addr);
> +                     folio = vma_alloc_folio(GFP_HIGHUSER | __GFP_NOWARN, 
> order, vas, addr);
>               else
> -                     folio = folio_alloc(GFP_HIGHUSER, order);
> +                     folio = folio_alloc(GFP_HIGHUSER | __GFP_NOWARN, order);

[Severity: Medium]
The commit message notes that __GFP_NOWARN is added to the higher-order
allocation, but does this unconditionally apply __GFP_NOWARN even when
order is 0?

If the source page is order-0, the primary allocation in
drm_pagemap_migrate_populate_ram_pfn() will use __GFP_NOWARN. If that
allocation fails, the subsequent fallback block is skipped because its
condition requires a non-zero order.

This means the function will jump directly to the free_pages error path
without logging any OOM warning for the failed order-0 allocation. Since
the fallback order-0 allocations explicitly use GFP_HIGHUSER without
__GFP_NOWARN, should the primary allocation also avoid __GFP_NOWARN when
order is 0?

> +
> +             if (!folio && order) {
> +                     /*
> +                      * Higher-order allocation failed, fall back to

[ ... ]

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/[email protected]?part=1

Reply via email to