From 5af6fbd72790173e128222943effc5aa95272ce9 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Tue, 14 May 2024 18:16:58 -0500 Subject: [PATCH] ssp: appease -Wgnu-statement-expression-from-macro-expansion It's a stupid warning, but some ports enable it by default and were already defining _FORTIFY_SOURCE, thus exposing the new macros immediately. This at least fixes the libfido2 build, perhaps others as well. While we're here, fix a fresh build of stand w/ FORTIFY_SOURCE enabled by not pulling in the ssp headers if _STANDALONE is defined. We do not have runtime support in libsa as of the time of writing. Reported by: netchild Sponsored by: Stormshield Sponsored by: Klara, Inc. --- include/ssp/stdio.h | 10 +++++----- include/ssp/string.h | 4 ++-- include/ssp/strings.h | 4 ++-- include/stdio.h | 2 +- include/string.h | 2 +- include/strings.h | 2 +- include/unistd.h | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/ssp/stdio.h b/include/ssp/stdio.h index ed7303497a45..4bca1de7d4f9 100644 --- a/include/ssp/stdio.h +++ b/include/ssp/stdio.h @@ -53,31 +53,31 @@ __END_DECLS #if __SSP_FORTIFY_LEVEL > 0 -#define sprintf(str, ...) ({ \ +#define sprintf(str, ...) __extension__ ({ \ char *_ssp_str = (str); \ __builtin___sprintf_chk(_ssp_str, 0, __ssp_bos(_ssp_str), \ __VA_ARGS__); \ }) -#define vsprintf(str, fmt, ap) ({ \ +#define vsprintf(str, fmt, ap) __extension__ ({ \ char *_ssp_str = (str); \ __builtin___vsprintf_chk(_ssp_str, 0, __ssp_bos(_ssp_str), fmt, \ ap); \ }) -#define snprintf(str, len, ...) ({ \ +#define snprintf(str, len, ...) __extension__ ({ \ char *_ssp_str = (str); \ __builtin___snprintf_chk(_ssp_str, len, 0, __ssp_bos(_ssp_str), \ __VA_ARGS__); \ }) -#define vsnprintf(str, len, fmt, ap) ({ \ +#define vsnprintf(str, len, fmt, ap) __extension__ ({ \ char *_ssp_str = (str); \ __builtin___vsnprintf_chk(_ssp_str, len, 0, __ssp_bos(_ssp_str), \ fmt, ap); \ }) -#define fgets(str, len, fp) ({ \ +#define fgets(str, len, fp) __extension__ ({ \ char *_ssp_str = (str); \ __fgets_chk(_ssp_str, len, __ssp_bos(_ssp_str), fp); \ }) diff --git a/include/ssp/string.h b/include/ssp/string.h index 996020fda778..ceb4ba2a2174 100644 --- a/include/ssp/string.h +++ b/include/ssp/string.h @@ -51,7 +51,7 @@ __END_DECLS #if __SSP_FORTIFY_LEVEL > 0 #define __ssp_bos_check3_typed_var(fun, dsttype, dsrvar, dst, srctype, srcvar, \ - src, lenvar, len) ({ \ + src, lenvar, len) __extension__ ({ \ srctype srcvar = (src); \ dsttype dstvar = (dst); \ size_t lenvar = (len); \ @@ -69,7 +69,7 @@ __END_DECLS __ssp_bos_check3_typed_var(fun, void *, __ssp_var(dstv), dst, \ const void *, __ssp_var(srcv), src, __ssp_var(lenv), len) -#define __ssp_bos_check2_var(fun, dstvar, dst, srcvar, src) ({ \ +#define __ssp_bos_check2_var(fun, dstvar, dst, srcvar, src) __extension__ ({ \ const void *srcvar = (src); \ void *dstvar = (dst); \ ((__ssp_bos0(dstvar) != (size_t)-1) ? \ diff --git a/include/ssp/strings.h b/include/ssp/strings.h index 06c9c7cc0a09..51b11a14ee87 100644 --- a/include/ssp/strings.h +++ b/include/ssp/strings.h @@ -39,7 +39,7 @@ #if __SSP_FORTIFY_LEVEL > 0 -#define _ssp_bcopy(srcvar, src, dstvar, dst, lenvar, len) ({ \ +#define _ssp_bcopy(srcvar, src, dstvar, dst, lenvar, len) __extension__ ({ \ const void *srcvar = (src); \ void *dstvar = (dst); \ size_t lenvar = (len); \ @@ -52,7 +52,7 @@ #define bcopy(src, dst, len) \ _ssp_bcopy(__ssp_var(srcv), src, __ssp_var(dstv), dst, __ssp_var(lenv), len) -#define _ssp_bzero(dstvar, dst, lenvar, len) ({ \ +#define _ssp_bzero(dstvar, dst, lenvar, len) __extension__ ({ \ void *dstvar = (dst); \ size_t lenvar = (len); \ ((__ssp_bos0(dstvar) != (size_t)-1) ? \ diff --git a/include/stdio.h b/include/stdio.h index 30bc638082d8..ea53816cf1d4 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -530,7 +530,7 @@ extern int __isthreaded; __END_DECLS __NULLABILITY_PRAGMA_POP -#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 +#if !defined(_STANDALONE) && defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 #include #endif #endif /* !_STDIO_H_ */ diff --git a/include/string.h b/include/string.h index a595f6e3e260..ce605117daa6 100644 --- a/include/string.h +++ b/include/string.h @@ -168,7 +168,7 @@ errno_t memset_s(void *, rsize_t, int, rsize_t); #endif /* __EXT1_VISIBLE */ __END_DECLS -#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 +#if !defined(_STANDALONE) && defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 #include #endif #endif /* _STRING_H_ */ diff --git a/include/strings.h b/include/strings.h index 6fe6a09e7dd3..511f7c03cb3c 100644 --- a/include/strings.h +++ b/include/strings.h @@ -68,7 +68,7 @@ int strncasecmp(const char *, const char *, size_t) __pure; #endif __END_DECLS -#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 +#if !defined(_STANDALONE) && defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 #include #endif #endif /* _STRINGS_H_ */ diff --git a/include/unistd.h b/include/unistd.h index 59738cbf6e68..48155bb2971b 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -37,7 +37,7 @@ #include #include -#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 +#if !defined(_STANDALONE) && defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 #include #endif