diff options
| author | Gustavo A. R. Silva <[email protected]> | 2021-08-10 23:31:01 +0000 |
|---|---|---|
| committer | Anna Schumaker <[email protected]> | 2022-01-06 19:00:20 +0000 |
| commit | c72a826829ccfb38019187a3a5ba6d3584b7b7dc (patch) | |
| tree | 11a21fd0e943c5dbdf2ef791e14b2c4a443485ab /fs/nfs/filelayout/filelayoutdev.c | |
| parent | SUNRPC: Add source address/port to rpc_socket* traces (diff) | |
| download | kernel-c72a826829ccfb38019187a3a5ba6d3584b7b7dc.tar.gz kernel-c72a826829ccfb38019187a3a5ba6d3584b7b7dc.zip | |
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 <[email protected]>
Signed-off-by: Anna Schumaker <[email protected]>
Diffstat (limited to 'fs/nfs/filelayout/filelayoutdev.c')
| -rw-r--r-- | fs/nfs/filelayout/filelayoutdev.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/nfs/filelayout/filelayoutdev.c b/fs/nfs/filelayout/filelayoutdev.c index 86c3f7e69ec4..acf4b88889dc 100644 --- a/fs/nfs/filelayout/filelayoutdev.c +++ b/fs/nfs/filelayout/filelayoutdev.c @@ -136,9 +136,7 @@ nfs4_fl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev, goto out_err_free_stripe_indices; } - dsaddr = kzalloc(sizeof(*dsaddr) + - (sizeof(struct nfs4_pnfs_ds *) * (num - 1)), - gfp_flags); + dsaddr = kzalloc(struct_size(dsaddr, ds_list, num), gfp_flags); if (!dsaddr) goto out_err_free_stripe_indices; |
