From 8490d289fbef44e2ff2665cadebce730cef04792 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 5 Jun 2015 11:57:35 +0200 Subject: [PATCH] unify message validation across S2SS server and OPAL and GTFPGA PPC clients --- clients/opal_udp/models/send_receive/include/msg.h | 10 ++++++++++ clients/opal_udp/models/send_receive/src/msg.c | 13 +++++++++++++ clients/opal_udp/models/send_receive/src/s2ss.c | 13 ++++--------- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/clients/opal_udp/models/send_receive/include/msg.h b/clients/opal_udp/models/send_receive/include/msg.h index 060cc29ad..69fdd15f9 100644 --- a/clients/opal_udp/models/send_receive/include/msg.h +++ b/clients/opal_udp/models/send_receive/include/msg.h @@ -11,5 +11,15 @@ void msg_swap(struct msg *m); +/** Check the consistency of a message. + * + * The functions checks the header fields of a message. + * + * @param m A pointer to the message + * @retval 0 The message header is valid. + * @retval <0 The message header is invalid. + */ +int msg_verify(struct msg *m); + #endif /* _MSG_H_ */ diff --git a/clients/opal_udp/models/send_receive/src/msg.c b/clients/opal_udp/models/send_receive/src/msg.c index 19acdca14..86d23504d 100644 --- a/clients/opal_udp/models/send_receive/src/msg.c +++ b/clients/opal_udp/models/send_receive/src/msg.c @@ -22,3 +22,16 @@ void msg_swap(struct msg *m) m->endian ^= 1; } +int msg_verify(struct msg *m) +{ + if (m->version != MSG_VERSION) + return -1; + else if (m->type != MSG_TYPE_DATA) + return -2; + else if ((m->length <= 0) || (m->length > MSG_VALUES)) + return -3; + else if ((m->rsvd1 != 0) || (m->rsvd2 != 0)) + return -4; + else + return 0; +} \ No newline at end of file diff --git a/clients/opal_udp/models/send_receive/src/s2ss.c b/clients/opal_udp/models/send_receive/src/s2ss.c index 34b714aa6..753131cb2 100644 --- a/clients/opal_udp/models/send_receive/src/s2ss.c +++ b/clients/opal_udp/models/send_receive/src/s2ss.c @@ -187,15 +187,10 @@ static void *RecvFromIPPort(void *arg) /******* FORMAT TO SPECIFIC PROTOCOL HERE ******************************/ n = RecvPacket((char *) &msg, sizeof(msg), 1.0); - /** @todo: Check and ntohs() sequence number! */ - - if (msg.version != MSG_VERSION) { - OpalPrint("%s: Received message with unknown version. Skipping..\n", PROGNAME); - continue; - } - else if (msg.type != MSG_TYPE_DATA) { - OpalPrint("%s: Received no data. Skipping..\n", PROGNAME); - continue; + int ret = msg_verify(m); + if (ret) { + printf("Dropping invalid message (reason=%d)\r\n", ret); + goto out; } /** @todo: We may check the sequence number here. */