mtrr: prevent copy_from_user(to, from, -1) or (if that should succeed somehow) write to line[-1] (on stack); Signed-off-by: Randy Dunlap diffstat:= arch/i386/kernel/cpu/mtrr/if.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff -Naurp ./arch/i386/kernel/cpu/mtrr/if.c~mtrr_strlen ./arch/i386/kernel/cpu/mtrr/if.c --- ./arch/i386/kernel/cpu/mtrr/if.c~mtrr_strlen 2005-03-01 23:37:50.000000000 -0800 +++ ./arch/i386/kernel/cpu/mtrr/if.c 2005-03-15 20:02:35.000000000 -0800 @@ -98,16 +98,20 @@ mtrr_write(struct file *file, const char unsigned long long base, size; char *ptr; char line[LINE_SIZE]; + size_t linelen; if (!capable(CAP_SYS_ADMIN)) return -EPERM; + if (!len) + return -EINVAL; memset(line, 0, LINE_SIZE); if (len > LINE_SIZE) len = LINE_SIZE; if (copy_from_user(line, buf, len - 1)) return -EFAULT; - ptr = line + strlen(line) - 1; - if (*ptr == '\n') + linelen = strlen(line); + ptr = line + linelen - 1; + if (linelen && *ptr == '\n') *ptr = '\0'; if (!strncmp(line, "disable=", 8)) { reg = simple_strtoul(line + 8, &ptr, 0);