]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/net: ovpn: fix getaddrinfo memory leak in ovpn_parse_remote()
authorlonglong yan <yanlonglong@kylinos.cn>
Wed, 3 Jun 2026 07:27:41 +0000 (15:27 +0800)
committerAntonio Quartulli <antonio@openvpn.net>
Mon, 20 Jul 2026 13:49:55 +0000 (15:49 +0200)
The ovpn_parse_remote() function has two memory management issues:

1. When both 'host' and 'vpnip' are non-NULL, the first getaddrinfo()
   allocation is leaked because 'result' is overwritten by the second
   getaddrinfo() call without freeing the first allocation.

2. When both 'host' and 'vpnip' are NULL, 'result' is an uninitialized
   stack variable passed to freeaddrinfo(), which is undefined behavior.

Fix by initializing 'result' to NULL and calling freeaddrinfo() after
the first getaddrinfo() result is consumed.

Fixes: 959bc330a439 ("testing/selftests: add test tool and scripts for ovpn module")
Signed-off-by: longlong yan <yanlonglong@kylinos.cn>
Signed-off-by: Antonio Quartulli <antonio@openvpn.net>
tools/testing/selftests/net/ovpn/ovpn-cli.c

index d40953375c86fa6074ddbf3d8b01c6f2451d4edb..f4effa7580c0f9152167ecd5323093b3ce77c858 100644 (file)
@@ -1785,7 +1785,7 @@ static int ovpn_parse_remote(struct ovpn_ctx *ovpn, const char *host,
                             const char *service, const char *vpnip)
 {
        int ret;
-       struct addrinfo *result;
+       struct addrinfo *result = NULL;
        struct addrinfo hints = {
                .ai_family = ovpn->sa_family,
                .ai_socktype = SOCK_DGRAM,
@@ -1809,6 +1809,8 @@ static int ovpn_parse_remote(struct ovpn_ctx *ovpn, const char *host,
                }
 
                memcpy(&ovpn->remote, result->ai_addr, result->ai_addrlen);
+               freeaddrinfo(result);
+               result = NULL;
        }
 
        if (vpnip) {