Re: [PATCH] kprobes for 2.5.47

From: Rusty Lynch (rusty@linux.co.intel.com)
Date: Tue Nov 12 2002 - 20:58:39 EST


When register_kprobe() is called with a bad addr, we crash the kernel.
Should it be the reponsibility of the caller, or the kernel to make sure the
addr is ok?

The kernel could check by adding a

+unsigned short tmp;
....
+if(__get_user(tmp, (unsigned short *)p->addr)) {
+ ret = -EINVAL;
+ goto out;
+}

to register_kprobe()

> +int register_kprobe(struct kprobe *p)
> +{
> + int ret = 0;
> +
> + spin_lock_irq(&kprobe_lock);
> + if (get_kprobe(p->addr)) {
> + ret = -EEXIST;
> + goto out;
> + }
> + list_add(&p->list, &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]);
> +
> + p->opcode = *p->addr;
> + *p->addr = BREAKPOINT_INSTRUCTION;
> + flush_icache_range(p->addr, p->addr + sizeof(kprobe_opcode_t));
> + out:
> + spin_unlock_irq(&kprobe_lock);
> + return ret;
> +}

BTW, I have a stupid little sample char driver that reads in address/message
pairs and then adds a probe that printk's the message at the address. This
was just my way of learning how to use kprobes. Should I post it? I would
love to get feedback on what I did wrong, but I hate to spam the list.

    -rustyl

-
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/



This archive was generated by hypermail 2b29 : Fri Nov 15 2002 - 22:00:27 EST