From dba13606c5ad1c666b6a59c45fea2d75483ab6e9 Mon Sep 17 00:00:00 2001 From: Alistair Delva Date: Thu, 22 Aug 2019 16:53:55 -0700 Subject: [PATCH] Revert "um: remove uses of variable length arrays" This reverts commit 0d4e5ac7e78035950d564e65c38ce148cb9af681. Reason: Broke UML used by kernel_tests Bug: 139897923 Change-Id: Ibf57c1f535e60caaef32dd14c4abbe253d8e185d Signed-off-by: Alistair Delva --- arch/um/os-Linux/umid.c | 36 +++++++++--------------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/arch/um/os-Linux/umid.c b/arch/um/os-Linux/umid.c index e261656fe9d7..998fbb445458 100644 --- a/arch/um/os-Linux/umid.c +++ b/arch/um/os-Linux/umid.c @@ -135,18 +135,12 @@ out: */ static inline int is_umdir_used(char *dir) { - char pid[sizeof("nnnnn\0")], *end, *file; + char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")]; + char pid[sizeof("nnnnn\0")], *end; int dead, fd, p, n, err; - size_t filelen; - err = asprintf(&file, "%s/pid", dir); - if (err < 0) - return 0; - - filelen = strlen(file); - - n = snprintf(file, filelen, "%s/pid", dir); - if (n >= filelen) { + n = snprintf(file, sizeof(file), "%s/pid", dir); + if (n >= sizeof(file)) { printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n"); err = -E2BIG; goto out; @@ -191,7 +185,6 @@ static inline int is_umdir_used(char *dir) out_close: close(fd); out: - free(file); return 0; } @@ -217,21 +210,18 @@ static int umdir_take_if_dead(char *dir) static void __init create_pid_file(void) { - char pid[sizeof("nnnnn\0")], *file; + char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")]; + char pid[sizeof("nnnnn\0")]; int fd, n; - file = malloc(strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")); - if (!file) - return; - if (umid_file_name("pid", file, sizeof(file))) - goto out; + return; fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644); if (fd < 0) { printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: " "%s\n", file, strerror(errno)); - goto out; + return; } snprintf(pid, sizeof(pid), "%d\n", getpid()); @@ -241,8 +231,6 @@ static void __init create_pid_file(void) errno); close(fd); -out: - free(file); } int __init set_umid(char *name) @@ -397,19 +385,13 @@ __uml_setup("uml_dir=", set_uml_dir, static void remove_umid_dir(void) { - char *dir, err; - - dir = malloc(strlen(uml_dir) + UMID_LEN + 1); - if (!dir) - return; + char dir[strlen(uml_dir) + UMID_LEN + 1], err; sprintf(dir, "%s%s", uml_dir, umid); err = remove_files_and_dir(dir); if (err) os_warn("%s - remove_files_and_dir failed with err = %d\n", __func__, err); - - free(dir); } __uml_exitcall(remove_umid_dir);