projects
/
GitHub
/
MotorolaMobilityLLC
/
kernel-slsi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
f2fs: avoid wrong decrypted data from disk
[GitHub/MotorolaMobilityLLC/kernel-slsi.git]
/
fs
/
f2fs
/
segment.c
diff --git
a/fs/f2fs/segment.c
b/fs/f2fs/segment.c
index 89dc088346eaa63b7ba4054748dca53999b9a3e4..842c29e516d3ba180eb468563fbc9daa1cd2eebb 100644
(file)
--- a/
fs/f2fs/segment.c
+++ b/
fs/f2fs/segment.c
@@
-1892,7
+1892,7
@@
bool is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr)
struct seg_entry *se;
bool is_cp = false;
struct seg_entry *se;
bool is_cp = false;
- if (
blkaddr == NEW_ADDR || blkaddr == NULL_ADDR
)
+ if (
!is_valid_data_blkaddr(sbi, blkaddr)
)
return true;
down_read(&sit_i->sentry_lock);
return true;
down_read(&sit_i->sentry_lock);
@@
-2949,11
+2949,15
@@
void f2fs_wait_on_page_writeback(struct page *page,
}
}
}
}
-void f2fs_wait_on_block_writeback(struct
f2fs_sb_info *sbi
, block_t blkaddr)
+void f2fs_wait_on_block_writeback(struct
inode *inode
, block_t blkaddr)
{
{
+ struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
struct page *cpage;
struct page *cpage;
- if (blkaddr == NEW_ADDR || blkaddr == NULL_ADDR)
+ if (!f2fs_post_read_required(inode))
+ return;
+
+ if (!is_valid_data_blkaddr(sbi, blkaddr))
return;
cpage = find_lock_page(META_MAPPING(sbi), blkaddr);
return;
cpage = find_lock_page(META_MAPPING(sbi), blkaddr);
@@
-3671,6
+3675,15
@@
static int build_sit_entries(struct f2fs_sb_info *sbi)
unsigned int old_valid_blocks;
start = le32_to_cpu(segno_in_journal(journal, i));
unsigned int old_valid_blocks;
start = le32_to_cpu(segno_in_journal(journal, i));
+ if (start >= MAIN_SEGS(sbi)) {
+ f2fs_msg(sbi->sb, KERN_ERR,
+ "Wrong journal entry on segno %u",
+ start);
+ set_sbi_flag(sbi, SBI_NEED_FSCK);
+ err = -EINVAL;
+ break;
+ }
+
se = &sit_i->sentries[start];
sit = sit_in_journal(journal, i);
se = &sit_i->sentries[start];
sit = sit_in_journal(journal, i);