mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
Fix GCC 12 compilation errors
Squelch false positives reported by GCC 12 with UBSan. Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: szubersk <szuberskidamian@gmail.com> Closes #14150
This commit is contained in:
parent
3a6d89ae52
commit
3c1e1933b6
@ -548,7 +548,7 @@ usage(boolean_t requested)
|
|||||||
show_properties = B_TRUE;
|
show_properties = B_TRUE;
|
||||||
|
|
||||||
if (show_properties) {
|
if (show_properties) {
|
||||||
(void) fprintf(fp,
|
(void) fprintf(fp, "%s",
|
||||||
gettext("\nThe following properties are supported:\n"));
|
gettext("\nThe following properties are supported:\n"));
|
||||||
|
|
||||||
(void) fprintf(fp, "\n\t%-14s %s %s %s\n\n",
|
(void) fprintf(fp, "\n\t%-14s %s %s %s\n\n",
|
||||||
|
@ -548,7 +548,7 @@ usage(boolean_t requested)
|
|||||||
(strcmp(current_command->name, "get") == 0) ||
|
(strcmp(current_command->name, "get") == 0) ||
|
||||||
(strcmp(current_command->name, "list") == 0))) {
|
(strcmp(current_command->name, "list") == 0))) {
|
||||||
|
|
||||||
(void) fprintf(fp,
|
(void) fprintf(fp, "%s",
|
||||||
gettext("\nthe following properties are supported:\n"));
|
gettext("\nthe following properties are supported:\n"));
|
||||||
|
|
||||||
(void) fprintf(fp, "\n\t%-19s %s %s\n\n",
|
(void) fprintf(fp, "\n\t%-19s %s %s\n\n",
|
||||||
|
@ -227,6 +227,62 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION], [
|
|||||||
AC_SUBST([INFINITE_RECURSION])
|
AC_SUBST([INFINITE_RECURSION])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Check if kernel cc supports -Winfinite-recursion option.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_INFINITE_RECURSION], [
|
||||||
|
AC_MSG_CHECKING([whether $KERNEL_CC supports -Winfinite-recursion])
|
||||||
|
|
||||||
|
saved_cc="$CC"
|
||||||
|
saved_flags="$CFLAGS"
|
||||||
|
CC="gcc"
|
||||||
|
CFLAGS="$CFLAGS -Werror -Winfinite-recursion"
|
||||||
|
|
||||||
|
AS_IF([ test -n "$KERNEL_CC" ], [
|
||||||
|
CC="$KERNEL_CC"
|
||||||
|
])
|
||||||
|
AS_IF([ test -n "$KERNEL_LLVM" ], [
|
||||||
|
CC="clang"
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
||||||
|
KERNEL_INFINITE_RECURSION=-Winfinite-recursion
|
||||||
|
AC_DEFINE([HAVE_KERNEL_INFINITE_RECURSION], 1,
|
||||||
|
[Define if compiler supports -Winfinite-recursion])
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
], [
|
||||||
|
KERNEL_INFINITE_RECURSION=
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])
|
||||||
|
|
||||||
|
CC="$saved_cc"
|
||||||
|
CFLAGS="$saved_flags"
|
||||||
|
AC_SUBST([KERNEL_INFINITE_RECURSION])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Check if cc supports -Wformat-overflow option.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FORMAT_OVERFLOW], [
|
||||||
|
AC_MSG_CHECKING([whether $CC supports -Wformat-overflow])
|
||||||
|
|
||||||
|
saved_flags="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -Werror -Wformat-overflow"
|
||||||
|
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
||||||
|
FORMAT_OVERFLOW=-Wformat-overflow
|
||||||
|
AC_DEFINE([HAVE_FORMAT_OVERFLOW], 1,
|
||||||
|
[Define if compiler supports -Wformat-overflow])
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
], [
|
||||||
|
FORMAT_OVERFLOW=
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])
|
||||||
|
|
||||||
|
CFLAGS="$saved_flags"
|
||||||
|
AC_SUBST([FORMAT_OVERFLOW])
|
||||||
|
])
|
||||||
|
|
||||||
dnl #
|
dnl #
|
||||||
dnl # Check if cc supports -fno-omit-frame-pointer option.
|
dnl # Check if cc supports -fno-omit-frame-pointer option.
|
||||||
dnl #
|
dnl #
|
||||||
|
@ -211,10 +211,12 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
|
|||||||
|
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION
|
ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION
|
||||||
|
ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_INFINITE_RECURSION
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH
|
ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN
|
ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH
|
||||||
|
ZFS_AC_CONFIG_ALWAYS_CC_FORMAT_OVERFLOW
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA
|
||||||
ZFS_AC_CONFIG_ALWAYS_CC_ASAN
|
ZFS_AC_CONFIG_ALWAYS_CC_ASAN
|
||||||
|
@ -199,6 +199,17 @@ nvprint_##type_and_variant(nvlist_prtctl_t pctl, void *private, \
|
|||||||
return (1); \
|
return (1); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Workaround for GCC 12+ with UBSan enabled deficencies.
|
||||||
|
*
|
||||||
|
* GCC 12+ invoked with -fsanitize=undefined incorrectly reports the code
|
||||||
|
* below as violating -Wformat-overflow.
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW)
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wformat-overflow"
|
||||||
|
#endif
|
||||||
NVLIST_PRTFUNC(boolean, int, int, "%d")
|
NVLIST_PRTFUNC(boolean, int, int, "%d")
|
||||||
NVLIST_PRTFUNC(boolean_value, boolean_t, int, "%d")
|
NVLIST_PRTFUNC(boolean_value, boolean_t, int, "%d")
|
||||||
NVLIST_PRTFUNC(byte, uchar_t, uchar_t, "0x%2.2x")
|
NVLIST_PRTFUNC(byte, uchar_t, uchar_t, "0x%2.2x")
|
||||||
@ -213,6 +224,10 @@ NVLIST_PRTFUNC(uint64, uint64_t, u_longlong_t, "0x%llx")
|
|||||||
NVLIST_PRTFUNC(double, double, double, "0x%f")
|
NVLIST_PRTFUNC(double, double, double, "0x%f")
|
||||||
NVLIST_PRTFUNC(string, char *, char *, "%s")
|
NVLIST_PRTFUNC(string, char *, char *, "%s")
|
||||||
NVLIST_PRTFUNC(hrtime, hrtime_t, hrtime_t, "0x%llx")
|
NVLIST_PRTFUNC(hrtime, hrtime_t, hrtime_t, "0x%llx")
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generate functions to print array-valued nvlist members.
|
* Generate functions to print array-valued nvlist members.
|
||||||
|
@ -1007,8 +1007,23 @@ send_print_verbose(FILE *fout, const char *tosnap, const char *fromsnap,
|
|||||||
(void) fprintf(fout, dgettext(TEXT_DOMAIN,
|
(void) fprintf(fout, dgettext(TEXT_DOMAIN,
|
||||||
"incremental\t%s\t%s"), fromsnap, tosnap);
|
"incremental\t%s\t%s"), fromsnap, tosnap);
|
||||||
} else {
|
} else {
|
||||||
|
/*
|
||||||
|
* Workaround for GCC 12+ with UBSan enabled deficencies.
|
||||||
|
*
|
||||||
|
* GCC 12+ invoked with -fsanitize=undefined incorrectly reports the code
|
||||||
|
* below as violating -Wformat-overflow.
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW)
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wformat-overflow"
|
||||||
|
#endif
|
||||||
(void) fprintf(fout, dgettext(TEXT_DOMAIN,
|
(void) fprintf(fout, dgettext(TEXT_DOMAIN,
|
||||||
"full\t%s"), tosnap);
|
"full\t%s"), tosnap);
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
(void) fprintf(fout, "\t%llu", (longlong_t)size);
|
(void) fprintf(fout, "\t%llu", (longlong_t)size);
|
||||||
} else {
|
} else {
|
||||||
@ -1028,8 +1043,23 @@ send_print_verbose(FILE *fout, const char *tosnap, const char *fromsnap,
|
|||||||
if (size != 0) {
|
if (size != 0) {
|
||||||
char buf[16];
|
char buf[16];
|
||||||
zfs_nicebytes(size, buf, sizeof (buf));
|
zfs_nicebytes(size, buf, sizeof (buf));
|
||||||
|
/*
|
||||||
|
* Workaround for GCC 12+ with UBSan enabled deficencies.
|
||||||
|
*
|
||||||
|
* GCC 12+ invoked with -fsanitize=undefined incorrectly reports the code
|
||||||
|
* below as violating -Wformat-overflow.
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW)
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wformat-overflow"
|
||||||
|
#endif
|
||||||
(void) fprintf(fout, dgettext(TEXT_DOMAIN,
|
(void) fprintf(fout, dgettext(TEXT_DOMAIN,
|
||||||
" estimated size is %s"), buf);
|
" estimated size is %s"), buf);
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(void) fprintf(fout, "\n");
|
(void) fprintf(fout, "\n");
|
||||||
|
@ -276,7 +276,7 @@ static size_t compress_parents_parallel(const blake3_ops_t *ops,
|
|||||||
const uint8_t *child_chaining_values, size_t num_chaining_values,
|
const uint8_t *child_chaining_values, size_t num_chaining_values,
|
||||||
const uint32_t key[8], uint8_t flags, uint8_t *out)
|
const uint32_t key[8], uint8_t flags, uint8_t *out)
|
||||||
{
|
{
|
||||||
const uint8_t *parents_array[MAX_SIMD_DEGREE_OR_2];
|
const uint8_t *parents_array[MAX_SIMD_DEGREE_OR_2] = {0};
|
||||||
size_t parents_array_len = 0;
|
size_t parents_array_len = 0;
|
||||||
|
|
||||||
while (num_chaining_values - (2 * parents_array_len) >= 2) {
|
while (num_chaining_values - (2 * parents_array_len) >= 2) {
|
||||||
|
@ -170,7 +170,8 @@ static void seterrorobj (lua_State *L, int errcode, StkId oldtop) {
|
|||||||
/*
|
/*
|
||||||
* Silence infinite recursion warning which was added to -Wall in gcc 12.1
|
* Silence infinite recursion warning which was added to -Wall in gcc 12.1
|
||||||
*/
|
*/
|
||||||
#if defined(HAVE_INFINITE_RECURSION)
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
defined(HAVE_KERNEL_INFINITE_RECURSION)
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Winfinite-recursion"
|
#pragma GCC diagnostic ignored "-Winfinite-recursion"
|
||||||
#endif
|
#endif
|
||||||
|
@ -229,7 +229,24 @@ zio_crypt_key_init(uint64_t crypt, zio_crypt_key_t *key)
|
|||||||
ASSERT(key != NULL);
|
ASSERT(key != NULL);
|
||||||
ASSERT3U(crypt, <, ZIO_CRYPT_FUNCTIONS);
|
ASSERT3U(crypt, <, ZIO_CRYPT_FUNCTIONS);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Workaround for GCC 12+ with UBSan enabled deficencies.
|
||||||
|
*
|
||||||
|
* GCC 12+ invoked with -fsanitize=undefined incorrectly reports the code
|
||||||
|
* below as violating -Warray-bounds
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
((!defined(_KERNEL) && defined(ZFS_UBSAN_ENABLED)) || \
|
||||||
|
defined(CONFIG_UBSAN))
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Warray-bounds"
|
||||||
|
#endif
|
||||||
keydata_len = zio_crypt_table[crypt].ci_keylen;
|
keydata_len = zio_crypt_table[crypt].ci_keylen;
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
((!defined(_KERNEL) && defined(ZFS_UBSAN_ENABLED)) || \
|
||||||
|
defined(CONFIG_UBSAN))
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
memset(key, 0, sizeof (zio_crypt_key_t));
|
memset(key, 0, sizeof (zio_crypt_key_t));
|
||||||
rw_init(&key->zk_salt_lock, NULL, RW_DEFAULT, NULL);
|
rw_init(&key->zk_salt_lock, NULL, RW_DEFAULT, NULL);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user