From: Paul Burton <paul@archlinuxmips.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Riku Voipio <riku.voipio@iki.fi>,
QEMU Developers <qemu-devel@nongnu.org>,
Paul Burton <paul@archlinuxmips.org>
Subject: Re: [Qemu-devel] [PATCH] linux-user: fix ipc(SEMCTL, ...) argument handling
Date: Tue, 24 Jun 2014 00:06:02 +0100 [thread overview]
Message-ID: <20140623230602.GE4377@gmail.com> (raw)
In-Reply-To: <CAFEAcA8vhaBdD_Mhp6mTzuL4qsVc=eYSwcfh_4d++P-7iXAbDw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3052 bytes --]
On Mon, Jun 23, 2014 at 11:35:17PM +0100, Peter Maydell wrote:
> >> Have you checked this on other architectures than MIPS?
> >> I have a vague recollection that there are between-arch
> >> differences regarding handling of the semctl argument...
> >
> > I haven't tried running code for any other targets, but the pointer is
> > dereferenced from generic code in Linux, see ipc/syscall.c:
> >
> > http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/ipc/syscall.c#n39
>
> I see that code has a NULL pointer check which your patch doesn't...
True, a NULL pointer would lead to EFAULT with my patch where the kernel
will give EINVAL. I'll fix it.
> >> Also, VERIFY_READ doesn't seem right for some of the
> >> semctl operations which will modify the target_semun.
>
> > That part I think you're right about, I'll switch to VERIFY_WRITE.
>
> On the other hand that doesn't line up with the kernel code,
> which just does a get_user() of a single target_ulong and
> passes that to the sys_semctl function (which then might
> interpret it as a user pointer to a thing that needs locking
> and might be written to).
We've crossed emails, I just noted the same thing :)
> That would suggest that you
> should be using get_user_ual() here, passing an abi_ulong
> into do_semctl() and probably fixing up that function and its
> callers.
Well as far as I can tell the union will always be the size of a long
anyway, so I see no harm in using lock_user(_struct) as I did. I'll
switch if you insist, but the result will be the same.
> Basically I think the semctl code is probably buggy in a
> number of ways
Perhaps, I suspect you know better than I.
> and so I'm dubious about a patch that's
> trying to make a very small change to it
Isn't that precisely how good bisectable bug fixes should be made?
> without looking
> at the larger picture and testing and fixing bugs on more
> than one architecture.
I pointed you to the kernel code which dereferences the pointer & it's
quite clearly architecture neutral, so I'm not sure what you're getting
at with the architecture comment.
There's quite clearly a bug in QEMU here, and this patch fixes it. I
hope you're not saying you don't want it merged because it doesn't fix
some other hypothetical bugs in the same area.
> (http://patchwork.ozlabs.org/patch/217249/ is a previous
> attempt at fixing up semctl; on reflection I may have been
> wrong about the relevance of compat_sys_semctl, though.)
In terms of the compat_ wrappers, note that compat_sys_ipc also
dereferences the argument as a pointer:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/ipc/compat.c#n350
And that compat_sys_semctl does not. As far as I can see they both match
the behaviour of the non-compat versions with regards to this, so that
seems irrelevant.
I do agree that the patch you link to is wrong though, I'm guessing the
author had confused semctl(...) and ipc(SEMCTL, ...).
Thanks,
Paul
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2014-06-23 23:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-23 21:40 [Qemu-devel] [PATCH] linux-user: fix ipc(SEMCTL, ...) argument handling Paul Burton
2014-06-23 22:12 ` Peter Maydell
2014-06-23 22:18 ` Paul Burton
2014-06-23 22:35 ` Peter Maydell
2014-06-23 23:06 ` Paul Burton [this message]
2014-06-23 23:21 ` Peter Maydell
2014-06-23 23:53 ` Paul Burton
2014-06-24 8:19 ` Peter Maydell
2014-06-24 9:13 ` Paul Burton
2014-06-23 22:36 ` Paul Burton
2014-06-23 22:42 ` Peter Maydell
2014-06-23 23:10 ` Paul Burton
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=20140623230602.GE4377@gmail.com \
--to=paul@archlinuxmips.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
/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).