| From a3761c3c91209b58b6f33bf69dd8bb8ec0c9d925 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= <jglisse@redhat.com> |
| Date: Wed, 10 Apr 2019 16:27:51 -0400 |
| Subject: block: do not leak memory in bio_copy_user_iov() |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Jérôme Glisse <jglisse@redhat.com> |
| |
| commit a3761c3c91209b58b6f33bf69dd8bb8ec0c9d925 upstream. |
| |
| When bio_add_pc_page() fails in bio_copy_user_iov() we should free |
| the page we just allocated otherwise we are leaking it. |
| |
| Cc: linux-block@vger.kernel.org |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: stable@vger.kernel.org |
| Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> |
| Signed-off-by: Jérôme Glisse <jglisse@redhat.com> |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| block/bio.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/block/bio.c |
| +++ b/block/bio.c |
| @@ -1238,8 +1238,11 @@ struct bio *bio_copy_user_iov(struct req |
| } |
| } |
| |
| - if (bio_add_pc_page(q, bio, page, bytes, offset) < bytes) |
| + if (bio_add_pc_page(q, bio, page, bytes, offset) < bytes) { |
| + if (!map_data) |
| + __free_page(page); |
| break; |
| + } |
| |
| len -= bytes; |
| offset = 0; |