Re: [PATCH 6.6 32/91] s390/mm: Prevent lowcore vs identity mapping overlap

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Sep 16, 2024 at 01:44:08PM +0200, Greg Kroah-Hartman wrote:
> 6.6-stable review patch.  If anyone has any objections, please let me know.

Hi Greg,

Could you please drop this commit from 6.6-stable?

Thanks!

> ------------------
> 
> From: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
> 
> [ Upstream commit a3ca27c405faad584af6e8e38cdafe5be73230a1 ]
> 
> The identity mapping position in virtual memory is randomized
> together with the kernel mapping. That position can never
> overlap with the lowcore even when the lowcore is relocated.
> 
> Prevent overlapping with the lowcore to allow independent
> positioning of the identity mapping. With the current value
> of the alternative lowcore address of 0x70000 the overlap
> could happen in case the identity mapping is placed at zero.
> 
> This is a prerequisite for uncoupling of randomization base
> of kernel image and identity mapping in virtual memory.
> 
> Acked-by: Vasily Gorbik <gor@xxxxxxxxxxxxx>
> Signed-off-by: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
> Signed-off-by: Vasily Gorbik <gor@xxxxxxxxxxxxx>
> Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
> ---
>  arch/s390/kernel/setup.c | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
> index d48c7afe97e6..89fe0764af84 100644
> --- a/arch/s390/kernel/setup.c
> +++ b/arch/s390/kernel/setup.c
> @@ -741,7 +741,23 @@ static void __init memblock_add_physmem_info(void)
>  }
>  
>  /*
> - * Reserve memory used for lowcore/command line/kernel image.
> + * Reserve memory used for lowcore.
> + */
> +static void __init reserve_lowcore(void)
> +{
> +	void *lowcore_start = get_lowcore();
> +	void *lowcore_end = lowcore_start + sizeof(struct lowcore);
> +	void *start, *end;
> +
> +	if ((void *)__identity_base < lowcore_end) {
> +		start = max(lowcore_start, (void *)__identity_base);
> +		end = min(lowcore_end, (void *)(__identity_base + ident_map_size));
> +		memblock_reserve(__pa(start), __pa(end));
> +	}
> +}
> +
> +/*
> + * Reserve memory used for absolute lowcore/command line/kernel image.
>   */
>  static void __init reserve_kernel(void)
>  {
> @@ -939,6 +955,7 @@ void __init setup_arch(char **cmdline_p)
>  
>  	/* Do some memory reservations *before* memory is added to memblock */
>  	reserve_pgtables();
> +	reserve_lowcore();
>  	reserve_kernel();
>  	reserve_initrd();
>  	reserve_certificate_list();
> -- 
> 2.43.0




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux