From: Denys Vlasenko <vda.linux@googlemail.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Tejun Heo <tj@kernel.org>,
linux-kernel@vger.kernel.org, dvlasenk@redhat.com,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: [PATCH 1/2] ptrace: don't modify flags on PTRACE_SETOPTIONS failure
Date: Fri, 9 Sep 2011 08:24:37 +0200 [thread overview]
Message-ID: <201109090824.37366.vda.linux@googlemail.com> (raw)
In-Reply-To: <201109090822.30063.vda.linux@googlemail.com>
ptrace: don't modify flags on PTRACE_SETOPTIONS failure
On ptrace(PTRACE_SETOPTIONS, pid, 0, <opts>), we used to set
those option bits which are known, and then fail with -EINVAL
if there are some unknown bits in <opts>.
This in inconsistent with typical error handling, which
does not change any state if input is invalid.
This patch changes PTRACE_SETOPTIONS behavior so that
in this case, we return -EINVAL and don't change any bits
in task->ptrace.
It's very unlikely that there is userspace code in the wild which
will be affected by this change: it should have the form
ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_BOGUSOPT)
where PTRACE_O_BOGUSOPT is a constant unknown to the kernel.
But kernel headers, naturally, don't contain any
PTRACE_O_BOGUSOPTs, thus the only way userspace can use one
if it defines one itself. I can't see why anyone would do such
a thing deliberately.
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
---
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index 9de3ecf..02df3c1 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -509,6 +509,9 @@ int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long ds
static int ptrace_setoptions(struct task_struct *child, unsigned long data)
{
+ if (data & ~(unsigned long)PTRACE_O_MASK)
+ return -EINVAL;
+
child->ptrace &= ~PT_TRACE_MASK;
if (data & PTRACE_O_TRACESYSGOOD)
@@ -532,7 +535,7 @@ static int ptrace_setoptions(struct task_struct *child, unsigned long data)
if (data & PTRACE_O_TRACEEXIT)
child->ptrace |= PT_TRACE_EXIT;
- return (data & ~PTRACE_O_MASK) ? -EINVAL : 0;
+ return 0;
}
static int ptrace_getsiginfo(struct task_struct *child, siginfo_t *info)
next prev parent reply other threads:[~2011-09-09 6:24 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-09 6:22 [PATCH 0/2] Fixes and cleanups in PTRACE_SETOPTIONS Denys Vlasenko
2011-09-09 6:24 ` Denys Vlasenko [this message]
2011-09-09 6:29 ` [PATCH 2/2] ptrace: simplify PTRACE_foo constants and PTRACE_SETOPTIONS code Denys Vlasenko
2011-09-10 23:32 ` Tejun Heo
2011-09-09 12:44 ` [PATCH 1/2] ptrace: don't modify flags on PTRACE_SETOPTIONS failure Indan Zupancic
2011-09-09 12:58 ` Denys Vlasenko
2011-09-09 16:22 ` Indan Zupancic
2011-09-10 23:32 ` Tejun Heo
2011-09-09 15:28 ` [PATCH 0/2] Fixes and cleanups in PTRACE_SETOPTIONS Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201109090824.37366.vda.linux@googlemail.com \
--to=vda.linux@googlemail.com \
--cc=dvlasenk@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).