Hi Glenn,

This patch was focused on the most serious issue being seen by people where
GRUB might hang during startup and grub-mount may crash.

There are remaining issues in NTFS, I saw the same failures you are seeing
from the filesystem tests.

I have been working on fixing the rest of the grub-fstest failures, but it
has turned out to be quite involved so it's taking some time.  There are
some issues in the validate_attribute function (like the run size
calculation seems wrong) and also how validate_attribute is used in some
places (I think it's being mixed between attributes and attribute-lists).
It is complicated by trying to fix the regression while also trying to
avoid reintroducing the fuzzing identified issues that were being fixed
originally.

I'm still working at it, and intend to submit a new patch when I have it.
Sorry for the slowness, it's something I try to do whenever I have some
free time.  If anyone is an NTFS expert I'd be more than happy to hand it
off ;)


Thanks,
Andrew

On Thu, May 1, 2025 at 5:50 PM Glenn Washburn <developm...@efficientek.com>
wrote:

> On Thu, 20 Mar 2025 18:28:00 -0500
> Andrew Hamilton <adham...@gmail.com> wrote:
>
> > A regression was introduced recently as a part of the series of
> > filesystem related patches to address some CVEs found in GRUB.
> >
> > This issue may cause either an infinite loop at startup when
> > accessing certain valid NTFS file systems, or may cause a crash
> > due to a NULL pointer deference on systems where "NULL" address
> > is invalid (such as may happen when calling grub-mount from
> > the operating system level).
> >
> > Correct this issue by checking that at->attr_cur is within bounds
> > inside find_attr.
> >
> > Fixes: https://savannah.gnu.org/bugs/?66855
>
> The NTFS filesystem test is failing even though this change is
> included. grub-fstest is failing to detect the generated NTFS
> filesystem as NTFS. The debug log shows these lines:
>
> grub-core/kern/fs.c:56:fs: Detecting ntfs...
> grub-core/fs/ntfs.c:212:ntfs: spare=800 min_size=73 attr_size=72
> grub-core/kern/fs.c:79:fs: error: no $INDEX_ROOT.
> grub-core/kern/fs.c:80:fs: ntfs detection failed.
>
> Based on where this error message is generated, it looks like the issue
> is in find_attr(). So this change looks like a partial fix.
>
> Glenn
>
> > Co-authored-by: B Horn <b...@horn.uk>
> > Co-authored-by: Andrew Hamilton <adham...@gmail.com>
> > Signed-off-by: Andrew Hamilton <adham...@gmail.com>
> > ---
> > V2 -> V3: Changed NULL check to >= at->mft->buf
> >
> >  grub-core/fs/ntfs.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c
> > index 960833a34..767b93c21 100644
> > --- a/grub-core/fs/ntfs.c
> > +++ b/grub-core/fs/ntfs.c
> > @@ -387,7 +387,8 @@ find_attr (struct grub_ntfs_attr *at, grub_uint8_t
> attr)
> >      }
> >    at->attr_cur = at->attr_nxt;
> >    mft_end = at->mft->buf + (at->mft->data->mft_size <<
> GRUB_NTFS_BLK_SHR);
> > -  while (at->attr_cur < mft_end && *at->attr_cur != 0xFF)
> > +  while (at->attr_cur >= at->mft->buf && at->attr_cur < mft_end
> > +         && *at->attr_cur != 0xFF)
> >      {
> >        at->attr_nxt = next_attribute (at->attr_cur, at->end);
> >        if (*at->attr_cur == GRUB_NTFS_AT_ATTRIBUTE_LIST)
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to