aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/um/include/user.h4
-rw-r--r--arch/um/kernel/umid.c11
2 files changed, 7 insertions, 8 deletions
diff --git a/arch/um/include/user.h b/arch/um/include/user.h
index 57ee9e261228..0f865ef46918 100644
--- a/arch/um/include/user.h
+++ b/arch/um/include/user.h
@@ -14,7 +14,9 @@ extern void *um_kmalloc_atomic(int size);
14extern void kfree(void *ptr); 14extern void kfree(void *ptr);
15extern int in_aton(char *str); 15extern int in_aton(char *str);
16extern int open_gdb_chan(void); 16extern int open_gdb_chan(void);
17extern int strlcpy(char *, const char *, int); 17/* These use size_t, however unsigned long is correct on both i386 and x86_64. */
18extern unsigned long strlcpy(char *, const char *, unsigned long);
19extern unsigned long strlcat(char *, const char *, unsigned long);
18extern void *um_vmalloc(int size); 20extern void *um_vmalloc(int size);
19extern void vfree(void *ptr); 21extern void vfree(void *ptr);
20 22
diff --git a/arch/um/kernel/umid.c b/arch/um/kernel/umid.c
index 251d277fff2a..0b21d59ba0cd 100644
--- a/arch/um/kernel/umid.c
+++ b/arch/um/kernel/umid.c
@@ -237,16 +237,13 @@ static int __init make_uml_dir(void)
237 strlcpy(dir, home, sizeof(dir)); 237 strlcpy(dir, home, sizeof(dir));
238 uml_dir++; 238 uml_dir++;
239 } 239 }
240 strlcat(dir, uml_dir, sizeof(dir));
240 len = strlen(dir); 241 len = strlen(dir);
241 strncat(dir, uml_dir, sizeof(dir) - len); 242 if (len > 0 && dir[len - 1] != '/')
242 len = strlen(dir); 243 strlcat(dir, "/", sizeof(dir));
243 if((len > 0) && (len < sizeof(dir) - 1) && (dir[len - 1] != '/')){
244 dir[len] = '/';
245 dir[len + 1] = '\0';
246 }
247 244
248 uml_dir = malloc(strlen(dir) + 1); 245 uml_dir = malloc(strlen(dir) + 1);
249 if(uml_dir == NULL){ 246 if (uml_dir == NULL) {
250 printf("make_uml_dir : malloc failed, errno = %d\n", errno); 247 printf("make_uml_dir : malloc failed, errno = %d\n", errno);
251 exit(1); 248 exit(1);
252 } 249 }