From gerrit@openafs.org Tue Jul 1 22:04:18 2025 From: gerrit@openafs.org (Gerrit Code Review) Date: Tue, 1 Jul 2025 17:04:18 -0400 Subject: OpenAFS Master Repository branch, master, updated. openafs-devel-1_9_2-235-g98b0415 Message-ID: <202507012104.561L4I1L016169@openafs.MIT.EDU> The following commit has been merged in the master branch: commit 98b0415b75ae5306fa5e3a9d656a1084afe474a2 Author: Cheyenne Wills Date: Mon Jun 23 17:42:21 2025 -0600 afs: Don't build afs_fid() for UKERNEL Currently, the libafs vnop afs_fid() is built for UKERNEL, even though no UKERNEL code calls this function. UKERNEL defines its own fake 'struct usr_fid' and a few related preprocessor #define's, which can cause problems during the build. Specifically, some code in afs_fid() allocates a 'struct fid' using a hard-coded size SIZEOF_SMALLFID+2 (10+2) instead of the actual size of a fid structure. For UKERNEL, this results in an overflow when a small fid is copied into the fid_data member, since the struct on UKERNEL has a size of at least 4 bytes plus the fid_data we copy into it: struct usr_fid { unsigned short fid_len; unsigned short fid_reserved; char fid_data[MAXFIDSZ]; } This causes a build failure when building rpms under RHEL10, since lto (link time optimization) is enabled by default. The following warnings are produced when building the src/libuafs/testlink target: In function ‘memcpy’, inlined from ‘afs_fid’ at /build/openafs/packages/rpmbuild/BUILD/openafs-1.9.2-230-gc8f3bf/src/afs/VNOPS/afs_vnop_fid.c:142:6: /usr/include/bits/string_fortified.h:29:10: warning: ‘__builtin_memcpy’ writing 10 bytes into a region of size 8 overflows the destination [-Wstringop-overflow=] 29 | return __builtin___memcpy_chk (__dest, __src, __len, | ^ In function ‘afs_osi_Alloc’, inlined from ‘afs_fid’ at /build/openafs/packages/rpmbuild/BUILD/openafs-1.9.2-230-gc8f3bf/src/afs/VNOPS/afs_vnop_fid.c:138:28: /build/openafs/packages/rpmbuild/BUILD/openafs-1.9.2-230-gc8f3bf/src/afs/UKERNEL/afs_usrops.c:833:12: note: at offset 4 into destination object of size 12 allocated by ‘malloc’ 833 | return malloc(size); | ^ In function ‘memcpy’, inlined from ‘afs_fid’ at /build/openafs/packages/rpmbuild/BUILD/openafs-1.9.2-230-gc8f3bf/src/afs/VNOPS/afs_vnop_fid.c:147:2: /usr/include/bits/string_fortified.h:29:10: warning: ‘__builtin_memcpy’ writing 10 bytes into a region of size 8 overflows the destination [-Wstringop-overflow=] 29 | return __builtin___memcpy_chk (__dest, __src, __len, | ^ In function ‘afs_osi_Alloc’, inlined from ‘afs_fid’ at /build/openafs/packages/rpmbuild/BUILD/openafs-1.9.2-230-gc8f3bf/src/afs/VNOPS/afs_vnop_fid.c:138:28: /build/openafs/packages/rpmbuild/BUILD/openafs-1.9.2-230-gc8f3bf/src/afs/UKERNEL/afs_usrops.c:833:12: note: at offset 4 into destination object of size 12 allocated by ‘malloc’ 833 | return malloc(size); | ^ To avoid this, don't build this function for UKERNEL at all, since it is never used, and remove some of the related structures and preprocessor defines. To do this, refactor the logic in afs_vnop_fid.c to only include it for certain platforms, instead of excluding for certain platforms. We now only build afs_fid() for Solaris, AIX, Irix, and HP-UX. Use a #define just for this file, called AFS_VNOP_FID_ENV, to help make the logic easier to follow. The questionable hard-coded allocation size is still unchanged, but is now only used for some esoteric platforms where it maybe makes sense and are difficult to check (Irix and HP-UX). Written in collaboration with adeason@sinenomine.net. Change-Id: I24904d4023066efda95a9f4e38fc0c9372b5913e Reviewed-on: https://gerrit.openafs.org/16411 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Andrew Deason src/afs/UKERNEL/osi_vnodeops.c | 1 - src/afs/UKERNEL/sysincludes.h | 21 --------------------- src/afs/VNOPS/afs_vnop_fid.c | 11 ++++++++--- src/afs/afs_prototypes.h | 2 +- 4 files changed, 9 insertions(+), 26 deletions(-) -- OpenAFS Master Repository