summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2019-03-18 20:44:38 +0100
committerSander Vrijders <sander@ouroboros.rocks>2019-03-18 21:00:59 +0100
commitbb724cad016fba5775e751c817df0a07136d223f (patch)
tree9c33310c5f45eb6afc62579c149f29eb45a8af26
parent0d75cc553b584c0b5d55016af51a6fa9994ca49d (diff)
downloadouroboros-bb724cad016fba5775e751c817df0a07136d223f.tar.gz
ouroboros-bb724cad016fba5775e751c817df0a07136d223f.zip
ipcpd: Fix strict aliasing warning0.15.1
Some versions of gcc seem to give a positive on the strict aliasing rule. It's absent from newer gcc versions or clang. However, rather than disabling the check for older version, this small rewrite seems to temporarily fix the false positive. Apparently, it's undefined behaviour to simply cast a char/uint8_t buffer to a variable type pointer and then dereference the type. A more elaborate patch to fix the undefined behaviour is needed. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
-rw-r--r--CMakeLists.txt2
-rw-r--r--src/ipcpd/udp/main.c14
2 files changed, 9 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9585ad2f..d7bbff2a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,7 +9,7 @@ include(GNUInstallDirs)
set(PACKAGE_VERSION_MAJOR 0)
set(PACKAGE_VERSION_MINOR 15)
-set(PACKAGE_VERSION_PATCH 0)
+set(PACKAGE_VERSION_PATCH 1)
set(PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
set(PACKAGE_DESCRIPTION "The Ouroboros prototype")
diff --git a/src/ipcpd/udp/main.c b/src/ipcpd/udp/main.c
index 559be55a..9f45bc73 100644
--- a/src/ipcpd/udp/main.c
+++ b/src/ipcpd/udp/main.c
@@ -438,14 +438,16 @@ static void * ipcp_udp_mgmt_handler(void * o)
static void * ipcp_udp_packet_reader(void * o)
{
- uint8_t buf[IPCP_UDP_MAX_PACKET_SIZE];
- uint8_t * data;
- ssize_t n;
- uint32_t eid;
+ uint8_t buf[IPCP_UDP_MAX_PACKET_SIZE];
+ uint8_t * data;
+ ssize_t n;
+ uint32_t eid;
+ uint32_t * eid_p;
(void) o;
- data = buf + sizeof(uint32_t);
+ data = buf + sizeof(uint32_t);
+ eid_p = (uint32_t *) buf;
while (true) {
struct mgmt_frame * frame;
@@ -467,7 +469,7 @@ static void * ipcp_udp_packet_reader(void * o)
continue;
}
- eid = ntoh32(*((uint32_t *) buf));
+ eid = ntoh32(*eid_p);
/* pass onto mgmt queue */
if (eid == MGMT_EID) {