Skip to content

Commit 3f0b466

Browse files
author
test
committed
fs/ntfs3: grow log scratch buffer for page size changes
The linux-next fix starts log replay with DefaultLogPageSize so 64K kernels can mount smaller NTFS volumes. log_replay() may later adopt an on-disk sys_page_size/page_size that is larger than the initial 4K value. one_page_buf is allocated before that adjustment, and read_log_page() uses it for unaligned page reads sized by log->page_size. Grow one_page_buf before assigning a larger validated page size so later reads have a scratch buffer large enough for the adopted log page size. Change-Id: I4a1491fa96b2d6b810278f58160ed070900b2ad5 Signed-off-by: Jamie Nguyen <jamien@nvidia.com>
1 parent 1eeabcc commit 3f0b466

1 file changed

Lines changed: 23 additions & 4 deletions

File tree

fs/ntfs3/fslog.c

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3924,13 +3924,32 @@ int log_replay(struct ntfs_inode *ni, bool *initialized)
39243924
*/
39253925
t32 = le32_to_cpu(log->rst_info.r_page->sys_page_size);
39263926
if (log->page_size != t32) {
3927+
u32 new_page_size;
3928+
39273929
log->l_size = log->orig_file_size;
3928-
log->page_size = norm_file_page(t32, &log->l_size,
3929-
t32 == DefaultLogPageSize);
3930+
new_page_size = norm_file_page(t32, &log->l_size,
3931+
t32 == DefaultLogPageSize);
3932+
if (new_page_size != t32) {
3933+
err = -EINVAL;
3934+
goto out;
3935+
}
3936+
3937+
if (new_page_size > log->page_size) {
3938+
void *one_page_buf;
3939+
3940+
one_page_buf = krealloc(log->one_page_buf, new_page_size,
3941+
GFP_NOFS);
3942+
if (!one_page_buf) {
3943+
err = -ENOMEM;
3944+
goto out;
3945+
}
3946+
log->one_page_buf = one_page_buf;
3947+
}
3948+
3949+
log->page_size = new_page_size;
39303950
}
39313951

3932-
if (log->page_size != t32 ||
3933-
log->page_size != le32_to_cpu(log->rst_info.r_page->page_size)) {
3952+
if (log->page_size != le32_to_cpu(log->rst_info.r_page->page_size)) {
39343953
err = -EINVAL;
39353954
goto out;
39363955
}

0 commit comments

Comments
 (0)