Go to file
Lorenzo Stoakes 61765a1194 mm/mempolicy: correctly update prev when policy is equal on mbind
commit 00ca0f2e86 upstream.

The refactoring in commit f4e9e0e694 ("mm/mempolicy: fix use-after-free
of VMA iterator") introduces a subtle bug which arises when attempting to
apply a new NUMA policy across a range of VMAs in mbind_range().

The refactoring passes a **prev pointer to keep track of the previous VMA
in order to reduce duplication, and in all but one case it keeps this
correctly updated.

The bug arises when a VMA within the specified range has an equivalent
policy as determined by mpol_equal() - which unlike other cases, does not
update prev.

This can result in a situation where, later in the iteration, a VMA is
found whose policy does need to change.  At this point, vma_merge() is
invoked with prev pointing to a VMA which is before the previous VMA.

Since vma_merge() discovers the curr VMA by looking for the one
immediately after prev, it will now be in a situation where this VMA is
incorrect and the merge will not proceed correctly.

This is checked in the VM_WARN_ON() invariant case with end >
curr->vm_end, which, if a merge is possible, results in a warning (if
CONFIG_DEBUG_VM is specified).

I note that vma_merge() performs these invariant checks only after
merge_prev/merge_next are checked, which is debatable as it hides this
issue if no merge is possible even though a buggy situation has arisen.

The solution is simply to update the prev pointer even when policies are
equal.

This caused a bug to arise in the 6.2.y stable tree, and this patch
resolves this bug.

Link: https://lkml.kernel.org/r/83f1d612acb519d777bebf7f3359317c4e7f4265.1682866629.git.lstoakes@gmail.com
Fixes: f4e9e0e694 ("mm/mempolicy: fix use-after-free of VMA iterator")
Signed-off-by: Lorenzo Stoakes <lstoakes@gmail.com>
Reported-by: kernel test robot <oliver.sang@intel.com>
  Link: https://lore.kernel.org/oe-lkp/202304292203.44ddeff6-oliver.sang@intel.com
Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-05-11 23:11:35 +09:00
Documentation ASoC: dt-bindings: qcom,lpass-rx-macro: correct minItems for clocks 2023-05-11 23:10:55 +09:00
LICENSES
arch ia64: fix an addr to taddr in huge_pte_offset() 2023-05-11 23:11:35 +09:00
block blk-mq: don't plug for head insertions in blk_execute_rq_nowait 2023-05-11 23:11:14 +09:00
certs
crypto crypto: drbg - Only fail when jent is unavailable in FIPS mode 2023-05-11 23:11:12 +09:00
drivers s390/dasd: fix hanging blockdevice after request requeue 2023-05-11 23:11:35 +09:00
fs btrfs: scrub: reject unsupported scrub flags 2023-05-11 23:11:34 +09:00
include btrfs: scrub: reject unsupported scrub flags 2023-05-11 23:11:34 +09:00
init
io_uring io_uring/rsrc: use nospec'ed indexes 2023-05-11 23:11:15 +09:00
ipc
kernel kcsan: Avoid READ_ONCE() in read_instrumented_memory() 2023-05-11 23:11:34 +09:00
lib debugobject: Prevent init race with static objects 2023-05-11 23:11:07 +09:00
mm mm/mempolicy: correctly update prev when policy is equal on mbind 2023-05-11 23:11:35 +09:00
net SUNRPC: remove the maximum number of retries in call_bind_status 2023-05-11 23:11:29 +09:00
rust
samples
scripts scripts/gdb: fix lx-timerlist for Python3 2023-05-11 23:11:34 +09:00
security selinux: ensure av_permissions.h is built when needed 2023-05-11 23:10:56 +09:00
sound ALSA: hda/realtek: Fix mute and micmute LEDs for an HP laptop 2023-05-11 23:11:33 +09:00
tools tracing/user_events: Ensure write index cannot be negative 2023-05-11 23:11:25 +09:00
usr
virt
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
.rustfmt.toml
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS
Makefile Linux 6.2.14 2023-05-01 08:29:23 +09:00
README

README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.