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:
"This set of updates contains:

- Another bugfix for the pathologic vm86 machinery. Clear
thread.vm86 on fork to prevent corrupting the parent state. This
comes along with an update to the vm86 selftest case

- Fix another corner case in the ioapic setup code which causes a
boot crash on some oddball systems

- Fix the fallout from the dma allocation consolidation work, which
leads to a NULL pointer dereference when the allocation code is
called with a NULL device"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/vm86: Set thread.vm86 to NULL on fork/clone
selftests/x86: Add a fork() to entry_from_vm86 to catch fork bugs
x86/ioapic: Prevent NULL pointer dereference in setup_ioapic_dest()
x86/dma-mapping: Fix arch_dma_alloc_attrs() oops with NULL dev

+13 -3
+3 -1
arch/x86/kernel/apic/io_apic.c
··· 2547 2547 mask = apic->target_cpus(); 2548 2548 2549 2549 chip = irq_data_get_irq_chip(idata); 2550 - chip->irq_set_affinity(idata, mask, false); 2550 + /* Might be lapic_chip for irq 0 */ 2551 + if (chip->irq_set_affinity) 2552 + chip->irq_set_affinity(idata, mask, false); 2551 2553 } 2552 2554 } 2553 2555 #endif
+3 -2
arch/x86/kernel/pci-dma.c
··· 131 131 132 132 bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp) 133 133 { 134 + if (!*dev) 135 + *dev = &x86_dma_fallback_dev; 136 + 134 137 *gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); 135 138 *gfp = dma_alloc_coherent_gfp_flags(*dev, *gfp); 136 139 137 - if (!*dev) 138 - *dev = &x86_dma_fallback_dev; 139 140 if (!is_device_dma_capable(*dev)) 140 141 return false; 141 142 return true;
+3
arch/x86/kernel/process.c
··· 84 84 int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) 85 85 { 86 86 memcpy(dst, src, arch_task_struct_size); 87 + #ifdef CONFIG_VM86 88 + dst->thread.vm86 = NULL; 89 + #endif 87 90 88 91 return fpu__copy(&dst->thread.fpu, &src->thread.fpu); 89 92 }
+4
tools/testing/selftests/x86/entry_from_vm86.c
··· 230 230 } 231 231 clearhandler(SIGSEGV); 232 232 233 + /* Make sure nothing explodes if we fork. */ 234 + if (fork() > 0) 235 + return 0; 236 + 233 237 return (nerrs == 0 ? 0 : 1); 234 238 }