From 9995df3638a3b3d98307804dce441f8cb0462059 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Fri, 1 Apr 2016 03:36:23 +0200 Subject: [PATCH] Fix use after free and memory leaks in init(8). Thanks to Tiago Silva and Shiz for noticing these issues. --- init/init.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/init/init.c b/init/init.c index 8ade1069..b27f8460 100644 --- a/init/init.c +++ b/init/init.c @@ -370,13 +370,13 @@ static void set_hostname(void) if ( !fp ) return warning("unable to set hostname: /etc/hostname: %m"); char* hostname = read_single_line(fp); + fclose(fp); if ( !hostname ) return warning("unable to set hostname: /etc/hostname: %m"); - fclose(fp); int ret = sethostname(hostname, strlen(hostname) + 1); - free(hostname); if ( ret < 0 ) - return warning("unable to set hostname: `%s': %m", hostname); + warning("unable to set hostname: `%s': %m", hostname); + free(hostname); } static void set_kblayout(void) @@ -387,9 +387,9 @@ static void set_kblayout(void) if ( !fp ) return warning("unable to set keyboard layout: /etc/kblayout: %m"); char* kblayout = read_single_line(fp); + fclose(fp); if ( !kblayout ) return warning("unable to set keyboard layout: /etc/kblayout: %m"); - fclose(fp); pid_t child_pid = fork(); if ( child_pid < 0 ) return warning("unable to set keyboard layout: fork: %m"); @@ -412,9 +412,9 @@ static void set_videomode(void) if ( !fp ) return warning("unable to set video mode: /etc/videomode: %m"); char* videomode = read_single_line(fp); + fclose(fp); if ( !videomode ) return warning("unable to set video mode: /etc/videomode: %m"); - fclose(fp); unsigned int xres = 0; unsigned int yres = 0; unsigned int bpp = 0;