Re: [PATCH 1/1] XFS: __xfs_get_blocks check pointer to the target device

Ramon de Carvalho Valle
2009-08-04T18:48:35Z

[-- Attachment #1.1: Type: text/plain, Size: 2036 bytes --]

On Tue, 2009-08-04 at 11:25 -0500, Eric Sandeen wrote:
> Ramon de Carvalho Valle wrote:
> > On Mon, 2009-08-03 at 17:49 -0400, Christoph Hellwig wrote:
> >> On Mon, Aug 03, 2009 at 05:03:28PM -0300, Ramon de Carvalho Valle wrote:
> >>> The __xfs_get_blocks function does not check if the pointer to the target
> >>> device is valid before dereferencing it.
> >> It should never be zero. It's set by xfs_imap_to_bmap to either
> >> mp->m_ddev_targp which is always allocated, or to mp->m_rtdev_targp
> >> which is always allocated if we have a realtime device, and
> >> XFS_IS_REALTIME_INODE should only be true in that case.
> >>
> >
> > While testing XFS code with a modified version of fsfuzzer on SLES 10
> > SP3 (Kernel 2.6.16.60-0.49.3.ramon-ppc64), I came across the following
> > Oops:
>
> ...
>
> ahah, useful information that would have been great in the original
> patch submission. :)

Sorry about that. :)

>
> > I added a printk() line just before the:
> >
> > bh_result->b_bdev = iomap.iomap_target->bt_bdev;
> >
> > and as we can see iomap.iomap_target is NULL.
> >
> > My guess is that the XFS_DIFLAG_REALTIME flag is being set incorrectly
> > on the xfs inode structure, setting iomapp->iomap_target to the wrong
> > device pointer (probably NULL).
> >
> > I don't know if this is the best place to add a check, neither if
> > returning -XFS_ERROR(EIO) is correct at this point. Maybe doing:
> >
> > if (iomap.iomap_target && omap.iomap_flags & IOMAP_REALTIME)
> > bh_result->b_bdev = iomap.iomap_target->bt_bdev;
> >
> > would be a better solution.
>
> Can you test hch's patch w/ your fuzzed image?

I tested it on my SLES 10 SP3 (Kernel 2.6.16.60-0.49.3.ramon-ppc64) and
it successfully fixed the NULL pointer dereference.

I did some small modifications to the patch to xfs error print the flags
value and fixed the xfs error report tags. I am submitting the Christoph
patch again.

Thanks Christoph and Eric.

-Ramon

>
> Thanks,
> -Eric