Skip to content

Commit ca04d39

Browse files
committed
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
2 parents f5eab26 + 2459ee8 commit ca04d39

File tree

4 files changed

+13
-3
lines changed

4 files changed

+13
-3
lines changed

arch/x86/kernel/apic/io_apic.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2547,7 +2547,9 @@ void __init setup_ioapic_dest(void)
25472547
mask = apic->target_cpus();
25482548

25492549
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);
25512553
}
25522554
}
25532555
#endif

arch/x86/kernel/pci-dma.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,12 @@ void dma_generic_free_coherent(struct device *dev, size_t size, void *vaddr,
131131

132132
bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp)
133133
{
134+
if (!*dev)
135+
*dev = &x86_dma_fallback_dev;
136+
134137
*gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
135138
*gfp = dma_alloc_coherent_gfp_flags(*dev, *gfp);
136139

137-
if (!*dev)
138-
*dev = &x86_dma_fallback_dev;
139140
if (!is_device_dma_capable(*dev))
140141
return false;
141142
return true;

arch/x86/kernel/process.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ EXPORT_SYMBOL_GPL(idle_notifier_unregister);
8484
int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
8585
{
8686
memcpy(dst, src, arch_task_struct_size);
87+
#ifdef CONFIG_VM86
88+
dst->thread.vm86 = NULL;
89+
#endif
8790

8891
return fpu__copy(&dst->thread.fpu, &src->thread.fpu);
8992
}

tools/testing/selftests/x86/entry_from_vm86.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,5 +230,9 @@ int main(void)
230230
}
231231
clearhandler(SIGSEGV);
232232

233+
/* Make sure nothing explodes if we fork. */
234+
if (fork() > 0)
235+
return 0;
236+
233237
return (nerrs == 0 ? 0 : 1);
234238
}

0 commit comments

Comments
 (0)