diff --git a/daemon/kernel.c b/daemon/kernel.c index 07d849d5a..7c1f03802 100644 --- a/daemon/kernel.c +++ b/daemon/kernel.c @@ -76,6 +76,7 @@ static int kernel_open_table(unsigned int id) { ZERO(msg); msg.cmd = REMG_NOOP; + msg.u.size = sizeof(msg); i = write(fd, &msg, sizeof(msg)); if (i <= 0) goto fail; diff --git a/kernel-module/xt_RTPENGINE.c b/kernel-module/xt_RTPENGINE.c index 77106a0d9..169c89a98 100644 --- a/kernel-module/xt_RTPENGINE.c +++ b/kernel-module/xt_RTPENGINE.c @@ -3261,7 +3261,8 @@ static inline ssize_t proc_control_read_write(struct file *file, char __user *ub switch (msg->cmd) { case REMG_NOOP: - DBG("noop.\n"); + if (msg->u.size != sizeof(*msg)) + err = -EMSGSIZE; break; case REMG_ADD: diff --git a/kernel-module/xt_RTPENGINE.h b/kernel-module/xt_RTPENGINE.h index 00b0922c7..217903e8a 100644 --- a/kernel-module/xt_RTPENGINE.h +++ b/kernel-module/xt_RTPENGINE.h @@ -144,6 +144,7 @@ struct rtpengine_stats_info { struct rtpengine_message { enum { + /* size: */ REMG_NOOP = 1, /* target_info: */ @@ -170,6 +171,7 @@ struct rtpengine_message { } cmd; union { + size_t size; struct rtpengine_target_info target; struct rtpengine_call_info call; struct rtpengine_stream_info stream;