On 1/3/25 2:10 AM, Bastien Curutchet (eBPF Foundation) wrote:
+static int ping_setup(struct test_data *data)
+{
+       struct nstoken *nstoken = NULL;
+       int i;
+
+       data->ns[0] = netns_new(NS0, false);
+       if (!ASSERT_OK_PTR(data->ns[0], "create ns"))
+               return -1;
+
+       for (i = 1; i < NS_NB; i++) {
+               char ns_name[4] = {};
+
+               snprintf(ns_name, 4, "NS%d", i);
+               data->ns[i] = netns_new(ns_name, false);
+               if (!ASSERT_OK_PTR(data->ns[i], "create ns"))
+                       goto fail;
+
+               nstoken = open_netns(NS0);
+               if (!ASSERT_OK_PTR(nstoken, "open NS0"))
+                       goto fail;
+
+               SYS(fail, "ip link add veth%d index %d%d%d type veth peer name veth0 
netns %s",
+                   i, i, i, i, ns_name);
+               SYS(fail, "ip link set veth%d up", i);
+               close_netns(nstoken);
+
+               nstoken = open_netns(ns_name);
+               if (!ASSERT_OK_PTR(nstoken, "open ns"))
+                       goto fail;
+
+               SYS(fail, "ip addr add %s.%d/24 dev veth0", IPV4_NETWORK, i);
+               SYS(fail, "ip link set veth0 up");
+               close_netns(nstoken);

                nstoken = NULL;

Otherwise, the other "goto fail;" of this loop will close and free the already closed nstoken again.

Some of the other close_netns(nstoken) in this patch may have similar issue.

+       }
+
+       return 0;
+
+fail:
+       close_netns(nstoken);
+       cleanup(data);
+       return -1;
+}


Reply via email to