Commit 991721572ef2140c6411894aebefd3377e71a9e7
Committed by
Linus Torvalds
1 parent
16070428d3
Exists in
master
and in
7 other branches
[PATCH] Fix missing ret assignment in __bio_map_user() error path
If get_user_pages() returns less pages than what we asked for, we jump to out_unmap which will return ERR_PTR(ret). But ret can contain a positive number just smaller than local_nr_pages, so be sure to set it to -EFAULT always. Problem found and diagnosed by Damien Le Moal <damien@sdl.hitachi.co.jp> Signed-off-by: Jens Axboe <axboe@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Showing 1 changed file with 3 additions and 2 deletions Side-by-side Diff
fs/bio.c
... | ... | @@ -654,9 +654,10 @@ |
654 | 654 | write_to_vm, 0, &pages[cur_page], NULL); |
655 | 655 | up_read(¤t->mm->mmap_sem); |
656 | 656 | |
657 | - if (ret < local_nr_pages) | |
657 | + if (ret < local_nr_pages) { | |
658 | + ret = -EFAULT; | |
658 | 659 | goto out_unmap; |
659 | - | |
660 | + } | |
660 | 661 | |
661 | 662 | offset = uaddr & ~PAGE_MASK; |
662 | 663 | for (j = cur_page; j < page_limit; j++) { |