From 3bf5347436593bf761b735ade3ad910df70a73d5 Mon Sep 17 00:00:00 2001 From: Jason Macnak Date: Wed, 11 Jun 2025 16:15:18 -0700 Subject: [PATCH] gfxstream: Fix strict aliasing violations in VkDecoder Test: cvd create --gpu_mode=gfxstream_guest_angle_host_swiftshader Reviewed-by: Aaron Ruby Reviewed-by: Marcin Radomski Part-of: --- src/gfxstream/codegen/scripts/cereal/decoder.py | 8 ++++++-- src/gfxstream/codegen/scripts/cerealgenerator.py | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gfxstream/codegen/scripts/cereal/decoder.py b/src/gfxstream/codegen/scripts/cereal/decoder.py index c83e6955162..f6ce1b3168b 100644 --- a/src/gfxstream/codegen/scripts/cereal/decoder.py +++ b/src/gfxstream/codegen/scripts/cereal/decoder.py @@ -888,8 +888,12 @@ size_t VkDecoder::Impl::decode(void* buf, size_t len, IOStream* ioStream, self.cgen.beginBlock() # while loop self.cgen.stmt("const uint8_t* packet = (const uint8_t *)ptr") - self.cgen.stmt("uint32_t opcode = *(uint32_t *)ptr") - self.cgen.stmt("uint32_t packetLen = *(uint32_t *)(ptr + 4)") + self.cgen.stmt("uint32_t opcode") + self.cgen.stmt("std::memcpy(&opcode, ptr, sizeof(uint32_t))") + self.cgen.line("") + self.cgen.stmt("uint32_t packetLen") + self.cgen.stmt("std::memcpy(&packetLen, ptr + 4, sizeof(uint32_t))") + self.cgen.line("") self.cgen.line(""" // packetLen should be at least 8 (op code and packet length) and should not be excessively large if (packetLen < 8 || packetLen > MAX_PACKET_LENGTH) { diff --git a/src/gfxstream/codegen/scripts/cerealgenerator.py b/src/gfxstream/codegen/scripts/cerealgenerator.py index 8fb89bbbe8a..7bcf394126d 100644 --- a/src/gfxstream/codegen/scripts/cerealgenerator.py +++ b/src/gfxstream/codegen/scripts/cerealgenerator.py @@ -560,6 +560,7 @@ class BumpPool; #include "VulkanDispatch.h" #include "%s.h" +#include #include #include #include