public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
* FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree
@ 2024-04-08 10:14 gregkh
  2024-04-08 10:34 ` [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios David Hildenbrand
  2024-04-08 10:42 ` FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree David Hildenbrand
  0 siblings, 2 replies; 5+ messages in thread
From: gregkh @ 2024-04-08 10:14 UTC (permalink / raw)
  To: david, akpm, lstoakes, miklos, mszeredi, rppt, samsun1006219,
	stable, xrivendell7
  Cc: stable


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 <stable@vger.kernel.org>.

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 '<stable@vger.kernel.org>' --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 <david@redhat.com>
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.

Link: https://lkml.kernel.org/r/20240326143210.291116-2-david@redhat.com
Fixes: 1507f51255c9 ("mm: introduce memfd_secret system call to create "secret" memory areas")
Signed-off-by: David Hildenbrand <david@redhat.com>
Reported-by: xingwei lee <xrivendell7@gmail.com>
Reported-by: yue sun <samsun1006219@gmail.com>
Closes: https://lore.kernel.org/lkml/CABOYnLyevJeravW=QrH0JUPYEcDN160aZFb7kwndm-J2rmz0HQ@mail.gmail.com/
Debugged-by: Miklos Szeredi <miklos@szeredi.hu>
Tested-by: Miklos Szeredi <mszeredi@redhat.com>
Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
Cc: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

diff --git a/include/linux/secretmem.h b/include/linux/secretmem.h
index 35f3a4a8ceb1..acf7e1a3f3de 100644
--- a/include/linux/secretmem.h
+++ b/include/linux/secretmem.h
@@ -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 *)


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios
  2024-04-08 10:14 FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree gregkh
@ 2024-04-08 10:34 ` David Hildenbrand
  2024-04-08 10:39   ` David Hildenbrand
  2024-04-08 10:42 ` FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree David Hildenbrand
  1 sibling, 1 reply; 5+ messages in thread
From: David Hildenbrand @ 2024-04-08 10:34 UTC (permalink / raw)
  To: stable
  Cc: David Hildenbrand, xingwei lee, yue sun, Miklos Szeredi,
	Miklos Szeredi, Mike Rapoport, Lorenzo Stoakes

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.

Link: https://lkml.kernel.org/r/20240326143210.291116-2-david@redhat.com
Fixes: 1507f51255c9 ("mm: introduce memfd_secret system call to create "secret" memory areas")
Signed-off-by: David Hildenbrand <david@redhat.com>
Reported-by: xingwei lee <xrivendell7@gmail.com>
Reported-by: yue sun <samsun1006219@gmail.com>
Closes: https://lore.kernel.org/lkml/CABOYnLyevJeravW=QrH0JUPYEcDN160aZFb7kwndm-J2rmz0HQ@mail.gmail.com/
Debugged-by: Miklos Szeredi <miklos@szeredi.hu>
Tested-by: Miklos Szeredi <mszeredi@redhat.com>
Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
Cc: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
(cherry picked from commit 65291dcfcf8936e1b23cfd7718fdfde7cfaf7706)
---
 include/linux/secretmem.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/secretmem.h b/include/linux/secretmem.h
index 988528b5da43..48ffe325184c 100644
--- a/include/linux/secretmem.h
+++ b/include/linux/secretmem.h
@@ -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 *)
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios
  2024-04-08 10:34 ` [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios David Hildenbrand
@ 2024-04-08 10:39   ` David Hildenbrand
  2024-04-08 11:27     ` Greg KH
  0 siblings, 1 reply; 5+ messages in thread
From: David Hildenbrand @ 2024-04-08 10:39 UTC (permalink / raw)
  To: stable
  Cc: xingwei lee, yue sun, Miklos Szeredi, Miklos Szeredi,
	Mike Rapoport, Lorenzo Stoakes

On 08.04.24 12:34, David Hildenbrand wrote:
> 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.
> 
> Link: https://lkml.kernel.org/r/20240326143210.291116-2-david@redhat.com
> Fixes: 1507f51255c9 ("mm: introduce memfd_secret system call to create "secret" memory areas")
> Signed-off-by: David Hildenbrand <david@redhat.com>
> Reported-by: xingwei lee <xrivendell7@gmail.com>
> Reported-by: yue sun <samsun1006219@gmail.com>
> Closes: https://lore.kernel.org/lkml/CABOYnLyevJeravW=QrH0JUPYEcDN160aZFb7kwndm-J2rmz0HQ@mail.gmail.com/
> Debugged-by: Miklos Szeredi <miklos@szeredi.hu>
> Tested-by: Miklos Szeredi <mszeredi@redhat.com>
> Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
> Cc: Lorenzo Stoakes <lstoakes@gmail.com>
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> (cherry picked from commit 65291dcfcf8936e1b23cfd7718fdfde7cfaf7706)

Forgot to add when cherry-picking

Signed-off-by: David Hildenbrand <david@redhat.com>

-- 
Cheers,

David / dhildenb


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree
  2024-04-08 10:14 FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree gregkh
  2024-04-08 10:34 ` [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios David Hildenbrand
@ 2024-04-08 10:42 ` David Hildenbrand
  1 sibling, 0 replies; 5+ messages in thread
From: David Hildenbrand @ 2024-04-08 10:42 UTC (permalink / raw)
  To: gregkh, akpm, lstoakes, miklos, mszeredi, rppt, samsun1006219,
	stable, xrivendell7

On 08.04.24 12:14, gregkh@linuxfoundation.org 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 <stable@vger.kernel.org>.
> 
> 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

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

-- 
Cheers,

David / dhildenb


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios
  2024-04-08 10:39   ` David Hildenbrand
@ 2024-04-08 11:27     ` Greg KH
  0 siblings, 0 replies; 5+ messages in thread
From: Greg KH @ 2024-04-08 11:27 UTC (permalink / raw)
  To: David Hildenbrand
  Cc: stable, xingwei lee, yue sun, Miklos Szeredi, Miklos Szeredi,
	Mike Rapoport, Lorenzo Stoakes

On Mon, Apr 08, 2024 at 12:39:51PM +0200, David Hildenbrand wrote:
> On 08.04.24 12:34, David Hildenbrand wrote:
> > 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.
> > 
> > Link: https://lkml.kernel.org/r/20240326143210.291116-2-david@redhat.com
> > Fixes: 1507f51255c9 ("mm: introduce memfd_secret system call to create "secret" memory areas")
> > Signed-off-by: David Hildenbrand <david@redhat.com>
> > Reported-by: xingwei lee <xrivendell7@gmail.com>
> > Reported-by: yue sun <samsun1006219@gmail.com>
> > Closes: https://lore.kernel.org/lkml/CABOYnLyevJeravW=QrH0JUPYEcDN160aZFb7kwndm-J2rmz0HQ@mail.gmail.com/
> > Debugged-by: Miklos Szeredi <miklos@szeredi.hu>
> > Tested-by: Miklos Szeredi <mszeredi@redhat.com>
> > Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
> > Cc: Lorenzo Stoakes <lstoakes@gmail.com>
> > Cc: <stable@vger.kernel.org>
> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> > (cherry picked from commit 65291dcfcf8936e1b23cfd7718fdfde7cfaf7706)
> 
> Forgot to add when cherry-picking
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>

Now queued up, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-04-08 11:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-08 10:14 FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree gregkh
2024-04-08 10:34 ` [PATCH 6.1.y] mm/secretmem: fix GUP-fast succeeding on secretmem folios David Hildenbrand
2024-04-08 10:39   ` David Hildenbrand
2024-04-08 11:27     ` Greg KH
2024-04-08 10:42 ` FAILED: patch "[PATCH] mm/secretmem: fix GUP-fast succeeding on secretmem folios" failed to apply to 6.1-stable tree David Hildenbrand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox