aboutsummaryrefslogtreecommitdiff
path: root/meta-linaro-integration/recipes-overlayed/linux-libc-headers/linux-libc-headers/0019-ptrace-Allow-compat-to-use-the-native-siginfo.patch
diff options
context:
space:
mode:
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.patch82
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
+