# git rev-parse -q --verify 0d665e7b109d512b7cae3ccef6e8654714887844^{commit} 0d665e7b109d512b7cae3ccef6e8654714887844 already have revision, skipping fetch # git checkout -q -f -B kisskb 0d665e7b109d512b7cae3ccef6e8654714887844 # git clean -qxdf # git log -1 commit 0d665e7b109d512b7cae3ccef6e8654714887844 Author: Kirill A. Shutemov Date: Fri Jan 19 15:49:24 2018 +0300 mm, page_vma_mapped: Drop faulty pointer arithmetics in check_pte() Tetsuo reported random crashes under memory pressure on 32-bit x86 system and tracked down to change that introduced page_vma_mapped_walk(). The root cause of the issue is the faulty pointer math in check_pte(). As ->pte may point to an arbitrary page we have to check that they are belong to the section before doing math. Otherwise it may lead to weird results. It wasn't noticed until now as mem_map[] is virtually contiguous on flatmem or vmemmap sparsemem. Pointer arithmetic just works against all 'struct page' pointers. But with classic sparsemem, it doesn't because each section memap is allocated separately and so consecutive pfns crossing two sections might have struct pages at completely unrelated addresses. Let's restructure code a bit and replace pointer arithmetic with operations on pfns. Signed-off-by: Kirill A. Shutemov Reported-and-tested-by: Tetsuo Handa Acked-by: Michal Hocko Fixes: ace71a19cec5 ("mm: introduce page_vma_mapped_walk()") Cc: stable@vger.kernel.org Signed-off-by: Linus Torvalds # < /opt/cross/kisskb/gcc-4.6.3-nolibc/hppa-linux/bin/hppa-linux-gcc --version # < git log --format=%s --max-count=1 0d665e7b109d512b7cae3ccef6e8654714887844 # < make -j 48 ARCH=parisc O=/home/kisskb/slave/build/linus_parisc-allnoconfig_parisc CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/hppa-linux/bin/hppa-linux- allnoconfig # make -j 48 ARCH=parisc O=/home/kisskb/slave/build/linus_parisc-allnoconfig_parisc CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/hppa-linux/bin/hppa-linux- make[1]: Entering directory '/home/kisskb/slave/build/linus_parisc-allnoconfig_parisc' GEN ./Makefile scripts/kconfig/conf --silentoldconfig Kconfig CHK include/config/kernel.release GEN ./Makefile UPD include/config/kernel.release WRAP arch/parisc/include/generated/uapi/asm/auxvec.h WRAP arch/parisc/include/generated/uapi/asm/bpf_perf_event.h WRAP arch/parisc/include/generated/uapi/asm/kvm_para.h WRAP arch/parisc/include/generated/uapi/asm/param.h WRAP arch/parisc/include/generated/uapi/asm/poll.h WRAP arch/parisc/include/generated/uapi/asm/resource.h CHK include/generated/uapi/linux/version.h UPD include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h UPD include/generated/utsrelease.h Using /home/kisskb/slave/src as source for kernel WRAP arch/parisc/include/generated/asm/barrier.h WRAP arch/parisc/include/generated/asm/clkdev.h WRAP arch/parisc/include/generated/asm/current.h WRAP arch/parisc/include/generated/asm/device.h WRAP arch/parisc/include/generated/asm/div64.h WRAP arch/parisc/include/generated/asm/emergency-restart.h WRAP arch/parisc/include/generated/asm/exec.h WRAP arch/parisc/include/generated/asm/irq_regs.h WRAP arch/parisc/include/generated/asm/hw_irq.h WRAP arch/parisc/include/generated/asm/irq_work.h WRAP arch/parisc/include/generated/asm/kdebug.h WRAP arch/parisc/include/generated/asm/kprobes.h WRAP arch/parisc/include/generated/asm/local.h WRAP arch/parisc/include/generated/asm/local64.h WRAP arch/parisc/include/generated/asm/mcs_spinlock.h WRAP arch/parisc/include/generated/asm/mm-arch-hooks.h WRAP arch/parisc/include/generated/asm/percpu.h WRAP arch/parisc/include/generated/asm/preempt.h WRAP arch/parisc/include/generated/asm/seccomp.h WRAP arch/parisc/include/generated/asm/segment.h WRAP arch/parisc/include/generated/asm/topology.h WRAP arch/parisc/include/generated/asm/trace_clock.h WRAP arch/parisc/include/generated/asm/user.h WRAP arch/parisc/include/generated/asm/vga.h WRAP arch/parisc/include/generated/asm/word-at-a-time.h WRAP arch/parisc/include/generated/asm/xor.h HOSTCC scripts/sortextable CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig CC scripts/mod/devicetable-offsets.s CHK scripts/mod/devicetable-offsets.h UPD scripts/mod/devicetable-offsets.h MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/sumversion.o HOSTLD scripts/mod/modpost CC kernel/bounds.s CHK include/generated/timeconst.h UPD include/generated/timeconst.h CHK include/generated/bounds.h UPD include/generated/bounds.h CC arch/parisc/kernel/asm-offsets.s CHK include/generated/asm-offsets.h UPD include/generated/asm-offsets.h CALL /home/kisskb/slave/src/scripts/checksyscalls.sh CC init/main.o CHK include/generated/compile.h CC init/do_mounts.o CC init/noinitramfs.o CC init/calibrate.o CC init/init_task.o AR usr/built-in.o CC arch/parisc/mm/init.o CC arch/parisc/mm/fault.o CC arch/parisc/mm/ioremap.o UPD include/generated/compile.h CC arch/parisc/kernel/cache.o AS arch/parisc/kernel/pacache.o CC arch/parisc/kernel/setup.o CC arch/parisc/kernel/pdt.o CC arch/parisc/kernel/traps.o CC init/version.o CC arch/parisc/kernel/time.o CC arch/parisc/kernel/irq.o CC arch/parisc/kernel/pa7300lc.o CC arch/parisc/kernel/sys_parisc.o AS arch/parisc/kernel/syscall.o AS arch/parisc/kernel/entry.o CC arch/parisc/kernel/ptrace.o CC arch/parisc/kernel/inventory.o CC arch/parisc/math-emu/driver.o CC arch/parisc/kernel/drivers.o CC arch/parisc/kernel/hardware.o CC arch/parisc/math-emu/decode_exc.o CC arch/parisc/math-emu/frnd.o CC arch/parisc/kernel/firmware.o CC arch/parisc/kernel/parisc_ksyms.o CC arch/parisc/kernel/unaligned.o CC arch/parisc/math-emu/denormal.o CC arch/parisc/math-emu/dfmpy.o CC arch/parisc/math-emu/fpudispatch.o CC arch/parisc/math-emu/dfadd.o CC arch/parisc/math-emu/sfadd.o CC arch/parisc/math-emu/fmpyfadd.o CC arch/parisc/math-emu/sfmpy.o CC arch/parisc/math-emu/dfsqrt.o CC arch/parisc/kernel/pdc_chassis.o CC arch/parisc/kernel/pdc_cons.o CC arch/parisc/kernel/signal.o CC arch/parisc/kernel/processor.o CC arch/parisc/kernel/process.o AS arch/parisc/kernel/hpmc.o AS arch/parisc/kernel/real2.o CC arch/parisc/math-emu/sfsqrt.o CC arch/parisc/kernel/unwind.o CC kernel/fork.o CC arch/parisc/kernel/pci-dma.o AS arch/parisc/kernel/head.o CC arch/parisc/math-emu/dfsub.o CC arch/parisc/math-emu/sfsub.o LDS arch/parisc/kernel/vmlinux.lds CC arch/parisc/math-emu/fcnvfxt.o CC arch/parisc/math-emu/fcnvff.o CC arch/parisc/math-emu/fcnvxf.o CC arch/parisc/math-emu/fcnvfx.o CC kernel/exec_domain.o CC arch/parisc/math-emu/fcnvuf.o CC kernel/panic.o CC arch/parisc/math-emu/fcnvfu.o AR certs/built-in.o CC arch/parisc/math-emu/fcnvfut.o CC arch/parisc/math-emu/dfdiv.o CC arch/parisc/math-emu/dfrem.o CC arch/parisc/math-emu/sfdiv.o CC arch/parisc/math-emu/sfrem.o CC arch/parisc/math-emu/dfcmp.o CC kernel/cpu.o CC arch/parisc/math-emu/sfcmp.o CC kernel/exit.o CC kernel/softirq.o CC kernel/resource.o CC kernel/capability.o CC kernel/sysctl_binary.o CC kernel/sysctl.o CC kernel/ptrace.o CC kernel/user.o CC fs/open.o CC kernel/signal.o CC kernel/umh.o CC kernel/sys.o CC mm/filemap.o CC kernel/workqueue.o CC kernel/pid.o CC fs/read_write.o CC kernel/task_work.o CC mm/mempool.o AR ipc/built-in.o CC kernel/extable.o CC fs/file_table.o CC mm/oom_kill.o CC fs/super.o CC mm/page_alloc.o CC mm/maccess.o CC security/min_addr.o CC security/commoncap.o CC fs/char_dev.o CC fs/stat.o AR arch/parisc/mm/built-in.o CC kernel/params.o CC kernel/kthread.o CC fs/pipe.o CC fs/exec.o CC fs/namei.o CC kernel/sys_ni.o AR block/built-in.o CC kernel/nsproxy.o CC kernel/notifier.o AR init/mounts.o CC mm/page-writeback.o CC mm/readahead.o CC fs/fcntl.o AR drivers/amba/built-in.o AR crypto/built-in.o AR init/built-in.o CC kernel/ksysfs.o AR sound/built-in.o AR drivers/auxdisplay/built-in.o CC fs/ioctl.o CC kernel/cred.o CC fs/readdir.o CC kernel/reboot.o CC drivers/base/component.o CC kernel/async.o AR arch/parisc/kernel/built-in.o AR firmware/built-in.o CC kernel/range.o AR drivers/block/built-in.o CC fs/select.o AR net/built-in.o CC kernel/smpboot.o CC mm/swap.o AR drivers/bus/built-in.o CC kernel/ucount.o CC mm/truncate.o CC kernel/irq/irqdesc.o AR drivers/cdrom/built-in.o CC lib/lockref.o AR kernel/livepatch/built-in.o CC kernel/power/qos.o CC kernel/printk/printk.o CC kernel/locking/mutex.o CC drivers/char/mem.o CC fs/dcache.o CC kernel/rcu/update.o CC kernel/sched/core.o CC kernel/up.o CC kernel/time/time.o CC kernel/memremap.o CC kernel/rcu/sync.o CC lib/bcd.o AR arch/parisc/math-emu/built-in.o CC kernel/time/timer.o CC lib/div64.o CC lib/sort.o CC lib/parser.o AR security/built-in.o CC fs/inode.o CC fs/attr.o CC lib/debug_locks.o CC mm/vmscan.o CC arch/parisc/lib/iomap.o CC fs/bad_inode.o CC arch/parisc/lib/bitops.o AR virt/lib/built-in.o CC fs/file.o AR virt/built-in.o CC drivers/base/core.o CC mm/shmem.o CC arch/parisc/lib/checksum.o CC lib/random32.o CC arch/parisc/lib/delay.o CC lib/bust_spinlocks.o CC arch/parisc/lib/io.o CC lib/kasprintf.o CC kernel/locking/semaphore.o CC kernel/irq/handle.o CC kernel/rcu/tiny.o CC fs/filesystems.o AS arch/parisc/lib/lusercopy.o CC fs/namespace.o CC fs/seq_file.o CC fs/xattr.o CC kernel/irq/manage.o CC fs/libfs.o CC fs/fs-writeback.o CC kernel/locking/rwsem.o CC arch/parisc/lib/memcpy.o CC kernel/locking/percpu-rwsem.o CC drivers/char/random.o CC lib/bitmap.o CC fs/pnode.o /home/kisskb/slave/src/kernel/printk/printk.c: In function 'devkmsg_sysctl_set_loglvl': /home/kisskb/slave/src/kernel/printk/printk.c:186:16: warning: 'old' may be used uninitialized in this function [-Wuninitialized] CC fs/splice.o CC lib/scatterlist.o CC fs/sync.o CC arch/parisc/lib/memset.o AR kernel/power/built-in.o CC lib/gcd.o CC lib/lcm.o CC arch/parisc/lib/ucmpdi2.o AR drivers/char/ipmi/built-in.o CC mm/util.o AR kernel/printk/built-in.o CC fs/utimes.o CC fs/stack.o CC lib/uuid.o CC lib/list_sort.o CC lib/flex_array.o AR drivers/clocksource/built-in.o AR drivers/firewire/built-in.o CC fs/fs_struct.o AR drivers/clk/bcm/built-in.o CC kernel/irq/spurious.o CC mm/mmzone.o CC lib/iov_iter.o CC kernel/locking/rwsem-spinlock.o AR drivers/hwtracing/intel_th/built-in.o AR kernel/rcu/built-in.o AR drivers/clk/imgtec/built-in.o AR drivers/i2c/algos/built-in.o AR arch/parisc/lib/lib.a AR drivers/gpu/drm/amd/lib/built-in.o CC lib/clz_ctz.o CC lib/bsearch.o AR drivers/firmware/broadcom/built-in.o AR drivers/firmware/meson/built-in.o CC kernel/time/hrtimer.o EXPORTS arch/parisc/lib/lib-ksyms.o AR drivers/gpu/drm/bridge/synopsys/built-in.o AR drivers/i2c/busses/built-in.o AR drivers/idle/built-in.o AR drivers/gpu/drm/bridge/built-in.o AR drivers/irqchip/built-in.o AR drivers/gpu/drm/hisilicon/built-in.o AR drivers/gpu/drm/i2c/built-in.o CC fs/statfs.o CC mm/vmstat.o AR drivers/firmware/tegra/built-in.o AR drivers/i2c/muxes/built-in.o AR drivers/clk/mvebu/built-in.o AR drivers/macintosh/built-in.o CC mm/backing-dev.o AR arch/parisc/lib/built-in.o CC fs/fs_pin.o AR drivers/gpu/drm/omapdrm/displays/built-in.o AR drivers/mfd/built-in.o AR drivers/gpu/drm/panel/built-in.o AR drivers/firmware/built-in.o CC lib/find_bit.o AR drivers/i2c/built-in.o CC mm/mm_init.o AR drivers/media/common/b2c2/built-in.o AR drivers/mmc/built-in.o AR drivers/gpu/drm/tilcdc/built-in.o AR drivers/gpu/drm/omapdrm/dss/built-in.o AR drivers/misc/cb710/built-in.o AR drivers/clk/renesas/built-in.o CC lib/llist.o AR drivers/net/phy/built-in.o AR drivers/nvme/host/built-in.o AR drivers/nvme/target/built-in.o AR drivers/gpu/drm/omapdrm/built-in.o CC drivers/base/bus.o CC lib/memweight.o AR drivers/nfc/built-in.o CC lib/kfifo.o AR drivers/gpu/drm/built-in.o AR drivers/nvme/built-in.o AR drivers/media/common/saa7146/built-in.o AR drivers/clk/ti/built-in.o CC fs/nsfs.o AR drivers/misc/eeprom/built-in.o CC drivers/parisc/power.o AR drivers/pci/dwc/built-in.o AR drivers/gpu/vga/built-in.o AR drivers/net/built-in.o AR drivers/media/common/siano/built-in.o AR drivers/clk/built-in.o AR drivers/gpu/built-in.o AR drivers/misc/lis3lv02d/built-in.o AR drivers/platform/built-in.o AR drivers/power/built-in.o AR drivers/media/common/v4l2-tpg/built-in.o CC drivers/base/dd.o CC fs/no-block.o CC lib/percpu-refcount.o CC lib/percpu_ida.o AR drivers/misc/mic/bus/built-in.o AR drivers/pwm/built-in.o AR fs/devpts/built-in.o AR drivers/ptp/built-in.o AR drivers/media/common/built-in.o CC fs/ramfs/inode.o AR fs/exofs/built-in.o CC lib/rhashtable.o CC lib/reciprocal_div.o AR fs/quota/built-in.o AR fs/notify/dnotify/built-in.o CC lib/once.o AR drivers/misc/mic/built-in.o CC fs/ramfs/file-mmu.o CC kernel/time/timekeeping.o CC kernel/irq/resend.o CC drivers/rtc/rtc-lib.o AR kernel/locking/built-in.o CC mm/mmu_context.o AR drivers/soc/bcm/built-in.o CC drivers/tty/tty_io.o CC lib/refcount.o AR drivers/soc/fsl/built-in.o CC kernel/sched/clock.o CC kernel/sched/loadavg.o AR drivers/video/backlight/built-in.o AR drivers/media/firewire/built-in.o AR fs/notify/fanotify/built-in.o AR drivers/soc/renesas/built-in.o CC lib/usercopy.o CC drivers/base/syscore.o CC kernel/irq/chip.o AR drivers/misc/ti-st/built-in.o CC mm/percpu.o CC mm/slab_common.o AR drivers/soc/mediatek/built-in.o CC drivers/tty/n_tty.o CC drivers/rtc/class.o CC drivers/rtc/interface.o AR fs/notify/inotify/built-in.o AR drivers/misc/built-in.o AR drivers/video/fbdev/core/built-in.o CC lib/errseq.o CC lib/string_helpers.o CC lib/hexdump.o AR drivers/media/i2c/soc_camera/built-in.o AR drivers/soc/built-in.o CC mm/compaction.o AR fs/notify/built-in.o CC mm/vmacache.o CC drivers/tty/tty_ioctl.o CC lib/kstrtox.o CC drivers/tty/tty_ldisc.o CC drivers/char/misc.o AR drivers/video/fbdev/omap2/omapfb/displays/built-in.o CC kernel/sched/cputime.o CC lib/pci_iomap.o AR drivers/media/i2c/built-in.o CC drivers/base/driver.o CC drivers/base/class.o CC mm/swap_slots.o CC kernel/sched/idle_task.o AR drivers/media/pci/b2c2/built-in.o CC kernel/irq/dummychip.o AR drivers/video/fbdev/omap2/omapfb/dss/built-in.o AR drivers/media/mmc/siano/built-in.o AR drivers/parisc/built-in.o CC kernel/irq/devres.o CC lib/iomap_copy.o AR drivers/video/fbdev/omap2/omapfb/built-in.o CC kernel/irq/autoprobe.o CC lib/devres.o CC lib/hweight.o AR drivers/media/mmc/built-in.o CC drivers/rtc/rtc-generic.o AR drivers/media/pci/ddbridge/built-in.o CC drivers/base/platform.o AR drivers/char/agp/built-in.o AR drivers/video/fbdev/omap2/built-in.o AR drivers/media/platform/blackfin/built-in.o CC lib/syscall.o CC drivers/base/cpu.o CC lib/atomic64.o AR drivers/video/fbdev/built-in.o AR drivers/media/platform/davinci/built-in.o AR drivers/media/pci/dm1105/built-in.o AR drivers/media/rc/keymaps/built-in.o AR fs/ramfs/ramfs.o AR drivers/media/pci/mantis/built-in.o CC lib/strncpy_from_user.o AR drivers/media/platform/meson/built-in.o AR fs/ramfs/built-in.o AR drivers/media/pci/netup_unidvb/built-in.o AR drivers/char/built-in.o CC kernel/sched/fair.o AR drivers/video/built-in.o CC drivers/base/firmware.o AR drivers/media/platform/omap/built-in.o AR drivers/media/rc/built-in.o CC drivers/base/init.o AR drivers/media/pci/ngene/built-in.o CC mm/list_lru.o CC drivers/base/map.o CC mm/interval_tree.o CC kernel/time/ntp.o CC lib/argv_split.o AR drivers/media/spi/built-in.o CC lib/bug.o CC lib/chacha20.o AR drivers/media/platform/stm32/built-in.o AR drivers/media/pci/pluto2/built-in.o CC drivers/base/devres.o CC lib/cmdline.o CC mm/workingset.o AR drivers/media/pci/pt1/built-in.o CC mm/debug.o AR drivers/media/pci/pt3/built-in.o AR drivers/media/tuners/built-in.o AR drivers/media/pci/saa7146/built-in.o AR drivers/media/platform/built-in.o CC drivers/base/attribute_container.o CC mm/gup.o CC kernel/time/jiffies.o AR drivers/media/pci/smipcie/built-in.o CC kernel/time/clocksource.o AR drivers/media/pci/ttpci/built-in.o CC lib/ctype.o CC mm/highmem.o CC lib/dec_and_lock.o CC lib/decompress.o CC lib/dump_stack.o CC mm/memory.o AR drivers/media/usb/b2c2/built-in.o CC drivers/base/transport_class.o AR drivers/media/pci/built-in.o CC mm/mincore.o CC lib/earlycpio.o CC kernel/sched/rt.o CC drivers/base/topology.o CC lib/extable.o AR drivers/media/usb/dvb-usb-v2/built-in.o AR drivers/media/usb/dvb-usb/built-in.o CC lib/idr.o CC lib/flex_proportions.o CC mm/mlock.o CC lib/int_sqrt.o CC mm/mmap.o AR kernel/irq/built-in.o CC kernel/sched/deadline.o CC mm/mprotect.o CC lib/ioremap.o AR drivers/media/usb/s2255/built-in.o CC lib/irq_regs.o CC drivers/base/container.o AR drivers/media/usb/siano/built-in.o CC lib/is_single_threaded.o AR drivers/rtc/rtc-core.o CC drivers/base/property.o CC lib/klist.o AR drivers/media/usb/stkwebcam/built-in.o CC lib/kobject_uevent.o AR drivers/rtc/built-in.o CC lib/kobject.o CC drivers/tty/tty_buffer.o CC lib/nmi_backtrace.o AR drivers/media/usb/ttusb-budget/built-in.o CC drivers/base/cacheinfo.o CC lib/radix-tree.o CC lib/nodemask.o CC lib/plist.o AR drivers/media/usb/ttusb-dec/built-in.o AR drivers/base/power/built-in.o CC lib/ratelimit.o AR drivers/media/usb/zr364xx/built-in.o AR drivers/base/test/built-in.o CC drivers/base/dma-mapping.o CC drivers/tty/tty_port.o CC lib/rbtree.o AR drivers/media/usb/built-in.o AR fs/built-in.o CC lib/seq_buf.o CC lib/sha1.o CC drivers/tty/tty_mutex.o CC drivers/tty/tty_ldsem.o CC lib/show_mem.o CC drivers/tty/tty_baudrate.o CC kernel/time/timer_list.o CC mm/mremap.o CC mm/page_vma_mapped.o CC mm/msync.o CC lib/siphash.o CC mm/pagewalk.o CC lib/string.o CC lib/timerqueue.o CC lib/vsprintf.o CC lib/win_minmax.o AR drivers/media/built-in.o CC mm/pgtable-generic.o CC drivers/tty/tty_jobctrl.o CC mm/rmap.o CC mm/vmalloc.o CC kernel/sched/wait.o CC mm/init-mm.o CC mm/nobootmem.o CC kernel/sched/wait_bit.o CC mm/memblock.o CC kernel/sched/swait.o CC kernel/time/timeconv.o CC kernel/sched/completion.o CC drivers/tty/n_null.o CC mm/slub.o CC mm/dmapool.o AR drivers/tty/serial/built-in.o AR drivers/tty/ipwireless/built-in.o CC kernel/sched/idle.o AR drivers/tty/vt/built-in.o CC kernel/time/timecounter.o CC kernel/time/clockevents.o CC kernel/time/sched_clock.o CC kernel/time/tick-common.o CC kernel/time/posix-stubs.o CC kernel/time/alarmtimer.o AR drivers/tty/built-in.o AR drivers/base/built-in.o AR drivers/built-in.o AR kernel/sched/built-in.o AR kernel/time/built-in.o AR kernel/built-in.o AR mm/built-in.o AR lib/lib.a EXPORTS lib/lib-ksyms.o AR lib/built-in.o GEN .version CHK include/generated/compile.h AR built-in.o LD vmlinux.o MODPOST vmlinux.o LD vmlinux SORTEX vmlinux SYSMAP System.map make[1]: Leaving directory '/home/kisskb/slave/build/linus_parisc-allnoconfig_parisc' Completed OK # rm -rf /home/kisskb/slave/build/linus_parisc-allnoconfig_parisc # Build took: 0:00:10.794113