All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: michael@ellerman.id.au
Cc: Christoph Hellwig <hch@lst.de>,
	linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org,
	linux-ia64@vger.kernel.org, linux-arch@vger.kernel.org,
	anil.s.keshavamurthy@intel.com, ananth@in.ibm.com
Subject: Re: [PATCH 3/3] Make jprobes a little safer for users
Date: Mon, 25 Jun 2007 23:51:03 -0700	[thread overview]
Message-ID: <20070625235103.2d8dea18.akpm@linux-foundation.org> (raw)
In-Reply-To: <1182837838.6673.17.camel@concordia.ozlabs.ibm.com>

On Tue, 26 Jun 2007 16:03:58 +1000 Michael Ellerman <michael@ellerman.id.au> wrote:

> On Tue, 2007-06-26 at 07:53 +0200, Christoph Hellwig wrote:
> > On Tue, Jun 26, 2007 at 11:48:51AM +1000, Michael Ellerman wrote:
> > > 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.

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: michael@ellerman.id.au
Cc: Christoph Hellwig <hch@lst.de>,
	linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org,
	linux-ia64@vger.kernel.org, linux-arch@vger.kernel.org,
	anil.s.keshavamurthy@intel.com, ananth@in.ibm.com
Subject: Re: [PATCH 3/3] Make jprobes a little safer for users
Date: Tue, 26 Jun 2007 06:51:03 +0000	[thread overview]
Message-ID: <20070625235103.2d8dea18.akpm@linux-foundation.org> (raw)
In-Reply-To: <1182837838.6673.17.camel@concordia.ozlabs.ibm.com>

On Tue, 26 Jun 2007 16:03:58 +1000 Michael Ellerman <michael@ellerman.id.au> wrote:

> On Tue, 2007-06-26 at 07:53 +0200, Christoph Hellwig wrote:
> > On Tue, Jun 26, 2007 at 11:48:51AM +1000, Michael Ellerman wrote:
> > > 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.

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: michael@ellerman.id.au
Cc: linux-arch@vger.kernel.org, linux-ia64@vger.kernel.org,
	linux-kernel@vger.kernel.org, anil.s.keshavamurthy@intel.com,
	linuxppc-dev@ozlabs.org, Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH 3/3] Make jprobes a little safer for users
Date: Mon, 25 Jun 2007 23:51:03 -0700	[thread overview]
Message-ID: <20070625235103.2d8dea18.akpm@linux-foundation.org> (raw)
In-Reply-To: <1182837838.6673.17.camel@concordia.ozlabs.ibm.com>

On Tue, 26 Jun 2007 16:03:58 +1000 Michael Ellerman <michael@ellerman.id.au> wrote:

> On Tue, 2007-06-26 at 07:53 +0200, Christoph Hellwig wrote:
> > On Tue, Jun 26, 2007 at 11:48:51AM +1000, Michael Ellerman wrote:
> > > 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.

  reply	other threads:[~2007-06-26  6:51 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-26  1:48 [PATCH 1/3] Make struct jprobe.entry a void * Michael Ellerman
2007-06-26  1:48 ` Michael Ellerman
2007-06-26  1:48 ` Michael Ellerman
2007-06-26  1:48 ` Michael Ellerman
2007-06-26  1:48 ` [PATCH 2/3] Remove JPROBE_ENTRY() Michael Ellerman
2007-06-26  1:48   ` Michael Ellerman
2007-06-26  1:48   ` Michael Ellerman
2007-06-26  1:48   ` Michael Ellerman
2007-06-26  5:52   ` Christoph Hellwig
2007-06-26  5:52     ` Christoph Hellwig
2007-06-26  5:52     ` Christoph Hellwig
2007-06-26  1:48 ` [PATCH 3/3] Make jprobes a little safer for users Michael Ellerman
2007-06-26  1:48   ` Michael Ellerman
2007-06-26  1:48   ` Michael Ellerman
2007-06-26  1:48   ` Michael Ellerman
2007-06-26  2:00   ` Andrew Morton
2007-06-26  2:00     ` Andrew Morton
2007-06-26  2:00     ` Andrew Morton
2007-06-26  2:00     ` Andrew Morton
2007-06-26  2:06     ` Michael Ellerman
2007-06-26  2:06       ` Michael Ellerman
2007-06-26  2:06       ` Michael Ellerman
2007-06-26  2:24       ` [PATCH 1/1] Add a prototype for arch_deref_entry_point() Michael Ellerman
2007-06-26  5:53   ` [PATCH 3/3] Make jprobes a little safer for users Christoph Hellwig
2007-06-26  5:53     ` Christoph Hellwig
2007-06-26  5:53     ` Christoph Hellwig
2007-06-26  6:03     ` Michael Ellerman
2007-06-26  6:03       ` Michael Ellerman
2007-06-26  6:03       ` Michael Ellerman
2007-06-26  6:51       ` Andrew Morton [this message]
2007-06-26  6:51         ` Andrew Morton
2007-06-26  6:51         ` Andrew Morton
2007-06-26  6:19   ` Abhishek Sagar
2007-06-26  6:31     ` Abhishek Sagar
2007-06-26  6:19     ` Abhishek Sagar
2007-06-26  6:34     ` Michael Ellerman
2007-06-26  6:34       ` Michael Ellerman
2007-06-26  6:34       ` Michael Ellerman
2007-06-26  7:54       ` Abhishek Sagar
2007-06-26  7:55         ` Abhishek Sagar
2007-06-26  7:54         ` Abhishek Sagar
2007-06-26  3:48 ` [PATCH 1/3] Make struct jprobe.entry a void * Ananth N Mavinakayanahalli
2007-06-26  3:51   ` Ananth N Mavinakayanahalli
2007-06-26  3:51   ` Ananth N Mavinakayanahalli
2007-06-26  3:51   ` Ananth N Mavinakayanahalli
2007-06-26  3:56 ` Ananth N Mavinakayanahalli
2007-06-26  3:59   ` Ananth N Mavinakayanahalli
2007-06-26  3:59   ` Ananth N Mavinakayanahalli
2007-06-26  3:59   ` Ananth N Mavinakayanahalli
2007-06-26  4:35   ` Michael Ellerman
2007-06-26  4:35     ` Michael Ellerman
2007-06-26  4:35     ` Michael Ellerman

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=20070625235103.2d8dea18.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=ananth@in.ibm.com \
    --cc=anil.s.keshavamurthy@intel.com \
    --cc=hch@lst.de \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=michael@ellerman.id.au \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.