aboutsummaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2024-05-13 05:23:50 +0000
committerKyle Evans <kevans@FreeBSD.org>2024-05-13 05:23:50 +0000
commite55512504d0178983978d64d67eed1cc85826523 (patch)
treeaa9e737ddf5e8f1085b3f67cca4e70fa2f0286a2 /lib/libc
parentbe04fec42638f30f50b5b55fd8e3634c0fb89928 (diff)
downloadsrc-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/Makefile2
-rw-r--r--lib/libc/amd64/string/bcopy.c2
-rw-r--r--lib/libc/amd64/string/bzero.c2
-rw-r--r--lib/libc/amd64/string/strncat.c2
-rw-r--r--lib/libc/amd64/string/strncpy.c2
-rw-r--r--lib/libc/gen/getcwd.c3
-rw-r--r--lib/libc/stdio/fgets.c2
-rw-r--r--lib/libc/stdio/snprintf.c2
-rw-r--r--lib/libc/stdio/sprintf.c2
-rw-r--r--lib/libc/stdio/vsnprintf.c2
-rw-r--r--lib/libc/stdio/vsprintf.c2
-rw-r--r--lib/libc/string/bcopy.c5
-rw-r--r--lib/libc/string/memset.c4
-rw-r--r--lib/libc/string/stpcpy.c2
-rw-r--r--lib/libc/string/stpncpy.c2
-rw-r--r--lib/libc/string/strcat.c2
-rw-r--r--lib/libc/string/strncat.c2
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.