local-node: don't read pointer after clear
authorDavid Bauer <mail@david-bauer.net>
Tue, 21 Sep 2021 16:51:57 +0000 (18:51 +0200)
committerDavid Bauer <mail@david-bauer.net>
Tue, 21 Sep 2021 17:46:05 +0000 (19:46 +0200)
The name pointer provided by ubus get's cleared after the first call to
ubus_register_subscriber in usteer_get_node. The leads to an incorrect
ifindex returned by if_nametoindex due to the 0 characters long string.

Work around this issue by reusing the interface name already stored in
the local node struct.

Fixes querying the wrong interface with netlink, resulting in incorrect
SSIDs used for the nodes.

Signed-off-by: David Bauer <mail@david-bauer.net>
local_node.c

index 985b37b068a711d8ffc787d08fdfe982d4459daf..8064bd72f46d2891f0c0d12779ce93244da5a9b6 100644 (file)
@@ -447,7 +447,7 @@ usteer_register_node(struct ubus_context *ctx, const char *name, uint32_t id)
        ln = usteer_get_node(ctx, name);
        ln->obj_id = id;
        ln->iface = usteer_node_name(&ln->node) + offset;
-       ln->ifindex = if_nametoindex(iface);
+       ln->ifindex = if_nametoindex(ln->iface);
 
        blob_buf_init(&b, 0);
        blobmsg_add_u32(&b, "notify_response", 1);