kconfig: Use more collision resistant temporary filenames
authorPatrick Georgi <patrick@georgi-clan.de>
Sat, 5 Nov 2011 13:39:56 +0000 (14:39 +0100)
committerStefan Reinauer <stefan.reinauer@coreboot.org>
Sun, 6 Nov 2011 17:25:29 +0000 (18:25 +0100)
kconfig creates reasonably safe filenames for its temporary files
except for two of them.

Change-Id: I6861f55ae2a5311e3fb7919333ce9af1e39ce78b
Signed-off-by: Patrick Georgi <patrick@georgi-clan.de>
Reviewed-on: http://review.coreboot.org/408
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
util/kconfig/confdata.c

index 946b8a9c0b476f45dd62a8a2d445ab40afda8705..79e0b359eaf1ac7af2e2bdecc8954d166cff1d06 100644 (file)
@@ -682,6 +682,7 @@ int conf_write_autoconf(void)
        FILE *out, *out_h;
        time_t now;
        int i, l;
+       char tmpname[128], tmpname_h[128];
 
        sym_clear_all_valid();
 
@@ -692,11 +693,13 @@ int conf_write_autoconf(void)
                return 1;
 #endif
 
-       out = fopen(".tmpconfig", "w");
+       sprintf(tmpname, ".tmpconfig.%d", (int)getpid());
+       out = fopen(tmpname, "w");
        if (!out)
                return 1;
 
-       out_h = fopen(".tmpconfig.h", "w");
+       sprintf(tmpname_h, ".tmpconfig.h.%d", (int)getpid());
+       out_h = fopen(tmpname_h, "w");
        if (!out_h) {
                fclose(out);
                return 1;
@@ -791,7 +794,7 @@ int conf_write_autoconf(void)
        if (!name)
                name = "include/linux/autoconf.h";
        UNLINK_IF_NECESSARY(name);
-       if (rename(".tmpconfig.h", name))
+       if (rename(tmpname_h, name))
                return 1;
        name = getenv("KCONFIG_AUTOCONFIG");
        if (!name)
@@ -801,7 +804,7 @@ int conf_write_autoconf(void)
         * and this marks the successful completion of the previous steps.
         */
        UNLINK_IF_NECESSARY(name);
-       if (rename(".tmpconfig", name))
+       if (rename(tmpname, name))
                return 1;
 
        return 0;