[Spice-devel] [PATCH] server/red_dispatcher: fix memset params
Christophe Fergeau
cfergeau at redhat.com
Tue Aug 2 02:55:53 PDT 2011
Hey Uri,
Good catch! How did you find it? valgrind? static analysis? Code
review?
On Tue, Aug 02, 2011 at 11:05:11AM +0300, Uri Lublin wrote:
> update_client_mouse_allowed();
> - memset(&dispatcher->surface_create, sizeof(QXLDevSurfaceCreate), 0);
> + memset(&dispatcher->surface_create, 0, sizeof(QXLDevSurfaceCreate));
It's interesting that the problematic structure is QXLDevSurfaceCreate
because valgrind had issues with it in test_display_streaming too (patch
coming). However, what is interesting is that the QXLDevSurfaceCreate has
4 bytes of padding adding by the compiler on x86_64:
struct QXLDevSurfaceCreate {
uint32_t width; /* 0 4 */
uint32_t height; /* 4 4 */
int32_t stride; /* 8 4 */
uint32_t format; /* 12 4 */
uint32_t position; /* 16 4 */
uint32_t mouse_mode; /* 20 4 */
uint32_t flags; /* 24 4 */
uint32_t type; /* 28 4 */
uint64_t mem; /* 32 8 */
uint32_t group_id; /* 40 4 */
/* size: 48, cachelines: 1, members: 10 */
/* padding: 4 */
/* last cacheline: 48 bytes */
};
As far as I understand, the whole structure is sent on the wire
(for example send_data(dispatcher->channel, surface,
sizeof(QXLDevSurfaceCreate)); in
RedDispatcher::handle_dev_create_primary_surface ), which these 4 bytes
part of the protocol. So I was wondering if we should document somewhere
these 4 bytes of padding? I also haven't checked what size this structure
gets on x86.
Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20110802/fcbf108b/attachment.pgp>
More information about the Spice-devel
mailing list