* [BUG/RFC] ntfs: crafted image triggers WARN_ON in ntfs_map_runlist_nolock()
@ 2026-07-01 22:12 이상호
2026-07-01 23:36 ` Namjae Jeon
0 siblings, 1 reply; 5+ messages in thread
From: 이상호 @ 2026-07-01 22:12 UTC (permalink / raw)
To: Namjae Jeon, Hyunchul Lee
Cc: 이상호, linux-fsdevel, linux-kernel
Hi,
I found a crafted NTFS image that triggers the following warning during
mount-time NTFS logfile handling:
WARNING: fs/ntfs/attrib.c:177 at ntfs_map_runlist_nolock+0x1275/0x17b0
The observed stack is:
ntfs_map_runlist_nolock
ntfs_empty_logfile
load_system_files
ntfs_fill_super
get_tree_bdev_flags
vfs_get_tree
do_new_mount
__se_sys_mount
The warning site is:
fs/ntfs/attrib.c:177
WARN_ON(!ctx->attr->non_resident);
The caller path reaches this through:
fs/ntfs/logfile.c:677
err = ntfs_map_runlist_nolock(log_ni, vcn, NULL);
The current hypothesis is that a malformed image reaches the $LogFile cleanup
path and causes ntfs_map_runlist_nolock() to find a resident attribute where it
expects a non-resident one. Since the input is a crafted filesystem image, this
looks like it should be rejected through an ordinary mount error path rather
than tripping a kernel WARN_ON().
The crash was found with syzkaller/SyzDirect on a recent local mainline build.
syz-repro reproduced the warning during minimization and reduced the syscall
sequence to syz_mount_image$ntfs. I also extracted the crashing program from
the syzkaller log and generated a standalone C reproducer from it. The generated
C reproducer compiles locally.
I have not yet confirmed whether this has impact beyond a mount-time warning
from a crafted NTFS image. I can provide the full syzkaller/C reproducer and
kernel config if useful.
Thanks,
이상호
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [BUG/RFC] ntfs: crafted image triggers WARN_ON in ntfs_map_runlist_nolock()
2026-07-01 22:12 [BUG/RFC] ntfs: crafted image triggers WARN_ON in ntfs_map_runlist_nolock() 이상호
@ 2026-07-01 23:36 ` Namjae Jeon
2026-07-02 1:37 ` Namjae Jeon
0 siblings, 1 reply; 5+ messages in thread
From: Namjae Jeon @ 2026-07-01 23:36 UTC (permalink / raw)
To: 이상호; +Cc: Hyunchul Lee, linux-fsdevel, linux-kernel
On Thu, Jul 2, 2026 at 7:12 AM 이상호 <kudo3228@gmail.com> wrote:
>
> Hi,
Hi Sangho,
>
> I found a crafted NTFS image that triggers the following warning during
> mount-time NTFS logfile handling:
>
> WARNING: fs/ntfs/attrib.c:177 at ntfs_map_runlist_nolock+0x1275/0x17b0
>
> The observed stack is:
>
> ntfs_map_runlist_nolock
> ntfs_empty_logfile
> load_system_files
> ntfs_fill_super
> get_tree_bdev_flags
> vfs_get_tree
> do_new_mount
> __se_sys_mount
>
> The warning site is:
>
> fs/ntfs/attrib.c:177
> WARN_ON(!ctx->attr->non_resident);
>
> The caller path reaches this through:
>
> fs/ntfs/logfile.c:677
> err = ntfs_map_runlist_nolock(log_ni, vcn, NULL);
>
> The current hypothesis is that a malformed image reaches the $LogFile cleanup
> path and causes ntfs_map_runlist_nolock() to find a resident attribute where it
> expects a non-resident one. Since the input is a crafted filesystem image, this
> looks like it should be rejected through an ordinary mount error path rather
> than tripping a kernel WARN_ON().
>
> The crash was found with syzkaller/SyzDirect on a recent local mainline build.
> syz-repro reproduced the warning during minimization and reduced the syscall
> sequence to syz_mount_image$ntfs. I also extracted the crashing program from
> the syzkaller log and generated a standalone C reproducer from it. The generated
> C reproducer compiles locally.
>
> I have not yet confirmed whether this has impact beyond a mount-time warning
> from a crafted NTFS image. I can provide the full syzkaller/C reproducer and
> kernel config if useful.
I will check it and share the patch with you to get your confirmation.
Thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [BUG/RFC] ntfs: crafted image triggers WARN_ON in ntfs_map_runlist_nolock()
2026-07-01 23:36 ` Namjae Jeon
@ 2026-07-02 1:37 ` Namjae Jeon
2026-07-03 3:39 ` 이상호
0 siblings, 1 reply; 5+ messages in thread
From: Namjae Jeon @ 2026-07-02 1:37 UTC (permalink / raw)
To: 이상호; +Cc: Hyunchul Lee, linux-fsdevel, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1966 bytes --]
On Thu, Jul 2, 2026 at 8:36 AM Namjae Jeon <linkinjeon@kernel.org> wrote:
>
> On Thu, Jul 2, 2026 at 7:12 AM 이상호 <kudo3228@gmail.com> wrote:
> >
> > Hi,
> Hi Sangho,
> >
> > I found a crafted NTFS image that triggers the following warning during
> > mount-time NTFS logfile handling:
> >
> > WARNING: fs/ntfs/attrib.c:177 at ntfs_map_runlist_nolock+0x1275/0x17b0
> >
> > The observed stack is:
> >
> > ntfs_map_runlist_nolock
> > ntfs_empty_logfile
> > load_system_files
> > ntfs_fill_super
> > get_tree_bdev_flags
> > vfs_get_tree
> > do_new_mount
> > __se_sys_mount
> >
> > The warning site is:
> >
> > fs/ntfs/attrib.c:177
> > WARN_ON(!ctx->attr->non_resident);
> >
> > The caller path reaches this through:
> >
> > fs/ntfs/logfile.c:677
> > err = ntfs_map_runlist_nolock(log_ni, vcn, NULL);
> >
> > The current hypothesis is that a malformed image reaches the $LogFile cleanup
> > path and causes ntfs_map_runlist_nolock() to find a resident attribute where it
> > expects a non-resident one. Since the input is a crafted filesystem image, this
> > looks like it should be rejected through an ordinary mount error path rather
> > than tripping a kernel WARN_ON().
> >
> > The crash was found with syzkaller/SyzDirect on a recent local mainline build.
> > syz-repro reproduced the warning during minimization and reduced the syscall
> > sequence to syz_mount_image$ntfs. I also extracted the crashing program from
> > the syzkaller log and generated a standalone C reproducer from it. The generated
> > C reproducer compiles locally.
> >
> > I have not yet confirmed whether this has impact beyond a mount-time warning
> > from a crafted NTFS image. I can provide the full syzkaller/C reproducer and
> > kernel config if useful.
> I will check it and share the patch with you to get your confirmation.
> Thanks.
Please confirm if the attached patch fixes this issue.
thanks!
[-- Attachment #2: 0001-ntfs-fix-WARN_ON-for-resident-attribute-in-ntfs_map_.patch --]
[-- Type: text/x-patch, Size: 2176 bytes --]
From 9969f7b5cba26d043b19e35c4a9759ae6cf7a51f Mon Sep 17 00:00:00 2001
From: Namjae Jeon <linkinjeon@kernel.org>
Date: Thu, 2 Jul 2026 10:31:44 +0900
Subject: [PATCH] ntfs: fix WARN_ON for resident attribute in
ntfs_map_runlist_nolock()
When ntfs_map_runlist_nolock() needs to look up the attribute extent
containing a target VCN (ctx_needs_reset == true), it calls
ntfs_attr_lookup() and then expects the result to be a non-resident
attribute, since only non-resident attributes have a mapping pairs
array to decompress.
A crafted NTFS image can place a resident attribute where a non-resident
one is expected, causing ntfs_attr_lookup() to succeed but return a
resident attribute record. Previously this was caught only by a
WARN_ON(), which does not stop execution. The code then falls through to
read a->data.non_resident.highest_vcn from what is actually a resident
attribute, accessing the wrong union member and corrupting the VCN range
check.
The caller path triggering this warning during mount is:
ntfs_map_runlist_nolock
ntfs_empty_logfile
load_system_files
ntfs_fill_super
In this path ctx is NULL, so ntfs_map_runlist_nolock() allocates a
temporary search context internally and sets ctx_needs_reset = true.
The existing resident-attribute guard in the ctx != NULL branch already
returns -EIO silently for the same condition; make the ctx_needs_reset
path consistent by replacing the WARN_ON() with the same -EIO error
return.
This causes the crafted image to be rejected with a mount error instead
of triggering a kernel warning.
Reported-by: Sangho Lee <kudo3228@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
---
fs/ntfs/attrib.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/fs/ntfs/attrib.c b/fs/ntfs/attrib.c
index a99b84751eb1..e5e3bc03ad49 100644
--- a/fs/ntfs/attrib.c
+++ b/fs/ntfs/attrib.c
@@ -175,7 +175,10 @@ int ntfs_map_runlist_nolock(struct ntfs_inode *ni, s64 vcn, struct ntfs_attr_sea
err = -EIO;
goto err_out;
}
- WARN_ON(!ctx->attr->non_resident);
+ if (unlikely(!ctx->attr->non_resident)) {
+ err = -EIO;
+ goto err_out;
+ }
}
a = ctx->attr;
/*
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [BUG/RFC] ntfs: crafted image triggers WARN_ON in ntfs_map_runlist_nolock()
2026-07-02 1:37 ` Namjae Jeon
@ 2026-07-03 3:39 ` 이상호
2026-07-03 4:41 ` Namjae Jeon
0 siblings, 1 reply; 5+ messages in thread
From: 이상호 @ 2026-07-03 3:39 UTC (permalink / raw)
To: Namjae Jeon; +Cc: Sangho Lee, Hyunchul Lee, linux-fsdevel, linux-kernel
From: Sangho Lee <kudo3228@gmail.com>
Hi Namjae,
Thanks for the patch.
I applied it to my NTFS test tree and rebuilt the kernel. I then reran
syz-repro with the same syzkaller crash log that reproduced the original
WARN_ON in ntfs_map_runlist_nolock() on the unpatched kernel.
Result:
- unpatched kernel: the same log reproduced the WARN_ON in
ntfs_map_runlist_nolock()
- patched kernel: syz-repro ran through all extraction phases for 29m28s
and failed to reproduce the warning:
- 15s single runs: no crash
- 15s grouped/bisect: did not crash
- 1m40s single runs: no crash
- 1m55s grouped/bisect: did not crash
- 6m single runs: no crash
- 6m15s grouped/bisect: did not crash
- no kernel WARNING/Oops/BUG lines were observed
The change also matches the root cause I saw: when ctx_needs_reset is true,
ntfs_map_runlist_nolock() can reach the runlist mapping path for a resident
attribute. Returning -EIO before using the non-resident mapping fields avoids
triggering the WARN_ON and prevents the invalid path.
So yes, this patch fixes the issue from my side.
Tested-by: Sangho Lee <kudo3228@gmail.com>
Thanks,
Sangho
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [BUG/RFC] ntfs: crafted image triggers WARN_ON in ntfs_map_runlist_nolock()
2026-07-03 3:39 ` 이상호
@ 2026-07-03 4:41 ` Namjae Jeon
0 siblings, 0 replies; 5+ messages in thread
From: Namjae Jeon @ 2026-07-03 4:41 UTC (permalink / raw)
To: 이상호; +Cc: Hyunchul Lee, linux-fsdevel, linux-kernel
On Fri, Jul 3, 2026 at 12:39 PM 이상호 <kudo3228@gmail.com> wrote:
>
> From: Sangho Lee <kudo3228@gmail.com>
>
> Hi Namjae,
>
> Thanks for the patch.
>
> I applied it to my NTFS test tree and rebuilt the kernel. I then reran
> syz-repro with the same syzkaller crash log that reproduced the original
> WARN_ON in ntfs_map_runlist_nolock() on the unpatched kernel.
>
> Result:
> - unpatched kernel: the same log reproduced the WARN_ON in
> ntfs_map_runlist_nolock()
> - patched kernel: syz-repro ran through all extraction phases for 29m28s
> and failed to reproduce the warning:
> - 15s single runs: no crash
> - 15s grouped/bisect: did not crash
> - 1m40s single runs: no crash
> - 1m55s grouped/bisect: did not crash
> - 6m single runs: no crash
> - 6m15s grouped/bisect: did not crash
> - no kernel WARNING/Oops/BUG lines were observed
>
> The change also matches the root cause I saw: when ctx_needs_reset is true,
> ntfs_map_runlist_nolock() can reach the runlist mapping path for a resident
> attribute. Returning -EIO before using the non-resident mapping fields avoids
> triggering the WARN_ON and prevents the invalid path.
>
> So yes, this patch fixes the issue from my side.
>
> Tested-by: Sangho Lee <kudo3228@gmail.com>
I will add your tested-by tag to the patch.
Thanks for the test!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-03 4:41 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-01 22:12 [BUG/RFC] ntfs: crafted image triggers WARN_ON in ntfs_map_runlist_nolock() 이상호
2026-07-01 23:36 ` Namjae Jeon
2026-07-02 1:37 ` Namjae Jeon
2026-07-03 3:39 ` 이상호
2026-07-03 4:41 ` Namjae Jeon
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.