selftests: net: make the dump test less sensitive to mem accounting
Subsystems (3)
Jakub Kicinski
maintainerPATCH 1/2 selftests: net: make the dump test less sensitive to mem accounting
Recent changes to make netlink socket memory accounting must have broken the implicit assumption of the netlink-dump test that we can fit exactly 64 dumps into the socket. Handle the failure mode properly, and increase the dump count to 80 to make sure we still run into the error condition if the default buffer size increases in the future.
--- tools/testing/selftests/net/netlink-dumps.c | 43 ++++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-)
tools/testing/selftests/net/netlink-dumps.c +33 -10
@@ -31,9 +31,18 @@ struct ext_ack {const char *str; }; -/* 0: no done, 1: done found, 2: extack found, -1: error */ -static int nl_get_extack (char *buf,size_t n,struct ext_ack *ea) +enum get_ea_ret { +ERROR =-1 , +NO_CTRL =0 , +FOUND_DONE , +FOUND_ERR , +FOUND_EXTACK , +}; + +static enum get_ea_ret +nl_get_extack (char *buf,size_t n,struct ext_ack *ea) { +enum get_ea_ret ret =NO_CTRL ;const struct nlmsghdr *nlh;const struct nlattr *attr;ssize_t rem;
@@ -41,15 +50,19 @@ static int nl_get_extack(char *buf, size_t n, struct ext_ack *ea)for (rem = n; rem >0 ;NLMSG_NEXT (nlh, rem)) { nlh = (struct nlmsghdr *)&buf[n - rem];if (!NLMSG_OK (nlh, rem)) -return -1 ; +return ERROR ; -if (nlh->nlmsg_type !=NLMSG_DONE ) +if (nlh->nlmsg_type ==NLMSG_ERROR ) + ret =FOUND_ERR ; +else if (nlh->nlmsg_type ==NLMSG_DONE ) + ret =FOUND_DONE ; +else continue ; ea->err = -*(int *)NLMSG_DATA (nlh);if (!(nlh->nlmsg_flags &NLM_F_ACK_TLVS )) -return 1 ; +return ret;ynl_attr_for_each (attr, nlh,sizeof (int )) {switch (ynl_attr_type (attr)) {
@@ -68,10 +81,10 @@ static int nl_get_extack(char *buf, size_t n, struct ext_ack *ea) } } -return 2 ; +return FOUND_EXTACK ; } -return 0 ; +return ret; } static const struct {
@@ -99,9 +112,9 @@ static const struct {TEST (dump_extack) {int netlink_sock; +int i, cnt, ret;char buf[8192 ];int one =1 ; -int i, cnt;ssize_t n; netlink_sock =socket (AF_NETLINK ,SOCK_RAW ,NETLINK_ROUTE );
@@ -118,7 +131,7 @@ TEST(dump_extack)ASSERT_EQ (n,0 );/* Dump so many times we fill up the buffer */ - cnt =64 ; + cnt =80 ;for (i =0 ; i < cnt; i++) { n =send (netlink_sock, &dump_neigh_bad,sizeof (dump_neigh_bad),0 );
@@ -140,10 +153,20 @@ TEST(dump_extack) }ASSERT_GE (n, (ssize_t )sizeof (struct nlmsghdr )); -EXPECT_EQ (nl_get_extack (buf, n, &ea),2 ); + ret =nl_get_extack (buf, n, &ea); +/* Once we fill the buffer we'll see one ENOBUFS followed +* by a number of EBUSYs. Then the last recv() will finally +* trigger and complete the dump. +*/ +if (ret ==FOUND_ERR && (ea.err ==ENOBUFS || ea.err ==EBUSY )) +continue ; +EXPECT_EQ (ret,FOUND_EXTACK ); +EXPECT_EQ (ea.err,EINVAL );EXPECT_EQ (ea.attr_offs,sizeof (struct nlmsghdr ) +sizeof (struct ndmsg )); } +/* Make sure last message was a full DONE+extack */ +EXPECT_EQ (ret,FOUND_EXTACK ); } static const struct {
Signature · 1 line
2.51.0
Jakub Kicinski
maintainerPATCH 2/2 selftests: net: move netlink-dumps back to progs
Commit 9bb88c659673 ("selftests: net: test extacks in netlink dumps") moved netlink-dumps from TEST_GEN_PROGS to YNL_GEN_FILES. But _FILES are not for tests, rather for utilities / helpers. Create YNL_GEN_PROGS and include netlink-dumps there.
This makes netlink-dumps part of executed tests, again.
--- tools/testing/selftests/net/Makefile | 4 +++- tools/testing/selftests/net/ynl.mk | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-)
tools/testing/selftests/net/Makefile +3 -1
@@ -121,8 +121,10 @@ TEST_PROGS += ipv6_force_forwarding.sh TEST_PROGS += route_hint.sh # YNL files, must be before "include ..lib.mk" -YNL_GEN_FILES := busy_poller netlink-dumps +YNL_GEN_FILES := busy_poller +YNL_GEN_PROGS := netlink-dumps TEST_GEN_FILES += $(YNL_GEN_FILES) +TEST_GEN_PROGS += $(YNL_GEN_PROGS) TEST_FILES := settings TEST_FILES += in_netns.sh lib.sh setup_loopback.sh setup_veth.sh
tools/testing/selftests/net/ynl.mk +3 -2
@@ -5,10 +5,11 @@ # Inputs: # # YNL_GENS: families we need in the selftests -# YNL_PROGS: TEST_PROGS which need YNL (TODO, none exist, yet) +# YNL_GEN_PROGS: TEST_GEN_PROGS which need YNL # YNL_GEN_FILES: TEST_GEN_FILES which need YNL -YNL_OUTPUTS := $(patsubst %,$(OUTPUT)/%,$(YNL_GEN_FILES)) +YNL_OUTPUTS := $(patsubst %,$(OUTPUT)/%,$(YNL_GEN_FILES)) \ + $(patsubst %,$(OUTPUT)/%,$(YNL_GEN_PROGS)) YNL_SPECS := \ $(patsubst %,$(top_srcdir)/Documentation/netlink/specs/%.yaml,$(YNL_GENS))
Signature · 1 line
2.51.0
This series was applied to netdev/net-next.git (main) by Jakub Kicinski <[email protected]>:
Hello:
This series was applied to netdev/net-next.git (main) by Jakub Kicinski <[email protected]>:
Quoted 8 lines · On Sat, 6 Sep 2025 14:13:50 -0700 you wrote:
Recent changes to make netlink socket memory accounting must have broken the implicit assumption of the netlink-dump test that we can fit exactly 64 dumps into the socket. Handle the failure mode properly, and increase the dump count to 80 to make sure we still run into the error condition if the default buffer size increases in the future.
[...]
Here is the summary with links:
- [net-next,1/2] selftests: net: make the dump test less sensitive to mem accounting
https://git.kernel.org/netdev/net-next/c/27bc5eaf004c - [net-next,2/2] selftests: net: move netlink-dumps back to progs https://git.kernel.org/netdev/net-next/c/f3883b1ea5a8
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html