[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.LNX.2.00.1307110036000.25858@pobox.suse.cz>
Date: Thu, 11 Jul 2013 00:39:07 +0200 (CEST)
From: Jiri Kosina <jkosina@...e.cz>
To: "H. Peter Anvin" <hpa@...ux.intel.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>,
Steven Rostedt <rostedt@...dmis.org>,
Jason Baron <jbaron@...hat.com>,
Borislav Petkov <bpetkov@...e.de>, linux-kernel@...r.kernel.org
Subject: Re: [RFC] [PATCH 1/2 v2] x86: introduce int3-based instruction
patching
On Wed, 10 Jul 2013, H. Peter Anvin wrote:
> > If any CPU instruction execution would collide with the patching,
> > it'd be trapped by the int3 breakpoint and redirected to the provided
> > "handler" (which would typically mean just skipping over the patched
> > region, acting as "nop" has been there, in case we are doing nop -> jump
> > and jump -> nop transitions).
> >
>
> I'm wondering if it would be easier/more general to just return to the
> instruction. The "more general" bit would allow this to be used for
> other things, like alternatives, and perhaps eventually dynamic call
> patching.
Interesting idea ... This should be very easily done by just setting the
"handler" to the exact address that is being patched, and it'll work
exactly the way you are proposing, no?
> Returning to the instruction will, in effect, be a busy-wait for the
> faulted CPU until the patch is complete; more or less what stop_machine
> would do, but only for a CPU which actually strays into the affected region.
Exactly ... so the special case I am introducing for jump labels in 2/2
(i.e. implicitly behaving like there was a nop) is an optimized one, but
can be easily turned into busy loop by just redirecting the "handler" one
instruction back in cases where it'd be desirable.
--
Jiri Kosina
SUSE Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists