From: Dave Chinner <david@fromorbit.com>
To: Alex Elder <aelder@sgi.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 2/2] repair: fix some valgrind reported errors on i686
Date: Fri, 7 Oct 2011 11:06:27 +1100 [thread overview]
Message-ID: <20111007000627.GV3159@dastard> (raw)
In-Reply-To: <1317941658.2870.50.camel@doink>
On Thu, Oct 06, 2011 at 05:54:18PM -0500, Alex Elder wrote:
> On Fri, 2011-10-07 at 09:15 +1100, Dave Chinner wrote:
> > On Thu, Oct 06, 2011 at 07:17:52AM -0500, Alex Elder wrote:
> > > On Thu, 2011-10-06 at 12:01 +1100, Dave Chinner wrote:
> > > > @@ -218,6 +244,15 @@ blkmap_grow(
> > > > }
> > > >
> > > > blkmap->naexts += 4;
> > >
> > > The check needs to go *before* you update naexts.
> >
> > It's in the right place - adding 4 to the unchecked extent count can
> > push it over the limit, so we have to check it after adding 4 to it.
>
> My point was that I'd rather see the check be whether it *will*
> overflow, rather than allowing it to overflow.
>
> The other reason though, even if you do the calculation
> at that spot, is that you shouldn't update what blkmap
> records as the number of allocated extents unless you
> have actually updated it the amount of allocated memory.
> As it stands, you will have updated blkmap->naexts, then
> if it overflows you return before actually attempting
> to reallocate.
>
> In other words, blkmap->naexts should reflect the actual
> amount of memory allotted in the blkmap->exts array, which
> is not going to be the case if it returns early (and this
> can be avoided).
Fair point.
And just checking the single caller of blkmap_grow indicates that it
doesn't handle allocation failure *at all*, so I need to fix that as
well.
> > IOWs, we can't use BLKMAP_SIZE to detect an overflow, because it
> > is the code that overflows...
>
> I understand that argument. I'm in a hurry at the moment so
> I haven't thought through this very well right now.
>
> But if you do have BLKMAP_NENTS_MAX, you could check nex
> against that before attempting to use BLKMAP_SIZE to
> compute how many bytes need to be allocated.
Yup, that's what the patch does, just without the BLKMAP_NENTS_MAX
macro. Which I've already added. ;)
FWIW, because the extent count fields are all signed ints,
overflow checks also need to check for values <= 0. So I've added
that too.
And I think now I need to split this into separate patches for each
issue, as there are now about 5 different problems this one patch
fixes.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
prev parent reply other threads:[~2011-10-07 0:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-06 1:01 [PATCH 0/2] repair: couple of bug fixes Dave Chinner
2011-10-06 1:01 ` [PATCH 1/2] repair: handle repair of image files on large sector size filesystems Dave Chinner
2011-10-06 12:17 ` Alex Elder
2011-10-06 1:01 ` [PATCH 2/2] repair: fix some valgrind reported errors on i686 Dave Chinner
2011-10-06 12:17 ` Alex Elder
2011-10-06 22:15 ` Dave Chinner
2011-10-06 22:54 ` Alex Elder
2011-10-07 0:06 ` Dave Chinner [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=20111007000627.GV3159@dastard \
--to=david@fromorbit.com \
--cc=aelder@sgi.com \
--cc=xfs@oss.sgi.com \
/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