From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Jan Stancek <jstancek@redhat.com>,
"Kirill A. Shutemov" <kirill@shutemov.name>,
Michal Hocko <mhocko@suse.com>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
David Hildenbrand <david@redhat.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Laszlo Ersek <lersek@redhat.com>
Subject: [PATCH 4.19 44/50] mm: page_mapped: dont assume compound page is huge or THP
Date: Tue, 15 Jan 2019 17:36:20 +0100 [thread overview]
Message-ID: <20190115154912.441423869@linuxfoundation.org> (raw)
In-Reply-To: <20190115154909.933241945@linuxfoundation.org>
4.19-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Stancek <jstancek@redhat.com>
commit 8ab88c7169b7fba98812ead6524b9d05bc76cf00 upstream.
LTP proc01 testcase has been observed to rarely trigger crashes
on arm64:
page_mapped+0x78/0xb4
stable_page_flags+0x27c/0x338
kpageflags_read+0xfc/0x164
proc_reg_read+0x7c/0xb8
__vfs_read+0x58/0x178
vfs_read+0x90/0x14c
SyS_read+0x60/0xc0
The issue is that page_mapped() assumes that if compound page is not
huge, then it must be THP. But if this is 'normal' compound page
(COMPOUND_PAGE_DTOR), then following loop can keep running (for
HPAGE_PMD_NR iterations) until it tries to read from memory that isn't
mapped and triggers a panic:
for (i = 0; i < hpage_nr_pages(page); i++) {
if (atomic_read(&page[i]._mapcount) >= 0)
return true;
}
I could replicate this on x86 (v4.20-rc4-98-g60b548237fed) only
with a custom kernel module [1] which:
- allocates compound page (PAGEC) of order 1
- allocates 2 normal pages (COPY), which are initialized to 0xff (to
satisfy _mapcount >= 0)
- 2 PAGEC page structs are copied to address of first COPY page
- second page of COPY is marked as not present
- call to page_mapped(COPY) now triggers fault on access to 2nd COPY
page at offset 0x30 (_mapcount)
[1] https://github.com/jstancek/reproducers/blob/master/kernel/page_mapped_crash/repro.c
Fix the loop to iterate for "1 << compound_order" pages.
Kirrill said "IIRC, sound subsystem can producuce custom mapped compound
pages".
Link: http://lkml.kernel.org/r/c440d69879e34209feba21e12d236d06bc0a25db.1543577156.git.jstancek@redhat.com
Fixes: e1534ae95004 ("mm: differentiate page_mapped() from page_mapcount() for compound pages")
Signed-off-by: Jan Stancek <jstancek@redhat.com>
Debugged-by: Laszlo Ersek <lersek@redhat.com>
Suggested-by: "Kirill A. Shutemov" <kirill@shutemov.name>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
mm/util.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/mm/util.c
+++ b/mm/util.c
@@ -485,7 +485,7 @@ bool page_mapped(struct page *page)
return true;
if (PageHuge(page))
return false;
- for (i = 0; i < hpage_nr_pages(page); i++) {
+ for (i = 0; i < (1 << compound_order(page)); i++) {
if (atomic_read(&page[i]._mapcount) >= 0)
return true;
}
next prev parent reply other threads:[~2019-01-15 16:53 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-15 16:35 [PATCH 4.19 00/50] 4.19.16-stable review Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 01/50] Btrfs: fix deadlock when using free space tree due to block group creation Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 02/50] staging: rtl8188eu: Fix module loading from tasklet for CCMP encryption Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 03/50] staging: rtl8188eu: Fix module loading from tasklet for WEP encryption Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 04/50] cpufreq: scmi: Fix frequency invariance in slow path Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 05/50] x86, modpost: Replace last remnants of RETPOLINE with CONFIG_RETPOLINE Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 06/50] ALSA: hda/realtek - Support Dell headset mode for New AIO platform Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 07/50] ALSA: hda/realtek - Add unplug function into unplug state of Headset Mode for ALC225 Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 08/50] ALSA: hda/realtek - Disable headset Mic VREF for headset mode of ALC225 Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 09/50] CIFS: Fix adjustment of credits for MTU requests Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 10/50] CIFS: Do not set credits to 1 if the server didnt grant anything Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 11/50] CIFS: Do not hide EINTR after sending network packets Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 12/50] CIFS: Fix credit computation for compounded requests Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 13/50] cifs: Fix potential OOB access of lock element array Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 14/50] usb: cdc-acm: send ZLP for Telit 3G Intel based modems Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 15/50] USB: storage: dont insert sane sense for SPC3+ when bad sense specified Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 16/50] USB: storage: add quirk for SMI SM3350 Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 17/50] USB: Add USB_QUIRK_DELAY_CTRL_MSG quirk for Corsair K70 RGB Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 18/50] slab: alien caches must not be initialized if the allocation of the alien cache failed Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 19/50] mm/usercopy.c: no check page span for stack objects Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 20/50] mm, memcg: fix reclaim deadlock with writeback Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 21/50] ACPI: power: Skip duplicate power resource references in _PRx Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 22/50] ACPI / PMIC: xpower: Fix TS-pin current-source handling Greg Kroah-Hartman
2019-01-15 16:35 ` [PATCH 4.19 23/50] ACPI/IORT: Fix rc_dma_get_range() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 24/50] i2c: dev: prevent adapter retries and timeout being set as minus value Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 25/50] mtd: rawnand: qcom: fix memory corruption that causes panic Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 26/50] vfio/type1: Fix unmap overflow off-by-one Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 27/50] drm/amdgpu: Add new VegaM pci id Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 28/50] PCI: dwc: Use interrupt masking instead of disabling Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 29/50] PCI: dwc: Take lock when ACKing an interrupt Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 30/50] PCI: dwc: Move interrupt acking into the proper callback Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 31/50] drm/amd/display: Fix MST dp_blank REG_WAIT timeout Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 32/50] drm/fb_helper: Allow leaking fbdev smem_start Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 33/50] drm/fb-helper: Partially bring back workaround for bugs of SDL 1.2 Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 34/50] drm/i915: Unwind failure on pinning the gen7 ppgtt Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 35/50] drm/amdgpu: Dont ignore rc from drm_dp_mst_topology_mgr_resume() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 36/50] drm/amdgpu: Dont fail resume process if resuming atomic state fails Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 37/50] rbd: dont return 0 on unmap if RBD_DEV_FLAG_REMOVING is set Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 38/50] ext4: make sure enough credits are reserved for dioread_nolock writes Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 39/50] ext4: fix a potential fiemap/page fault deadlock w/ inline_data Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 40/50] ext4: avoid kernel warning when writing the superblock to a dead device Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 41/50] ext4: use ext4_write_inode() when fsyncing w/o a journal Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 42/50] ext4: track writeback errors using the generic tracking infrastructure Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 43/50] ext4: fix special inode number checks in __ext4_iget() Greg Kroah-Hartman
2019-01-15 16:36 ` Greg Kroah-Hartman [this message]
2019-01-15 16:36 ` [PATCH 4.19 45/50] sunrpc: use-after-free in svc_process_common() Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 46/50] KVM: arm/arm64: Fix VMID alloc race by reverting to lock-less Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 47/50] arm64: compat: Dont pull syscall number from regs in arm_compat_syscall Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 48/50] Btrfs: fix access to available allocation bits when starting balance Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 49/50] Btrfs: fix deadlock when enabling quotas due to concurrent snapshot creation Greg Kroah-Hartman
2019-01-15 16:36 ` [PATCH 4.19 50/50] Btrfs: use nofs context when initializing security xattrs to avoid deadlock Greg Kroah-Hartman
2019-01-16 2:00 ` [PATCH 4.19 00/50] 4.19.16-stable review shuah
2019-01-16 11:49 ` Naresh Kamboju
2019-01-16 20:38 ` Guenter Roeck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190115154912.441423869@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=jstancek@redhat.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=kirill@shutemov.name \
--cc=lersek@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mhocko@suse.com \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox