* CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
@ 2024-05-17 13:23 Greg Kroah-Hartman
2024-05-23 11:14 ` Nikolay Borisov
0 siblings, 1 reply; 9+ messages in thread
From: Greg Kroah-Hartman @ 2024-05-17 13:23 UTC (permalink / raw)
To: linux-cve-announce; +Cc: Greg Kroah-Hartman
Description
===========
In the Linux kernel, the following vulnerability has been resolved:
x86/sev: Fix position dependent variable references in startup code
The early startup code executes from a 1:1 mapping of memory, which
differs from the mapping that the code was linked and/or relocated to
run at. The latter mapping is not active yet at this point, and so
symbol references that rely on it will fault.
Given that the core kernel is built without -fPIC, symbol references are
typically emitted as absolute, and so any such references occuring in
the early startup code will therefore crash the kernel.
While an attempt was made to work around this for the early SEV/SME
startup code, by forcing RIP-relative addressing for certain global
SEV/SME variables via inline assembly (see snp_cpuid_get_table() for
example), RIP-relative addressing must be pervasively enforced for
SEV/SME global variables when accessed prior to page table fixups.
__startup_64() already handles this issue for select non-SEV/SME global
variables using fixup_pointer(), which adjusts the pointer relative to a
`physaddr` argument. To avoid having to pass around this `physaddr`
argument across all functions needing to apply pointer fixups, introduce
a macro RIP_RELATIVE_REF() which generates a RIP-relative reference to
a given global variable. It is used where necessary to force
RIP-relative accesses to global variables.
For backporting purposes, this patch makes no attempt at cleaning up
other occurrences of this pattern, involving either inline asm or
fixup_pointer(). Those will be addressed later.
[ bp: Call it "rip_rel_ref" everywhere like other code shortens
"rIP-relative reference" and make the asm wrapper __always_inline. ]
The Linux kernel CVE team has assigned CVE-2024-35802 to this issue.
Affected and fixed versions
===========================
Fixed in 6.1.84 with commit fe272b61506b
Fixed in 6.6.24 with commit 0982fd6bf0b8
Fixed in 6.7.12 with commit 66fa3fcb474b
Fixed in 6.8.3 with commit 954a4a878144
Fixed in 6.9 with commit 1c811d403afd
Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.
Unaffected versions might change over time as fixes are backported to
older supported kernel versions. The official CVE entry at
https://cve.org/CVERecord/?id=CVE-2024-35802
will be updated if fixes are backported, please check that for the most
up to date information about this issue.
Affected files
==============
The file(s) affected by this issue are:
arch/x86/coco/core.c
arch/x86/include/asm/asm.h
arch/x86/include/asm/coco.h
arch/x86/include/asm/mem_encrypt.h
arch/x86/kernel/sev-shared.c
arch/x86/kernel/sev.c
arch/x86/mm/mem_encrypt_identity.c
Mitigation
==========
The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes. Individual
changes are never tested alone, but rather are part of a larger kernel
release. Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all. If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
https://git.kernel.org/stable/c/fe272b61506bb1534922ef07aa165fd3c37a6a90
https://git.kernel.org/stable/c/0982fd6bf0b822876f2e93ec782c4c28a3f85535
https://git.kernel.org/stable/c/66fa3fcb474b2b892fe42d455a6f7ec5aaa98fb9
https://git.kernel.org/stable/c/954a4a87814465ad61cc97c1cd3de1525baaaf07
https://git.kernel.org/stable/c/1c811d403afd73f04bde82b83b24c754011bd0e8
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
2024-05-17 13:23 CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code Greg Kroah-Hartman
@ 2024-05-23 11:14 ` Nikolay Borisov
2024-05-23 11:21 ` Greg Kroah-Hartman
2024-05-28 8:51 ` Michal Hocko
0 siblings, 2 replies; 9+ messages in thread
From: Nikolay Borisov @ 2024-05-23 11:14 UTC (permalink / raw)
To: cve, linux-kernel, linux-cve-announce; +Cc: Greg Kroah-Hartman
On 17.05.24 г. 16:23 ч., Greg Kroah-Hartman wrote:
> Description
> ===========
>
> In the Linux kernel, the following vulnerability has been resolved:
>
> x86/sev: Fix position dependent variable references in startup code
>
> The early startup code executes from a 1:1 mapping of memory, which
> differs from the mapping that the code was linked and/or relocated to
> run at. The latter mapping is not active yet at this point, and so
> symbol references that rely on it will fault.
>
> Given that the core kernel is built without -fPIC, symbol references are
> typically emitted as absolute, and so any such references occuring in
> the early startup code will therefore crash the kernel.
>
> While an attempt was made to work around this for the early SEV/SME
> startup code, by forcing RIP-relative addressing for certain global
> SEV/SME variables via inline assembly (see snp_cpuid_get_table() for
> example), RIP-relative addressing must be pervasively enforced for
> SEV/SME global variables when accessed prior to page table fixups.
>
> __startup_64() already handles this issue for select non-SEV/SME global
> variables using fixup_pointer(), which adjusts the pointer relative to a
> `physaddr` argument. To avoid having to pass around this `physaddr`
> argument across all functions needing to apply pointer fixups, introduce
> a macro RIP_RELATIVE_REF() which generates a RIP-relative reference to
> a given global variable. It is used where necessary to force
> RIP-relative accesses to global variables.
>
> For backporting purposes, this patch makes no attempt at cleaning up
> other occurrences of this pattern, involving either inline asm or
> fixup_pointer(). Those will be addressed later.
>
> [ bp: Call it "rip_rel_ref" everywhere like other code shortens
> "rIP-relative reference" and make the asm wrapper __always_inline. ]
>
> The Linux kernel CVE team has assigned CVE-2024-35802 to this issue.
I'd like to dispute this CVE since it doesn't constitute a security
related bug. Sure, it might crash a SEV guest during boot but it doesn't
constitute a security issue per-se.
>
>
> Affected and fixed versions
> ===========================
>
> Fixed in 6.1.84 with commit fe272b61506b
> Fixed in 6.6.24 with commit 0982fd6bf0b8
> Fixed in 6.7.12 with commit 66fa3fcb474b
> Fixed in 6.8.3 with commit 954a4a878144
> Fixed in 6.9 with commit 1c811d403afd
>
> Please see https://www.kernel.org for a full list of currently supported
> kernel versions by the kernel community.
>
> Unaffected versions might change over time as fixes are backported to
> older supported kernel versions. The official CVE entry at
> https://cve.org/CVERecord/?id=CVE-2024-35802
> will be updated if fixes are backported, please check that for the most
> up to date information about this issue.
>
>
> Affected files
> ==============
>
> The file(s) affected by this issue are:
> arch/x86/coco/core.c
> arch/x86/include/asm/asm.h
> arch/x86/include/asm/coco.h
> arch/x86/include/asm/mem_encrypt.h
> arch/x86/kernel/sev-shared.c
> arch/x86/kernel/sev.c
> arch/x86/mm/mem_encrypt_identity.c
>
>
> Mitigation
> ==========
>
> The Linux kernel CVE team recommends that you update to the latest
> stable kernel version for this, and many other bugfixes. Individual
> changes are never tested alone, but rather are part of a larger kernel
> release. Cherry-picking individual commits is not recommended or
> supported by the Linux kernel community at all. If however, updating to
> the latest release is impossible, the individual changes to resolve this
> issue can be found at these commits:
> https://git.kernel.org/stable/c/fe272b61506bb1534922ef07aa165fd3c37a6a90
> https://git.kernel.org/stable/c/0982fd6bf0b822876f2e93ec782c4c28a3f85535
> https://git.kernel.org/stable/c/66fa3fcb474b2b892fe42d455a6f7ec5aaa98fb9
> https://git.kernel.org/stable/c/954a4a87814465ad61cc97c1cd3de1525baaaf07
> https://git.kernel.org/stable/c/1c811d403afd73f04bde82b83b24c754011bd0e8
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
2024-05-23 11:14 ` Nikolay Borisov
@ 2024-05-23 11:21 ` Greg Kroah-Hartman
2024-05-23 12:01 ` Nikolay Borisov
2024-05-28 8:51 ` Michal Hocko
1 sibling, 1 reply; 9+ messages in thread
From: Greg Kroah-Hartman @ 2024-05-23 11:21 UTC (permalink / raw)
To: Nikolay Borisov; +Cc: cve, linux-kernel, linux-cve-announce
On Thu, May 23, 2024 at 02:14:57PM +0300, Nikolay Borisov wrote:
>
>
> On 17.05.24 г. 16:23 ч., Greg Kroah-Hartman wrote:
> > Description
> > ===========
> >
> > In the Linux kernel, the following vulnerability has been resolved:
> >
> > x86/sev: Fix position dependent variable references in startup code
> >
> > The early startup code executes from a 1:1 mapping of memory, which
> > differs from the mapping that the code was linked and/or relocated to
> > run at. The latter mapping is not active yet at this point, and so
> > symbol references that rely on it will fault.
> >
> > Given that the core kernel is built without -fPIC, symbol references are
> > typically emitted as absolute, and so any such references occuring in
> > the early startup code will therefore crash the kernel.
> >
> > While an attempt was made to work around this for the early SEV/SME
> > startup code, by forcing RIP-relative addressing for certain global
> > SEV/SME variables via inline assembly (see snp_cpuid_get_table() for
> > example), RIP-relative addressing must be pervasively enforced for
> > SEV/SME global variables when accessed prior to page table fixups.
> >
> > __startup_64() already handles this issue for select non-SEV/SME global
> > variables using fixup_pointer(), which adjusts the pointer relative to a
> > `physaddr` argument. To avoid having to pass around this `physaddr`
> > argument across all functions needing to apply pointer fixups, introduce
> > a macro RIP_RELATIVE_REF() which generates a RIP-relative reference to
> > a given global variable. It is used where necessary to force
> > RIP-relative accesses to global variables.
> >
> > For backporting purposes, this patch makes no attempt at cleaning up
> > other occurrences of this pattern, involving either inline asm or
> > fixup_pointer(). Those will be addressed later.
> >
> > [ bp: Call it "rip_rel_ref" everywhere like other code shortens
> > "rIP-relative reference" and make the asm wrapper __always_inline. ]
> >
> > The Linux kernel CVE team has assigned CVE-2024-35802 to this issue.
>
>
> I'd like to dispute this CVE since it doesn't constitute a security related
> bug. Sure, it might crash a SEV guest during boot but it doesn't constitute
> a security issue per-se.
Isn't crashing SEV guests a problem with "availability"? That term
comes from the CVE definition of what we need to mark as a CVE, which is
why this one was picked.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
2024-05-23 11:21 ` Greg Kroah-Hartman
@ 2024-05-23 12:01 ` Nikolay Borisov
2024-05-23 12:17 ` Greg Kroah-Hartman
0 siblings, 1 reply; 9+ messages in thread
From: Nikolay Borisov @ 2024-05-23 12:01 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: cve, linux-kernel
On 23.05.24 г. 14:21 ч., Greg Kroah-Hartman wrote:
> Isn't crashing SEV guests a problem with "availability"? That term
> comes from the CVE definition of what we need to mark as a CVE, which is
> why this one was picked.
But availability has never been one of the tenets of CoCo, in fact in
sev-snp/tdx the VMM is explicitly considered outside of the TCB so
availability cannot be guaranteed.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
2024-05-23 12:01 ` Nikolay Borisov
@ 2024-05-23 12:17 ` Greg Kroah-Hartman
2024-05-23 12:21 ` Nikolay Borisov
0 siblings, 1 reply; 9+ messages in thread
From: Greg Kroah-Hartman @ 2024-05-23 12:17 UTC (permalink / raw)
To: Nikolay Borisov; +Cc: cve, linux-kernel
On Thu, May 23, 2024 at 03:01:56PM +0300, Nikolay Borisov wrote:
>
>
> On 23.05.24 г. 14:21 ч., Greg Kroah-Hartman wrote:
> > Isn't crashing SEV guests a problem with "availability"? That term
> > comes from the CVE definition of what we need to mark as a CVE, which is
> > why this one was picked.
>
> But availability has never been one of the tenets of CoCo, in fact in
> sev-snp/tdx the VMM is explicitly considered outside of the TCB so
> availability cannot be guaranteed.
This has nothing to do with CoCo (but really, ability of the host to
crash the guest seems like it should be as I would assume that CoCo
guests would want to be able to be run...)
Official CVE definition of vulnerability from cve.org:
An instance of one or more weaknesses in a Product that can be
exploited, causing a negative impact to confidentiality, integrity, or
availability; a set of conditions or behaviors that allows the
violation of an explicit or implicit security policy.
I think "able to crash SEV guests" is a direct weakness that has to do
with availability here which is why I marked it as such (as did other
reviewers.) Now if CoCo wants to claim it as part of their security
implicit or explicit security policy, all the better :)
thanks,
greg k-h
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
2024-05-23 12:17 ` Greg Kroah-Hartman
@ 2024-05-23 12:21 ` Nikolay Borisov
2024-05-23 12:38 ` Greg Kroah-Hartman
0 siblings, 1 reply; 9+ messages in thread
From: Nikolay Borisov @ 2024-05-23 12:21 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: cve, linux-kernel
On 23.05.24 г. 15:17 ч., Greg Kroah-Hartman wrote:
> On Thu, May 23, 2024 at 03:01:56PM +0300, Nikolay Borisov wrote:
>>
>>
>> On 23.05.24 г. 14:21 ч., Greg Kroah-Hartman wrote:
>>> Isn't crashing SEV guests a problem with "availability"? That term
>>> comes from the CVE definition of what we need to mark as a CVE, which is
>>> why this one was picked.
>>
>> But availability has never been one of the tenets of CoCo, in fact in
>> sev-snp/tdx the VMM is explicitly considered outside of the TCB so
>> availability cannot be guaranteed.
>
> This has nothing to do with CoCo (but really, ability of the host to
> crash the guest seems like it should be as I would assume that CoCo
> guests would want to be able to be run...)
>
> Official CVE definition of vulnerability from cve.org:
> An instance of one or more weaknesses in a Product that can be
> exploited, causing a negative impact to confidentiality, integrity, or
I don't see how this is exactly "explotaible" i.e if a guest is run and
it crashes during bootup it simply won't run. Can this be considered
active exploitation of an issue?
> availability; a set of conditions or behaviors that allows the
> violation of an explicit or implicit security policy.
>
> I think "able to crash SEV guests" is a direct weakness that has to do
> with availability here which is why I marked it as such (as did other
> reviewers.) Now if CoCo wants to claim it as part of their security
> implicit or explicit security policy, all the better :)
>
> thanks,
>
> greg k-h
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
2024-05-23 12:21 ` Nikolay Borisov
@ 2024-05-23 12:38 ` Greg Kroah-Hartman
0 siblings, 0 replies; 9+ messages in thread
From: Greg Kroah-Hartman @ 2024-05-23 12:38 UTC (permalink / raw)
To: Nikolay Borisov; +Cc: cve, linux-kernel
On Thu, May 23, 2024 at 03:21:05PM +0300, Nikolay Borisov wrote:
>
>
> On 23.05.24 г. 15:17 ч., Greg Kroah-Hartman wrote:
> > On Thu, May 23, 2024 at 03:01:56PM +0300, Nikolay Borisov wrote:
> > >
> > >
> > > On 23.05.24 г. 14:21 ч., Greg Kroah-Hartman wrote:
> > > > Isn't crashing SEV guests a problem with "availability"? That term
> > > > comes from the CVE definition of what we need to mark as a CVE, which is
> > > > why this one was picked.
> > >
> > > But availability has never been one of the tenets of CoCo, in fact in
> > > sev-snp/tdx the VMM is explicitly considered outside of the TCB so
> > > availability cannot be guaranteed.
> >
> > This has nothing to do with CoCo (but really, ability of the host to
> > crash the guest seems like it should be as I would assume that CoCo
> > guests would want to be able to be run...)
> >
> > Official CVE definition of vulnerability from cve.org:
> > An instance of one or more weaknesses in a Product that can be
> > exploited, causing a negative impact to confidentiality, integrity, or
>
> I don't see how this is exactly "explotaible" i.e if a guest is run and it
> crashes during bootup it simply won't run. Can this be considered active
> exploitation of an issue?
Isn't preventing a guest from running something that causes a lack of
avaiability? Again, that's why we picked this commit, it keeps the
system from working properly as expected.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
2024-05-23 11:14 ` Nikolay Borisov
2024-05-23 11:21 ` Greg Kroah-Hartman
@ 2024-05-28 8:51 ` Michal Hocko
2024-05-28 19:08 ` Greg Kroah-Hartman
1 sibling, 1 reply; 9+ messages in thread
From: Michal Hocko @ 2024-05-28 8:51 UTC (permalink / raw)
To: Nikolay Borisov; +Cc: cve, linux-kernel, linux-cve-announce, Greg Kroah-Hartman
On Thu 23-05-24 14:14:57, Nikolay Borisov wrote:
[...]
> I'd like to dispute this CVE since it doesn't constitute a security related
> bug. Sure, it might crash a SEV guest during boot but it doesn't constitute
> a security issue per-se.
Let me add analysis by Joerg here:
: This is not a security issue. The patch works around clangs compiler behavior
: where it inserts absolute references to kernel addresses. This breaks kernel
: boot because at the time this code runs the kernel still runs direct-mapped and
: needs to rely on RIP-relative addressing only.
:
: Any breakage there would be detected at early boot of the kernel by a fatal
: crash, which can not be exploited. Also, our kernels are not compiled with
: clang, so from that perspective this is also not an issue for us either.
So this is a functional fix for clang builds.
--
Michal Hocko
SUSE Labs
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code
2024-05-28 8:51 ` Michal Hocko
@ 2024-05-28 19:08 ` Greg Kroah-Hartman
0 siblings, 0 replies; 9+ messages in thread
From: Greg Kroah-Hartman @ 2024-05-28 19:08 UTC (permalink / raw)
To: Michal Hocko; +Cc: Nikolay Borisov, cve, linux-kernel, linux-cve-announce
On Tue, May 28, 2024 at 10:51:52AM +0200, Michal Hocko wrote:
> On Thu 23-05-24 14:14:57, Nikolay Borisov wrote:
> [...]
> > I'd like to dispute this CVE since it doesn't constitute a security related
> > bug. Sure, it might crash a SEV guest during boot but it doesn't constitute
> > a security issue per-se.
>
> Let me add analysis by Joerg here:
> : This is not a security issue. The patch works around clangs compiler behavior
> : where it inserts absolute references to kernel addresses. This breaks kernel
> : boot because at the time this code runs the kernel still runs direct-mapped and
> : needs to rely on RIP-relative addressing only.
> :
> : Any breakage there would be detected at early boot of the kernel by a fatal
> : crash, which can not be exploited. Also, our kernels are not compiled with
> : clang, so from that perspective this is also not an issue for us either.
>
> So this is a functional fix for clang builds.
Thanks for the review, now rejected.
greg k-h
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-05-28 19:08 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-17 13:23 CVE-2024-35802: x86/sev: Fix position dependent variable references in startup code Greg Kroah-Hartman
2024-05-23 11:14 ` Nikolay Borisov
2024-05-23 11:21 ` Greg Kroah-Hartman
2024-05-23 12:01 ` Nikolay Borisov
2024-05-23 12:17 ` Greg Kroah-Hartman
2024-05-23 12:21 ` Nikolay Borisov
2024-05-23 12:38 ` Greg Kroah-Hartman
2024-05-28 8:51 ` Michal Hocko
2024-05-28 19:08 ` Greg Kroah-Hartman
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.