diff options
author | Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> | 2019-05-13 20:28:00 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-09-16 09:22:14 +0300 |
commit | cacbc85376b628c1d7d596de04783291c7372e1a (patch) | |
tree | 3028cc9a227c1ae4b763baed0d87352c4494e61d /lib/genalloc.c | |
parent | 7edfa9c99d215db6ef5df1038de5b36bcfa1bb63 (diff) | |
download | linux-cacbc85376b628c1d7d596de04783291c7372e1a.tar.xz |
ARC: mm: SIGSEGV userspace trying to access kernel virtual memory
[ Upstream commit a8c715b4dd73c26a81a9cc8dc792aa715d8b4bb2 ]
As of today if userspace process tries to access a kernel virtual addres
(0x7000_0000 to 0x7ffff_ffff) such that a legit kernel mapping already
exists, that process hangs instead of being killed with SIGSEGV
Fix that by ensuring that do_page_fault() handles kenrel vaddr only if
in kernel mode.
And given this, we can also simplify the code a bit. Now a vmalloc fault
implies kernel mode so its failure (for some reason) can reuse the
@no_context label and we can remove @bad_area_nosemaphore.
Reproduce user test for original problem:
------------------------>8-----------------
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char *argv[])
{
volatile uint32_t temp;
temp = *(uint32_t *)(0x70000000);
}
------------------------>8-----------------
Cc: <stable@vger.kernel.org>
Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'lib/genalloc.c')
0 files changed, 0 insertions, 0 deletions