[PATCH net v1] page_pool: fix incorrect mp_ops error handling

Mina Almasry posted 1 patch 1 month, 1 week ago
net/core/page_pool.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
[PATCH net v1] page_pool: fix incorrect mp_ops error handling
Posted by Mina Almasry 1 month, 1 week ago
Minor fix to the memory provider error handling, we should be jumping to
free_ptr_ring in this error case rather than returning directly.

Found by code-inspection.

Cc: skhawaja@google.com

Fixes: b400f4b87430 ("page_pool: Set `dma_sync` to false for devmem memory provider")
Signed-off-by: Mina Almasry <almasrymina@google.com>

---
 net/core/page_pool.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/core/page_pool.c b/net/core/page_pool.c
index 343a6cac21e3..ba70569bd4b0 100644
--- a/net/core/page_pool.c
+++ b/net/core/page_pool.c
@@ -287,8 +287,10 @@ static int page_pool_init(struct page_pool *pool,
 	}
 
 	if (pool->mp_ops) {
-		if (!pool->dma_map || !pool->dma_sync)
-			return -EOPNOTSUPP;
+		if (!pool->dma_map || !pool->dma_sync) {
+			err = -EOPNOTSUPP;
+			goto free_ptr_ring;
+		}
 
 		if (WARN_ON(!is_kernel_rodata((unsigned long)pool->mp_ops))) {
 			err = -EFAULT;

base-commit: c42be534547d6e45c155c347dd792b6ad9c24def
-- 
2.51.0.rc1.193.gad69d77794-goog
Re: [PATCH net v1] page_pool: fix incorrect mp_ops error handling
Posted by Samiullah Khawaja 1 month, 1 week ago
On Wed, Aug 20, 2025 at 8:03 PM Mina Almasry <almasrymina@google.com> wrote:
>
> Minor fix to the memory provider error handling, we should be jumping to
> free_ptr_ring in this error case rather than returning directly.
>
> Found by code-inspection.
>
> Cc: skhawaja@google.com
>
> Fixes: b400f4b87430 ("page_pool: Set `dma_sync` to false for devmem memory provider")
> Signed-off-by: Mina Almasry <almasrymina@google.com>
>
> ---
>  net/core/page_pool.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/net/core/page_pool.c b/net/core/page_pool.c
> index 343a6cac21e3..ba70569bd4b0 100644
> --- a/net/core/page_pool.c
> +++ b/net/core/page_pool.c
> @@ -287,8 +287,10 @@ static int page_pool_init(struct page_pool *pool,
>         }
>
>         if (pool->mp_ops) {
> -               if (!pool->dma_map || !pool->dma_sync)
> -                       return -EOPNOTSUPP;
> +               if (!pool->dma_map || !pool->dma_sync) {
> +                       err = -EOPNOTSUPP;
> +                       goto free_ptr_ring;
> +               }
>
>                 if (WARN_ON(!is_kernel_rodata((unsigned long)pool->mp_ops))) {
>                         err = -EFAULT;
>
> base-commit: c42be534547d6e45c155c347dd792b6ad9c24def
> --
> 2.51.0.rc1.193.gad69d77794-goog
>

Reviewed-by: Samiullah Khawaja <skhawaja@google.com>