From: James Morse <james.morse@arm.com>
To: Michael Ellerman <mpe@ellerman.id.au>,
Zhou Chengming <zhouchengming1@huawei.com>
Cc: linux-kernel@vger.kernel.org, Andrey Vagin <avagin@openvz.org>,
Roland McGrath <roland@hack.frob.com>,
Oleg Nesterov <oleg@redhat.com>,
Yury Norov <ynorov@caviumnetworks.com>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] ptrace: Add compat PTRACE_{G,S}ETSIGMASK handlers
Date: Mon, 17 Jul 2017 16:54:25 +0100 [thread overview]
Message-ID: <596CDDB1.8010502@arm.com> (raw)
In-Reply-To: <87k2371i68.fsf@concordia.ellerman.id.au>
Hi Michael,
On 17/07/17 11:17, Michael Ellerman wrote:
> James Morse <james.morse@arm.com> writes:
>> compat_ptrace_request() lacks handlers for PTRACE_{G,S}ETSIGMASK,
>> instead using those in ptrace_request(). The compat variant should
>> read a compat_sigset_t from userspace instead of ptrace_request()s
>> sigset_t.
>>
>> While compat_sigset_t is the same size as sigset_t, it is defined as
>> 2xu32, instead of a single u64. On a big-endian CPU this means that
>> compat_sigset_t is passed to user-space using middle-endianness,
>> where the least-significant u32 is written most significant byte
>> first.
>>
>> If ptrace_request()s code is used userspace will read the most
>> significant u32 where it expected the least significant.
>
> But that's what the code has done since 2013.
> So won't changing this break userspace that has been written to work
> around that bug?
Wouldn't the same program then be broken when run natively instead? To work
around it userspace would have to know it was running under compat instead of
natively.
This only affects this exotic ptrace API for big-endian compat users. I think
there are so few users that no-one has noticed its broken.
I'm only aware of CRIU using this[0], and it doesn't look like powerpc has to
support compat-criu users:
https://github.com/xemul/criu/tree/master/compel/arch
only has a ppc64 entry, for which
https://github.com/xemul/criu/blob/master/compel/arch/ppc64/plugins/include/asm/syscall-types.h
puts 'bits per word' as 64, I don't think it supports ppc32, which is where this
bug would be seen.
> Or do we think nothing actually uses it in the wild and
> we can get away with it?
I think only Zhou Chengming has hit this, and there is no 'in the wild' code
that actually inspects the buffer returned by the call.
Zhou, were you using criu on big-endian ilp32 when you found this? Or was it
some other project that uses this API..
(ilp32 is a second user of compat on arm64)
Thanks,
James
[0]
The commit message that added this code points to CRIU and GDB. GDB doesn't use
this API. Debian's codesearch (which obviously isn't exhaustive) only finds CRIU
and systemtap making these calls.
It looks like criu just save/restores the sigset_t as a blob:
https://sources.debian.net/src/criu/2.12.1-2/criu/parasite-syscall.c/?hl=92#L92
It's sigset_t helpers aren't aware of this bug:
https://github.com/xemul/criu/blob/master/compel/include/uapi/ksigset.h
Systemtap just makes some calls as part of a self test:
https://sources.debian.net/src/systemtap/3.1-2/testsuite/systemtap.syscall/ptrace.c/?hl=198#L198
next prev parent reply other threads:[~2017-07-17 16:05 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-29 16:26 [PATCH] ptrace: Add compat PTRACE_{G,S}ETSIGMASK handlers James Morse
2017-07-05 20:34 ` Andrei Vagin
2017-07-10 8:31 ` Yury Norov
2017-07-10 16:24 ` Oleg Nesterov
2017-07-17 10:17 ` Michael Ellerman
2017-07-17 15:54 ` James Morse [this message]
2017-07-19 12:33 ` Michael Ellerman
2017-10-13 21:07 ` Yury Norov
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=596CDDB1.8010502@arm.com \
--to=james.morse@arm.com \
--cc=avagin@openvz.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=oleg@redhat.com \
--cc=roland@hack.frob.com \
--cc=ynorov@caviumnetworks.com \
--cc=zhouchengming1@huawei.com \
/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).