Re: [PATCH] [5/12] x86_64: Make patching more robust, fix paravirt issue

From: Glauber de Oliveira Costa
Date: Tue Aug 21 2007 - 08:26:54 EST


On 8/21/07, Andi Kleen <ak@xxxxxxx> wrote:
> On Tue, Aug 21, 2007 at 04:30:10AM -0300, Glauber de Oliveira Costa wrote:
> > On 8/20/07, Jeremy Fitzhardinge <jeremy@xxxxxxxx> wrote:
> > > Chris Wright wrote:
> > > > That did get backed out (at least the part that broke paravirt patching)
> > > > in 602033ed5907a59ce86f709082a35be047743a86. Linus' tree should be
> > > > working fine right now with d34fda4a84c18402640a1a2342d6e6d9829e6db7
> > > > committed, and can be further refined with the patch below that's just
> > > > waiting on some further testing.
> > > >
> > >
> > > I don't think this is necessary. It isn't worth complicating the
> > > interface to avoid the memcpy.
> > >
> > > J
> > Damn,
> >
> > I can't believe I've just lost a night tracking the issue, without
> > seeing the discussion here ;-)
> > I came out to this very same conclusion, and was about to send a patch
> > that fixes it, by doing a memcpy before starting the instruction
> > replacement.
> >
> > (I wouldn't say anything, as this is solved, but my night have to get
> > some value, after all! ;-)
> >
> > So I'm with Jeremy. We don't lose too much by putting a memcpy there,
> > this code is not exactly critical. It also seems cleaner, and less
> > error prone. I have a patch ready here, but I think by this time, you
> > guys have too ;-)
>
> x86-64 also has a __inline_memcpy that is guaranteed inlined. It was
> originally for such cases when memcpy didn't work. Could be added to i386
> too if there is need
>
Andi,

this is not the case that memcpy did not work. (I got the same issue
for paravirt_ops x86_64, and btw, that's why I have not yet sent a new
patch).

The thing is that if that the paravirt replacement function returns,
it will return with the temporary buffer empty, will write the buffer
with text_poke(), and thus, put crap into the code.

So adding a memcpy to the buffer guarantees that in the worst case, it
will contain the original instruction. The normal memcpy works neatly.

--
Glauber de Oliveira Costa.
"Free as in Freedom"
http://glommer.net

"The less confident you are, the more serious you have to act."
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/