Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 patches from Martin Schwidefsky:
"Included are bug fixes and a patch to enable system call filtering
with BPF."

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
s390/compat: fix mmap compat system calls
s390/compat: fix compat wrappers for process_vm system calls
s390: do not clobber personality flags in sys_32_personality()
s390/seccomp: add support for system call filtering using BPF
s390/sclp_sdias: Add missing break and "fall through"
s390/mm: remove MAX_PHYSADDR_BITS define

+26 -11
+1
arch/s390/Kconfig
··· 124 124 select GENERIC_TIME_VSYSCALL 125 125 select GENERIC_CLOCKEVENTS 126 126 select KTIME_SCALAR if 32BIT 127 + select HAVE_ARCH_SECCOMP_FILTER 127 128 128 129 config SCHED_OMIT_FRAME_POINTER 129 130 def_bool y
-2
arch/s390/include/asm/sparsemem.h
··· 4 4 #ifdef CONFIG_64BIT 5 5 6 6 #define SECTION_SIZE_BITS 28 7 - #define MAX_PHYSADDR_BITS 46 8 7 #define MAX_PHYSMEM_BITS 46 9 8 10 9 #else 11 10 12 11 #define SECTION_SIZE_BITS 25 13 - #define MAX_PHYSADDR_BITS 31 14 12 #define MAX_PHYSMEM_BITS 31 15 13 16 14 #endif /* CONFIG_64BIT */
+10
arch/s390/include/asm/syscall.h
··· 12 12 #ifndef _ASM_SYSCALL_H 13 13 #define _ASM_SYSCALL_H 1 14 14 15 + #include <linux/audit.h> 15 16 #include <linux/sched.h> 16 17 #include <linux/err.h> 17 18 #include <asm/ptrace.h> ··· 88 87 regs->orig_gpr2 = args[0]; 89 88 } 90 89 90 + static inline int syscall_get_arch(struct task_struct *task, 91 + struct pt_regs *regs) 92 + { 93 + #ifdef CONFIG_COMPAT 94 + if (test_tsk_thread_flag(task, TIF_31BIT)) 95 + return AUDIT_ARCH_S390; 96 + #endif 97 + return sizeof(long) == 8 ? AUDIT_ARCH_S390X : AUDIT_ARCH_S390; 98 + } 91 99 #endif /* _ASM_SYSCALL_H */
-2
arch/s390/kernel/compat_linux.c
··· 620 620 return -EFAULT; 621 621 if (a.offset & ~PAGE_MASK) 622 622 return -EINVAL; 623 - a.addr = (unsigned long) compat_ptr(a.addr); 624 623 return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, 625 624 a.offset >> PAGE_SHIFT); 626 625 } ··· 630 631 631 632 if (copy_from_user(&a, arg, sizeof(a))) 632 633 return -EFAULT; 633 - a.addr = (unsigned long) compat_ptr(a.addr); 634 634 return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset); 635 635 } 636 636
+2 -2
arch/s390/kernel/compat_wrapper.S
··· 1635 1635 llgfr %r6,%r6 # unsigned long 1636 1636 llgf %r0,164(%r15) # unsigned long 1637 1637 stg %r0,160(%r15) 1638 - jg sys_process_vm_readv 1638 + jg compat_sys_process_vm_readv 1639 1639 1640 1640 ENTRY(compat_sys_process_vm_writev_wrapper) 1641 1641 lgfr %r2,%r2 # compat_pid_t ··· 1645 1645 llgfr %r6,%r6 # unsigned long 1646 1646 llgf %r0,164(%r15) # unsigned long 1647 1647 stg %r0,160(%r15) 1648 - jg sys_process_vm_writev 1648 + jg compat_sys_process_vm_writev
+6 -1
arch/s390/kernel/ptrace.c
··· 719 719 long ret = 0; 720 720 721 721 /* Do the secure computing check first. */ 722 - secure_computing_strict(regs->gprs[2]); 722 + if (secure_computing(regs->gprs[2])) { 723 + /* seccomp failures shouldn't expose any additional code. */ 724 + ret = -1; 725 + goto out; 726 + } 723 727 724 728 /* 725 729 * The sysc_tracesys code in entry.S stored the system ··· 749 745 regs->gprs[2], regs->orig_gpr2, 750 746 regs->gprs[3], regs->gprs[4], 751 747 regs->gprs[5]); 748 + out: 752 749 return ret ?: regs->gprs[2]; 753 750 } 754 751
+5 -4
arch/s390/kernel/sys_s390.c
··· 81 81 { 82 82 unsigned int ret; 83 83 84 - if (current->personality == PER_LINUX32 && personality == PER_LINUX) 85 - personality = PER_LINUX32; 84 + if (personality(current->personality) == PER_LINUX32 && 85 + personality(personality) == PER_LINUX) 86 + personality |= PER_LINUX32; 86 87 ret = sys_personality(personality); 87 - if (ret == PER_LINUX32) 88 - ret = PER_LINUX; 88 + if (personality(ret) == PER_LINUX32) 89 + ret &= ~PER_LINUX32; 89 90 90 91 return ret; 91 92 }
+2
drivers/s390/char/sclp_sdias.c
··· 242 242 switch (sdias_evbuf.event_status) { 243 243 case EVSTATE_ALL_STORED: 244 244 TRACE("all stored\n"); 245 + break; 245 246 case EVSTATE_PART_STORED: 246 247 TRACE("part stored: %i\n", sdias_evbuf.blk_cnt); 247 248 break; 248 249 case EVSTATE_NO_DATA: 249 250 TRACE("no data\n"); 251 + /* fall through */ 250 252 default: 251 253 pr_err("Error from SCLP while copying hsa. " 252 254 "Event status = %x\n",