* [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
@ 2025-12-12 6:44 Gustavo A. R. Silva
2025-12-15 18:47 ` Wei Liu
2025-12-18 19:42 ` Wei Liu
0 siblings, 2 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2025-12-12 6:44 UTC (permalink / raw)
To: K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Long Li
Cc: linux-hyperv, linux-kernel, Gustavo A. R. Silva, linux-hardening
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are
getting ready to enable it, globally.
Use the new __TRAILING_OVERLAP() helper to fix the following warning:
include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
This helper creates a union between a flexible-array member (FAM) and a
set of MEMBERS that would otherwise follow it.
This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
the FAM and the start of MEMBER aligned.
The static_assert() ensures this alignment remains, and it's
intentionally placed inmediately after the related structure --no
blank line in between.
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
---
include/hyperv/hvgdk_mini.h | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
index 04b18d0e37af..30fbbde81c5c 100644
--- a/include/hyperv/hvgdk_mini.h
+++ b/include/hyperv/hvgdk_mini.h
@@ -578,9 +578,12 @@ struct hv_tlb_flush { /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */
struct hv_tlb_flush_ex {
u64 address_space;
u64 flags;
- struct hv_vpset hv_vp_set;
- u64 gva_list[];
+ __TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed,
+ u64 gva_list[];
+ );
} __packed;
+static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) ==
+ offsetof(struct hv_tlb_flush_ex, gva_list));
struct ms_hyperv_tsc_page { /* HV_REFERENCE_TSC_PAGE */
volatile u32 tsc_sequence;
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
2025-12-12 6:44 [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
@ 2025-12-15 18:47 ` Wei Liu
2025-12-16 2:59 ` Gustavo A. R. Silva
2025-12-18 19:42 ` Wei Liu
1 sibling, 1 reply; 5+ messages in thread
From: Wei Liu @ 2025-12-15 18:47 UTC (permalink / raw)
To: Gustavo A. R. Silva
Cc: K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Long Li,
linux-hyperv, linux-kernel, linux-hardening
On Fri, Dec 12, 2025 at 03:44:50PM +0900, Gustavo A. R. Silva wrote:
> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
> getting ready to enable it, globally.
>
> Use the new __TRAILING_OVERLAP() helper to fix the following warning:
>
> include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>
> This helper creates a union between a flexible-array member (FAM) and a
> set of MEMBERS that would otherwise follow it.
>
> This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
> struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
> the FAM and the start of MEMBER aligned.
>
> The static_assert() ensures this alignment remains, and it's
> intentionally placed inmediately after the related structure --no
> blank line in between.
>
> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Gustavo, what is your build command? I would like to incorporate that
into my own build tests.
Thanks,
Wei
> ---
> include/hyperv/hvgdk_mini.h | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
> index 04b18d0e37af..30fbbde81c5c 100644
> --- a/include/hyperv/hvgdk_mini.h
> +++ b/include/hyperv/hvgdk_mini.h
> @@ -578,9 +578,12 @@ struct hv_tlb_flush { /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */
> struct hv_tlb_flush_ex {
> u64 address_space;
> u64 flags;
> - struct hv_vpset hv_vp_set;
> - u64 gva_list[];
> + __TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed,
> + u64 gva_list[];
> + );
> } __packed;
> +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) ==
> + offsetof(struct hv_tlb_flush_ex, gva_list));
>
> struct ms_hyperv_tsc_page { /* HV_REFERENCE_TSC_PAGE */
> volatile u32 tsc_sequence;
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
2025-12-15 18:47 ` Wei Liu
@ 2025-12-16 2:59 ` Gustavo A. R. Silva
0 siblings, 0 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2025-12-16 2:59 UTC (permalink / raw)
To: Wei Liu, Gustavo A. R. Silva
Cc: K. Y. Srinivasan, Haiyang Zhang, Dexuan Cui, Long Li,
linux-hyperv, linux-kernel, linux-hardening
On 12/16/25 03:47, Wei Liu wrote:
> On Fri, Dec 12, 2025 at 03:44:50PM +0900, Gustavo A. R. Silva wrote:
>> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
>> getting ready to enable it, globally.
>>
>> Use the new __TRAILING_OVERLAP() helper to fix the following warning:
>>
>> include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>>
>> This helper creates a union between a flexible-array member (FAM) and a
>> set of MEMBERS that would otherwise follow it.
>>
>> This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
>> struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
>> the FAM and the start of MEMBER aligned.
>>
>> The static_assert() ensures this alignment remains, and it's
>> intentionally placed inmediately after the related structure --no
>> blank line in between.
>>
>> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
>
> Gustavo, what is your build command? I would like to incorporate that
> into my own build tests.
I'm using the following patch (which is the one I'll actually submit
upstream once all these warnings are fixed).
diff --git a/Makefile b/Makefile
index e404e4767944..0d6a0d8f791b 100644
--- a/Makefile
+++ b/Makefile
@@ -1086,6 +1086,8 @@ KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3)
# Allow including a tagged struct or union anonymously in another struct/union.
KBUILD_CFLAGS += -fms-extensions
+KBUILD_CFLAGS += $(call cc-option, -Wflex-array-member-not-at-end)
+
# disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS += -fno-strict-overflow
Thanks
-Gustavo
>
> Thanks,
> Wei
>
>> ---
>> include/hyperv/hvgdk_mini.h | 7 +++++--
>> 1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
>> index 04b18d0e37af..30fbbde81c5c 100644
>> --- a/include/hyperv/hvgdk_mini.h
>> +++ b/include/hyperv/hvgdk_mini.h
>> @@ -578,9 +578,12 @@ struct hv_tlb_flush { /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */
>> struct hv_tlb_flush_ex {
>> u64 address_space;
>> u64 flags;
>> - struct hv_vpset hv_vp_set;
>> - u64 gva_list[];
>> + __TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed,
>> + u64 gva_list[];
>> + );
>> } __packed;
>> +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) ==
>> + offsetof(struct hv_tlb_flush_ex, gva_list));
>>
>> struct ms_hyperv_tsc_page { /* HV_REFERENCE_TSC_PAGE */
>> volatile u32 tsc_sequence;
>> --
>> 2.43.0
>>
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
2025-12-12 6:44 [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
2025-12-15 18:47 ` Wei Liu
@ 2025-12-18 19:42 ` Wei Liu
2025-12-19 2:53 ` Gustavo A. R. Silva
1 sibling, 1 reply; 5+ messages in thread
From: Wei Liu @ 2025-12-18 19:42 UTC (permalink / raw)
To: Gustavo A. R. Silva
Cc: K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Long Li,
linux-hyperv, linux-kernel, linux-hardening
On Fri, Dec 12, 2025 at 03:44:50PM +0900, Gustavo A. R. Silva wrote:
> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
> getting ready to enable it, globally.
>
> Use the new __TRAILING_OVERLAP() helper to fix the following warning:
>
> include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>
> This helper creates a union between a flexible-array member (FAM) and a
> set of MEMBERS that would otherwise follow it.
>
> This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
> struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
> the FAM and the start of MEMBER aligned.
>
> The static_assert() ensures this alignment remains, and it's
> intentionally placed inmediately after the related structure --no
> blank line in between.
>
> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Applied. I fixed a typo in the commit message ("inmediately" ->
"immediately").
Wei
> ---
> include/hyperv/hvgdk_mini.h | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
> index 04b18d0e37af..30fbbde81c5c 100644
> --- a/include/hyperv/hvgdk_mini.h
> +++ b/include/hyperv/hvgdk_mini.h
> @@ -578,9 +578,12 @@ struct hv_tlb_flush { /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */
> struct hv_tlb_flush_ex {
> u64 address_space;
> u64 flags;
> - struct hv_vpset hv_vp_set;
> - u64 gva_list[];
> + __TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed,
> + u64 gva_list[];
> + );
> } __packed;
> +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) ==
> + offsetof(struct hv_tlb_flush_ex, gva_list));
>
> struct ms_hyperv_tsc_page { /* HV_REFERENCE_TSC_PAGE */
> volatile u32 tsc_sequence;
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
2025-12-18 19:42 ` Wei Liu
@ 2025-12-19 2:53 ` Gustavo A. R. Silva
0 siblings, 0 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2025-12-19 2:53 UTC (permalink / raw)
To: Wei Liu, Gustavo A. R. Silva
Cc: K. Y. Srinivasan, Haiyang Zhang, Dexuan Cui, Long Li,
linux-hyperv, linux-kernel, linux-hardening
On 12/19/25 04:42, Wei Liu wrote:
> On Fri, Dec 12, 2025 at 03:44:50PM +0900, Gustavo A. R. Silva wrote:
>> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
>> getting ready to enable it, globally.
>>
>> Use the new __TRAILING_OVERLAP() helper to fix the following warning:
>>
>> include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>>
>> This helper creates a union between a flexible-array member (FAM) and a
>> set of MEMBERS that would otherwise follow it.
>>
>> This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
>> struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
>> the FAM and the start of MEMBER aligned.
>>
>> The static_assert() ensures this alignment remains, and it's
>> intentionally placed inmediately after the related structure --no
>> blank line in between.
>>
>> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
>
> Applied. I fixed a typo in the commit message ("inmediately" ->
> "immediately").
Awesome. :)
Thanks
-Gustavo
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-12-19 2:53 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-12 6:44 [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
2025-12-15 18:47 ` Wei Liu
2025-12-16 2:59 ` Gustavo A. R. Silva
2025-12-18 19:42 ` Wei Liu
2025-12-19 2:53 ` Gustavo A. R. Silva
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.