s390 patches for 4.11-rc6
Subsystems (2)
Hi Linus,
please pull from the 'for-linus' branch of
git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git for-linus
to receive the following updates:
Four bug fixes, two of them for stable:
- Avoid initrd corruptions in the kernel decompressor
- Prevent inconsistent dumps if the boot CPU does not have address zero
- Fix the new pkey interface added with the merge window for 4.11
- A fix for a fix, another issue with user copy zero padding
Harald Freudenberger (1):
s390/pkey: Fix wrong handling of secure key with old MKVP
Heiko Carstens (2):
s390/smp: fix ipl from cpu with non-zero address s390/uaccess: get_user() should zero on failure (again)
Marcelo Henrique Cerri (1):
s390/decompressor: fix initrd corruption caused by bss clear
arch/s390/boot/compressed/misc.c | 35 ++++++++++++++------------ arch/s390/include/asm/uaccess.h | 2 +- arch/s390/kernel/smp.c | 5 ++-- drivers/s390/crypto/pkey_api.c | 53 ++++++++++++++++++++++++++-------------- 4 files changed, 56 insertions(+), 39 deletions(-)
arch/s390/boot/compressed/misc.c +19 -16
@@ -141,31 +141,34 @@ static void check_ipl_parmblock(void *start, unsigned long size)unsigned long decompress_kernel (void ) { -unsigned long output_addr; -unsigned char *output; +void *output, *kernel_end; - output_addr = ((unsigned long ) &_end +HEAP_SIZE +4095UL ) &-4096UL ; -check_ipl_parmblock ((void *)0 , output_addr + SZ__bss_start); -memset (&_bss,0 , &_ebss - &_bss); - free_mem_ptr = (unsigned long )&_end; - free_mem_end_ptr = free_mem_ptr +HEAP_SIZE ; - output = (unsigned char *) output_addr; + output = (void *)ALIGN ((unsigned long ) &_end +HEAP_SIZE ,PAGE_SIZE ); + kernel_end = output + SZ__bss_start; +check_ipl_parmblock ((void *)0 , (unsigned long ) kernel_end);#ifdef CONFIG_BLK_DEV_INITRD /* * Move the initrd right behind the end of the decompressed -* kernel image. +* kernel image. This also prevents initrd corruption caused by +* bss clearing since kernel_end will always be located behind the +* current bss section.. */ -if (INITRD_START &&INITRD_SIZE && -INITRD_START < (unsigned long ) output + SZ__bss_start) { -check_ipl_parmblock (output + SZ__bss_start, -INITRD_START +INITRD_SIZE ); -memmove (output + SZ__bss_start, - (void *)INITRD_START ,INITRD_SIZE ); -INITRD_START = (unsigned long ) output + SZ__bss_start; +if (INITRD_START &&INITRD_SIZE && kernel_end > (void *)INITRD_START ) { +check_ipl_parmblock (kernel_end,INITRD_SIZE ); +memmove (kernel_end, (void *)INITRD_START ,INITRD_SIZE ); +INITRD_START = (unsigned long ) kernel_end; }#endif +/* +* Clear bss section. free_mem_ptr and free_mem_end_ptr need to be +* initialized afterwards since they reside in bss. +*/ +memset (&_bss,0 , &_ebss - &_bss); + free_mem_ptr = (unsigned long ) &_end; + free_mem_end_ptr = free_mem_ptr +HEAP_SIZE ; +puts ("Uncompressing Linux... " );__decompress (input_data, input_len,NULL ,NULL , output,0 ,NULL , error);puts ("Ok, booting the kernel.\n" );
arch/s390/include/asm/uaccess.h +1 -1
@@ -147,7 +147,7 @@ unsigned long __must_check __copy_to_user(void __user *to, const void *from," jg 2b\n" \".popsection\n" \ EX_TABLE(0b,3b) EX_TABLE(1b,3b) \ - : "=d" (__rc), "=Q" (*(to)) \ + : "=d" (__rc), "+Q" (*(to)) \: " d" (size), " Q " (*(from)), \ " d" (__reg0), " K " (-EFAULT) \ : " cc"); \
arch/s390/kernel/smp.c +2 -3
@@ -909,13 +909,11 @@ void __init smp_prepare_boot_cpu(void) {struct pcpu *pcpu = pcpu_devices; +WARN_ON (!cpu_present (0 ) || !cpu_online (0 )); pcpu->state =CPU_STATE_CONFIGURED ; - pcpu->address =stap (); pcpu->lowcore = (struct lowcore *)(unsigned long )store_prefix (); S390_lowcore.percpu_offset = __per_cpu_offset[0 ];smp_cpu_set_polarization (0 ,POLARIZATION_UNKNOWN ); -set_cpu_present (0 , true); -set_cpu_online (0 , true); }void __init smp_cpus_done (unsigned int max_cpus)
@@ -924,6 +922,7 @@ void __init smp_cpus_done(unsigned int max_cpus)void __init smp_setup_processor_id (void ) { + pcpu_devices[0 ].address =stap (); S390_lowcore.cpu_nr =0 ; S390_lowcore.spinlock_lockval =arch_spin_lockval (0 ); }
drivers/s390/crypto/pkey_api.c +34 -19
136 lines not on this page · raw message