From 0bba5aa74d2d4c7cebad695ba3ff135903ad8de4 Mon Sep 17 00:00:00 2001 From: Roland Jax Date: Thu, 6 Feb 2014 23:36:58 +0100 Subject: [PATCH] Check max length of Databytes (Master/Slave) added. --- lib/ebus-bus.c | 14 ++++++++++++-- lib/ebus-common.h | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/ebus-bus.c b/lib/ebus-bus.c index 3a783b3c..05efd00d 100644 --- a/lib/ebus-bus.c +++ b/lib/ebus-bus.c @@ -1071,6 +1071,11 @@ eb_cyc_data_process(const unsigned char *buf, int buflen) /* calc crc vom master */ mlen = 5 + (int) msg[4]; + + if (((int) msg[4]) > EBUS_MSG_MASTER_MAX_DB_LEN) + log_print(L_WAR, "%s", "Master DB Len Error"); + return -2; + } memset(hlp, '\0', sizeof(hlp)); memcpy(hlp, msg, mlen); @@ -1097,7 +1102,7 @@ eb_cyc_data_process(const unsigned char *buf, int buflen) if (acks == EBUS_NAK) { log_print(L_WAR, "%s", "Slave ACK Error"); - //~ return -2; + return -2; } /* set len */ @@ -1110,6 +1115,11 @@ eb_cyc_data_process(const unsigned char *buf, int buflen) /* calc crc vom slave */ slen = 1 + (int) msg[mlen + 2]; + if (((int) msg[mlen + 2]) > EBUS_MSG_SLAVE_MAX_DB_LEN) + log_print(L_WAR, "%s", "Slave DB Len Error"); + return -2; + } + memset(hlp, '\0', sizeof(hlp)); memcpy(hlp, &msg[mlen + 2], slen); hlplen = slen; @@ -1129,7 +1139,7 @@ eb_cyc_data_process(const unsigned char *buf, int buflen) if (ackm == EBUS_NAK) { log_print(L_WAR, "%s", "Master ACK Error"); - //~ return -2; + return -2; } /* set len */ diff --git a/lib/ebus-common.h b/lib/ebus-common.h index 73f1767f..6eb06c72 100644 --- a/lib/ebus-common.h +++ b/lib/ebus-common.h @@ -55,6 +55,9 @@ #define EBUS_MSG_MASTER_SLAVE_TXT "MS" #define EBUS_MSG_MASTER_SLAVE 3 +#define EBUS_MSG_MASTER_MAX_DB_LEN 12 +#define EBUS_MSG_SLAVE_MAX_DB_LEN 12 + #define SERIAL_DEVICE "/dev/ttyUSB0" #define SERIAL_BAUDRATE B2400 #define SERIAL_BUFSIZE 100