Re: [PATCH v2] mm/hugetlb: Fix incorrect error return from hugetlb_reserve_pages()

From: Joshua Hahn
Date: Fri Oct 24 2025 - 10:54:01 EST


On Fri, 24 Oct 2025 10:42:40 +0100 Shameer Kolothum <skolothumtho@xxxxxxxxxx> wrote:

> The function hugetlb_reserve_pages() returns the number of pages added
> to the reservation map on success and a negative error code on failure
> (e.g. -EINVAL, -ENOMEM). However, in some error paths, it may return -1
> directly.
>
> For example, a failure at:
>
> if (hugetlb_acct_memory(h, gbl_reserve) < 0)
> goto out_put_pages;
>
> results in returning -1 (since add = -1), which may be misinterpreted
> in userspace as -EPERM.
>
> Fix this by explicitly capturing and propagating the return values from
> helper functions, and using -EINVAL for all other failure cases.
>
> Fixes: 986f5f2b4be3 ("mm/hugetlb: make hugetlb_reserve_pages() return nr of entries updated")
> Signed-off-by: Shameer Kolothum <skolothumtho@xxxxxxxxxx>
> ---
> Addressed commenst from v1. Thanks!
> https://lore.kernel.org/linux-mm/20251022102956.245736-1-skolothumtho@xxxxxxxxxx/
> ---
> mm/hugetlb.c | 25 ++++++++++++++++++-------
> 1 file changed, 18 insertions(+), 7 deletions(-)

Hello Shameer, LGTM, thank you for addressing the comments! Feel free to add:

Reviewed-by: Joshua Hahn <joshua.hahnjy@xxxxxxxxx>

[...snip...]

> + /* region_chg() above can return -ENOMEM */
> + err = (chg == -ENOMEM) ? -ENOMEM : -EINVAL;

And this looks much more elegant than the version I wrote : -)