Re: [RFC PATCH] x86/head_64.S: remove redundant check that kernel address is 2M aligned

2016-01-22 Thread Alexander Kuleshov
Hello Brian,

On 01-22-16, Brian Gerst wrote:
> >
> > -   /* Is the address not 2M aligned? */
> > -   movq%rbp, %rax
> > -   andl$~PMD_PAGE_MASK, %eax
> > -   testl   %eax, %eax
> > -   jnz bad_address
> > -
> > /*
> >  * Is the address too large?
> >  */
> 
> I think we still need to do the check, in case we came from a 64-bit
> bootloader that directly jumped to startup_64.  However, this check
> can be simplified to:
> 
> testl $~PMD_PAGE_MASK, %ebp
> jnz bad_address

Ah, ok, in this way we can't trust a bootloader. I just thought that
64-bit entry point is startup_64 from arch/x86/boot/compressed/head_64.S

Thank you.


Re: [RFC PATCH] x86/head_64.S: remove redundant check that kernel address is 2M aligned

2016-01-22 Thread Brian Gerst
On Fri, Jan 22, 2016 at 1:13 PM, Alexander Kuleshov
 wrote:
> We check that the base address of the kernel is 2M aligned in
> the arch/x86/kernel/head_65.S right after jump to the decompressed
> kernel. But we already have a check in the decompress_kernel()
> which validates that kernel location is MIN_KERNEL_ALIGN aligned
> which is 2M too for x86_64.
>
> Signed-off-by: Alexander Kuleshov 
> ---
>  arch/x86/kernel/head_64.S | 6 --
>  1 file changed, 6 deletions(-)
>
> diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
> index ffdc0e8..4967cba 100644
> --- a/arch/x86/kernel/head_64.S
> +++ b/arch/x86/kernel/head_64.S
> @@ -75,12 +75,6 @@ startup_64:
> leaq_text(%rip), %rbp
> subq$_text - __START_KERNEL_map, %rbp
>
> -   /* Is the address not 2M aligned? */
> -   movq%rbp, %rax
> -   andl$~PMD_PAGE_MASK, %eax
> -   testl   %eax, %eax
> -   jnz bad_address
> -
> /*
>  * Is the address too large?
>  */

I think we still need to do the check, in case we came from a 64-bit
bootloader that directly jumped to startup_64.  However, this check
can be simplified to:

testl $~PMD_PAGE_MASK, %ebp
jnz bad_address

--
Brian Gerst


[RFC PATCH] x86/head_64.S: remove redundant check that kernel address is 2M aligned

2016-01-22 Thread Alexander Kuleshov
We check that the base address of the kernel is 2M aligned in
the arch/x86/kernel/head_65.S right after jump to the decompressed
kernel. But we already have a check in the decompress_kernel()
which validates that kernel location is MIN_KERNEL_ALIGN aligned
which is 2M too for x86_64.

Signed-off-by: Alexander Kuleshov 
---
 arch/x86/kernel/head_64.S | 6 --
 1 file changed, 6 deletions(-)

diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index ffdc0e8..4967cba 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -75,12 +75,6 @@ startup_64:
leaq_text(%rip), %rbp
subq$_text - __START_KERNEL_map, %rbp
 
-   /* Is the address not 2M aligned? */
-   movq%rbp, %rax
-   andl$~PMD_PAGE_MASK, %eax
-   testl   %eax, %eax
-   jnz bad_address
-
/*
 * Is the address too large?
 */
-- 
2.7.0.25.gfc10eb5