Commit | Line | Data |
---|---|---|
f75b1b1b RW |
1 | /* |
2 | * Copyright (C) 2013 Richard Weinberger <richrd@nod.at> | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License version 2 as | |
6 | * published by the Free Software Foundation. | |
7 | */ | |
8 | ||
9 | #include <linux/uaccess.h> | |
10 | #include <linux/kernel.h> | |
11 | #include <os.h> | |
12 | ||
13 | long probe_kernel_read(void *dst, const void *src, size_t size) | |
14 | { | |
15 | void *psrc = (void *)rounddown((unsigned long)src, PAGE_SIZE); | |
16 | ||
17 | if ((unsigned long)src < PAGE_SIZE || size <= 0) | |
18 | return -EFAULT; | |
19 | ||
20 | if (os_mincore(psrc, size + src - psrc) <= 0) | |
21 | return -EFAULT; | |
22 | ||
23 | return __probe_kernel_read(dst, src, size); | |
24 | } |