The kernel should not send non-0 terminated interface name name or an
interface name larger than IFNAMSIZ. Just to be on the safe side, still
force the last byte to the 0-delimiter.

Fixes: 426e48c8d9ca ("batctl: ping: Get outgoing ifname from netlink")
Signed-off-by: Sven Eckelmann <[email protected]>
---
 netlink.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/netlink.c b/netlink.c
index 3a1c3a5..14100c3 100644
--- a/netlink.c
+++ b/netlink.c
@@ -822,7 +822,8 @@ static int get_nexthop_netlink_cb(struct nl_msg *msg, void 
*arg)
 
        if (attrs[BATADV_ATTR_HARD_IFNAME]) {
                ifname = nla_get_string(attrs[BATADV_ATTR_HARD_IFNAME]);
-               strncpy(opts->ifname, ifname, IFNAMSIZ);
+               strncpy(opts->ifname, ifname, IFNAMSIZ - 1);
+               opts->ifname[IFNAMSIZ - 1] = '\0';
        } else {
                /* compatibility for Linux < 5.14/batman-adv < 2021.2 */
                ifname = if_indextoname(index, opts->ifname);

-- 
2.47.3

Reply via email to