<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
please discard this one, I didn't notice the v1 version had been committed. please use the incremental fix &nbsp;instead (<span style="font-weight: 600;">[PATCH VZ10] fs/fuse kio: move struct krpc_completion to the end of struct krpc_req</span>)</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Liu Kui &lt;kui.liu@virtuozzo.com&gt;<br>
<b>Sent:</b> 18 May 2026 12:20<br>
<b>To:</b> devel@openvz.org &lt;devel@openvz.org&gt;<br>
<b>Cc:</b> Alexey Kuznetsov &lt;kuznet@virtuozzo.com&gt;; Andrey Zaitsev &lt;azaitsev@virtuozzo.com&gt;; Konstantin Khorenko &lt;khorenko@virtuozzo.com&gt;; Kui Liu &lt;kui.liu@virtuozzo.com&gt;<br>
<b>Subject:</b> [PATCH VZ10 v2] fs/fuse kio: replace zero-length array with flexible array syntax</font>
<div>&nbsp;</div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">With FORTIFY_SOURCE, memcpy to a zero-length array field is flagged<br>
as field-spanning, causing kernel warning. Switch to the C99 flexible<br>
array [] syntax to fix this.<br>
<br>
Changes:<br>
v1:<br>
&nbsp;- _data_buf[0] -&gt; _data_buf[] in struct krpc_completion<br>
&nbsp;- sync_resp[0] -&gt; sync_resp[] in struct pcs_cs_iohdr<br>
&nbsp;- nodes[0] -&gt; nodes[] in struct pcs_cs_map_prop<br>
&nbsp;- cs[0] -&gt; cs[] in struct pcs_cs_list<br>
&nbsp;- cs[0] -&gt; cs[] in struct pcs_ioc_getmap<br>
<br>
v2:<br>
&nbsp;- move struct krpc_completion to the end of struct krpc_req<br>
<br>
Link: <a href="https://virtuozzo.atlassian.net/browse/VSTOR-130548">https://virtuozzo.atlassian.net/browse/VSTOR-130548</a><br>
<br>
Signed-off-by: Liu Kui &lt;kui.liu@virtuozzo.com&gt;<br>
---<br>
&nbsp;fs/fuse/kio/pcs/pcs_cs_prot.h | 4 ++--<br>
&nbsp;fs/fuse/kio/pcs/pcs_ioctl.h&nbsp;&nbsp; | 2 +-<br>
&nbsp;fs/fuse/kio/pcs/pcs_krpc.h&nbsp;&nbsp;&nbsp; | 6 +++---<br>
&nbsp;fs/fuse/kio/pcs/pcs_map.h&nbsp;&nbsp;&nbsp;&nbsp; | 2 +-<br>
&nbsp;4 files changed, 7 insertions(+), 7 deletions(-)<br>
<br>
diff --git a/fs/fuse/kio/pcs/pcs_cs_prot.h b/fs/fuse/kio/pcs/pcs_cs_prot.h<br>
index c72066de7be4..c524d28b551e 100644<br>
--- a/fs/fuse/kio/pcs/pcs_cs_prot.h<br>
+++ b/fs/fuse/kio/pcs/pcs_cs_prot.h<br>
@@ -79,7 +79,7 @@ struct pcs_cs_iohdr {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fiemap_count;&nbsp;&nbsp; /* Used only in FIEMAP request, limit on number of extents to return */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_sync_data sync;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Filled in all requests and responses */<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_sync_resp sync_resp[0];&nbsp;&nbsp; /* Used only in response to write/sync */<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_sync_resp sync_resp[];&nbsp;&nbsp;&nbsp; /* Used only in response to write/sync */<br>
&nbsp;} __attribute__((aligned(8)));<br>
&nbsp;<br>
&nbsp;static inline int pcs_cs_use_aligned_io(u32 storage_version)<br>
@@ -171,7 +171,7 @@ struct pcs_cs_map_prop {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chain_nodes;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reserved;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nnodes;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_node_desc nodes[0];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_node_desc nodes[];<br>
&nbsp;} __attribute__((aligned(8)));<br>
&nbsp;<br>
&nbsp;#define CS_OBJ_UNKNOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1<br>
diff --git a/fs/fuse/kio/pcs/pcs_ioctl.h b/fs/fuse/kio/pcs/pcs_ioctl.h<br>
index fb22cf8a01b0..07a87d6507f3 100644<br>
--- a/fs/fuse/kio/pcs/pcs_ioctl.h<br>
+++ b/fs/fuse/kio/pcs/pcs_ioctl.h<br>
@@ -74,7 +74,7 @@ struct pcs_ioc_getmap<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* TODO: cs array is only for OUT ? */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cs_cnt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* The number of CS (including root) entries that follows */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cs_max;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Max number of CS (including root) entries requested */<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cs[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Array of CS including root */<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cs[];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Array of CS including root */<br>
&nbsp;};<br>
&nbsp;<br>
&nbsp;#define PCS_IOC_NOCSUMONREAD&nbsp;&nbsp;&nbsp; _IOW('V',3,u32)<br>
diff --git a/fs/fuse/kio/pcs/pcs_krpc.h b/fs/fuse/kio/pcs/pcs_krpc.h<br>
index 6a090ef66185..92dae58ef43b 100644<br>
--- a/fs/fuse/kio/pcs/pcs_krpc.h<br>
+++ b/fs/fuse/kio/pcs/pcs_krpc.h<br>
@@ -99,7 +99,7 @@ struct krpc_completion {<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *private;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data_len;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _data_buf[0];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _data_buf[];<br>
&nbsp;};<br>
&nbsp;<br>
&nbsp;#define KRPC_MAX_DATA_PAGES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 256<br>
@@ -129,11 +129,11 @@ struct krpc_req {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nr_data_bvecs;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct bio_vec data_bvecs[KRPC_MAX_DATA_PAGES];<br>
&nbsp;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct krpc_completion completion;<br>
-<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gen;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct llist_node&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llist_link;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_krpc_ioc_sendmsg iocmsg;<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct krpc_completion completion;<br>
&nbsp;};<br>
&nbsp;<br>
&nbsp;static inline u32 pcs_krpc_msg_size(u32 size, u8 flags)<br>
diff --git a/fs/fuse/kio/pcs/pcs_map.h b/fs/fuse/kio/pcs/pcs_map.h<br>
index bf8a0e7177d0..788a8cb16d8e 100644<br>
--- a/fs/fuse/kio/pcs/pcs_map.h<br>
+++ b/fs/fuse/kio/pcs/pcs_map.h<br>
@@ -127,7 +127,7 @@ struct pcs_cs_list<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write_timeout;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nsrv;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PCS_MAP_VERSION_T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* version inherented from map */<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_record&nbsp;&nbsp;&nbsp; cs[0];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct pcs_cs_record&nbsp;&nbsp;&nbsp; cs[];<br>
&nbsp;};<br>
&nbsp;<br>
&nbsp;/* TODO, LOCKING!!!!!<br>
-- <br>
2.39.5 (Apple Git-154)<br>
<br>
</div>
</span></font></div>
</body>
</html>