]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
fix realloc() error on reboot container
authorVitaly Lavrov <vel21ripn@gmail.com>
Thu, 27 Feb 2014 09:01:00 +0000 (13:01 +0400)
committerStéphane Graber <stgraber@ubuntu.com>
Thu, 27 Feb 2014 20:07:34 +0000 (15:07 -0500)
The container with "lxc.network.type=phys" halted with error on reboot.

Error message:
*** glibc detected *** lxc-start: realloc(): invalid pointer: 0x0948eed0 ***

We have a sequence:

1) conf->saved_nic = relloc(NULL) on start start.c:container save_phys_nics()
2) free(conf->saved_nics) after stop container
   conf.c:lxc_rename_phys_nics_on_shutdown()
3) conf->saved_nic = relloc(conf->saved_nics) on restart container
   start.c:save_phys_nics() -> error relloc()

free(conf->saved_nics) in lxc_rename_phys_nics_on_shutdown()
unnecessary, it will be called later in lxc_clear_saved_nics().

Signed-off-by: Vitaly Lavrov <vel21ripn@gmail.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
src/lxc/conf.c

index fc39897fe925f864f68ff63c8edcffef22465cbc..b6bc4142b4452c2dfe2bd46cc3d2188c83896bb3 100644 (file)
@@ -2565,7 +2565,6 @@ void lxc_rename_phys_nics_on_shutdown(struct lxc_conf *conf)
                free(s->orig_name);
        }
        conf->num_savednics = 0;
-       free(conf->saved_nics);
 }
 
 static char *default_rootfs_mount = LXCROOTFSMOUNT;
@@ -4075,11 +4074,10 @@ static void lxc_clear_saved_nics(struct lxc_conf *conf)
 {
        int i;
 
-       if (!conf->num_savednics)
+       if (!conf->saved_nics)
                return;
        for (i=0; i < conf->num_savednics; i++)
                free(conf->saved_nics[i].orig_name);
-       conf->saved_nics = 0;
        free(conf->saved_nics);
 }