From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 1/8] xfs: hide log iovec alignment constraints
Date: Wed, 27 Apr 2022 09:45:46 -0700 [thread overview]
Message-ID: <20220427164546.GI17025@magnolia> (raw)
In-Reply-To: <20220427045034.GL1098723@dread.disaster.area>
On Wed, Apr 27, 2022 at 02:50:34PM +1000, Dave Chinner wrote:
> On Tue, Apr 26, 2022 at 08:14:45PM -0700, Darrick J. Wong wrote:
> > On Wed, Apr 27, 2022 at 12:22:52PM +1000, Dave Chinner wrote:
> > > From: Dave Chinner <dchinner@redhat.com>
> > >
> > > Callers currently have to round out the size of buffers to match the
> > > aligment constraints of log iovecs and xlog_write(). They should not
> > > need to know this detail, so introduce a new function to calculate
> > > the iovec length (for use in ->iop_size implementations). Also
> > > modify xlog_finish_iovec() to round up the length to the correct
> > > alignment so the callers don't need to do this, either.
> > >
> > > Convert the only user - inode forks - of this alignment rounding to
> > > use the new interface.
> >
> > Hmm. So currently, we require that the inode fork buffer be rounded up
> > to the next 4 bytes, and then I guess the log will copy that into the
> > log iovec? IOWs, if we have a 37-byte data fork, we'll allocate a 40
> > byte buffer for the xfs_ifork, and the log will copy all 40 bytes into a
> > 40 byte iovec.
>
> Yes, that's how the current code works. It ends up leaking whatever
> was in those 3 bytes into the shadow buffer that we then copy into
> the log region. i.e. the existing code "leaks" non-zeroed allocated
> memory to the journal.
>
> > Now it looks like we'd allocate a 37-byte buffer for the xfs_ifork, but
> > the log iovec will still be 40 bytes. So ... do we copy 37 bytes out of
> > the ifork buffer and zero the last 3 bytes in the iovec?
>
> Yes, we copy 37 bytes out of the ifork buffer now into the shadow
> buffer so we do not overrun the inode fork buffer.
>
> > Does we leak
> > kernel memory in those last 3 bytes?
>
> We does indeed still leak the remaining 3 bytes as they are not
> zeroed.
>
> > Or do we copy 40 bytes and
> > overrun?
>
> No, we definitely don't do that - KASAN gets very unhappy when you
> do that...
>
> > It sorta looks like (at least for the local format case) xlog_copy_iovec
> > will copy 37 bytes and leave the last 3 bytes of the iovec in whatever
> > state it was in previously. Is that zeroed? Because it then looks like
> > xlog_finish_iovec will round that 37 up to 40.
>
> The shadow buffer is only partially zeroed - the part that makes io
> the header and iovec pointer array is zeroed, but the region that
> the journal data is written to is not zeroed.
>
> > (FWIW I'm just checking for kernel memory exposure vectors here.)
>
> Yup, I hadn't even considered that aspect of the code because we
> aren't actually leaking anything to userspace. If an unprivileged
> user can read 3 bytes of uninitialised data out of the journal we've
> got much, much bigger security problems to deal with.
>
> It should be trivial to fix, though. I'll do the initial fix as a
> standalone patch, though, and then roll it into this one because the
> problem has been around for a long while and fixing this patch
> doesn't produce an easily backportable fix...
<nod> I agree that it's a very minor disclosure vulnerability (certainly
less severe than ALLOCSP) since you'd need CAP_SYS_RAWIO to exploit it.
But certainly worth patching before someone discovers that a former
pagecache page with your credit card numbers on it got recycled into a
log vector page. Thanks for doing the fix. :)
--D
> Cheers,
>
> Dave.
> --
> Dave Chinner
> david@fromorbit.com
next prev parent reply other threads:[~2022-04-27 16:45 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-27 2:22 [PATCH 0/8 v5] xfs: intent whiteouts Dave Chinner
2022-04-27 2:22 ` [PATCH 1/8] xfs: hide log iovec alignment constraints Dave Chinner
2022-04-27 3:14 ` Darrick J. Wong
2022-04-27 4:50 ` Dave Chinner
2022-04-27 16:45 ` Darrick J. Wong [this message]
2022-04-28 13:00 ` Christoph Hellwig
2022-04-27 2:22 ` [PATCH 2/8] xfs: don't commit the first deferred transaction without intents Dave Chinner
2022-04-27 3:03 ` Darrick J. Wong
2022-04-27 4:52 ` Dave Chinner
2022-04-28 13:02 ` Christoph Hellwig
2022-04-30 17:02 ` Alli
2022-04-27 2:22 ` [PATCH 3/8] xfs: add log item flags to indicate intents Dave Chinner
2022-04-27 3:04 ` Darrick J. Wong
2022-04-28 13:04 ` Christoph Hellwig
2022-04-27 2:22 ` [PATCH 4/8] xfs: tag transactions that contain intent done items Dave Chinner
2022-04-27 3:06 ` Darrick J. Wong
2022-04-28 13:05 ` Christoph Hellwig
2022-04-27 2:22 ` [PATCH 5/8] xfs: factor and move some code in xfs_log_cil.c Dave Chinner
2022-04-27 3:15 ` Darrick J. Wong
2022-04-27 4:56 ` Dave Chinner
2022-04-28 13:06 ` Christoph Hellwig
2022-04-29 1:56 ` Alli
2022-04-27 2:22 ` [PATCH 6/8] xfs: add log item method to return related intents Dave Chinner
2022-04-27 3:18 ` Darrick J. Wong
2022-04-28 13:10 ` Christoph Hellwig
2022-04-27 2:22 ` [PATCH 7/8] xfs: whiteouts release intents that are not in the AIL Dave Chinner
2022-04-27 3:19 ` Darrick J. Wong
2022-04-28 13:15 ` Christoph Hellwig
2022-04-27 2:22 ` [PATCH 8/8] xfs: intent item whiteouts Dave Chinner
2022-04-27 3:32 ` Darrick J. Wong
2022-04-27 5:47 ` Dave Chinner
2022-04-27 17:31 ` Darrick J. Wong
2022-04-27 22:05 ` Dave Chinner
2022-04-28 13:22 ` Christoph Hellwig
2022-04-28 21:38 ` Dave Chinner
-- strict thread matches above, loose matches on Subject: below --
2022-03-14 22:06 [PATCH 0/8 v3] xfs: intent whiteouts Dave Chinner
2022-03-14 22:06 ` [PATCH 1/8] xfs: hide log iovec alignment constraints Dave Chinner
2022-04-11 5:23 ` Alli
2022-04-12 10:13 ` Dave Chinner
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=20220427164546.GI17025@magnolia \
--to=djwong@kernel.org \
--cc=david@fromorbit.com \
--cc=linux-xfs@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox