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

Configure Feed

Select the types of activity you want to include in your feed.

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

Pull x86 fixes from Thomas Gleixner:
"A set of small fixes for x86:

- fix locking in RDT to prevent memory leaks and freeing in use
memory

- prevent setting invalid values for vdso32_enabled which cause
inconsistencies for user space resulting in application crashes.

- plug a race in the vdso32 code between fork and sysctl which causes
inconsistencies for user space resulting in application crashes.

- make MPX signal delivery work in compat mode

- make the dmesg output of traps and faults readable again"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/intel_rdt: Fix locking in rdtgroup_schemata_write()
x86/debug: Fix the printk() debug output of signal_fault(), do_trap() and do_general_protection()
x86/vdso: Plug race between mapping and ELF header setup
x86/vdso: Ensure vdso32_enabled gets set to valid values only
x86/signals: Fix lower/upper bound reporting in compat siginfo

+16 -9
+9 -2
arch/x86/entry/vdso/vdso32-setup.c
··· 30 30 { 31 31 vdso32_enabled = simple_strtoul(s, NULL, 0); 32 32 33 - if (vdso32_enabled > 1) 33 + if (vdso32_enabled > 1) { 34 34 pr_warn("vdso32 values other than 0 and 1 are no longer allowed; vdso disabled\n"); 35 + vdso32_enabled = 0; 36 + } 35 37 36 38 return 1; 37 39 } ··· 64 62 /* Register vsyscall32 into the ABI table */ 65 63 #include <linux/sysctl.h> 66 64 65 + static const int zero; 66 + static const int one = 1; 67 + 67 68 static struct ctl_table abi_table2[] = { 68 69 { 69 70 .procname = "vsyscall32", 70 71 .data = &vdso32_enabled, 71 72 .maxlen = sizeof(int), 72 73 .mode = 0644, 73 - .proc_handler = proc_dointvec 74 + .proc_handler = proc_dointvec_minmax, 75 + .extra1 = (int *)&zero, 76 + .extra2 = (int *)&one, 74 77 }, 75 78 {} 76 79 };
+1 -1
arch/x86/include/asm/elf.h
··· 287 287 288 288 #define ARCH_DLINFO_IA32 \ 289 289 do { \ 290 - if (vdso32_enabled) { \ 290 + if (VDSO_CURRENT_BASE) { \ 291 291 NEW_AUX_ENT(AT_SYSINFO, VDSO_ENTRY); \ 292 292 NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_CURRENT_BASE); \ 293 293 } \
+1 -1
arch/x86/kernel/cpu/intel_rdt_schemata.c
··· 200 200 } 201 201 202 202 out: 203 - rdtgroup_kn_unlock(of->kn); 204 203 for_each_enabled_rdt_resource(r) { 205 204 kfree(r->tmp_cbms); 206 205 r->tmp_cbms = NULL; 207 206 } 207 + rdtgroup_kn_unlock(of->kn); 208 208 return ret ?: nbytes; 209 209 } 210 210
+1 -1
arch/x86/kernel/signal.c
··· 846 846 task_pid_nr(current) > 1 ? KERN_INFO : KERN_EMERG, 847 847 me->comm, me->pid, where, frame, 848 848 regs->ip, regs->sp, regs->orig_ax); 849 - print_vma_addr(" in ", regs->ip); 849 + print_vma_addr(KERN_CONT " in ", regs->ip); 850 850 pr_cont("\n"); 851 851 } 852 852
+2 -2
arch/x86/kernel/signal_compat.c
··· 151 151 152 152 if (from->si_signo == SIGSEGV) { 153 153 if (from->si_code == SEGV_BNDERR) { 154 - compat_uptr_t lower = (unsigned long)&to->si_lower; 155 - compat_uptr_t upper = (unsigned long)&to->si_upper; 154 + compat_uptr_t lower = (unsigned long)from->si_lower; 155 + compat_uptr_t upper = (unsigned long)from->si_upper; 156 156 put_user_ex(lower, &to->si_lower); 157 157 put_user_ex(upper, &to->si_upper); 158 158 }
+2 -2
arch/x86/kernel/traps.c
··· 255 255 pr_info("%s[%d] trap %s ip:%lx sp:%lx error:%lx", 256 256 tsk->comm, tsk->pid, str, 257 257 regs->ip, regs->sp, error_code); 258 - print_vma_addr(" in ", regs->ip); 258 + print_vma_addr(KERN_CONT " in ", regs->ip); 259 259 pr_cont("\n"); 260 260 } 261 261 ··· 519 519 pr_info("%s[%d] general protection ip:%lx sp:%lx error:%lx", 520 520 tsk->comm, task_pid_nr(tsk), 521 521 regs->ip, regs->sp, error_code); 522 - print_vma_addr(" in ", regs->ip); 522 + print_vma_addr(KERN_CONT " in ", regs->ip); 523 523 pr_cont("\n"); 524 524 } 525 525