]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Fix memory leak in add_option() for option 'connection'
authorGuido Vranken <guidovranken@gmail.com>
Thu, 8 Jun 2017 22:04:36 +0000 (00:04 +0200)
committerGert Doering <gert@greenie.muc.de>
Sat, 10 Jun 2017 07:24:23 +0000 (09:24 +0200)
This patch ensures that if an error occurs while processing
the 'connection' directive of an options specification,
the variable 'struct options sub', which is initialized
with init_options(), is properly freed with uninit_options().

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <CAO5O-E+HdfHNAK=--55054AB374U-Ky4q_-3M114makfPdSnBw@mail.gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14764.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
(cherry picked from commit d89e14d92623731d2fa6343a11072caab32e13cd)

src/openvpn/options.c

index 79f861bf66e669c96d10298336bbf9df814b96b9..32b4961ba690a969ed831fe56d02236ec0747ad0 100644 (file)
@@ -4565,12 +4565,16 @@ add_option (struct options *options,
          if (!sub.ce.remote)
            {
              msg (msglevel, "Each 'connection' block must contain exactly one 'remote' directive");
+             uninit_options (&sub);
              goto err;
            }
 
          e = alloc_connection_entry (options, msglevel);
          if (!e)
-           goto err;
+           {
+             uninit_options (&sub);
+             goto err;
+           }
          *e = sub.ce;
          gc_transfer (&options->gc, &sub.gc);
          uninit_options (&sub);