| From 5abf186a30a89d5b9c18a6bf93a2c192c9fd52f6 Mon Sep 17 00:00:00 2001 |
| From: Michal Hocko <mhocko@suse.com> |
| Date: Fri, 3 Feb 2017 13:13:29 -0800 |
| Subject: mm, fs: check for fatal signals in do_generic_file_read() |
| |
| From: Michal Hocko <mhocko@suse.com> |
| |
| commit 5abf186a30a89d5b9c18a6bf93a2c192c9fd52f6 upstream. |
| |
| do_generic_file_read() can be told to perform a large request from |
| userspace. If the system is under OOM and the reading task is the OOM |
| victim then it has an access to memory reserves and finishing the full |
| request can lead to the full memory depletion which is dangerous. Make |
| sure we rather go with a short read and allow the killed task to |
| terminate. |
| |
| Link: http://lkml.kernel.org/r/20170201092706.9966-3-mhocko@kernel.org |
| Signed-off-by: Michal Hocko <mhocko@suse.com> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> |
| Cc: Al Viro <viro@zeniv.linux.org.uk> |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| mm/filemap.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/mm/filemap.c |
| +++ b/mm/filemap.c |
| @@ -1703,6 +1703,11 @@ static ssize_t do_generic_file_read(stru |
| |
| cond_resched(); |
| find_page: |
| + if (fatal_signal_pending(current)) { |
| + error = -EINTR; |
| + goto out; |
| + } |
| + |
| page = find_get_page(mapping, index); |
| if (!page) { |
| page_cache_sync_readahead(mapping, |