zfs/include/os/linux/spl/sys
Richard Yao 7584fbe846
Cleanup: Switch to strlcpy from strncpy
Coverity found a bug in `zfs_secpolicy_create_clone()` where it is
possible for us to pass an unterminated string when `zfs_get_parent()`
returns an error. Upon inspection, it is clear that using `strlcpy()`
would have avoided this issue.

Looking at the codebase, there are a number of other uses of `strncpy()`
that are unsafe and even when it is used safely, switching to
`strlcpy()` would make the code more readable. Therefore, we switch all
instances where we use `strncpy()` to use `strlcpy()`.

Unfortunately, we do not portably have access to `strlcpy()` in
tests/zfs-tests/cmd/zfs_diff-socket.c because it does not link to
libspl. Modifying the appropriate Makefile.am to try to link to it
resulted in an error from the naming choice used in the file. Trying to
disable the check on the file did not work on FreeBSD because Clang
ignores `#undef` when a definition is provided by `-Dstrncpy(...)=...`.
We workaround that by explictly including the C file from libspl into
the test. This makes things build correctly everywhere.

We add a deprecation warning to `config/Rules.am` and suppress it on the
remaining `strncpy()` usage. `strlcpy()` is not portably avaliable in
tests/zfs-tests/cmd/zfs_diff-socket.c, so we use `snprintf()` there as a
substitute.

This patch does not tackle the related problem of `strcpy()`, which is
even less safe. Thankfully, a quick inspection found that it is used far
more correctly than strncpy() was used. A quick inspection did not find
any problems with `strcpy()` usage outside of zhack, but it should be
said that I only checked around 90% of them.

Lastly, some of the fields in kstat_t varied in size by 1 depending on
whether they were in userspace or in the kernel. The origin of this
discrepancy appears to be 04a479f706 where
it was made for no apparent reason. It conflicts with the comment on
KSTAT_STRLEN, so we shrink the kernel field sizes to match the userspace
field sizes.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #13876
2022-09-27 16:35:29 -07:00
..
acl.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
atomic.h More aggsum optimizations 2021-06-07 09:02:47 -07:00
byteorder.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
callb.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
callo.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
cmn_err.h Linux 5.15 compat: standalone <linux/stdarg.h> 2021-09-08 12:59:43 -07:00
condvar.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
cred.h Fix ACL checks for NFS kernel server 2022-03-18 06:47:57 -06:00
ctype.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
debug.h Replace *CTASSERT() with _Static_assert() 2022-01-26 11:38:52 -08:00
disp.h Cleanup: Use OpenSolaris functions to call scheduler 2022-09-12 09:55:37 -07:00
dkio.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
errno.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
fcntl.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
file.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
inttypes.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
isa_defs.h Handle aarch64 defines seperate from arm 2022-03-07 17:49:34 -08:00
kmem.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
kmem_cache.h Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
kstat.h Cleanup: Switch to strlcpy from strncpy 2022-09-27 16:35:29 -07:00
list.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
mod_os.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
mutex.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
param.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
proc.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
processor.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
procfs_list.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
random.h FreeBSD: fix compilation of FreeBSD world after 29274c9f6 2021-06-25 10:28:51 -07:00
rwlock.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
shrinker.h Linux 6.0 compat: register_shrinker() now var-arg 2022-08-08 16:18:30 -07:00
sid.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
signal.h Add SIGSTOP and SIGTSTP handling to issig 2021-04-15 13:34:35 -07:00
simd.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
stat.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
string.h Forbid b{copy,zero,cmp}(). Don't include <strings.h> for <string.h> 2022-03-15 15:13:48 -07:00
sunddi.h Remove hw_serial, ddi_strtoul() 2022-05-13 10:15:31 -07:00
sysmacros.h module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
systeminfo.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
taskq.h module: icp: remove other provider types 2022-02-15 16:23:53 -08:00
thread.h Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
time.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
timer.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
trace.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
trace_spl.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
trace_taskq.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
tsd.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
types.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
types32.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
uio.h zvol: Support blk-mq for better performance 2022-06-09 08:10:38 -06:00
user.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
vfs.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
vmem.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
vmsystm.h Add membar_sync 2022-09-20 15:32:44 -07:00
vnode.h Consolidate zfs_holey and zfs_access 2020-10-31 09:40:08 -07:00
wait.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
wmsum.h Introduce write-mostly sums 2021-05-27 14:27:29 -06:00
zmod.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
zone.h Add Linux namespace delegation support 2022-06-10 09:51:46 -07:00