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