1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-19 14:04:03 +03:00

Several fixlets for GCC warnings (#36051)

Replaces #36043 and #36039.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2025-01-16 22:41:31 +01:00 committed by GitHub
commit 4e97e697c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 48 additions and 28 deletions

View File

@ -516,9 +516,6 @@ add_project_link_arguments(
userspace_c_args += cc.get_supported_arguments(possible_cc_flags)
userspace_c_ld_args += cc.get_supported_link_arguments(possible_link_flags)
have = cc.has_argument('-Wzero-length-bounds')
conf.set10('HAVE_ZERO_LENGTH_BOUNDS', have)
if cc.compiles('''
#include <time.h>
#include <inttypes.h>
@ -538,14 +535,19 @@ endif
cpp = ' '.join(cc.cmd_array() + get_option('c_args')) + ' -E'
has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
# new in GCC 10
have = cc.has_argument('-Wzero-length-bounds')
conf.set10('HAVE_WARNING_ZERO_LENGTH_BOUNDS', have)
# new in GCC 15
have = cc.has_argument('-Wzero-as-null-pointer-constant')
conf.set10('HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT', have)
#####################################################################
# compilation result tests
conf.set('_GNU_SOURCE', 1)
conf.set('__SANE_USERSPACE_TYPES__', true)
conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))

View File

@ -30,15 +30,6 @@
#define _function_no_sanitize_float_cast_overflow_
#endif
#if HAVE_WSTRINGOP_TRUNCATION
# define DISABLE_WARNING_STRINGOP_TRUNCATION \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"")
#else
# define DISABLE_WARNING_STRINGOP_TRUNCATION \
_Pragma("GCC diagnostic push")
#endif
/* test harness */
#define EXIT_TEST_SKIP 77

View File

@ -74,6 +74,12 @@ if conf.get('ENABLE_BOOTLOADER') != 1
endif
efi_conf = configuration_data()
# import several configs from userspace
foreach name : ['HAVE_WARNING_ZERO_LENGTH_BOUNDS', 'HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT']
efi_conf.set10(name, conf.get(name) == 1)
endforeach
efi_conf.set10('ENABLE_TPM', get_option('tpm'))
foreach ctype : ['color-normal', 'color-entry', 'color-highlight', 'color-edit']

View File

@ -48,6 +48,28 @@
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Waddress\"")
#define DISABLE_WARNING_STRINGOP_TRUNCATION \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"")
#if HAVE_WARNING_ZERO_LENGTH_BOUNDS
# define DISABLE_WARNING_ZERO_LENGTH_BOUNDS \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Wzero-length-bounds\"")
#else
# define DISABLE_WARNING_ZERO_LENGTH_BOUNDS \
_Pragma("GCC diagnostic push")
#endif
#if HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT
# define DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"")
#else
# define DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT \
_Pragma("GCC diagnostic push")
#endif
#define REENABLE_WARNING \
_Pragma("GCC diagnostic pop")

View File

@ -101,6 +101,9 @@ typedef struct GetentData {
bool by_membership;
} GetentData;
/* On current glibc PTHREAD_MUTEX_INITIALIZER is defined in a way incompatible with
* -Wzero-as-null-pointer-constant, work around this for now. */
DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT;
static GetentData getpwent_data = {
.mutex = PTHREAD_MUTEX_INITIALIZER,
};
@ -116,6 +119,7 @@ static GetentData getspent_data = {
static GetentData getsgent_data = {
.mutex = PTHREAD_MUTEX_INITIALIZER,
};
REENABLE_WARNING;
static void setup_logging_once(void) {
static pthread_once_t once = PTHREAD_ONCE_INIT;

View File

@ -15,11 +15,10 @@
#include "string-table.h"
#if PREFER_OPENSSL && OPENSSL_VERSION_MAJOR >= 3
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
DISABLE_WARNING_DEPRECATED_DECLARATIONS;
DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(RSA*, RSA_free, NULL);
DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EC_KEY*, EC_KEY_free, NULL);
# pragma GCC diagnostic pop
REENABLE_WARNING;
#endif
#define VERIFY_RRS_MAX 256
@ -101,8 +100,7 @@ static int dnssec_rsa_verify_raw(
int r;
#if PREFER_OPENSSL
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
DISABLE_WARNING_DEPRECATED_DECLARATIONS;
_cleanup_(RSA_freep) RSA *rpubkey = NULL;
_cleanup_(EVP_PKEY_freep) EVP_PKEY *epubkey = NULL;
_cleanup_(EVP_PKEY_CTX_freep) EVP_PKEY_CTX *ctx = NULL;
@ -153,7 +151,7 @@ static int dnssec_rsa_verify_raw(
return log_debug_errno(SYNTHETIC_ERRNO(EIO),
"Signature verification failed: 0x%lx", ERR_get_error());
# pragma GCC diagnostic pop
REENABLE_WARNING;
#else
gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL;
gcry_mpi_t n = NULL, e = NULL, s = NULL;
@ -303,8 +301,7 @@ static int dnssec_ecdsa_verify_raw(
int k;
#if PREFER_OPENSSL
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
DISABLE_WARNING_DEPRECATED_DECLARATIONS;
_cleanup_(EC_GROUP_freep) EC_GROUP *ec_group = NULL;
_cleanup_(EC_POINT_freep) EC_POINT *p = NULL;
_cleanup_(EC_KEY_freep) EC_KEY *eckey = NULL;
@ -365,7 +362,7 @@ static int dnssec_ecdsa_verify_raw(
return log_debug_errno(SYNTHETIC_ERRNO(EIO),
"Signature verification failed: 0x%lx", ERR_get_error());
# pragma GCC diagnostic pop
REENABLE_WARNING;
#else
gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL;
gcry_mpi_t q = NULL, r = NULL, s = NULL;

View File

@ -11,6 +11,7 @@
#include "extract-word.h"
#include "fd-util.h"
#include "log.h"
#include "macro-fundamental.h"
#include "memory-util.h"
#include "socket-util.h"
#include "string-table.h"
@ -452,12 +453,9 @@ static int get_stringset(int ethtool_fd, const char *ifname, enum ethtool_string
if (buffer.info.sset_mask == 0)
return -EOPNOTSUPP;
#pragma GCC diagnostic push
#if HAVE_ZERO_LENGTH_BOUNDS
# pragma GCC diagnostic ignored "-Wzero-length-bounds"
#endif
DISABLE_WARNING_ZERO_LENGTH_BOUNDS;
len = buffer.info.data[0];
#pragma GCC diagnostic pop
REENABLE_WARNING;
if (len == 0)
return -EOPNOTSUPP;