On Thu, Oct 18 2007, Benny Halevy wrote: > On Oct. 17, 2007, 20:22 +0200, Jens Axboe <[EMAIL PROTECTED]> wrote: > > On Wed, Oct 17 2007, Linus Torvalds wrote: > >> > >> On Wed, 17 Oct 2007, Jens Axboe wrote: > >>>> So avoiding the "sg_next()" on the last entry is pointless. > >>> Yeah, I didn't quite understand why if sg was valid, why dereferencing > >>> *(sg + 1)->page would crap out :/ > >> Actually, I take that back. If 'sg' is the last entry in a *non*linked > >> scatter-gather list (ie we don't use the last entry as a link, we actually > >> use it as a real SG entry), then "sg_next(sg)" will indeed access past the > >> end of the whole allocated array, and will access one past the end. > >> > >> And with page-alloc debugging, that *will* blow up. > >> > >> So I think your change to use "sg_next()" only when you actually need a > >> next pointer is the correct one after all. > > > > Thanks, so I'm not totally crazy :-) > > > > Can you just pull: > > > > git://git.kernel.dk/data/git/linux-2.6-block.git for-linus > > > > then so we get those two pieces correct? Then the remaining issue seems > > to be a new one that is biting Ingo elsewhere, at least we'll all be on > > the same page then. > > > > Jens, for_each_sg still calls sg_next on the last entry which will > dereference a possibly bogus sg->page (for the sg_is_chain(sg) > condition in sg_next) if the last entry is the last one on the page > of unchained entry and sg+1 falls over into an uninitialized page.
Things have progressed a lot since, see my recent posting based on Davem's proposal. Will post another patch soonish, that is also tested. -- Jens Axboe - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

