summaryrefslogtreecommitdiffstats
path: root/block/elevator.c
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2020-03-07 18:38:49 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-04-02 15:28:21 +0200
commitbf204158a8a66fe8bd1da65d23906b87d26bfccf (patch)
tree4a21b10d09bb102ec693d0be8c3fbbb0a586d1bd /block/elevator.c
parenteed7257a5cbfd97164c5a6e4e81581de08eac3a1 (diff)
downloadlinux-stable-bf204158a8a66fe8bd1da65d23906b87d26bfccf.tar.gz
linux-stable-bf204158a8a66fe8bd1da65d23906b87d26bfccf.tar.bz2
linux-stable-bf204158a8a66fe8bd1da65d23906b87d26bfccf.zip
libfs: fix infoleak in simple_attr_read()
commit a65cab7d7f05c2061a3e2490257d3086ff3202c6 upstream. Reading from a debugfs file at a nonzero position, without first reading at position 0, leaks uninitialized memory to userspace. It's a bit tricky to do this, since lseek() and pread() aren't allowed on these files, and write() doesn't update the position on them. But writing to them with splice() *does* update the position: #define _GNU_SOURCE 1 #include <fcntl.h> #include <stdio.h> #include <unistd.h> int main() { int pipes[2], fd, n, i; char buf[32]; pipe(pipes); write(pipes[1], "0", 1); fd = open("/sys/kernel/debug/fault_around_bytes", O_RDWR); splice(pipes[0], NULL, fd, NULL, 1, 0); n = read(fd, buf, sizeof(buf)); for (i = 0; i < n; i++) printf("%02x", buf[i]); printf("\n"); } Output: 5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a30 Fix the infoleak by making simple_attr_read() always fill simple_attr::get_buf if it hasn't been filled yet. Reported-by: syzbot+fcab69d1ada3e8d6f06b@syzkaller.appspotmail.com Reported-by: Alexander Potapenko <glider@google.com> Fixes: acaefc25d21f ("[PATCH] libfs: add simple attribute files") Cc: stable@vger.kernel.org Signed-off-by: Eric Biggers <ebiggers@google.com> Acked-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20200308023849.988264-1-ebiggers@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'block/elevator.c')
0 files changed, 0 insertions, 0 deletions