[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <8aedf3db-d1a5-4cc6-974b-a3d9fffe4f52@arm.com>
Date: Wed, 11 Dec 2024 14:35:28 +0100
From: Kevin Brodsky <kevin.brodsky@....com>
To: Peter Zijlstra <peterz@...radead.org>
Cc: linux-hardening@...r.kernel.org, linux-kernel@...r.kernel.org,
aruna.ramakrishna@...cle.com, broonie@...nel.org, catalin.marinas@....com,
dave.hansen@...ux.intel.com, jannh@...gle.com, jeffxu@...omium.org,
joey.gouly@....com, kees@...nel.org, maz@...nel.org,
pierre.langlois@....com, qperret@...gle.com, ryan.roberts@....com,
will@...nel.org, linux-arm-kernel@...ts.infradead.org, x86@...nel.org
Subject: Re: [RFC PATCH 12/16] arm64: mm: Map p4d/pgd with privileged pkey
On 10/12/2024 13:23, Peter Zijlstra wrote:
> On Tue, Dec 10, 2024 at 10:27:56AM +0100, Kevin Brodsky wrote:
>> On 09/12/2024 11:24, Peter Zijlstra wrote:
>>> On Fri, Dec 06, 2024 at 10:11:06AM +0000, Kevin Brodsky wrote:
>>>> If CONFIG_KPKEYS_HARDENED_PGTABLES is enabled, map p4d/pgd pages
>>>> using a privileged pkey (KPKEYS_PKEY_PGTABLES), so that they can
>>>> only be written under guard(kpkeys_hardened_pgtables).
>>>>
>>>> The case where pgd is not page-sized is not currently handled -
>>>> this is pending support for pkeys in kmem_cache.
>>>>
>>>> This patch is a no-op if CONFIG_KPKEYS_HARDENED_PGTABLES is disabled
>>>> (default).
>>> Should not this live in pagetable_*_[cd]tor() in generic code?
>> This would certainly be preferable but it doesn't look like such helpers
>> exist for p4d/pgd. For p4d, we could potentially handle this in the
>> generic __p4d_alloc(), but I'm not sure we can assume that
>> p4d_alloc_one() won't be called from somewhere else. pgd_alloc() is
>> entirely arch-specific so not much we can do there.
> Can't we add the missing pagetable_{p4d,pgd}_[cd]tor() functions. Yes,
> it will mean touching a bunch of arch code, but it shouldn't be hard.
It does look doable. The p4d level shouldn't be an issue, it's unclear
why it doesn't follow the same pattern as pud already. pgd will be more
involved (no generic layer at all) but as you say it should just be
about some churn in arch code.
An extra complication is that the pgd level may be smaller than a page,
at least on arm64 (see pgd_alloc() in arch/arm64/mm/pgd.c). I suppose
affected architectures will have to define their own pgd_alloc_one().
I'll give it a try and post something separately if it looks sensible.
- Kevin
Powered by blists - more mailing lists