linux_dsm_epyc7002/include/asm-generic
Kirill A. Shutemov ee53664bda mm: Fix NULL pointer dereference in madvise(MADV_WILLNEED) support
Sasha Levin found a NULL pointer dereference that is due to a missing
page table lock, which in turn is due to the pmd entry in question being
a transparent huge-table entry.

The code - introduced in commit 1998cc0489 ("mm: make
madvise(MADV_WILLNEED) support swap file prefetch") - correctly checks
for this situation using pmd_none_or_trans_huge_or_clear_bad(), but it
turns out that that function doesn't work correctly.

pmd_none_or_trans_huge_or_clear_bad() expected that pmd_bad() would
trigger if the transparent hugepage bit was set, but it doesn't do that
if pmd_numa() is also set. Note that the NUMA bit only gets set on real
NUMA machines, so people trying to reproduce this on most normal
development systems would never actually trigger this.

Fix it by removing the very subtle (and subtly incorrect) expectation,
and instead just checking pmd_trans_huge() explicitly.

Reported-by: Sasha Levin <sasha.levin@oracle.com>
Acked-by: Andrea Arcangeli <aarcange@redhat.com>
[ Additionally remove the now stale test for pmd_trans_huge() inside the
  pmd_bad() case - Linus ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-12-20 12:17:03 -08:00
..
bitops bitops/find: clarify and extend documentation 2013-11-13 12:09:22 +09:00
4level-fixup.h
atomic64.h
atomic-long.h
atomic.h asm-generic: move cmpxchg*_local defs to cmpxchg.h 2013-03-13 06:11:05 +01:00
audit_change_attr.h
audit_dir_write.h
audit_read.h
audit_signal.h
audit_write.h
barrier.h
bitops.h
bitsperlong.h
bug.h
bugs.h
cache.h
cacheflush.h
checksum.h
clkdev.h
cmpxchg-local.h
cmpxchg.h asm-generic: move cmpxchg*_local defs to cmpxchg.h 2013-03-13 06:11:05 +01:00
cputime_jiffies.h
cputime_nsecs.h cputime_nsecs: use math64.h for nsec resolution conversion helpers 2013-04-26 18:58:12 +02:00
cputime.h
current.h
delay.h
device.h
div64.h
dma-coherent.h
dma-mapping-broken.h
dma-mapping-common.h
dma.h
emergency-restart.h
exec.h
fb.h
ftrace.h
futex.h
getorder.h
gpio.h GPIO bulk changes for the v3.13 development cycle 2013-11-12 15:50:46 +09:00
hardirq.h
hugetlb.h mm: Fix generic hugetlb pte check return type. 2013-10-02 20:02:35 -04:00
hw_irq.h
ide_iops.h
int-l64.h
int-ll64.h
io-64-nonatomic-hi-lo.h
io-64-nonatomic-lo-hi.h
io.h kernel: Fix s390 absolute memory access for /dev/mem 2013-05-22 09:45:57 +02:00
ioctl.h
iomap.h
irq_regs.h
irq.h
irqflags.h
Kbuild.asm
kdebug.h
kmap_types.h
kvm_para.h KVM: add kvm_para_available to asm-generic/kvm_para.h 2013-06-05 13:21:29 +03:00
libata-portmap.h
linkage.h
local64.h
local.h
memory_model.h __page_to_pfn: Fix typo in comment 2013-10-14 15:28:29 +02:00
mm_hooks.h
mmu_context.h
mmu.h
module.h
mutex-dec.h arch: Make __mutex_fastpath_lock_retval return whether fastpath succeeded or not 2013-06-26 12:10:55 +02:00
mutex-null.h arch: Make __mutex_fastpath_lock_retval return whether fastpath succeeded or not 2013-06-26 12:10:55 +02:00
mutex-xchg.h arch: Make __mutex_fastpath_lock_retval return whether fastpath succeeded or not 2013-06-26 12:10:55 +02:00
mutex.h
page.h
param.h
parport.h
pci_iomap.h
pci-bridge.h
pci-dma-compat.h
pci.h
percpu.h
pgalloc.h
pgtable-nopmd.h
pgtable-nopud.h
pgtable.h mm: Fix NULL pointer dereference in madvise(MADV_WILLNEED) support 2013-12-20 12:17:03 -08:00
preempt.h sched: Remove PREEMPT_NEED_RESCHED from generic code 2013-12-11 15:52:32 +01:00
ptrace.h
resource.h
rtc.h
rwsem.h
scatterlist.h
sections.h vmlinux.lds: add comments for global variables and clean up useless declarations 2013-07-03 16:07:34 -07:00
segment.h
serial.h
siginfo.h constify copy_siginfo_to_user{,32}() 2013-11-09 00:16:29 -05:00
signal.h
simd.h crypto: create generic version of ablk_helper 2013-09-24 06:02:24 +10:00
sizes.h
spinlock.h
statfs.h
string.h
switch_to.h
syscall.h
syscalls.h
termios-base.h
termios.h
timex.h
tlb.h Fix TLB gather virtual address range invalidation corner cases 2013-08-16 08:52:46 -07:00
tlbflush.h
topology.h
trace_clock.h
uaccess-unaligned.h
uaccess.h asm-generic: uaccess s/might_sleep/might_fault/ 2013-05-28 09:41:05 +02:00
unaligned.h
unistd.h We get rid of the general module prefix confusion with a binary config option, 2013-05-05 10:58:06 -07:00
user.h
vga.h
vmlinux.lds.h kernel: add support for init_array constructors 2013-10-17 15:05:17 +10:30
vtime.h include/asm-generic/vtime.h: avoid zero-length file 2013-09-30 14:31:02 -07:00
word-at-a-time.h word-at-a-time: provide generic big-endian zero_bytemask implementation 2013-12-12 10:39:01 -08:00
xor.h