mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
nfs41: pnfs: filelayout: Replace one-element array with flexible-array member
There is a regular need in the kernel to provide a way to declare having a dynamically sized set of trailing elements in a structure. Kernel code should always use “flexible array members”[1] for these cases. The older style of one-element or zero-length arrays should no longer be used[2]. Refactor the code a bit according to the use of a flexible-array member in struct nfs4_file_layout_dsaddr instead of a one-element array, and use the struct_size() helper. This helps with the ongoing efforts to globally enable -Warray-bounds and get us closer to being able to tighten the FORTIFY_SOURCE routines on memcpy(). This issue was found with the help of Coccinelle and audited and fixed, manually. [1] https://en.wikipedia.org/wiki/Flexible_array_member [2] https://www.kernel.org/doc/html/v5.10/process/deprecated.html#zero-length-and-one-element-arrays Link: https://github.com/KSPP/linux/issues/79 Link: https://github.com/KSPP/linux/issues/109 Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
committed by
Anna Schumaker
parent
4b0c359b81
commit
c72a826829
@@ -51,7 +51,7 @@ struct nfs4_file_layout_dsaddr {
|
|||||||
u32 stripe_count;
|
u32 stripe_count;
|
||||||
u8 *stripe_indices;
|
u8 *stripe_indices;
|
||||||
u32 ds_num;
|
u32 ds_num;
|
||||||
struct nfs4_pnfs_ds *ds_list[1];
|
struct nfs4_pnfs_ds *ds_list[];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct nfs4_filelayout_segment {
|
struct nfs4_filelayout_segment {
|
||||||
|
@@ -136,9 +136,7 @@ nfs4_fl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
|
|||||||
goto out_err_free_stripe_indices;
|
goto out_err_free_stripe_indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
dsaddr = kzalloc(sizeof(*dsaddr) +
|
dsaddr = kzalloc(struct_size(dsaddr, ds_list, num), gfp_flags);
|
||||||
(sizeof(struct nfs4_pnfs_ds *) * (num - 1)),
|
|
||||||
gfp_flags);
|
|
||||||
if (!dsaddr)
|
if (!dsaddr)
|
||||||
goto out_err_free_stripe_indices;
|
goto out_err_free_stripe_indices;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user