From 40c60b0d7389aa479cf7474a080737e901944d0d Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Mon, 15 Aug 2016 12:02:06 +0200 Subject: Avoid truncating the pointer on x32 platform. The 64 bit pointer must not be cast to 32bit unsigned long on x32 platform. Reviewed-by: Tim Hudson Reviewed-by: Matt Caswell --- engines/afalg/e_afalg.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/engines/afalg/e_afalg.c b/engines/afalg/e_afalg.c index 1766230ce8..2ea5ba5232 100644 --- a/engines/afalg/e_afalg.c +++ b/engines/afalg/e_afalg.c @@ -230,11 +230,15 @@ int afalg_fin_cipher_aio(afalg_aio *aio, int sfd, unsigned char *buf, memset(cb, '\0', sizeof(*cb)); cb->aio_fildes = sfd; cb->aio_lio_opcode = IOCB_CMD_PREAD; - /* - * The pointer has to be converted to unsigned value first to avoid - * sign extension on cast to 64 bit value - */ - cb->aio_buf = (uint64_t)(unsigned long)buf; + if (sizeof(buf) != sizeof(cb->aio_buf)) { + /* + * The pointer has to be converted to 32 bit unsigned value first + * to avoid sign extension on cast to 64 bit value + */ + cb->aio_buf = (uint64_t)(unsigned long)buf; + } else { + cb->aio_buf = (uint64_t)buf; + } cb->aio_offset = 0; cb->aio_data = 0; cb->aio_nbytes = len; -- cgit v1.2.3