diff options
author | Vasily Gorbik <gor@linux.ibm.com> | 2017-11-17 18:44:28 +0100 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2018-10-09 11:21:24 +0200 |
commit | d58106c3ec9abcf2f9882171d6230eccfd6dc52e (patch) | |
tree | df49d5748482b08c2c96e17de5b58df20d21e3ec /arch/s390/boot/string.c | |
parent | 793213a82de4ccc96f394ea5deaaf57c0bb01f0b (diff) | |
download | kernel_replicant_linux-d58106c3ec9abcf2f9882171d6230eccfd6dc52e.tar.gz kernel_replicant_linux-d58106c3ec9abcf2f9882171d6230eccfd6dc52e.tar.bz2 kernel_replicant_linux-d58106c3ec9abcf2f9882171d6230eccfd6dc52e.zip |
s390/kasan: use noexec and large pages
To lower memory footprint and speed up kasan initialisation detect
EDAT availability and use large pages if possible. As we know how
much memory is needed for initialisation, another simplistic large
page allocator is introduced to avoid memory fragmentation.
Since facilities list is retrieved anyhow, detect noexec support and
adjust pages attributes. Handle noexec kernel option to avoid inconsistent
kasan shadow memory pages flags.
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/boot/string.c')
-rw-r--r-- | arch/s390/boot/string.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/arch/s390/boot/string.c b/arch/s390/boot/string.c index 09ca9130e73a..25aca07898ba 100644 --- a/arch/s390/boot/string.c +++ b/arch/s390/boot/string.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include <linux/ctype.h> #include <linux/kernel.h> +#include <linux/errno.h> #include "../lib/string.c" int strncmp(const char *cs, const char *ct, size_t count) @@ -98,3 +99,40 @@ long simple_strtol(const char *cp, char **endp, unsigned int base) return simple_strtoull(cp, endp, base); } + +int kstrtobool(const char *s, bool *res) +{ + if (!s) + return -EINVAL; + + switch (s[0]) { + case 'y': + case 'Y': + case '1': + *res = true; + return 0; + case 'n': + case 'N': + case '0': + *res = false; + return 0; + case 'o': + case 'O': + switch (s[1]) { + case 'n': + case 'N': + *res = true; + return 0; + case 'f': + case 'F': + *res = false; + return 0; + default: + break; + } + default: + break; + } + + return -EINVAL; +} |