diff options
author | Kyle Evans <kevans@FreeBSD.org> | 2024-05-13 05:23:50 +0000 |
---|---|---|
committer | Kyle Evans <kevans@FreeBSD.org> | 2024-05-13 05:23:50 +0000 |
commit | e55512504d0178983978d64d67eed1cc85826523 (patch) | |
tree | aa9e737ddf5e8f1085b3f67cca4e70fa2f0286a2 /lib/libc | |
parent | be04fec42638f30f50b5b55fd8e3634c0fb89928 (diff) | |
download | src-e55512504d0178983978d64d67eed1cc85826523.tar.gz src-e55512504d0178983978d64d67eed1cc85826523.zip |
Prepare the system for _FORTIFY_SOURCE
Notably:
- libc needs to #undef some of the macros from ssp/* for underlying
implementations
- ssp/* wants a __RENAME() macro (snatched more or less from NetBSD)
There's some extra hinkiness included for read(), since libc spells it
as "_read" while the rest of the world spells it "read."
Reviewed by: imp, ngie
Sponsored by: Stormshield
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D32307
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/Makefile | 2 | ||||
-rw-r--r-- | lib/libc/amd64/string/bcopy.c | 2 | ||||
-rw-r--r-- | lib/libc/amd64/string/bzero.c | 2 | ||||
-rw-r--r-- | lib/libc/amd64/string/strncat.c | 2 | ||||
-rw-r--r-- | lib/libc/amd64/string/strncpy.c | 2 | ||||
-rw-r--r-- | lib/libc/gen/getcwd.c | 3 | ||||
-rw-r--r-- | lib/libc/stdio/fgets.c | 2 | ||||
-rw-r--r-- | lib/libc/stdio/snprintf.c | 2 | ||||
-rw-r--r-- | lib/libc/stdio/sprintf.c | 2 | ||||
-rw-r--r-- | lib/libc/stdio/vsnprintf.c | 2 | ||||
-rw-r--r-- | lib/libc/stdio/vsprintf.c | 2 | ||||
-rw-r--r-- | lib/libc/string/bcopy.c | 5 | ||||
-rw-r--r-- | lib/libc/string/memset.c | 4 | ||||
-rw-r--r-- | lib/libc/string/stpcpy.c | 2 | ||||
-rw-r--r-- | lib/libc/string/stpncpy.c | 2 | ||||
-rw-r--r-- | lib/libc/string/strcat.c | 2 | ||||
-rw-r--r-- | lib/libc/string/strncat.c | 2 |
17 files changed, 39 insertions, 1 deletions
diff --git a/lib/libc/Makefile b/lib/libc/Makefile index 674986a7e065..c70e57498771 100644 --- a/lib/libc/Makefile +++ b/lib/libc/Makefile @@ -19,6 +19,8 @@ LIBC_ARCH=${M} LIBC_ARCH=${MACHINE_CPUARCH} .endif +CFLAGS+=-D_FORTIFY_SOURCE_read=_read + # All library objects contain FreeBSD revision strings by default; they may be # excluded as a space-saving measure. To produce a library that does # not contain these strings, add -DSTRIP_FBSDID (see <sys/cdefs.h>) to CFLAGS diff --git a/lib/libc/amd64/string/bcopy.c b/lib/libc/amd64/string/bcopy.c index 868567711e8b..0dee529fb9df 100644 --- a/lib/libc/amd64/string/bcopy.c +++ b/lib/libc/amd64/string/bcopy.c @@ -4,6 +4,8 @@ #include <string.h> +#undef bcopy /* _FORTIFY_SOURCE */ + void bcopy(const void *src, void *dst, size_t len) { diff --git a/lib/libc/amd64/string/bzero.c b/lib/libc/amd64/string/bzero.c index 92adb2bb4f0e..d82f3061865b 100644 --- a/lib/libc/amd64/string/bzero.c +++ b/lib/libc/amd64/string/bzero.c @@ -4,6 +4,8 @@ #include <string.h> +#undef bzero /* _FORTIFY_SOURCE */ + void bzero(void *b, size_t len) { diff --git a/lib/libc/amd64/string/strncat.c b/lib/libc/amd64/string/strncat.c index 33b278ac5e04..2c63ab50b3c3 100644 --- a/lib/libc/amd64/string/strncat.c +++ b/lib/libc/amd64/string/strncat.c @@ -8,6 +8,8 @@ #include <string.h> +#undef strncat /* _FORTIFY_SOURCE */ + void *__memccpy(void *restrict, const void *restrict, int, size_t); char * diff --git a/lib/libc/amd64/string/strncpy.c b/lib/libc/amd64/string/strncpy.c index b3d868787fbe..0e7a58222aa8 100644 --- a/lib/libc/amd64/string/strncpy.c +++ b/lib/libc/amd64/string/strncpy.c @@ -29,6 +29,8 @@ #include <sys/cdefs.h> #include <string.h> +#undef strncpy /* _FORTIFY_SOURCE */ + char *__stpncpy(char *restrict, const char *restrict, size_t); char * diff --git a/lib/libc/gen/getcwd.c b/lib/libc/gen/getcwd.c index 191fa50a599b..18d8ce668274 100644 --- a/lib/libc/gen/getcwd.c +++ b/lib/libc/gen/getcwd.c @@ -40,6 +40,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <ssp/ssp.h> #include "un-namespace.h" #include "gen-private.h" @@ -51,7 +52,7 @@ extern int __getcwd(char *, size_t); char * -getcwd(char *pt, size_t size) +__ssp_real(getcwd)(char *pt, size_t size) { struct dirent *dp; DIR *dir = NULL; diff --git a/lib/libc/stdio/fgets.c b/lib/libc/stdio/fgets.c index 19f68304efc1..504338c012a2 100644 --- a/lib/libc/stdio/fgets.c +++ b/lib/libc/stdio/fgets.c @@ -40,6 +40,8 @@ #include "local.h" #include "libc_private.h" +#undef fgets /* _FORTIFY_SOURCE */ + /* * Read at most n-1 characters from the given file. * Stop when a newline has been read, or the count runs out. diff --git a/lib/libc/stdio/snprintf.c b/lib/libc/stdio/snprintf.c index 398f1596d2c5..607bb3770ccd 100644 --- a/lib/libc/stdio/snprintf.c +++ b/lib/libc/stdio/snprintf.c @@ -45,6 +45,8 @@ #include "local.h" +#undef snprintf /* _FORTIFY_SOURCE */ + int snprintf(char * __restrict str, size_t n, char const * __restrict fmt, ...) { diff --git a/lib/libc/stdio/sprintf.c b/lib/libc/stdio/sprintf.c index 3b0e4c061b43..1cac21e98a46 100644 --- a/lib/libc/stdio/sprintf.c +++ b/lib/libc/stdio/sprintf.c @@ -43,6 +43,8 @@ #include "local.h" #include "xlocale_private.h" +#undef sprintf /* _FORTIFY_SOURCE */ + int sprintf(char * __restrict str, char const * __restrict fmt, ...) { diff --git a/lib/libc/stdio/vsnprintf.c b/lib/libc/stdio/vsnprintf.c index 2213b20e3f1e..1e25e6757459 100644 --- a/lib/libc/stdio/vsnprintf.c +++ b/lib/libc/stdio/vsnprintf.c @@ -43,6 +43,8 @@ #include "local.h" #include "xlocale_private.h" +#undef vsnprintf /* _FORTIFY_SOURCE */ + int vsnprintf_l(char * __restrict str, size_t n, locale_t locale, const char * __restrict fmt, __va_list ap) diff --git a/lib/libc/stdio/vsprintf.c b/lib/libc/stdio/vsprintf.c index a478759a2471..298f969a1318 100644 --- a/lib/libc/stdio/vsprintf.c +++ b/lib/libc/stdio/vsprintf.c @@ -42,6 +42,8 @@ #include "local.h" #include "xlocale_private.h" +#undef vsprintf /* _FORTIFY_SOURCE */ + int vsprintf_l(char * __restrict str, locale_t locale, const char * __restrict fmt, __va_list ap) diff --git a/lib/libc/string/bcopy.c b/lib/libc/string/bcopy.c index fdc05f20253c..20f7bc60b76a 100644 --- a/lib/libc/string/bcopy.c +++ b/lib/libc/string/bcopy.c @@ -47,6 +47,9 @@ typedef intptr_t word; /* "word" used for optimal copy speed */ #if defined(MEMCOPY) || defined(MEMMOVE) #include <string.h> +#undef memcpy /* _FORTIFY_SOURCE */ +#undef memmove /* _FORTIFY_SOURCE */ + void * #ifdef MEMCOPY memcpy @@ -57,6 +60,8 @@ memmove #else #include <strings.h> +#undef bcopy /* _FORTIFY_SOURCE */ + void bcopy(const void *src0, void *dst0, size_t length) #endif diff --git a/lib/libc/string/memset.c b/lib/libc/string/memset.c index a49ce7cea756..811def0fc9b4 100644 --- a/lib/libc/string/memset.c +++ b/lib/libc/string/memset.c @@ -42,6 +42,8 @@ #ifdef BZERO #include <strings.h> +#undef bzero /* _FORTIFY_SOURCE */ + #define RETURN return #define VAL 0 #define WIDEVAL 0 @@ -51,6 +53,8 @@ bzero(void *dst0, size_t length) #else #include <string.h> +#undef memset /* _FORTIFY_SOURCE */ + #define RETURN return (dst0) #define VAL c0 #define WIDEVAL c diff --git a/lib/libc/string/stpcpy.c b/lib/libc/string/stpcpy.c index c096e81da075..4521e0877e07 100644 --- a/lib/libc/string/stpcpy.c +++ b/lib/libc/string/stpcpy.c @@ -33,6 +33,8 @@ #include <string.h> +#undef stpcpy /* _FORTIFY_SOURCE */ + char * stpcpy(char * __restrict to, const char * __restrict from) { diff --git a/lib/libc/string/stpncpy.c b/lib/libc/string/stpncpy.c index 8c7f14ecf8dd..d3a1dddb4a65 100644 --- a/lib/libc/string/stpncpy.c +++ b/lib/libc/string/stpncpy.c @@ -28,6 +28,8 @@ #include <string.h> +#undef stpncpy /* _FORTIFY_SOURCE */ + char * stpncpy(char * __restrict dst, const char * __restrict src, size_t n) { diff --git a/lib/libc/string/strcat.c b/lib/libc/string/strcat.c index 593a1afd7048..1c13c519b563 100644 --- a/lib/libc/string/strcat.c +++ b/lib/libc/string/strcat.c @@ -31,6 +31,8 @@ #include <string.h> +#undef strcat /* _FORTIFY_SOURCE */ + char * strcat(char * __restrict s, const char * __restrict append) { diff --git a/lib/libc/string/strncat.c b/lib/libc/string/strncat.c index ee951cdc956a..086bdef32b68 100644 --- a/lib/libc/string/strncat.c +++ b/lib/libc/string/strncat.c @@ -34,6 +34,8 @@ #include <string.h> +#undef strncat /* _FORTIFY_SOURCE */ + /* * Concatenate src on the end of dst. At most strlen(dst)+n+1 bytes * are written at dst (at most n+1 bytes being appended). Return dst. |