Re: [PATCH v1 7/9] ntfs: fix kmap_local leak in write_mft_record_nolock() error paths
Hyunchul Lee <[email protected]>
| Newsgroups | org.kernel.vger.linux-kernel,dev.linux.lists.ntfs |
|---|---|
| Message-ID | <CANFS6ba82SFbMdnSxqofYg=JdgkhhVFQg=OAzEoOFJ8JEPaOMQ@mail.gmail.com> |
2026년 8월 21일 (금) 오후 2:33, Baolin Liu <[email protected]>님이 작성: > > From: Baolin Liu <[email protected]> > > 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 <[email protected]> Looks good to me. Reviewed-by: Hyunchul Lee <[email protected]> > --- > 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