Messages in this thread | | | Subject | Re: [PATCH] kernel/kprobes: add check to avoid kprobe memory leak | From | chenjiankang <> | Date | Thu, 26 Oct 2017 09:22:23 +0800 |
| |
> On Tue, 24 Oct 2017 20:17:02 +0800 > JianKang Chen <chenjiankang1@huawei.com> wrote: > >> The function register_kretprobe is used to initialize a struct >> kretprobe and allocate a list table for kprobe instance. >> However,in this function, there is a memory leak. >> >> The test case: >> >> static struct kretprobe rp; >> struct kretprobe *rps[10]={&rp ,&rp ,&rp , >> &rp ,&rp ,&rp ,&rp ,&rp ,&rp,&rp}; > > What ? this is buggy code. you must not list same kretprobe. > But, year, since register_kprobe() already has similar protection against > reusing, register_kretprobe() should do so. > > [..] >> raw_spin_lock_init(&rp->lock); >> + >> + if (!hlist_empty(&rp->free_instances)) >> + return -EBUSY; >> + > > Hmm, but can you use check_kprobe_rereg() before raw_spin_lock_init()? > If user reuses rp after it starts, rp->lock can already be used.
Hmm, your advice is very good, we can use check_kprobe_rereg() at the beginning of the register_kretprobe();
For example:
int register_kretprobe(struct kretprobe *rp) { int ret = 0; struct kretprobe_instance *inst; int i; void *addr;
ret = check_kprobe_rereg(&rp->kp); if (ret) return ret;
Thank you!
| |