mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
ntfs: fix kmap_local leak in write_mft_record_nolock() error paths
write_mft_record_nolock() maps the MFT record folio with
kmap_local_folio(), but the pre_write_mst_fixup() and
bio_add_folio() failure paths jump to the error label without
unmapping it. kmap_local mappings are stack-ordered per task, so
leaking one corrupts the nesting for any outer mapping.
Unmap the folio on those error paths too.
Fixes: 115380f9a2 ("ntfs: update mft operations")
Signed-off-by: Baolin Liu <liubaolin@kylinos.cn>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
parent
ba1b61ddaa
commit
cf06dcd572
|
|
@ -580,7 +580,7 @@ int write_mft_record_nolock(struct ntfs_inode *ni, struct mft_record *m, int syn
|
|||
err = pre_write_mst_fixup((struct ntfs_record *)fixup_m, vol->mft_record_size);
|
||||
if (err) {
|
||||
ntfs_error(vol->sb, "Failed to apply mst fixups!");
|
||||
goto err_out;
|
||||
goto unmap_err_out;
|
||||
}
|
||||
|
||||
folio_size = vol->mft_record_size / ni->mft_lcn_count;
|
||||
|
|
@ -645,6 +645,8 @@ int write_mft_record_nolock(struct ntfs_inode *ni, struct mft_record *m, int syn
|
|||
return 0;
|
||||
put_bio_out:
|
||||
bio_put(bio);
|
||||
unmap_err_out:
|
||||
kunmap_local(kaddr);
|
||||
err_out:
|
||||
/*
|
||||
* The caller should mark the base inode as bad so no more I/O
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user