[PATCH 1/2] hyper-v: Mark inner union in hv_kvp_exchg_msg_value as packed

Thomas Weißschuh posted 2 patches 3 weeks, 4 days ago
[PATCH 1/2] hyper-v: Mark inner union in hv_kvp_exchg_msg_value as packed
Posted by Thomas Weißschuh 3 weeks, 4 days ago
The unpacked union within a packed struct generates alignment warnings
on clang for 32-bit ARM:

./usr/include/linux/hyperv.h:361:2: error: field  within 'struct hv_kvp_exchg_msg_value'
  is less aligned than 'union hv_kvp_exchg_msg_value::(anonymous at ./usr/include/linux/hyperv.h:361:2)'
  and is usually due to 'struct hv_kvp_exchg_msg_value' being packed,
  which can lead to unaligned accesses [-Werror,-Wunaligned-access]
     361 |         union {
         |         ^

With the recent changes to compile-test the UAPI headers in more cases,
this warning in combination with CONFIG_WERROR breaks the build.

Fix the warning.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202512140314.DzDxpIVn-lkp@intel.com/
Reported-by: Nathan Chancellor <nathan@kernel.org>
Closes: https://lore.kernel.org/linux-kbuild/20260110-uapi-test-disable-headers-arm-clang-unaligned-access-v1-1-b7b0fa541daa@kernel.org/
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/linux-kbuild/29b2e736-d462-45b7-a0a9-85f8d8a3de56@app.fastmail.com/
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
 include/uapi/linux/hyperv.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/uapi/linux/hyperv.h b/include/uapi/linux/hyperv.h
index aaa502a7bff4..1749b35ab2c2 100644
--- a/include/uapi/linux/hyperv.h
+++ b/include/uapi/linux/hyperv.h
@@ -362,7 +362,7 @@ struct hv_kvp_exchg_msg_value {
 		__u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
 		__u32 value_u32;
 		__u64 value_u64;
-	};
+	} __attribute__((packed));
 } __attribute__((packed));
 
 struct hv_kvp_msg_enumerate {

-- 
2.52.0

Re: [PATCH 1/2] hyper-v: Mark inner union in hv_kvp_exchg_msg_value as packed
Posted by Wei Liu 3 weeks, 4 days ago
On Thu, Jan 15, 2026 at 08:35:44AM +0100, Thomas Weißschuh wrote:
> The unpacked union within a packed struct generates alignment warnings
> on clang for 32-bit ARM:
> 
> ./usr/include/linux/hyperv.h:361:2: error: field  within 'struct hv_kvp_exchg_msg_value'
>   is less aligned than 'union hv_kvp_exchg_msg_value::(anonymous at ./usr/include/linux/hyperv.h:361:2)'
>   and is usually due to 'struct hv_kvp_exchg_msg_value' being packed,
>   which can lead to unaligned accesses [-Werror,-Wunaligned-access]
>      361 |         union {
>          |         ^
> 
> With the recent changes to compile-test the UAPI headers in more cases,
> this warning in combination with CONFIG_WERROR breaks the build.
> 
> Fix the warning.
> 
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202512140314.DzDxpIVn-lkp@intel.com/
> Reported-by: Nathan Chancellor <nathan@kernel.org>
> Closes: https://lore.kernel.org/linux-kbuild/20260110-uapi-test-disable-headers-arm-clang-unaligned-access-v1-1-b7b0fa541daa@kernel.org/
> Suggested-by: Arnd Bergmann <arnd@arndb.de>
> Link: https://lore.kernel.org/linux-kbuild/29b2e736-d462-45b7-a0a9-85f8d8a3de56@app.fastmail.com/
> Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>

Acked-by: Wei Liu (Microsoft) <wei.liu@kernel.org>

> ---
>  include/uapi/linux/hyperv.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/uapi/linux/hyperv.h b/include/uapi/linux/hyperv.h
> index aaa502a7bff4..1749b35ab2c2 100644
> --- a/include/uapi/linux/hyperv.h
> +++ b/include/uapi/linux/hyperv.h
> @@ -362,7 +362,7 @@ struct hv_kvp_exchg_msg_value {
>  		__u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
>  		__u32 value_u32;
>  		__u64 value_u64;
> -	};
> +	} __attribute__((packed));
>  } __attribute__((packed));
>  
>  struct hv_kvp_msg_enumerate {
> 
> -- 
> 2.52.0
> 
>