All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namjae Jeon <linkinjeon@kernel.org>
To: Eric Biggers <ebiggers@kernel.org>, xu.xin16@zte.com.cn
Cc: cgel.zte@gmail.com, anton@tuxera.com,
	linux-ntfs-dev@lists.sourceforge.net, stable@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	Zeal Robot <zealci@zte.com.cn>,
	syzbot+6a5a7672f663cce8b156@syzkaller.appspotmail.com,
	Songyi Zhang <zhang.songyi@zte.com.cn>,
	Yang Yang <yang.yang29@zte.com.cn>,
	Jiang Xuexin <jiang.xuexin@zte.com.cn>,
	Zhang wenya <zhang.wenya1@zte.com.cn>
Subject: Re: [PATCH v2] fs/ntfs: fix BUG_ON of ntfs_read_block()
Date: Fri, 24 Jun 2022 11:33:28 +0900	[thread overview]
Message-ID: <CAKYAXd8qoLKbWGX7omYUfarSugRnose8X8o3Zhb1XctiUtamQg@mail.gmail.com> (raw)
In-Reply-To: <YrSeAGmk4GZndtdn@sol.localdomain>

2022-06-24 2:08 GMT+09:00, Eric Biggers <ebiggers@kernel.org>:
> On Thu, Jun 23, 2022 at 09:49:56AM +0000, cgel.zte@gmail.com wrote:
>> From: xu xin <xu.xin16@zte.com.cn>
>>
>> As the bug description at
>> https://lore.kernel.org/lkml/20220623033635.973929-1-xu.xin16@zte.com.cn/
>> attckers can use this bug to crash the system.
>>
>> So to avoid panic, remove the BUG_ON, and use ntfs_warning to output a
>> warning to the syslog and return instead until someone really solve
>> the problem.
>>
>> Cc: stable@vger.kernel.org
>> Reported-by: Zeal Robot <zealci@zte.com.cn>
>> Reported-by: syzbot+6a5a7672f663cce8b156@syzkaller.appspotmail.com
>> Reviewed-by: Songyi Zhang <zhang.songyi@zte.com.cn>
>> Reviewed-by: Yang Yang <yang.yang29@zte.com.cn>
>> Reviewed-by: Jiang Xuexin<jiang.xuexin@zte.com.cn>
>> Reviewed-by: Zhang wenya<zhang.wenya1@zte.com.cn>
>> Signed-off-by: xu xin <xu.xin16@zte.com.cn>
>> ---
>>
>> Change for v2:
>>  - Use ntfs_warning instead of WARN().
>>  - Add the tag Cc: stable@vger.kernel.org.
>> ---
>>  fs/ntfs/aops.c | 7 ++++++-
>>  1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
>> index 5f4fb6ca6f2e..84d68efb4ace 100644
>> --- a/fs/ntfs/aops.c
>> +++ b/fs/ntfs/aops.c
>> @@ -183,7 +183,12 @@ static int ntfs_read_block(struct page *page)
>>  	vol = ni->vol;
>>
>>  	/* $MFT/$DATA must have its complete runlist in memory at all times. */
>> -	BUG_ON(!ni->runlist.rl && !ni->mft_no && !NInoAttr(ni));
>> +	if (unlikely(!ni->runlist.rl && !ni->mft_no && !NInoAttr(ni))) {
>> +		ntfs_warning(vi->i_sb, "Error because ni->runlist.rl, ni->mft_no, "
>> +				"and NInoAttr(ni) is null.");
>> +		unlock_page(page);
>> +		return -EINVAL;
>> +	}
>
> A better warning message that doesn't rely on implementation details
> (struct
> field and macro names) would be "Runlist of $MFT/$DATA is not cached".
> Also,
> why does this situation happen in the first place?  Is there a way to
> prevent
> this situation in the first place?

ntfs_mapping_pairs_decompress() should return error pointer instead of NULL.
Callers is checking error value using IS_ERR(). and the mapping pairs
array of @MFT entry is empty, I think it's corrupted, it should cause
mount failure.

I haven't checked if this patch fix the problem. Xu, Can you check it ?

diff --git a/fs/ntfs/runlist.c b/fs/ntfs/runlist.c
index 97932fb5179c..31263fe0772f 100644
--- a/fs/ntfs/runlist.c
+++ b/fs/ntfs/runlist.c
@@ -766,8 +766,11 @@ runlist_element
*ntfs_mapping_pairs_decompress(const ntfs_volume *vol,
                return ERR_PTR(-EIO);
        }
        /* If the mapping pairs array is valid but empty, nothing to do. */
-       if (!vcn && !*buf)
+       if (!vcn && !*buf) {
+               if (!old_rl)
+                       return ERR_PTR(-EIO);
                return old_rl;
+       }
        /* Current position in runlist array. */
        rlpos = 0;
        /* Allocate first page and set current runlist size to one page. */

>
> - Eric
>

  reply	other threads:[~2022-06-24  2:33 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-23  3:36 Bug report: ntfs_read_block may crash system xu xin
2022-06-23  3:51 ` [PATCH] fs/ntfs: fix BUG_ON of ntfs_read_block() cgel.zte
2022-06-23  7:57   ` Greg KH
2022-06-23  8:57     ` CGEL
2022-06-23  7:57   ` Greg KH
2022-06-23  8:59     ` CGEL
2022-06-23  7:55 ` Bug report: ntfs_read_block may crash system Greg KH
2022-06-23  9:49 ` [PATCH v2] fs/ntfs: fix BUG_ON of ntfs_read_block() cgel.zte
2022-06-23 17:08   ` Eric Biggers
2022-06-24  2:33     ` Namjae Jeon [this message]
2022-06-24  3:55       ` CGEL
     [not found]       ` <7FBC6FD2-5D60-4EB8-96D5-A6014D271950@tuxera.com>
2022-06-24 14:37         ` Namjae Jeon
2022-06-24 15:26           ` Anton Altaparmakov
2022-07-05  7:47             ` CGEL

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAKYAXd8qoLKbWGX7omYUfarSugRnose8X8o3Zhb1XctiUtamQg@mail.gmail.com \
    --to=linkinjeon@kernel.org \
    --cc=anton@tuxera.com \
    --cc=cgel.zte@gmail.com \
    --cc=ebiggers@kernel.org \
    --cc=jiang.xuexin@zte.com.cn \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-ntfs-dev@lists.sourceforge.net \
    --cc=stable@vger.kernel.org \
    --cc=syzbot+6a5a7672f663cce8b156@syzkaller.appspotmail.com \
    --cc=xu.xin16@zte.com.cn \
    --cc=yang.yang29@zte.com.cn \
    --cc=zealci@zte.com.cn \
    --cc=zhang.songyi@zte.com.cn \
    --cc=zhang.wenya1@zte.com.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.