From 418f4bc7a5a8d581889ca8e7b9da2c6ff0d9b94f Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Mon, 8 Oct 2012 11:19:54 +0200 Subject: [PATCH] Raise a bus alert when IKE message body parsing fails --- src/libcharon/bus/bus.h | 3 +++ src/libcharon/sa/ikev1/task_manager_v1.c | 2 ++ src/libcharon/sa/ikev2/task_manager_v2.c | 2 ++ 3 files changed, 7 insertions(+) diff --git a/src/libcharon/bus/bus.h b/src/libcharon/bus/bus.h index 2cd04cf97..485b1dc6a 100644 --- a/src/libcharon/bus/bus.h +++ b/src/libcharon/bus/bus.h @@ -96,6 +96,9 @@ enum alert_t { ALERT_INVALID_IKE_SPI, /** received IKE message with invalid header, argument is message_t* */ ALERT_PARSE_ERROR_HEADER, + /** received IKE message with invalid body, argument is message_t*, + * followed by a status_t result returned by message_t.parse_body(). */ + ALERT_PARSE_ERROR_BODY, }; /** diff --git a/src/libcharon/sa/ikev1/task_manager_v1.c b/src/libcharon/sa/ikev1/task_manager_v1.c index 5b7258fad..2ea636164 100644 --- a/src/libcharon/sa/ikev1/task_manager_v1.c +++ b/src/libcharon/sa/ikev1/task_manager_v1.c @@ -1076,6 +1076,8 @@ static status_t parse_message(private_task_manager_t *this, message_t *msg) msg->get_request(msg) ? "request" : "response", msg->get_message_id(msg)); + charon->bus->alert(charon->bus, ALERT_PARSE_ERROR_BODY, msg, status); + if (this->ike_sa->get_state(this->ike_sa) == IKE_CREATED) { /* invalid initiation attempt, close SA */ return DESTROY_ME; diff --git a/src/libcharon/sa/ikev2/task_manager_v2.c b/src/libcharon/sa/ikev2/task_manager_v2.c index 5890ba5eb..524540445 100644 --- a/src/libcharon/sa/ikev2/task_manager_v2.c +++ b/src/libcharon/sa/ikev2/task_manager_v2.c @@ -1045,6 +1045,8 @@ static status_t parse_message(private_task_manager_t *this, message_t *msg) is_request ? "request" : "response", msg->get_message_id(msg)); + charon->bus->alert(charon->bus, ALERT_PARSE_ERROR_BODY, msg, status); + if (this->ike_sa->get_state(this->ike_sa) == IKE_CREATED) { /* invalid initiation attempt, close SA */ return DESTROY_ME;