On 01/04/18 at 03:54pm, Alexander Kuleshov wrote:
> we align minimal possible address during randomization to 
> CONFIG_PHYSICAL_ALIGN
> two times: during getting of random physical address and virtual
> address (only for x86_64).
> 
> Let's move this to choose_random_location() to not duplicate code in
> find_random_virt_addr() and find_random_phys_addr().
> 
> Signed-off-by: Alexander Kuleshov <[email protected]>
> ---
>  arch/x86/boot/compressed/kaslr.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/x86/boot/compressed/kaslr.c 
> b/arch/x86/boot/compressed/kaslr.c
> index 8199a6187251..8c93e399fdfd 100644
> --- a/arch/x86/boot/compressed/kaslr.c
> +++ b/arch/x86/boot/compressed/kaslr.c
> @@ -673,9 +673,6 @@ static unsigned long find_random_phys_addr(unsigned long 
> minimum,
>               return 0;
>       }
>  
> -     /* Make sure minimum is aligned. */
> -     minimum = ALIGN(minimum, CONFIG_PHYSICAL_ALIGN);
> -
>       if (process_efi_entries(minimum, image_size))
>               return slots_fetch_random();
>  
> @@ -688,8 +685,6 @@ static unsigned long find_random_virt_addr(unsigned long 
> minimum,
>  {
>       unsigned long slots, random_addr;
>  
> -     /* Make sure minimum is aligned. */
> -     minimum = ALIGN(minimum, CONFIG_PHYSICAL_ALIGN);
>       /* Align image_size for easy slot calculations. */
>       image_size = ALIGN(image_size, CONFIG_PHYSICAL_ALIGN);
>  
> @@ -738,6 +733,9 @@ void choose_random_location(unsigned long input,
>        */
>       min_addr = min(*output, 512UL << 20);
>  
> +     /* Make sure minimum is aligned. */
> +     min_addr = ALIGN(min_addr, CONFIG_PHYSICAL_ALIGN);

Hmm, the min_addr is passed to find_random_phys_addr(), but not to
find_random_virt_addr().

> +
>       /* Walk available memory entries to find a random address. */
>       random_addr = find_random_phys_addr(min_addr, output_size);
>       if (!random_addr) {
> -- 
> 2.14.3
> 

Reply via email to