diff --git a/src/main-ctl-unix.c b/src/main-ctl-unix.c index b4da5eb..90d604f 100644 --- a/src/main-ctl-unix.c +++ b/src/main-ctl-unix.c @@ -629,7 +629,7 @@ static void ctl_handle_commands(main_server_st * s) } goto cleanup; } - length = (buffer[2] << 8) | buffer[1]; + memcpy(&length, &buffer[1], 2); buffer_size = ret - 3; if (length != buffer_size) { diff --git a/src/occtl-unix.c b/src/occtl-unix.c index 183825d..0c1b3e1 100644 --- a/src/occtl-unix.c +++ b/src/occtl-unix.c @@ -83,15 +83,14 @@ int send_cmd(struct unix_ctx *ctx, unsigned cmd, const void *data, struct iovec iov[2]; unsigned iov_len = 1; int e, ret; - unsigned length = 0; + uint16_t length = 0; void *packed = NULL; if (get_size) length = get_size(data); header[0] = cmd; - header[1] = length; - header[2] = length >> 8; + memcpy(&header[1], &length, 2); iov[0].iov_base = header; iov[0].iov_len = 3; @@ -145,7 +144,7 @@ int send_cmd(struct unix_ctx *ctx, unsigned cmd, const void *data, goto fail; } - length = (header[2] << 8) | header[1]; + memcpy(&length, &header[1], 2); rep->data_size = length; rep->data = talloc_size(ctx, length); diff --git a/src/sec-mod.c b/src/sec-mod.c index 15ee32a..c3d4bad 100644 --- a/src/sec-mod.c +++ b/src/sec-mod.c @@ -354,6 +354,7 @@ void sec_mod_server(void *main_pool, struct cfg_st *config, const char *socket_f unsigned cmd, length; unsigned i, buffer_size; uint8_t *buffer, *tpool; + uint16_t l16; struct pin_st pins; int sd; sec_mod_st *sec; @@ -538,10 +539,11 @@ void sec_mod_server(void *main_pool, struct cfg_st *config, const char *socket_f } cmd = buffer[0]; - length = buffer[1] | buffer[2] << 8; + memcpy(&l16, &buffer[1], 2); + length = l16; if (length > buffer_size - 4) { - seclog(LOG_INFO, "too big message"); + seclog(LOG_INFO, "too big message (%d)", length); goto cont; }