diff options
author | Dimitri Staessens <[email protected]> | 2019-03-18 20:44:38 +0100 |
---|---|---|
committer | Sander Vrijders <[email protected]> | 2019-03-18 21:00:59 +0100 |
commit | bb724cad016fba5775e751c817df0a07136d223f (patch) | |
tree | 9c33310c5f45eb6afc62579c149f29eb45a8af26 /src/ipcpd/udp | |
parent | 0d75cc553b584c0b5d55016af51a6fa9994ca49d (diff) | |
download | ouroboros-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 <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
Diffstat (limited to 'src/ipcpd/udp')
-rw-r--r-- | src/ipcpd/udp/main.c | 14 |
1 files changed, 8 insertions, 6 deletions
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) { |