]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm-filemap-align-last_index-to-folio-size-fix
authorKlara Modin <klarasmodin@gmail.com>
Mon, 14 Jul 2025 22:34:12 +0000 (00:34 +0200)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 12 Sep 2025 00:25:45 +0000 (17:25 -0700)
fix overflow on 32-bit

iocb->ki_pos is loff_t (long long) while pgoff_t is unsigned long and
this overflow seems to happen in practice, resulting in last_index being
before index.

Link: https://lkml.kernel.org/r/yru7qf5gvyzccq5ohhpylvxug5lr5tf54omspbjh4sm6pcdb2r@fpjgj2pxw7va
Signed-off-by: Klara Modin <klarasmodin@gmail.com>
Cc: Chi Zhiling <chizhiling@kylinos.cn>
Cc: David Hildenbrand <david@redhat.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Youling Tang <tangyouling@kylinos.cn>
Cc: Youling Tang <youling.tang@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/filemap.c

index 48b3515e117113ff7fce5f038cf75bf928f867f8..344ab106c21c530beb0d42e7a657ce7ea688604d 100644 (file)
@@ -2601,8 +2601,8 @@ static int filemap_get_pages(struct kiocb *iocb, size_t count,
        int err = 0;
 
        /* "last_index" is the index of the folio beyond the end of the read */
-       last_index = round_up(iocb->ki_pos + count, mapping_min_folio_nrbytes(mapping));
-       last_index >>= PAGE_SHIFT;
+       last_index = round_up(iocb->ki_pos + count,
+                       mapping_min_folio_nrbytes(mapping)) >> PAGE_SHIFT;
 retry:
        if (fatal_signal_pending(current))
                return -EINTR;