Thread (15 messages) flat view 15 messages, 5 authors, 2007-06-26

Re: [PATCH 3/3] Make jprobes a little safer for users

From: Andrew Morton <akpm@linux-foundation.org>
Date: 2007-06-26 06:51:55
Also in: linux-arch, lkml

On Tue, 26 Jun 2007 16:03:58 +1000 Michael Ellerman [off-list ref] wrote:
On Tue, 2007-06-26 at 07:53 +0200, Christoph Hellwig wrote:
quoted
On Tue, Jun 26, 2007 at 11:48:51AM +1000, Michael Ellerman wrote:
quoted
I realise jprobes are a razor-blades-included type of interface, but
that doesn't mean we can't try and make them safer to use. This guy I
know once wrote code like this:

struct jprobe jp = { .kp.symbol_name = "foo", .entry = "jprobe_foo" };

And then his kernel exploded. Oops.

This patch adds an arch hook, arch_deref_entry_point() (I don't like it either)
which takes the void * in a struct jprobe, and gives back the text address
that it represents.

We can then use that in register_jprobe() to check that the entry point
we're passed is actually in the kernel text, rather than just some random
value.
Please don't add more weak functions, they're utterly horrible for
anyone trying to understand the code.  Otherwise this looks fine to me.
What do you recommend instead? #define ARCH_HAS_FOO_BAR ?
o lord, save us, no.
I don't see what's utterly horrible about them.
Me either.
The fact that they're
weak is fairly reasonable documentation that they're overridden
somewhere else. And grep/cscope/ctags will find both the weak and
non-weak versions for you?
yup.

In this case we could just require that each jprobes-supporting
architecture implement arch_deref_entry_point().


Or one could do the Linus trick.  In each architecture which implements
arch_deref_entry_point() do:

#define arch_deref_entry_point arch_deref_entry_point

in the per-arch header file then, in non-arch code, do

#ifndef arch_deref_entry_point
static unsigned long arch_deref_entry_point(...)
{
	<generic implementation>
}
#endif

That's just the ARCH_HAS_FOO_BAR thing, only less fugly.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help