diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index e974caf39d3e3bfa7d09b577b488650edc5ceebf..8c8f7a4d93afb96518c18da10c7e8f5bee62ef2d 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h @@ -153,6 +153,8 @@ struct kretprobe { struct kretprobe_holder *rph; }; +#define KRETPROBE_MAX_DATA_SIZE 4096 + struct kretprobe_instance { union { struct freelist_node freelist; diff --git a/kernel/kprobes.c b/kernel/kprobes.c index e9db0c810554e2c6b209b15de9b04d504e4080d1..21eccc961bba31cad928b2bf6e9bfc325191e64e 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -2086,6 +2086,9 @@ int register_kretprobe(struct kretprobe *rp) } } + if (rp->data_size > KRETPROBE_MAX_DATA_SIZE) + return -E2BIG; + rp->kp.pre_handler = pre_handler_kretprobe; rp->kp.post_handler = NULL;