From nobody Wed Feb 11 16:10:47 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2083CC77B75 for ; Mon, 8 May 2023 12:36:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234218AbjEHMg0 (ORCPT ); Mon, 8 May 2023 08:36:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233918AbjEHMgY (ORCPT ); Mon, 8 May 2023 08:36:24 -0400 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5199E37E57; Mon, 8 May 2023 05:36:06 -0700 (PDT) Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id B025E21C2; Mon, 8 May 2023 12:31:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1683549077; bh=8YnqHs6viNhkNZ9+6wZf88ELrlrGUvvnL2bs2/5eVko=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=HCrARVnRdX+b90e0/I9bBzR4l5wjGoEeWjE4hBXgbuvurr62vl2f/r6LIYWMZ9AM5 QhFavzGfh8C8JjEFbZcixiMiI+gpMEkj1fvRdg0N7YknMtwK9/HnLZ8f+Ov7Y4/SFG MacEJQfAmzJeUxlGld1jYnzRwsoWN56Sa4oduakI= Received: from [192.168.211.146] (192.168.211.146) by vdlg-exch-02.paragon-software.com (172.30.1.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Mon, 8 May 2023 15:36:03 +0300 Message-ID: Date: Mon, 8 May 2023 16:36:03 +0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Subject: [PATCH 01/10] fs/ntfs3: Correct checking while generating attr_list Content-Language: en-US From: Konstantin Komarov To: CC: Linux Kernel Mailing List , References: In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [192.168.211.146] X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Correct slightly previous commit: Enhance sanity check while generating attr_list Signed-off-by: Konstantin Komarov --- =C2=A0fs/ntfs3/frecord.c | 25 ++++++++++--------------- =C2=A01 file changed, 10 insertions(+), 15 deletions(-) diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c index 50214b77c6a3..66f3341c65ec 100644 --- a/fs/ntfs3/frecord.c +++ b/fs/ntfs3/frecord.c @@ -813,10 +813,8 @@ int ni_create_attr_list(struct ntfs_inode *ni) =C2=A0=C2=A0=C2=A0 =C2=A0 * Looks like one record_size is always enough. =C2=A0=C2=A0=C2=A0 =C2=A0 */ =C2=A0=C2=A0=C2=A0 =C2=A0le =3D kmalloc(al_aligned(rs), GFP_NOFS); -=C2=A0=C2=A0 =C2=A0if (!le) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D -ENOMEM; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; -=C2=A0=C2=A0 =C2=A0} +=C2=A0=C2=A0 =C2=A0if (!le) +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -ENOMEM; =C2=A0=C2=A0=C2=A0 =C2=A0mi_get_ref(&ni->mi, &le->ref); =C2=A0=C2=A0=C2=A0 =C2=A0ni->attr_list.le =3D le; @@ -865,14 +863,14 @@ int ni_create_attr_list(struct ntfs_inode *ni) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (to_free > free_b) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D -EI= NVAL; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out1; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0/* Allocate child MFT. */ =C2=A0=C2=A0=C2=A0 =C2=A0err =3D ntfs_look_free_mft(sbi, &rno, is_mft, ni,= &mi); =C2=A0=C2=A0=C2=A0 =C2=A0if (err) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out1; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0err =3D -EINVAL; =C2=A0=C2=A0=C2=A0 =C2=A0/* Call mi_remove_attr() in reverse order to keep= pointers=20 'arr_move' valid. */ @@ -884,7 +882,7 @@ int ni_create_attr_list(struct ntfs_inode *ni) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0attr =3D mi_insert_attr(mi, b-= >type, Add2Ptr(b, name_off), =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 b->name_len, asize, name_off); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (!attr) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out1; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0mi_get_ref(mi, &le_b[nb]->ref); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0le_b[nb]->id =3D attr->id; @@ -895,19 +893,19 @@ int ni_create_attr_list(struct ntfs_inode *ni) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Remove from primary record.= */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (!mi_remove_attr(NULL, &ni-= >mi, b)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out1; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (to_free <=3D asize) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0break; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0to_free -=3D asize; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (!nb) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out1; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0attr =3D mi_insert_attr(&ni->mi, ATTR_LIST, NULL,= 0, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 lsize + SIZEOF_RESIDENT, SIZEOF_RESIDENT); =C2=A0=C2=A0=C2=A0 =C2=A0if (!attr) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out1; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0attr->non_res =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0attr->flags =3D 0; @@ -921,16 +919,13 @@ int ni_create_attr_list(struct ntfs_inode *ni) =C2=A0=C2=A0=C2=A0 =C2=A0ni->attr_list.dirty =3D false; =C2=A0=C2=A0=C2=A0 =C2=A0mark_inode_dirty(&ni->vfs_inode); -=C2=A0=C2=A0 =C2=A0goto out; +=C2=A0=C2=A0 =C2=A0return 0; -out1: +out: =C2=A0=C2=A0=C2=A0 =C2=A0kfree(ni->attr_list.le); =C2=A0=C2=A0=C2=A0 =C2=A0ni->attr_list.le =3D NULL; =C2=A0=C2=A0=C2=A0 =C2=A0ni->attr_list.size =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0return err; - -out: -=C2=A0=C2=A0 =C2=A0return 0; =C2=A0} =C2=A0/* --=20 2.34.1