projects
/
linux-block.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
42a80aa
)
f2fs: fix to do sanity check in update_sit_entry
author
Zhiguo Niu
<zhiguo.niu@unisoc.com>
Wed, 28 Feb 2024 11:59:54 +0000
(19:59 +0800)
committer
Jaegeuk Kim
<jaegeuk@kernel.org>
Mon, 4 Mar 2024 17:51:58 +0000
(09:51 -0800)
If GET_SEGNO return NULL_SEGNO for some unecpected case,
update_sit_entry will access invalid memory address,
cause system crash. It is better to do sanity check about
GET_SEGNO just like update_segment_mtime & locate_dirty_segment.
Also remove some redundant judgment code.
Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/segment.c
patch
|
blob
|
blame
|
history
diff --git
a/fs/f2fs/segment.c
b/fs/f2fs/segment.c
index fa395801137b7ed9a66f252ed9c95acfa80d23e3..0d21ce615cecd9f5b99b03effed7e682265f2865 100644
(file)
--- a/
fs/f2fs/segment.c
+++ b/
fs/f2fs/segment.c
@@
-2413,6
+2413,8
@@
static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
#endif
segno = GET_SEGNO(sbi, blkaddr);
+ if (segno == NULL_SEGNO)
+ return;
se = get_seg_entry(sbi, segno);
new_vblocks = se->valid_blocks + del;
@@
-3526,8
+3528,7
@@
int f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
* since SSR needs latest valid block information.
*/
update_sit_entry(sbi, *new_blkaddr, 1);
- if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
- update_sit_entry(sbi, old_blkaddr, -1);
+ update_sit_entry(sbi, old_blkaddr, -1);
/*
* If the current segment is full, flush it out and replace it with a