Zhang Yi
66f28ffb38
mm/truncate: fix out-of-bounds when doing a right-aligned split
When performing a right split on a folio, the split_at2 may point to a
not-present page if the offset + length equals the original folio size,
which will trigger the following error:
BUG: unable to handle page fault for address: ffffea0006000008
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
PGD 143ffb9067 P4D 143ffb9067 PUD 143ffb8067 PMD 0
Oops: Oops: 0000 [#1] SMP PTI
CPU: 0 UID: 0 PID: 502640 Comm: fsx Not tainted 6.15.0-rc3-gc6156189fc6b #889 PR
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/4
RIP: 0010:truncate_inode_partial_folio+0x208/0x620
Code: ff 03 48 01 da e8 78 7e 13 00 48 83 05 10 b5 5a 0c 01 85 c0 0f 85 1c 02 001
RSP: 0018:ffffc90005bafab0 EFLAGS: 00010286
RAX: 0000000000000000 RBX: ffffea0005ffff00 RCX: 0000000000000002
RDX: 000000000000000c RSI: 0000000000013975 RDI: ffffc90005bafa30
RBP: ffffea0006000000 R08: 0000000000000000 R09: 00000000000009bf
R10: 00000000000007e0 R11: 0000000000000000 R12: 0000000000001633
R13: 0000000000000000 R14: ffffea0005ffff00 R15: fffffffffffffffe
FS: 00007f9f9a161740(0000) GS:ffff8894971fd000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: ffffea0006000008 CR3: 000000017c2ae000 CR4: 00000000000006f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
truncate_inode_pages_range+0x226/0x720
truncate_pagecache+0x57/0x90
...
Fix this issue by skipping the split if truncation aligns with the folio
size, make sure the split page number lies within the folio.
Link: https://lkml.kernel.org/r/20250512062825.3533342-1-yi.zhang@huaweicloud.com
Fixes: 7460b470a1 ("mm/truncate: use folio_split() in truncate operation")
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Zi Yan <ziy@nvidia.com>
Cc: ErKun Yang <yangerkun@huawei.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2025-05-20 22:49:39 -07:00
..
2025-04-01 15:17:10 -07:00
2025-04-18 13:20:20 -07:00
2025-02-01 03:53:26 -08:00
2025-03-05 21:36:14 -08:00
2025-04-05 10:30:12 +02:00
2025-03-21 22:03:13 -07:00
2025-03-16 22:06:27 -07:00
2025-03-16 22:06:25 -07:00
2025-03-16 22:06:24 -07:00
2025-04-11 17:32:39 -07:00
2025-03-21 22:03:10 -07:00
2025-04-11 17:32:36 -07:00
2024-04-25 20:56:04 -07:00
2024-09-17 01:07:01 -07:00
2025-03-17 22:07:05 -07:00
2024-07-03 19:29:58 -07:00
2025-01-13 22:40:59 -08:00
2025-02-03 11:46:02 +01:00
2024-11-03 01:28:06 -05:00
2024-09-01 20:43:33 -07:00
2024-09-01 20:43:33 -07:00
2025-04-11 17:32:40 -07:00
2025-03-04 17:02:25 +00:00
2025-04-17 20:10:07 -07:00
2024-07-03 19:30:06 -07:00
2025-03-17 22:06:39 -07:00
2025-05-07 23:39:38 -07:00
2025-03-17 00:05:35 -07:00
2025-03-16 22:06:31 -07:00
2025-03-16 22:06:31 -07:00
2025-04-17 20:10:08 -07:00
2025-03-16 22:06:29 -07:00
2025-05-11 17:26:06 -07:00
2024-07-03 19:29:58 -07:00
2025-03-16 22:06:20 -07:00
2025-05-11 17:26:07 -07:00
2025-03-16 22:06:23 -07:00
2025-04-06 10:00:04 -07:00
2025-03-17 00:05:32 -07:00
2025-03-17 22:06:46 -07:00
2025-03-16 22:06:08 -07:00
2025-03-16 22:05:58 -07:00
2025-03-17 00:05:32 -07:00
2024-11-11 00:26:44 -08:00
2025-03-17 22:07:04 -07:00
2025-03-17 00:05:32 -07:00
2025-05-09 08:53:12 +03:00
2025-04-17 20:10:06 -07:00
2025-03-21 22:03:11 -07:00
2025-04-11 17:32:35 -07:00
2025-03-16 22:06:04 -07:00
2025-04-01 15:17:12 -07:00
2025-03-17 22:07:05 -07:00
2024-09-26 14:01:44 -07:00
2025-05-11 17:26:06 -07:00
2025-04-01 09:29:18 -07:00
2024-06-05 19:19:26 -07:00
2025-03-17 22:06:41 -07:00
2024-03-13 12:12:21 -07:00
2025-04-01 09:29:18 -07:00
2025-04-22 18:16:08 +02:00
2025-03-16 22:06:32 -07:00
2025-03-17 22:06:39 -07:00
2025-05-11 17:26:07 -07:00
2025-01-13 22:40:34 -08:00
2025-04-01 09:29:18 -07:00
2025-03-16 22:06:12 -07:00
2024-09-01 20:25:54 -07:00
2024-09-01 20:25:55 -07:00
2025-03-17 22:06:46 -07:00
2025-04-01 15:17:09 -07:00
2025-01-13 22:40:51 -08:00
2025-04-01 09:29:18 -07:00
2025-01-25 20:22:29 -08:00
2025-01-25 20:22:29 -08:00
2025-01-25 20:22:38 -08:00
2025-03-16 22:05:55 -07:00
2025-05-20 22:49:37 -07:00
2025-03-17 00:05:35 -07:00
2025-03-17 22:06:57 -07:00
2025-01-13 22:40:31 -08:00
2025-03-16 22:05:59 -07:00
2025-03-17 22:06:50 -07:00
2025-04-01 15:14:43 -07:00
2025-04-01 09:29:18 -07:00
2025-03-17 22:06:57 -07:00
2025-03-16 22:06:42 -07:00
2025-04-05 10:30:12 +02:00
2024-11-11 00:26:44 -08:00
2024-07-10 12:14:54 -07:00
2024-04-25 20:55:49 -07:00
2025-04-01 09:29:18 -07:00
2024-12-18 19:04:43 -08:00
2024-11-05 16:56:23 -08:00
2025-01-13 22:40:48 -08:00
2025-03-13 16:31:12 +01:00
2025-03-17 22:06:48 -07:00
2025-01-13 22:40:38 -08:00
2025-01-27 19:25:45 -05:00
2024-09-01 20:25:45 -07:00
2025-04-01 09:29:18 -07:00
2025-03-21 22:03:13 -07:00
2025-03-17 00:05:40 -07:00
2024-10-31 20:27:04 -07:00
2025-03-25 10:54:15 -07:00
2025-03-20 10:33:38 +01:00
2025-04-24 19:19:40 +02:00
2025-03-16 22:06:29 -07:00
2025-03-17 22:07:01 -07:00
2025-03-17 22:06:58 -07:00
2025-03-16 22:06:44 -07:00
2025-04-01 09:29:18 -07:00
2025-04-01 09:29:18 -07:00
2025-05-07 23:39:41 -07:00
2025-05-20 22:49:39 -07:00
2025-02-28 11:51:31 -08:00
2025-05-11 17:29:55 -07:00
2025-03-26 21:02:05 -07:00
2025-01-13 22:40:42 -08:00
2025-04-11 17:32:37 -07:00
2025-04-11 17:32:37 -07:00
2025-05-07 23:39:41 -07:00
2025-04-17 20:10:09 -07:00
2025-04-01 09:29:18 -07:00
2025-01-25 20:22:39 -08:00
2025-01-25 20:22:35 -08:00
2025-03-17 00:05:41 -07:00
2025-05-11 17:26:07 -07:00
2025-04-01 15:14:43 -07:00