From 258282873f4e1c9b7196ed2835f2604c5cb6c3be Mon Sep 17 00:00:00 2001 From: kabassanov Date: Tue, 10 Feb 2026 18:29:21 +0100 Subject: [PATCH] Update route.c Conflict --- src/openvpn/route.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/openvpn/route.c b/src/openvpn/route.c index 93f61a1fa57..1d32ee2905e 100644 --- a/src/openvpn/route.c +++ b/src/openvpn/route.c @@ -1825,14 +1825,21 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt, unsigned int flag * but for link-local destinations, we MUST specify the interface, so * we build a combined "$gateway%$interface" gateway string */ - if (r6->iface != NULL && gateway_needed - && IN6_IS_ADDR_LINKLOCAL(&r6->gateway)) /* fe80::...%intf */ - { - size_t len = strlen(gateway) + 1 + strlen(r6->iface) + 1; - char *tmp = gc_malloc(len, true, &gc); - snprintf(tmp, len, "%s%%%s", gateway, r6->iface); - gateway = tmp; - } + if (IN6_IS_ADDR_LINKLOCAL(&r6->gateway)) { /* fe80::...%intf */ + + if (r6->iface != NULL && gateway_needed) { + size_t len = strlen(gateway) + 1 + strlen(r6->iface)+1; + char *tmp = gc_malloc( len, true, &gc ); + snprintf( tmp, len, "%s%%%s", gateway, r6->iface ); + gateway = tmp; + + } else if (device) { + size_t len = strlen(gateway) + 1 + strlen(device)+1; + char *tmp = gc_malloc( len, true, &gc ); + snprintf( tmp, len, "%s%%%s", gateway, device ); + gateway = tmp; + } + } #endif #ifndef _WIN32