All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: James Morse <james.morse@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	Kees Cook <keescook@chromium.org>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Kristina Martsenko <kristina.martsenko@arm.com>,
	Dave Martin <Dave.Martin@arm.com>,
	Mark Brown <broonie@kernel.org>,
	Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>,
	Amit Kachhap <amit.kachhap@arm.com>,
	Vincenzo Frascino <Vincenzo.Frascino@arm.com>,
	Will Deacon <will@kernel.org>, Ard Biesheuvel <ardb@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v6 00/18] arm64: return address signing
Date: Thu, 12 Mar 2020 17:31:36 +0000	[thread overview]
Message-ID: <87945e6110511caaceeb3f1294b6f88f@kernel.org> (raw)
In-Reply-To: <bd76de32-12c5-fcbe-25d2-c501f9491bee@arm.com>

Hi James,

On 2020-03-12 17:26, James Morse wrote:
> Hi Amit, Marc,
> 
> On 12/03/2020 15:05, Marc Zyngier wrote:
>> On 2020-03-12 13:21, Amit Kachhap wrote:
>>> On 3/12/20 6:17 PM, Marc Zyngier wrote:
>>>> On 2020-03-12 08:06, Amit Kachhap wrote:
>>>>> On 3/12/20 12:23 PM, Amit Kachhap wrote:
>>>>>> On 3/11/20 2:58 PM, James Morse wrote:
>>>>>>> On 3/6/20 6:35 AM, Amit Daniel Kachhap wrote:
>>>>>>>> This series improves function return address protection for the 
>>>>>>>> arm64 kernel, by
>>>>>>>> compiling the kernel with ARMv8.3 Pointer Authentication 
>>>>>>>> instructions (referred
>>>>>>>> ptrauth hereafter). This should help protect the kernel against 
>>>>>>>> attacks using
>>>>>>>> return-oriented programming.
>>>>>>> 
>>>>>>> (as it looks like there may be another version of this:)
>>>>>>> 
>>>>>>> Am I right in thinking that after your patch 10 changing
>>>>>>> cpu_switch_to(), only the A key is live during kernel execution?
>>>>>> 
>>>>>> Yes
> 
>>>>>>> KVM is still save/restoring 4 extra keys around guest-entry/exit. 
>>>>>>> As you
>>>>>>> restore all the keys on return to user-space, is this still 
>>>>>>> necessary?
>>>>>> 
>>>>>> Yes Its a good optimization to skip 4 non-A keys. I was wondering 
>>>>>> whether to do it in
>>>>>> this series or send it separately.
>>>>> 
>>>>> I suppose we can only skip non-A keys save/restore for host 
>>>>> context. If
>>>>> we skip non-A keys for guest context then guest with old 
>>>>> implementation
>>>>> will break. Let me know your opinion.
>>>> 
>>>> I don't think you can skip anything as far as the guest is 
>>>> concerned.
>>>> But being able to skip the B keys (which is what I expect you call 
>>>> the
>>>> non-A keys) on the host would certainly be useful.
> 
>> But if KVM doesn't save/restore the host's B-keys in the world switch,
>> then you must make sure that no host userspace can make use of them,
>> as they would be the guest's keys.
> 
> Yes, the arch code entry.S changes cover this with
> ptrauth_keys_install_user. It restores
> 4 keys, and the generic key.
> 
> 
> We always need to save/restore all the guest keys (as we do today).
> But when ptrauth_restore_state restores the host keys, it only needs
> to restore the one
> the kernel uses. (possibly using the same macro's so it stays up to 
> date?!)
> 
> If we return to user-space, the arch code's entry code does the right 
> thing.
> KVM's user-space peeking at the keys will see the saved values.
> 
> 
> My original question was more around: do we need to do this now, or
> can we clean it up in
> a later kernel version?
> 
> (and a sanity check that it doesn't lead to a correctness problem)

I think what we have now is sane, and doesn't seem to lead to any
issue (at least that I can see). We can always optimize this at a
later point.

Thanks,

        M.
-- 
Jazz is not dead. It just smells funny...

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

      reply	other threads:[~2020-03-12 17:31 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-06  6:35 [PATCH v6 00/18] arm64: return address signing Amit Daniel Kachhap
2020-03-06  6:35 ` [PATCH v6 01/18] arm64: cpufeature: Fix meta-capability cpufeature check Amit Daniel Kachhap
2020-03-10 10:59   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 02/18] arm64: cpufeature: add pointer auth meta-capabilities Amit Daniel Kachhap
2020-03-10 11:18   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 03/18] arm64: rename ptrauth key structures to be user-specific Amit Daniel Kachhap
2020-03-10 11:35   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 04/18] arm64: install user ptrauth keys at kernel exit time Amit Daniel Kachhap
2020-03-06 19:07   ` James Morse
2020-03-10 11:48     ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 05/18] arm64: create macro to park cpu in an infinite loop Amit Daniel Kachhap
2020-03-10 12:02   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 06/18] arm64: ptrauth: Add bootup/runtime flags for __cpu_setup Amit Daniel Kachhap
2020-03-06 19:07   ` James Morse
2020-03-09 17:04     ` Catalin Marinas
2020-03-10 12:14   ` Vincenzo Frascino
2020-03-11  9:28     ` Amit Kachhap
2020-03-06  6:35 ` [PATCH v6 07/18] arm64: cpufeature: Move cpu capability helpers inside C file Amit Daniel Kachhap
2020-03-10 12:20   ` Vincenzo Frascino
2020-03-10 12:53     ` Amit Kachhap
2020-03-11 10:50       ` Catalin Marinas
2020-03-11 11:44         ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 08/18] arm64: cpufeature: handle conflicts based on capability Amit Daniel Kachhap
2020-03-10 12:31   ` Vincenzo Frascino
2020-03-11 11:03     ` Catalin Marinas
2020-03-11 11:46       ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 09/18] arm64: enable ptrauth earlier Amit Daniel Kachhap
2020-03-10 15:45   ` Vincenzo Frascino
2020-03-11  6:26     ` Amit Kachhap
2020-03-11 10:26       ` Vincenzo Frascino
2020-03-11 10:46         ` Amit Kachhap
2020-03-11 10:49           ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 10/18] arm64: initialize and switch ptrauth kernel keys Amit Daniel Kachhap
2020-03-10 15:07   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 11/18] arm64: initialize ptrauth keys for kernel booting task Amit Daniel Kachhap
2020-03-10 15:09   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 12/18] arm64: mask PAC bits of __builtin_return_address Amit Daniel Kachhap
2020-03-06 19:07   ` James Morse
2020-03-09 12:27     ` Amit Kachhap
2020-03-06  6:35 ` [PATCH v6 13/18] arm64: unwind: strip PAC from kernel addresses Amit Daniel Kachhap
2020-03-09 19:03   ` James Morse
2020-03-10 12:28     ` Amit Kachhap
2020-03-10 17:37       ` James Morse
2020-03-11  6:07         ` Amit Kachhap
2020-03-11  9:09           ` James Morse
2020-03-06  6:35 ` [PATCH v6 14/18] arm64: __show_regs: strip PAC from lr in printk Amit Daniel Kachhap
2020-03-10 15:11   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 15/18] arm64: suspend: restore the kernel ptrauth keys Amit Daniel Kachhap
2020-03-10 15:18   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 16/18] kconfig: Add support for 'as-option' Amit Daniel Kachhap
2020-03-06  6:35   ` Amit Daniel Kachhap
2020-03-06 11:37   ` Masahiro Yamada
2020-03-06 11:37     ` Masahiro Yamada
2020-03-06 11:49     ` Vincenzo Frascino
2020-03-06 11:49       ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 17/18] arm64: compile the kernel with ptrauth return address signing Amit Daniel Kachhap
2020-03-10 15:20   ` Vincenzo Frascino
2020-03-06  6:35 ` [PATCH v6 18/18] lkdtm: arm64: test kernel pointer authentication Amit Daniel Kachhap
2020-03-10 15:59 ` [PATCH v6 00/18] arm64: return address signing Rémi Denis-Courmont
2020-03-11  9:28 ` James Morse
2020-03-12  6:53   ` Amit Kachhap
2020-03-12  8:06     ` Amit Kachhap
2020-03-12 12:47       ` [PATCH v6 00/18] (as long a Marc Zyngier
2020-03-12 13:21         ` Amit Kachhap
2020-03-12 15:05           ` [PATCH v6 00/18] arm64: return address signing Marc Zyngier
2020-03-12 17:26             ` James Morse
2020-03-12 17:31               ` Marc Zyngier [this message]

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=87945e6110511caaceeb3f1294b6f88f@kernel.org \
    --to=maz@kernel.org \
    --cc=Dave.Martin@arm.com \
    --cc=Vincenzo.Frascino@arm.com \
    --cc=amit.kachhap@arm.com \
    --cc=ardb@kernel.org \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=james.morse@arm.com \
    --cc=keescook@chromium.org \
    --cc=kristina.martsenko@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    --cc=ramana.radhakrishnan@arm.com \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.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.