* [merged mm-stable] mm-add-memcpy_from_file_folio.patch removed from -mm tree
@ 2023-02-03 6:38 Andrew Morton
2023-02-03 21:33 ` Matthew Wilcox
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2023-02-03 6:38 UTC (permalink / raw)
To: mm-commits, ira.weiny, fmdefrancesco, willy, akpm
The quilt patch titled
Subject: mm: add memcpy_from_file_folio()
has been removed from the -mm tree. Its filename was
mm-add-memcpy_from_file_folio.patch
This patch was dropped because it was merged into the mm-stable branch
of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Subject: mm: add memcpy_from_file_folio()
Date: Thu, 26 Jan 2023 20:15:52 +0000
This is the equivalent of memcpy_from_page(). It differs in that it takes
the position in a file instead of offset in a folio, it accepts the total
number of bytes to be copied (instead of the number of bytes to be copied
from this folio) and it returns how many bytes were copied from the folio,
rather than making the caller calculate that and then checking if the
caller got it right.
[akpm@linux-foundation.org: fix typo in comment]
Link: https://lkml.kernel.org/r/20230126201552.1681588-1-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
Cc: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
--- a/include/linux/highmem.h~mm-add-memcpy_from_file_folio
+++ a/include/linux/highmem.h
@@ -414,6 +414,35 @@ static inline void memzero_page(struct p
}
/**
+ * memcpy_from_file_folio - Copy some bytes from a file folio.
+ * @to: The destination buffer.
+ * @folio: The folio to copy from.
+ * @pos: The position in the file.
+ * @len: The maximum number of bytes to copy.
+ *
+ * Copy up to @len bytes from this folio. This may be limited by PAGE_SIZE
+ * if the folio comes from HIGHMEM, and by the size of the folio.
+ *
+ * Return: The number of bytes copied from the folio.
+ */
+static inline size_t memcpy_from_file_folio(char *to, struct folio *folio,
+ loff_t pos, size_t len)
+{
+ size_t offset = offset_in_folio(folio, pos);
+ char *from = kmap_local_folio(folio, offset);
+
+ if (folio_test_highmem(folio))
+ len = min_t(size_t, len, PAGE_SIZE - offset);
+ else
+ len = min(len, folio_size(folio) - offset);
+
+ memcpy(to, from, len);
+ kunmap_local(from);
+
+ return len;
+}
+
+/**
* folio_zero_segments() - Zero two byte ranges in a folio.
* @folio: The folio to write to.
* @start1: The first byte to zero.
--- a/include/linux/page-flags.h~mm-add-memcpy_from_file_folio
+++ a/include/linux/page-flags.h
@@ -531,6 +531,7 @@ PAGEFLAG(Readahead, readahead, PF_NO_COM
* available at this point.
*/
#define PageHighMem(__p) is_highmem_idx(page_zonenum(__p))
+#define folio_test_highmem(__f) is_highmem_idx(folio_zonenum(__f))
#else
PAGEFLAG_FALSE(HighMem, highmem)
#endif
_
Patches currently in -mm which might be from willy@infradead.org are
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [merged mm-stable] mm-add-memcpy_from_file_folio.patch removed from -mm tree
2023-02-03 6:38 [merged mm-stable] mm-add-memcpy_from_file_folio.patch removed from -mm tree Andrew Morton
@ 2023-02-03 21:33 ` Matthew Wilcox
0 siblings, 0 replies; 3+ messages in thread
From: Matthew Wilcox @ 2023-02-03 21:33 UTC (permalink / raw)
To: Andrew Morton; +Cc: mm-commits, ira.weiny, fmdefrancesco, linux-mm
On Thu, Feb 02, 2023 at 10:38:49PM -0800, Andrew Morton wrote:
> This patch was dropped because it was merged into the mm-stable branch
> of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
I pick the worst time to find bugs in my own code.
From cf8f62107c965eafc2fa9ad0f839269fcb11991d Mon Sep 17 00:00:00 2001
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Date: Fri, 3 Feb 2023 16:28:40 -0500
Subject: [PATCH] mm: Fix memcpy_from_file_folio() integer underflow
If we have a HIGHMEM system with a large folio, 'offset' may be larger
than PAGE_SIZE, and so min_t will cap at 'len' instead of the intended
end-of-page. That can overflow into the next page which is likely to
be unmapped and fault, but could theoretically copy the wrong data.
Fixes: [no commit ID yet] ("mm: add memcpy_from_file_folio()")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
include/linux/highmem.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 348701dae77f..b06254e76d99 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -431,9 +431,10 @@ static inline size_t memcpy_from_file_folio(char *to, struct folio *folio,
size_t offset = offset_in_folio(folio, pos);
char *from = kmap_local_folio(folio, offset);
- if (folio_test_highmem(folio))
+ if (folio_test_highmem(folio)) {
+ offset = offset_in_page(offset);
len = min_t(size_t, len, PAGE_SIZE - offset);
- else
+ } else
len = min(len, folio_size(folio) - offset);
memcpy(to, from, len);
--
2.35.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [merged mm-stable] mm-add-memcpy_from_file_folio.patch removed from -mm tree
@ 2023-02-10 0:52 Andrew Morton
0 siblings, 0 replies; 3+ messages in thread
From: Andrew Morton @ 2023-02-10 0:52 UTC (permalink / raw)
To: mm-commits, ira.weiny, fmdefrancesco, willy, akpm
The quilt patch titled
Subject: mm: fix memcpy_from_file_folio() integer underflow
has been removed from the -mm tree. Its filename was
mm-add-memcpy_from_file_folio.patch
This patch was dropped because it was merged into the mm-stable branch
of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Subject: mm: fix memcpy_from_file_folio() integer underflow
Date: Fri, 3 Feb 2023 16:28:40 -0500
If we have a HIGHMEM system with a large folio, 'offset' may be larger
than PAGE_SIZE, and so min_t will cap at 'len' instead of the intended
end-of-page. That can overflow into the next page which is likely to be
unmapped and fault, but could theoretically copy the wrong data.
Link: https://lkml.kernel.org/r/Y919vmSrtAgsf6K3@casper.infradead.org
Fixes: 00cdf76012ab ("mm: add memcpy_from_file_folio()")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
Cc: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
include/linux/highmem.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/include/linux/highmem.h~mm-add-memcpy_from_file_folio
+++ a/include/linux/highmem.h
@@ -431,9 +431,10 @@ static inline size_t memcpy_from_file_fo
size_t offset = offset_in_folio(folio, pos);
char *from = kmap_local_folio(folio, offset);
- if (folio_test_highmem(folio))
+ if (folio_test_highmem(folio)) {
+ offset = offset_in_page(offset);
len = min_t(size_t, len, PAGE_SIZE - offset);
- else
+ } else
len = min(len, folio_size(folio) - offset);
memcpy(to, from, len);
_
Patches currently in -mm which might be from willy@infradead.org are
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-02-10 0:52 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-03 6:38 [merged mm-stable] mm-add-memcpy_from_file_folio.patch removed from -mm tree Andrew Morton
2023-02-03 21:33 ` Matthew Wilcox
-- strict thread matches above, loose matches on Subject: below --
2023-02-10 0:52 Andrew Morton
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.