Re: [PATCH v1 7/9] ntfs: fix kmap_local leak in write_mft_record_nolock() error paths
From: Hyunchul Lee
Date: Mon Aug 24 2026 - 01:11:59 EST
2026년 8월 21일 (금) 오후 2:33, Baolin Liu <liubaolin12138@xxxxxxx>님이 작성:
>
> From: Baolin Liu <liubaolin@xxxxxxxxxx>
>
> 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: 115380f9a2f9 ("ntfs: update mft operations")
> Signed-off-by: Baolin Liu <liubaolin@xxxxxxxxxx>
Looks good to me.
Reviewed-by: Hyunchul Lee <hyc.lee@xxxxxxxxx>
> ---
> fs/ntfs/mft.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ntfs/mft.c b/fs/ntfs/mft.c
> index 984a0827f9ac..69b007e574fc 100644
> --- a/fs/ntfs/mft.c
> +++ b/fs/ntfs/mft.c
> @@ -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
> --
> 2.51.0
>
>
--
Thanks,
Hyunchul