All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Juergen Gross <jgross@suse.com>, Nicolas Pitre <nico@linaro.org>,
	Andi Kleen <ak@linux.intel.com>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	Jan Beulich <jbeulich@suse.com>,
	xen-devel <xen-devel@lists.xenproject.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] xen: hypercall: fix out-of-bounds memcpy
Date: Sat, 3 Feb 2018 16:12:26 +0100	[thread overview]
Message-ID: <CAK8P3a2AdziKXR=4LwMzUdoL2q2WXYZZz1uM9yh6VX2FbpqnnA@mail.gmail.com> (raw)
In-Reply-To: <aa6e25c7-dc55-a5bf-39cb-8b9453604111@oracle.com>

On Sat, Feb 3, 2018 at 12:33 AM, Boris Ostrovsky
<boris.ostrovsky@oracle.com> wrote:
> On 02/02/2018 10:32 AM, Arnd Bergmann wrote:
>> The legacy hypercall handlers were originally added with
>> a comment explaining that "copying the argument structures in
>> HYPERVISOR_event_channel_op() and HYPERVISOR_physdev_op() into the local
>> variable is sufficiently safe" and only made sure to not write
>> past the end of the argument structure, the checks in linux/string.h
>> disagree with that, when link-time optimizations are used:
>>
>> In function 'memcpy',
>>     inlined from 'pirq_query_unmask' at drivers/xen/fallback.c:53:2,
>>     inlined from '__startup_pirq' at drivers/xen/events/events_base.c:529:2,
>>     inlined from 'restore_pirqs' at drivers/xen/events/events_base.c:1439:3,
>>     inlined from 'xen_irq_resume' at drivers/xen/events/events_base.c:1581:2:
>> include/linux/string.h:350:3: error: call to '__read_overflow2' declared with attribute error: detected read beyond size of object passed as 2nd parameter
>>    __read_overflow2();
>>    ^
>> make[3]: *** [ccLujFNx.ltrans15.ltrans.o] Error 1
>> make[3]: Target 'all' not remade because of errors.
>> lto-wrapper: fatal error: make returned 2 exit status
>> compilation terminated.
>> ld: error: lto-wrapper failed
>>
>> This changes the functions so that each argument is accessed with
>> exactly the correct length based on the command code.
>>
>> Fixes: cf47a83fb06e ("xen/hypercall: fix hypercall fallback code for very old hypervisors")
>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>> ---
>>  drivers/xen/fallback.c | 94 ++++++++++++++++++++++++++++----------------------
>>  1 file changed, 53 insertions(+), 41 deletions(-)
>>

>>       default:
>> -             WARN_ON(rc != -ENOSYS);
>> -             break;
>> +             return -ENOSYS;
>>       }
>>
>> +     memcpy(&op.u, arg, len);
>> +     rc = _hypercall1(int, event_channel_op_compat, &op);
>> +     memcpy(arg, &op.u, len);
>
>
> We don't copy back for all commands, only those that are COPY_BACK.

Not sure what you mean. Is it harmful to copy back the data for the others
in any way? Otherwise I wouldn't micro-optimize this.

        Arnd

  parent reply	other threads:[~2018-02-03 15:12 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-02 15:32 [PATCH] xen: hypercall: fix out-of-bounds memcpy Arnd Bergmann
2018-02-02 15:53 ` Dan Carpenter
2018-02-02 15:53 ` Dan Carpenter
2018-02-02 16:11   ` Arnd Bergmann
2018-02-02 16:34     ` Dan Carpenter
2018-02-02 16:34     ` Dan Carpenter
2018-02-02 16:11   ` Arnd Bergmann
2018-02-02 23:33 ` Boris Ostrovsky
2018-02-03 15:12   ` Arnd Bergmann
2018-02-03 15:12   ` Arnd Bergmann [this message]
2018-02-03 17:08     ` Boris Ostrovsky
2018-02-04 15:35       ` Arnd Bergmann
2018-02-04 18:55         ` Boris Ostrovsky
2018-02-04 18:55         ` Boris Ostrovsky
2018-02-04 15:35       ` Arnd Bergmann
2018-02-03 17:08     ` Boris Ostrovsky
2018-02-05 12:11   ` David Laight
2018-02-05 12:11   ` David Laight
2018-02-05 12:37     ` Arnd Bergmann
2018-02-05 12:37     ` Arnd Bergmann
2018-02-05 13:58       ` David Laight
2018-02-05 14:18         ` Arnd Bergmann
2018-02-05 14:18         ` Arnd Bergmann
2018-02-05 13:58       ` David Laight
2018-02-02 23:33 ` Boris Ostrovsky
2018-02-02 15:32 Arnd Bergmann

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='CAK8P3a2AdziKXR=4LwMzUdoL2q2WXYZZz1uM9yh6VX2FbpqnnA@mail.gmail.com' \
    --to=arnd@arndb.de \
    --cc=ak@linux.intel.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=dan.carpenter@oracle.com \
    --cc=jbeulich@suse.com \
    --cc=jgross@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nico@linaro.org \
    --cc=xen-devel@lists.xenproject.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.