]> git.itanic.dy.fi Git - linux-stable/commitdiff
page_pool: fix netlink dump stop/resume
authorJakub Kicinski <kuba@kernel.org>
Fri, 1 Mar 2024 01:13:31 +0000 (17:13 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Mar 2024 10:12:59 +0000 (10:12 +0000)
If message fills up we need to stop writing. 'break' will
only get us out of the iteration over pools of a single
netdev, we need to also stop walking netdevs.

This results in either infinite dump, or missing pools,
depending on whether message full happens on the last
netdev (infinite dump) or non-last (missing pools).

Fixes: 950ab53b77ab ("net: page_pool: implement GET in the netlink API")
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/page_pool_user.c

index ffe5244e5597e806e1cbd2dc82894276e107e91c..278294aca66ababdf5f7d383833ff5496255b274 100644 (file)
@@ -94,11 +94,12 @@ netdev_nl_page_pool_get_dump(struct sk_buff *skb, struct netlink_callback *cb,
                        state->pp_id = pool->user.id;
                        err = fill(skb, pool, info);
                        if (err)
-                               break;
+                               goto out;
                }
 
                state->pp_id = 0;
        }
+out:
        mutex_unlock(&page_pools_lock);
        rtnl_unlock();