diff options
author | Jeff Dike <jdike@addtoit.com> | 2006-06-30 04:55:54 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-30 14:25:37 -0400 |
commit | c2b7a4bb30008dc256d63802e02b6fb950958443 (patch) | |
tree | 355e20a2295099dad5878c2034d39739e984d9d1 /arch/um/os-Linux | |
parent | dd673bca474a199fb8d1b6a311832592977ecb5f (diff) |
[PATCH] uml: fix /proc/mounts parsing boundary condition
When parsing /proc/mounts looking for a tmpfs mount on /dev/shm, if a string
that we are looking for if split across reads, then it won't be recognized.
Fix this by refilling the buffer whenever we advance the cursor.
Signed-off-by: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/um/os-Linux')
-rw-r--r-- | arch/um/os-Linux/mem.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/um/os-Linux/mem.c b/arch/um/os-Linux/mem.c index c6432e729241..d24d1a960523 100644 --- a/arch/um/os-Linux/mem.c +++ b/arch/um/os-Linux/mem.c | |||
@@ -55,7 +55,7 @@ static void __init find_tempdir(void) | |||
55 | */ | 55 | */ |
56 | static int next(int fd, char *buf, int size, char c) | 56 | static int next(int fd, char *buf, int size, char c) |
57 | { | 57 | { |
58 | int n; | 58 | int n, len; |
59 | char *ptr; | 59 | char *ptr; |
60 | 60 | ||
61 | while((ptr = strchr(buf, c)) == NULL){ | 61 | while((ptr = strchr(buf, c)) == NULL){ |
@@ -69,7 +69,17 @@ static int next(int fd, char *buf, int size, char c) | |||
69 | } | 69 | } |
70 | 70 | ||
71 | ptr++; | 71 | ptr++; |
72 | memmove(buf, ptr, strlen(ptr) + 1); | 72 | len = strlen(ptr); |
73 | memmove(buf, ptr, len + 1); | ||
74 | |||
75 | /* Refill the buffer so that if there's a partial string that we care | ||
76 | * about, it will be completed, and we can recognize it. | ||
77 | */ | ||
78 | n = read(fd, &buf[len], size - len - 1); | ||
79 | if(n < 0) | ||
80 | return -errno; | ||
81 | |||
82 | buf[len + n] = '\0'; | ||
73 | return 1; | 83 | return 1; |
74 | } | 84 | } |
75 | 85 | ||