Message ID | 20190124163257.233929-4-james.morse@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix some KVM/HYP interactions with kprobes | expand |
On Thu, Jan 24, 2019 at 04:32:56PM +0000, James Morse wrote: > The hyp-stub is loaded by the kernel's early startup code at EL2 > during boot, before KVM takes ownership later. The hyp-stub's > text is part of the regular kernel text, meaning it can be kprobed. > > A breakpoint in the hyp-stub causes the CPU to spin in el2_sync_invalid. > > Add it to the __hyp_text. > > Signed-off-by: James Morse <james.morse@arm.com> > Cc: stable@vger.kernel.org > --- > > This has been a problem since kprobes was merged, it should > probably have been covered in 888b3c8720e0. > > I'm not sure __hyp_text is the right place. Its not idmaped, > and as it contains a set of vectors, adding it to the host/hyp > idmap sections could grow them beyond a page... but it does > run with the MMU off, so does need to be cleaned to PoC when > anything wacky, like hibernate happens. With this patch, > hibernate should clean the __hyp_text to PoC too. How did this code get cleaned before? Is there a problem you can identify with putting it in __hyp_text? Seems to me we should just stick it there if it has no negative side-effects and otherwise we have to make up a separate section with a specialized meaning. Thanks, Christoffer > --- > arch/arm64/kernel/hyp-stub.S | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S > index e1261fbaa374..17f325ba831e 100644 > --- a/arch/arm64/kernel/hyp-stub.S > +++ b/arch/arm64/kernel/hyp-stub.S > @@ -28,6 +28,8 @@ > #include <asm/virt.h> > > .text > + .pushsection .hyp.text, "ax" > + > .align 11 > > ENTRY(__hyp_stub_vectors) > -- > 2.20.1 >
Hi Christoffer, On 31/01/2019 08:04, Christoffer Dall wrote: > On Thu, Jan 24, 2019 at 04:32:56PM +0000, James Morse wrote: >> The hyp-stub is loaded by the kernel's early startup code at EL2 >> during boot, before KVM takes ownership later. The hyp-stub's >> text is part of the regular kernel text, meaning it can be kprobed. >> >> A breakpoint in the hyp-stub causes the CPU to spin in el2_sync_invalid. >> >> Add it to the __hyp_text. >> This has been a problem since kprobes was merged, it should >> probably have been covered in 888b3c8720e0. >> >> I'm not sure __hyp_text is the right place. Its not idmaped, >> and as it contains a set of vectors, adding it to the host/hyp >> idmap sections could grow them beyond a page... but it does >> run with the MMU off, so does need to be cleaned to PoC when >> anything wacky, like hibernate happens. With this patch, >> hibernate should clean the __hyp_text to PoC too. > > How did this code get cleaned before? It didn't need to be cleaned as KVM executes it with the MMU on. KVM's MMU-off code lives in the hyp_idmap, which is cleaned. (as is the kernel's idmap). The hibernate-cache-cleaning was trying to do the absolute minimum, but the hyp-stub got forgotten. > Is there a problem you can identify with putting it in __hyp_text? > Seems to me we should just stick it there if it has no negative > side-effects and otherwise we have to make up a separate section with a > specialized meaning. Yup, there is no problem with the extra cache-maintenance. The hyp-stub is the odd one out, its runtime code that runs with the MMU off, but isn't idmaped. I wasn't sure if we wanted to create some special section.(having to name it is a good enough reason not to!) Thanks, James
diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S index e1261fbaa374..17f325ba831e 100644 --- a/arch/arm64/kernel/hyp-stub.S +++ b/arch/arm64/kernel/hyp-stub.S @@ -28,6 +28,8 @@ #include <asm/virt.h> .text + .pushsection .hyp.text, "ax" + .align 11 ENTRY(__hyp_stub_vectors)
The hyp-stub is loaded by the kernel's early startup code at EL2 during boot, before KVM takes ownership later. The hyp-stub's text is part of the regular kernel text, meaning it can be kprobed. A breakpoint in the hyp-stub causes the CPU to spin in el2_sync_invalid. Add it to the __hyp_text. Signed-off-by: James Morse <james.morse@arm.com> Cc: stable@vger.kernel.org --- This has been a problem since kprobes was merged, it should probably have been covered in 888b3c8720e0. I'm not sure __hyp_text is the right place. Its not idmaped, and as it contains a set of vectors, adding it to the host/hyp idmap sections could grow them beyond a page... but it does run with the MMU off, so does need to be cleaned to PoC when anything wacky, like hibernate happens. With this patch, hibernate should clean the __hyp_text to PoC too. --- arch/arm64/kernel/hyp-stub.S | 2 ++ 1 file changed, 2 insertions(+)