Messages in this thread Patch in this message | | | Date | Fri, 9 Feb 2007 00:03:53 -0800 | From | Andrew Morton <> | Subject | Re: [RFC] [PATCH] To list all active probes in the system---Take-2 |
| |
On Thu, 08 Feb 2007 17:16:15 +0530 Srinivasa Ds <srinivasa@in.ibm.com> wrote:
> +module_init(debugfs_kprobe_init); > +#endif /* CONFIG_DEBUG_FS */ > + > __initcall(init_kprobes);
I think you'll find this doesn't work when loaded as a module: we only support a single initcall per module. (Which might be a bit dumb of us - it's probably easy to fix and is an inconsistency between modular and built-in).
<looks>
Oh, kernel/kprobes.o can't be linked as a module. It looks like it could be though?
You have a little race: debugfs_kprobe_init() will be called before init_kprobes(). If someone were able to read from the debugfs files in that window (they probably can't as we don't support modular kprobes.ko) they'll crash the kernel. I'll switch debugfs_kprobe_init() to late_initcall to fix that.
There are quite a few things in there which could have static scope.
I'll apply this:
diff -puN kernel/kprobes.c~kprobes-list-all-active-probes-in-the-system-tidy kernel/kprobes.c --- a/kernel/kprobes.c~kprobes-list-all-active-probes-in-the-system-tidy +++ a/kernel/kprobes.c @@ -836,12 +836,12 @@ static void __kprobes report_probe(struc seq_printf(pi, "%p %s %p\n", p->addr, kprobe_type, p->addr); } -void __kprobes *kprobe_seq_start(struct seq_file *f, loff_t *pos) +static void __kprobes *kprobe_seq_start(struct seq_file *f, loff_t *pos) { return (*pos < KPROBE_TABLE_SIZE) ? pos : NULL; } -void __kprobes *kprobe_seq_next(struct seq_file *f, void *v, loff_t *pos) +static void __kprobes *kprobe_seq_next(struct seq_file *f, void *v, loff_t *pos) { (*pos)++; if (*pos >= KPROBE_TABLE_SIZE) @@ -849,12 +849,12 @@ void __kprobes *kprobe_seq_next(struct s return pos; } -void __kprobes kprobe_seq_stop(struct seq_file *f, void *v) +static void __kprobes kprobe_seq_stop(struct seq_file *f, void *v) { /* Nothing to do */ } -int __kprobes show_kprobe_addr(struct seq_file *pi, void *v) +static int __kprobes show_kprobe_addr(struct seq_file *pi, void *v) { struct hlist_head *head; struct hlist_node *node; @@ -879,7 +879,7 @@ int __kprobes show_kprobe_addr(struct se return 0; } -struct seq_operations kprobes_seq_ops = { +static struct seq_operations kprobes_seq_ops = { .start = kprobe_seq_start, .next = kprobe_seq_next, .stop = kprobe_seq_stop, @@ -916,10 +916,10 @@ static int __kprobes debugfs_kprobe_init return 0; } -module_init(debugfs_kprobe_init); +late_initcall(debugfs_kprobe_init); #endif /* CONFIG_DEBUG_FS */ -__initcall(init_kprobes); +module_init(init_kprobes); EXPORT_SYMBOL_GPL(register_kprobe); EXPORT_SYMBOL_GPL(unregister_kprobe); @@ -928,4 +928,3 @@ EXPORT_SYMBOL_GPL(unregister_jprobe); EXPORT_SYMBOL_GPL(jprobe_return); EXPORT_SYMBOL_GPL(register_kretprobe); EXPORT_SYMBOL_GPL(unregister_kretprobe); - _ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |