From: Zygo Blaxell <ce3g8jdj@umail.furryterror.org>
To: Chris Mason <clm@fb.com>
Cc: linux-btrfs@vger.kernel.org,
Chandan Rajendra <chandan@linux.vnet.ibm.com>
Subject: Re: [PATCH v3] btrfs: add missing memset while reading compressed inline extents
Date: Fri, 10 Mar 2017 16:45:18 -0500 [thread overview]
Message-ID: <20170310214518.GC31830@hungrycats.org> (raw)
In-Reply-To: <f2be1367-60c1-b761-1d88-0008c0a73446@fb.com>
On Fri, Mar 10, 2017 at 02:12:54PM -0500, Chris Mason wrote:
>
>
> On 03/10/2017 01:56 PM, Zygo Blaxell wrote:
> >On Fri, Mar 10, 2017 at 11:19:24AM -0500, Chris Mason wrote:
> >>On 03/09/2017 11:41 PM, Zygo Blaxell wrote:
> >>>On Thu, Mar 09, 2017 at 10:39:49AM -0500, Chris Mason wrote:
> >>>>
> >>>>
> >>>>On 03/08/2017 09:12 PM, Zygo Blaxell wrote:
> >>>>>This is a story about 4 distinct (and very old) btrfs bugs.
> >>>>>
> >>>>
> >>>>Really great write up.
> >>>>
> >>>>[ ... ]
> >>>>
> >>>>>
> >>>>>diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> >>>>>index 25ac2cf..4d41a31 100644
> >>>>>--- a/fs/btrfs/inode.c
> >>>>>+++ b/fs/btrfs/inode.c
> >>>>>@@ -6805,6 +6805,12 @@ static noinline int uncompress_inline(struct btrfs_path *path,
> >>>>> max_size = min_t(unsigned long, PAGE_SIZE, max_size);
> >>>>> ret = btrfs_decompress(compress_type, tmp, page,
> >>>>> extent_offset, inline_size, max_size);
> >>>>>+ WARN_ON(max_size + pg_offset > PAGE_SIZE);
> >>>>
> >>>>Can you please drop this WARN_ON and make the math reflect any possible
> >>>>pg_offset? I do agree it shouldn't be happening, but its easy to correct
> >>>>for and the WARN is likely to get lost.
> >>>
> >>>I'm not sure how to do that. It looks like I'd have to pass pg_offset
> >>>through btrfs_decompress to the decompress functions?
> >>>
> >>> ret = btrfs_decompress(compress_type, tmp, page,
> >>> extent_offset, inline_size, max_size, pg_offset);
> >>>
> >>>and in the compression functions get pg_offset from the argument list
> >>>instead of hardcoding zero.
> >>
> >>Yeah, it's a good point. Both zlib and lzo are assuming a zero pg_offset
> >>right now, but just like there are wacky corners allowing inline extents
> >>followed by more data, there are a few wacky corners allowing inline extents
> >>at the end of the file.
> >>
> >>Lets not mix that change in with this one though. For now, just get the
> >>memset right and we can pass pg_offset down in a later patch.
> >
> >Are you saying "fix the memset in the patch" (and if so, what's wrong
> >with it?), or are you saying "let's take the patch with its memset as is,
> >and fix the pg_offset > 0 issues later"?
>
> Your WARN_ON() would fire when this math is bad:
>
> memset(map + pg_offset + max_size, 0, PAGE_SIZE - max_size - pg_offset);
>
> Instead or warning, just don't memset if pg_offset + max_size >= PAGE_SIZE
OK.
While I was looking at this function I noticed that there doesn't seem to be
a sanity check on the data in the extent ref. e.g. ram_bytes could be 2GB
and nothing would notice. I'm pretty sure that's only possible by fuzzing,
but it seemed worthwhile to log it if it ever happened.
I'll take the WARN_ON out, and also put in the comment you asked for in the
other branch of this thread.
> -chris
>
prev parent reply other threads:[~2017-03-10 21:45 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-09 2:12 [PATCH v3] btrfs: add missing memset while reading compressed inline extents Zygo Blaxell
2017-03-09 15:39 ` Chris Mason
2017-03-10 4:41 ` Zygo Blaxell
2017-03-10 16:19 ` Chris Mason
2017-03-10 18:56 ` Zygo Blaxell
2017-03-10 19:12 ` Chris Mason
2017-03-10 21:45 ` Zygo Blaxell [this message]
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=20170310214518.GC31830@hungrycats.org \
--to=ce3g8jdj@umail.furryterror.org \
--cc=chandan@linux.vnet.ibm.com \
--cc=clm@fb.com \
--cc=linux-btrfs@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 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.