Messages in this thread Patch in this message | | | From | Namjae Jeon <> | Date | Sat, 6 May 2023 09:52:41 +0900 | Subject | Re: [PATCH] ntfs: do not dereference a null ctx on error |
| |
2023-04-08 4:44 GMT+09:00, Danila Chernetsov <listdansp@mail.ru>: > In ntfs_mft_data_extend_allocation_nolock(), if an error condition occurs > prior to 'ctx' being set to a non-NULL value, avoid dereferencing the NULL > 'ctx' pointer in error handling. Please check the warnings from checkpatch.pl.
ERROR: trailing whitespace #107: FILE: fs/ntfs/mft.c:1958: +^I$
ERROR: "(foo*)" should be "(foo *)" #118: FILE: fs/ntfs/mft.c:1967: + if (ntfs_mapping_pairs_build(vol, (u8*)a + le16_to_cpu(
ERROR: else should follow close brace '}' #146: FILE: fs/ntfs/mft.c:1984: } + else if (IS_ERR(ctx->mrec)) {
> > Found by Linux Verification Center (linuxtesting.org) with SVACE. > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") > Signed-off-by: Danila Chernetsov <listdansp@mail.ru> > --- > fs/ntfs/mft.c | 38 +++++++++++++++++++++----------------- > 1 file changed, 21 insertions(+), 17 deletions(-) > > diff --git a/fs/ntfs/mft.c b/fs/ntfs/mft.c > index 48030899dc6e..e1126ce6f8ec 100644 > --- a/fs/ntfs/mft.c > +++ b/fs/ntfs/mft.c > @@ -1955,36 +1955,40 @@ static int > ntfs_mft_data_extend_allocation_nolock(ntfs_volume *vol) > "attribute.%s", es); > NVolSetErrors(vol); > } > - a = ctx->attr; > + > if (ntfs_rl_truncate_nolock(vol, &mft_ni->runlist, old_last_vcn)) { > ntfs_error(vol->sb, "Failed to truncate mft data attribute " > "runlist.%s", es); > NVolSetErrors(vol); > } > - if (mp_rebuilt && !IS_ERR(ctx->mrec)) { > - if (ntfs_mapping_pairs_build(vol, (u8*)a + le16_to_cpu( > + if (ctx) { > + a = ctx->attr; > + if (mp_rebuilt && !IS_ERR(ctx->mrec)) { > + if (ntfs_mapping_pairs_build(vol, (u8*)a + le16_to_cpu( > a->data.non_resident.mapping_pairs_offset), > old_alen - le16_to_cpu( > - a->data.non_resident.mapping_pairs_offset), > + a->data.non_resident.mapping_pairs_offset), > rl2, ll, -1, NULL)) { > - ntfs_error(vol->sb, "Failed to restore mapping pairs " > + ntfs_error(vol->sb, "Failed to restore mapping pairs " > "array.%s", es); > - NVolSetErrors(vol); > - } > - if (ntfs_attr_record_resize(ctx->mrec, a, old_alen)) { > - ntfs_error(vol->sb, "Failed to restore attribute " > + NVolSetErrors(vol); > + } > + if (ntfs_attr_record_resize(ctx->mrec, a, old_alen)) { > + ntfs_error(vol->sb, "Failed to restore attribute " > "record.%s", es); > - NVolSetErrors(vol); > + NVolSetErrors(vol); > + } > + flush_dcache_mft_record_page(ctx->ntfs_ino); > + mark_mft_record_dirty(ctx->ntfs_ino); > } > - flush_dcache_mft_record_page(ctx->ntfs_ino); > - mark_mft_record_dirty(ctx->ntfs_ino); > - } else if (IS_ERR(ctx->mrec)) { > - ntfs_error(vol->sb, "Failed to restore attribute search " > + else if (IS_ERR(ctx->mrec)) { > + ntfs_error(vol->sb, "Failed to restore attribute search " > "context.%s", es); > - NVolSetErrors(vol); > + NVolSetErrors(vol); > + } > + if (ctx) > + ntfs_attr_put_search_ctx(ctx); > } > - if (ctx) > - ntfs_attr_put_search_ctx(ctx); > if (!IS_ERR(mrec)) > unmap_mft_record(mft_ni); > up_write(&mft_ni->runlist.lock); > -- > 2.25.1 > >
| |