xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Ross Lagerwall <ross.lagerwall@citrix.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: sstabellini@kernel.org, Andrew Cooper <andrew.cooper3@citrix.com>,
	julien.grall@arm.com, Jan Beulich <jbeulich@suse.com>,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v5 06/16] livepatch: ARM/x86: Check displacement of old_addr and new_addr
Date: Wed, 28 Sep 2016 11:21:31 +0100	[thread overview]
Message-ID: <9fbf9aa2-23b7-f13d-1568-973e4dbfc3a5@citrix.com> (raw)
In-Reply-To: <20160923155930.GA2652@char.us.oracle.com>

On 09/23/2016 04:59 PM, Konrad Rzeszutek Wilk wrote:
> On Fri, Sep 23, 2016 at 11:37:27AM -0400, Konrad Rzeszutek Wilk wrote:
>> On Fri, Sep 23, 2016 at 03:36:27PM +0100, Ross Lagerwall wrote:
>>> On 09/21/2016 06:32 PM, Konrad Rzeszutek Wilk wrote:
>>>> If the distance is too big we are in trouble - as our relocation
>>>> distance can surely be clipped, or still have a valid width - but
>>>> cause an overflow of distance.
>>>>
>>>> On various architectures the maximum displacement for a unconditional
>>>> branch/jump varies. ARM32 is +/- 32MB, ARM64 is +/- 128MB while x86
>>>> for 32-bit relocations is +/- 2G.
>>>>
>>>> Note: On x86 we could use the 64-bit jmpq instruction which
>>>> would provide much bigger displacement to do a jump, but we would
>>>> still have issues with the new function not being able to reach
>>>> any of the old functions (as all the relocations would assume 32-bit
>>>> displacement). And "furthermore would require an register or
>>>> memory location to load/store the address to." (From Jan).
>>>>
>>>> On ARM the conditional branch supports even a smaller displacement
>>>> but fortunately we are not using that.
>>>
>>> Wouldn't this be simpler as a BUILD_BUG_ON() in arch_livepatch_init()?
>>>
>>> Something like BUILD_BUG_ON(((XEN_VIRT_END - NR_CPUS * PAGE_SIZE) -
>>> XEN_VIRT_START) > ARCH_LIVEPATCH_RANGE)?
>>>
>>> And BUILD_BUG_ON(((XEN_VIRT_END - NR_CPUS * PAGE_SIZE) - XEN_VIRT_START) >
>>> ARCH_LIVEPATCH_RANGE)
>>>
>>> And something similar for ARM...
>>
>> What does that have to with the payload? The displacement calculations(checks)
>> are done when we load the payload.
>
> Ooh, you are thinking of just making sure that the displacement in virtual
> addresses _should_ be OK.
>
> And that BUILD_BUG_ON would certainly do it.
>
> But my thinking was more of the payload either having some wacky relocations (say
> having an initial addendum that along with the XEN_VIRT_START -> XEN_VIRT_END)
> causes us to be way past the right place (especially with ARM32 where we only
> have 32MB distance). And having this extra check makes me sleep better at night.

Assuming that you had build checked the maximum possible displacement in 
virtual address space, then the only way a payload would fail the check 
is if either old_addr or new_addr doesn't point to hypervisor code or 
payload code (otherwise it would be in the range), but instead points to 
some other bit of memory. In that case, the payload is so completely 
broken you've got bigger problems...

There are many ways that payloads that can be broken. This checks only a 
special case of the payload being broken -- and only if the incorrect 
bit exceeds a certain range...


I don't really object to the check but it seems like an unnecessarily 
special case.

Cheers,
-- 
Ross Lagerwall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2016-09-28 10:21 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-21 17:32 [PATCH v5] Livepatch for ARM 64 and 32 Konrad Rzeszutek Wilk
2016-09-21 17:32 ` [PATCH v5 01/16] arm64: s/ALTERNATIVE/HAS_ALTERNATIVE/ Konrad Rzeszutek Wilk
2016-09-22 12:21   ` Julien Grall
2016-09-21 17:32 ` [PATCH v5 02/16] arm/x86/common: Add HAS_[ALTERNATIVE|EX_TABLE] Konrad Rzeszutek Wilk
2016-09-22 12:23   ` Julien Grall
2016-09-22 15:30   ` Ross Lagerwall
2016-09-21 17:32 ` [PATCH v5 03/16] livepatch: Reject payloads with .alternative or .ex_table if support is not built-in Konrad Rzeszutek Wilk
2016-09-23 12:47   ` Ross Lagerwall
2016-09-21 17:32 ` [PATCH v5 04/16] arm: poison initmem when it is freed Konrad Rzeszutek Wilk
2016-09-22 12:28   ` Julien Grall
2016-09-21 17:32 ` [PATCH v5 05/16] livepatch: Initial ARM64 support Konrad Rzeszutek Wilk
2016-09-22 12:49   ` Julien Grall
2016-09-23 13:38   ` Ross Lagerwall
2016-09-23 15:44     ` Konrad Rzeszutek Wilk
2016-09-27 16:42       ` Julien Grall
2016-09-21 17:32 ` [PATCH v5 06/16] livepatch: ARM/x86: Check displacement of old_addr and new_addr Konrad Rzeszutek Wilk
2016-09-22 12:55   ` Julien Grall
2016-09-23 14:36   ` Ross Lagerwall
2016-09-23 15:37     ` Konrad Rzeszutek Wilk
2016-09-23 15:59       ` Konrad Rzeszutek Wilk
2016-09-28 10:21         ` Ross Lagerwall [this message]
2016-09-21 17:32 ` [PATCH v5 07/16] livepatch: ARM 32|64: Ignore mapping symbols: $[d, a, x] Konrad Rzeszutek Wilk
2016-09-22 12:56   ` Julien Grall
2016-09-23 14:44   ` Ross Lagerwall
2016-09-23 16:13     ` Konrad Rzeszutek Wilk
2016-09-21 17:32 ` [PATCH v5 08/16] livepatch/arm/x86: Check payload for for unwelcomed symbols Konrad Rzeszutek Wilk
2016-09-22 13:00   ` Julien Grall
2016-09-23  1:29     ` Konrad Rzeszutek Wilk
2016-09-27  8:49       ` Ross Lagerwall
2016-09-23 14:49   ` Ross Lagerwall
2016-09-23 16:15     ` Konrad Rzeszutek Wilk
2016-09-21 17:32 ` [PATCH v5 09/16] livepatch: Move test-cases to their own sub-directory in test Konrad Rzeszutek Wilk
2016-09-22 13:01   ` Julien Grall
2016-09-23 14:51   ` Ross Lagerwall
2016-09-21 17:32 ` [PATCH v5 10/16] livepatch: x86, ARM, alternative: Expose FEATURE_LIVEPATCH Konrad Rzeszutek Wilk
2016-09-22 13:03   ` Julien Grall
2016-09-27  9:49   ` Ross Lagerwall
2016-09-21 17:32 ` [PATCH v5 11/16] livepatch: tests: Make them compile under ARM64 Konrad Rzeszutek Wilk
2016-09-22 13:10   ` Julien Grall
2016-09-22 19:26     ` Konrad Rzeszutek Wilk
2016-09-23  1:33     ` Konrad Rzeszutek Wilk
2016-09-23  9:50       ` Julien Grall
2016-09-27  9:49       ` Ross Lagerwall
2016-09-21 17:32 ` [PATCH v5 12/16] xen/arm32: Add an helper to invalidate all instruction caches Konrad Rzeszutek Wilk
2016-09-22 13:17   ` Julien Grall
2016-09-21 17:32 ` [PATCH v5 13/16] bug/x86/arm: Align bug_frames sections Konrad Rzeszutek Wilk
2016-09-21 17:32 ` [PATCH v5 14/16] livepatch: Initial ARM32 support Konrad Rzeszutek Wilk
2016-09-27 16:39   ` Julien Grall
2016-09-27 17:50     ` Konrad Rzeszutek Wilk
2016-09-27 23:13       ` Julien Grall
2016-09-21 17:32 ` [PATCH v5 15/16] livepatch, arm[32|64]: Share arch_livepatch_revert Konrad Rzeszutek Wilk
2016-09-23 14:59   ` Ross Lagerwall
2016-09-23 16:15     ` Konrad Rzeszutek Wilk
2016-09-21 17:32 ` [PATCH v5 16/16] livepatch: arm[32, 64], x86: NOP test-case Konrad Rzeszutek Wilk
2016-09-22 13:23   ` Julien Grall
2016-09-23  1:35     ` Konrad Rzeszutek Wilk
2016-09-23  9:53       ` Julien Grall

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=9fbf9aa2-23b7-f13d-1568-973e4dbfc3a5@citrix.com \
    --to=ross.lagerwall@citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@arm.com \
    --cc=konrad.wilk@oracle.com \
    --cc=sstabellini@kernel.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 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).