FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x 65291dcfcf8936e1b23cfd7718fdfde7cfaf7706
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024040819-elf-bamboo-00f6@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
65291dcfcf89 ("mm/secretmem: fix GUP-fast succeeding on secretmem folios") 8f9ff2deb8b9 ("secretmem: convert page_is_secretmem() to folio_is_secretmem()")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 65291dcfcf8936e1b23cfd7718fdfde7cfaf7706 Mon Sep 17 00:00:00 2001
From: David Hildenbrand <[email protected]>
Date: Tue, 26 Mar 2024 15:32:08 +0100
Subject: [PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios
folio_is_secretmem() currently relies on secretmem folios being LRU folios, to save some cycles.
However, folios might reside in a folio batch without the LRU flag set, or temporarily have their LRU flag cleared. Consequently, the LRU flag is unreliable for this purpose.
In particular, this is the case when secretmem_fault() allocates a fresh page and calls filemap_add_folio()->folio_add_lru(). The folio might be added to the per-cpu folio batch and won't get the LRU flag set until the batch was drained using e.g., lru_add_drain().
Consequently, folio_is_secretmem() might not detect secretmem folios and GUP-fast can succeed in grabbing a secretmem folio, crashing the kernel when we would later try reading/writing to the folio, because the folio has been unmapped from the directmap.
Fix it by removing that unreliable check.
include/linux/secretmem.h +2 -2
@@ -13,10 +13,10 @@ static inline bool folio_is_secretmem(struct folio *folio)/* * Using folio_mapping() is quite slow because of the actual call * instruction. -* We know that secretmem pages are not compound and LRU so we can +* We know that secretmem pages are not compound, so we can * save a couple of cycles here. */ -if (folio_test_large (folio) || !folio_test_lru (folio)) +if (folio_test_large (folio))return false; mapping = (struct address_space *)
PATCH 1/1 mm/secretmem: fix GUP-fast succeeding on secretmem folios
folio_is_secretmem() currently relies on secretmem folios being LRU folios, to save some cycles.
However, folios might reside in a folio batch without the LRU flag set, or temporarily have their LRU flag cleared. Consequently, the LRU flag is unreliable for this purpose.
In particular, this is the case when secretmem_fault() allocates a fresh page and calls filemap_add_folio()->folio_add_lru(). The folio might be added to the per-cpu folio batch and won't get the LRU flag set until the batch was drained using e.g., lru_add_drain().
Consequently, folio_is_secretmem() might not detect secretmem folios and GUP-fast can succeed in grabbing a secretmem folio, crashing the kernel when we would later try reading/writing to the folio, because the folio has been unmapped from the directmap.
Fix it by removing that unreliable check.
--- include/linux/secretmem.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
include/linux/secretmem.h +2 -2
@@ -14,10 +14,10 @@ static inline bool page_is_secretmem(struct page *page)* Using page_mapping() is quite slow because of the actual call * instruction and repeated compound_head(page) inside the * page_mapping() function. -* We know that secretmem pages are not compound and LRU so we can +* We know that secretmem pages are not compound, so we can * save a couple of cycles here. */ -if (PageCompound (page) || !PageLRU (page)) +if (PageCompound (page))return false; mapping = (struct address_space *)
Signature · 1 line
2.44.0
Re: [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios
Quoted 19 lines · David Hildenbrand
folio_is_secretmem()currently relies on secretmem folios being LRU folios, to save some cycles.However, folios might reside in a folio batch without the LRU flag set, or temporarily have their LRU flag cleared. Consequently, the LRU flag is unreliable for this purpose.
In particular, this is the case when
secretmem_fault()allocates a fresh page and calls filemap_add_folio()->folio_add_lru(). The folio might be added to the per-cpu folio batch and won't get the LRU flag set until the batch was drained using e.g.,lru_add_drain().Consequently,
folio_is_secretmem()might not detect secretmem folios and GUP-fast can succeed in grabbing a secretmem folio, crashing the kernel when we would later try reading/writing to the folio, because the folio has been unmapped from the directmap.Fix it by removing that unreliable check.
Quoted 13 lines
Fixes 1507f51255c9 ("mm: introduce memfd_secret system call to create "secret" memory areas")Signed-off-by David Hildenbrand <[email protected]>Reported-by xingwei lee <[email protected]>Reported-by yue sun <[email protected]>Closes https://lore.kernel.org/lkml/CABOYnLyevJeravW=QrH0JUPYEcDN160aZFb7kwndm-J2rmz0HQ@mail.gmail.com/ open hereDebugged-by Miklos Szeredi <[email protected]>Tested-by Miklos Szeredi <[email protected]>Reviewed-by Mike Rapoport (IBM) <[email protected]>Cc Lorenzo Stoakes <[email protected]>Cc <[email protected]>Signed-off-by Andrew Morton <[email protected]>(cherry picked from commit 65291dcfcf8936e1b23cfd7718fdfde7cfaf7706)
Forgot to add when cherry-picking
Signature · 3 lines
Cheers, David / dhildenb
Greg KH
maintainerRe: [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios
Quoted 34 lines · David Hildenbrand
Quoted 19 lines · David Hildenbrand
folio_is_secretmem()currently relies on secretmem folios being LRU folios, to save some cycles.However, folios might reside in a folio batch without the LRU flag set, or temporarily have their LRU flag cleared. Consequently, the LRU flag is unreliable for this purpose.
In particular, this is the case when
secretmem_fault()allocates a fresh page and calls filemap_add_folio()->folio_add_lru(). The folio might be added to the per-cpu folio batch and won't get the LRU flag set until the batch was drained using e.g.,lru_add_drain().Consequently,
folio_is_secretmem()might not detect secretmem folios and GUP-fast can succeed in grabbing a secretmem folio, crashing the kernel when we would later try reading/writing to the folio, because the folio has been unmapped from the directmap.Fix it by removing that unreliable check.
Quoted 13 lines
Fixes 1507f51255c9 ("mm: introduce memfd_secret system call to create "secret" memory areas")Signed-off-by David Hildenbrand <[email protected]>Reported-by xingwei lee <[email protected]>Reported-by yue sun <[email protected]>Closes https://lore.kernel.org/lkml/CABOYnLyevJeravW=QrH0JUPYEcDN160aZFb7kwndm-J2rmz0HQ@mail.gmail.com/ open hereDebugged-by Miklos Szeredi <[email protected]>Tested-by Miklos Szeredi <[email protected]>Reviewed-by Mike Rapoport (IBM) <[email protected]>Cc Lorenzo Stoakes <[email protected]>Cc <[email protected]>Signed-off-by Andrew Morton <[email protected]>(cherry picked from commit 65291dcfcf8936e1b23cfd7718fdfde7cfaf7706)
Quoted 3 lines
Forgot to add when cherry-picking
Signed-off-by David Hildenbrand <[email protected]>
Now queued up, thanks.
greg k-h
Quoted 6 lines · On 08.04.24 12:14, [email protected] wrote:
The patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Quoted 7 lines
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y git checkout
FETCH_HEAD
git cherry-pick -x65291dcfcf8936e1b23cfd7718fdfde7cfaf7706
# <resolve conflicts, build, test, etc.>
git commit -s
Likely we want:
git cherry-pick -sx
And then
(a) If cherry-picking failed
# <resolve conflicts, build, test, etc.>
git cherry-pick --continue
(b) If cherry-picking succeeded
# <resolve issues, build, test, etc.>
git commit --amend
Signature · 3 lines
Cheers, David / dhildenb