Re: Alignment of data within spice packets

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 8 Mar 2017, at 22:16, Victor Toso <lists@xxxxxxxxxxxxxx> wrote:

Hi,

On Wed, Mar 08, 2017 at 07:21:15PM +0100, Christophe de Dinechin wrote:
I have several errors like this:

spice-channel.c:1923:12: error: cast from 'uint8_t *' (aka 'unsigned char *') to
     'uint32_t *' (aka 'unsigned int *') increases required alignment from 1 to
     4 [-Werror,-Wcast-align]
 ...(uint32_t *)((uint8_t *)c->peer_msg + GUINT32_FROM_LE(c->peer_msg->caps_offset));
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Is there any guarantee that the result pointer will be 32-bit aligned?
In other words, is it guaranteed that the c->peer_msg->caps_offset
will be a multiple of 4? I don’t see this written in the spec.

Based on the answer, the correct fix is:

- If aligned, to cast to a uint32_t * in a way that disables the warning

- If misaligned, to replaced *p with a read operation that is safe when mis-aligned (OS dependent I guess)

Yes, we should check case-by-case. I started doing some work around this
(nearly one and half year ago already!) but I got stuck on explaining
the rationale for each cast which would avoid the warnings.

You can see the comments and suggestions at the time are in the
following thread:

https://lists.freedesktop.org/archives/spice-devel/2015-August/021535.html

Ach, I see you used SPICE_ALIGNED_CAST and SPICE_UNALIGNED_CAST. I used SPICE_REALIGN_CAST :-(

Will try to integrate your patches, thanks.


Cheers,
       toso


Thanks
Christophe

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]