diff options
Diffstat (limited to 'meta-linaro-integration/recipes-overlayed/linux-libc-headers/linux-libc-headers/0019-ptrace-Allow-compat-to-use-the-native-siginfo.patch')
-rw-r--r-- | meta-linaro-integration/recipes-overlayed/linux-libc-headers/linux-libc-headers/0019-ptrace-Allow-compat-to-use-the-native-siginfo.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/meta-linaro-integration/recipes-overlayed/linux-libc-headers/linux-libc-headers/0019-ptrace-Allow-compat-to-use-the-native-siginfo.patch b/meta-linaro-integration/recipes-overlayed/linux-libc-headers/linux-libc-headers/0019-ptrace-Allow-compat-to-use-the-native-siginfo.patch new file mode 100644 index 00000000..5811e4eb --- /dev/null +++ b/meta-linaro-integration/recipes-overlayed/linux-libc-headers/linux-libc-headers/0019-ptrace-Allow-compat-to-use-the-native-siginfo.patch @@ -0,0 +1,82 @@ +From 13737c6712659357fde2e64fa6ed6830ea700dc0 Mon Sep 17 00:00:00 2001 +From: Andrew Pinski <apinski@cavium.com> +Date: Wed, 3 Sep 2014 14:19:13 -0700 +Subject: [PATCH 19/25] ptrace: Allow compat to use the native siginfo + +With ARM64 ILP32 ABI, we want to use the non-compat +siginfo as we want to simplify signal handling for this new ABI. +This patch just adds a new define COMPAT_USE_NATIVE_SIGINFO and +if it is true then read/write in the compat case as it was the +non-compat case. + +Signed-off-by: Andrew Pinski <apinski@cavium.com> +--- + include/linux/compat.h | 4 ++++ + kernel/ptrace.c | 25 ++++++++++++++++++------- + 2 files changed, 22 insertions(+), 7 deletions(-) + +diff --git a/include/linux/compat.h b/include/linux/compat.h +index e649426..2d8c535 100644 +--- a/include/linux/compat.h ++++ b/include/linux/compat.h +@@ -24,6 +24,10 @@ + #define COMPAT_USE_64BIT_TIME 0 + #endif + ++#ifndef COMPAT_USE_NATIVE_SIGINFO ++#define COMPAT_USE_NATIVE_SIGINFO 0 ++#endif ++ + #ifndef __SC_DELOUSE + #define __SC_DELOUSE(t,v) ((t)(unsigned long)(v)) + #endif +diff --git a/kernel/ptrace.c b/kernel/ptrace.c +index 54e7522..40ae023 100644 +--- a/kernel/ptrace.c ++++ b/kernel/ptrace.c +@@ -657,7 +657,7 @@ static int ptrace_peek_siginfo(struct task_struct *child, + break; + + #ifdef CONFIG_COMPAT +- if (unlikely(is_compat_task())) { ++ if (unlikely(is_compat_task() && !COMPAT_USE_NATIVE_SIGINFO)) { + compat_siginfo_t __user *uinfo = compat_ptr(data); + + if (copy_siginfo_to_user32(uinfo, &info) || +@@ -1126,16 +1126,27 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request, + + case PTRACE_GETSIGINFO: + ret = ptrace_getsiginfo(child, &siginfo); +- if (!ret) +- ret = copy_siginfo_to_user32( +- (struct compat_siginfo __user *) datap, +- &siginfo); ++ if (!ret) { ++ if (COMPAT_USE_NATIVE_SIGINFO) ++ ret = copy_siginfo_to_user( ++ (struct siginfo __user *) datap, ++ &siginfo); ++ else ++ ret = copy_siginfo_to_user32( ++ (struct compat_siginfo __user *) datap, ++ &siginfo); ++ } + break; + + case PTRACE_SETSIGINFO: + memset(&siginfo, 0, sizeof siginfo); +- if (copy_siginfo_from_user32( +- &siginfo, (struct compat_siginfo __user *) datap)) ++ if (COMPAT_USE_NATIVE_SIGINFO) ++ ret = copy_from_user(&siginfo, datap, sizeof(siginfo)); ++ else ++ ret = copy_siginfo_from_user32( ++ &siginfo, ++ (struct compat_siginfo __user *) datap); ++ if (ret) + ret = -EFAULT; + else + ret = ptrace_setsiginfo(child, &siginfo); +-- +1.9.3 + |