diff options
author | Bartosz Golaszewski <bgolaszewski@baylibre.com> | 2019-04-11 05:49:42 -0400 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2019-05-07 17:18:28 -0400 |
commit | 0d4e5ac7e78035950d564e65c38ce148cb9af681 (patch) | |
tree | 9fb0db982a614a81981afef8dca37515bfcf9e38 /arch/um | |
parent | 4b6b4c902947cae374593e601400a7bdd3d7f7a4 (diff) |
um: remove uses of variable length arrays
While the affected code is run in user-mode, the build still warns
about it. Convert all uses of VLA to dynamic allocations.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/os-Linux/umid.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/arch/um/os-Linux/umid.c b/arch/um/os-Linux/umid.c index 998fbb445458..e261656fe9d7 100644 --- a/arch/um/os-Linux/umid.c +++ b/arch/um/os-Linux/umid.c | |||
@@ -135,12 +135,18 @@ out: | |||
135 | */ | 135 | */ |
136 | static inline int is_umdir_used(char *dir) | 136 | static inline int is_umdir_used(char *dir) |
137 | { | 137 | { |
138 | char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")]; | 138 | char pid[sizeof("nnnnn\0")], *end, *file; |
139 | char pid[sizeof("nnnnn\0")], *end; | ||
140 | int dead, fd, p, n, err; | 139 | int dead, fd, p, n, err; |
140 | size_t filelen; | ||
141 | 141 | ||
142 | n = snprintf(file, sizeof(file), "%s/pid", dir); | 142 | err = asprintf(&file, "%s/pid", dir); |
143 | if (n >= sizeof(file)) { | 143 | if (err < 0) |
144 | return 0; | ||
145 | |||
146 | filelen = strlen(file); | ||
147 | |||
148 | n = snprintf(file, filelen, "%s/pid", dir); | ||
149 | if (n >= filelen) { | ||
144 | printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n"); | 150 | printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n"); |
145 | err = -E2BIG; | 151 | err = -E2BIG; |
146 | goto out; | 152 | goto out; |
@@ -185,6 +191,7 @@ static inline int is_umdir_used(char *dir) | |||
185 | out_close: | 191 | out_close: |
186 | close(fd); | 192 | close(fd); |
187 | out: | 193 | out: |
194 | free(file); | ||
188 | return 0; | 195 | return 0; |
189 | } | 196 | } |
190 | 197 | ||
@@ -210,18 +217,21 @@ static int umdir_take_if_dead(char *dir) | |||
210 | 217 | ||
211 | static void __init create_pid_file(void) | 218 | static void __init create_pid_file(void) |
212 | { | 219 | { |
213 | char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")]; | 220 | char pid[sizeof("nnnnn\0")], *file; |
214 | char pid[sizeof("nnnnn\0")]; | ||
215 | int fd, n; | 221 | int fd, n; |
216 | 222 | ||
217 | if (umid_file_name("pid", file, sizeof(file))) | 223 | file = malloc(strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")); |
224 | if (!file) | ||
218 | return; | 225 | return; |
219 | 226 | ||
227 | if (umid_file_name("pid", file, sizeof(file))) | ||
228 | goto out; | ||
229 | |||
220 | fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644); | 230 | fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644); |
221 | if (fd < 0) { | 231 | if (fd < 0) { |
222 | printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: " | 232 | printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: " |
223 | "%s\n", file, strerror(errno)); | 233 | "%s\n", file, strerror(errno)); |
224 | return; | 234 | goto out; |
225 | } | 235 | } |
226 | 236 | ||
227 | snprintf(pid, sizeof(pid), "%d\n", getpid()); | 237 | snprintf(pid, sizeof(pid), "%d\n", getpid()); |
@@ -231,6 +241,8 @@ static void __init create_pid_file(void) | |||
231 | errno); | 241 | errno); |
232 | 242 | ||
233 | close(fd); | 243 | close(fd); |
244 | out: | ||
245 | free(file); | ||
234 | } | 246 | } |
235 | 247 | ||
236 | int __init set_umid(char *name) | 248 | int __init set_umid(char *name) |
@@ -385,13 +397,19 @@ __uml_setup("uml_dir=", set_uml_dir, | |||
385 | 397 | ||
386 | static void remove_umid_dir(void) | 398 | static void remove_umid_dir(void) |
387 | { | 399 | { |
388 | char dir[strlen(uml_dir) + UMID_LEN + 1], err; | 400 | char *dir, err; |
401 | |||
402 | dir = malloc(strlen(uml_dir) + UMID_LEN + 1); | ||
403 | if (!dir) | ||
404 | return; | ||
389 | 405 | ||
390 | sprintf(dir, "%s%s", uml_dir, umid); | 406 | sprintf(dir, "%s%s", uml_dir, umid); |
391 | err = remove_files_and_dir(dir); | 407 | err = remove_files_and_dir(dir); |
392 | if (err) | 408 | if (err) |
393 | os_warn("%s - remove_files_and_dir failed with err = %d\n", | 409 | os_warn("%s - remove_files_and_dir failed with err = %d\n", |
394 | __func__, err); | 410 | __func__, err); |
411 | |||
412 | free(dir); | ||
395 | } | 413 | } |
396 | 414 | ||
397 | __uml_exitcall(remove_umid_dir); | 415 | __uml_exitcall(remove_umid_dir); |