Module Name:    src
Committed By:   riastradh
Date:           Sun Mar 30 16:17:05 UTC 2025

Modified Files:
        src/lib/libc: Makefile
        src/lib/libc/gen: ctype_guard.h

Log Message:
ctype(3): Actually conditionalize guard page on shared libc.

Apparently we build the libc .o files with -fPIC too (I guess this is
so that libc.a works in position-independent executables? but why
don't they just use libc_pic.a?), so use a purpose-built cpp macro
_CTYPE_DYNAMIC for this instead of using __PIC__.

Now this shows the right symbol sizes:

$ readelf -s ctype_.pico | grep _C_ctype_tab_guarded_
     3: 0000000000000000  4610 OBJECT  LOCAL  DEFAULT   11 _C_ctype_tab_guarded_
$ readelf -s ctype_.po | grep _C_ctype_tab_guarded_
     3: 0000000000000000   514 OBJECT  LOCAL  DEFAULT    7 _C_ctype_tab_guarded_
$ readelf -s ctype_.o | grep _C_ctype_tab_guarded_
     3: 0000000000000000   514 OBJECT  LOCAL  DEFAULT    7 _C_ctype_tab_guarded_

PR lib/58208: ctype(3) provides poor runtime feedback of abuse


To generate a diff of this commit:
cvs rdiff -u -r1.174 -r1.175 src/lib/libc/Makefile
cvs rdiff -u -r1.4 -r1.5 src/lib/libc/gen/ctype_guard.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/Makefile
diff -u src/lib/libc/Makefile:1.174 src/lib/libc/Makefile:1.175
--- src/lib/libc/Makefile:1.174	Mon May 29 18:25:52 2023
+++ src/lib/libc/Makefile	Sun Mar 30 16:17:04 2025
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.174 2023/05/29 18:25:52 lukem Exp $
+#	$NetBSD: Makefile,v 1.175 2025/03/30 16:17:04 riastradh Exp $
 #	@(#)Makefile	8.2 (Berkeley) 2/3/94
 #
 # All library objects contain sccsid strings by default; they may be
@@ -157,6 +157,10 @@ FILESDIR=	/var/db
 # dlopen() from within statically linked binaries.
 CSHLIBFLAGS+=	-D_I18N_DYNAMIC
 
+# Tell ctype(3) that this is a dynamic libc, so if appropriate it
+# should allocate a guard page.
+CSHLIBFLAGS+=	-D_CTYPE_DYNAMIC
+
 .include <bsd.lib.mk>
 
 # force the dynamic linker to initialize libc first

Index: src/lib/libc/gen/ctype_guard.h
diff -u src/lib/libc/gen/ctype_guard.h:1.4 src/lib/libc/gen/ctype_guard.h:1.5
--- src/lib/libc/gen/ctype_guard.h:1.4	Sun Mar 30 15:38:38 2025
+++ src/lib/libc/gen/ctype_guard.h	Sun Mar 30 16:17:05 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: ctype_guard.h,v 1.4 2025/03/30 15:38:38 riastradh Exp $	*/
+/*	$NetBSD: ctype_guard.h,v 1.5 2025/03/30 16:17:05 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2025 The NetBSD Foundation, Inc.
@@ -96,7 +96,7 @@
 
 #if defined(__CHAR_UNSIGNED__)	/* disable if char is unsigned */
 #  define	_CTYPE_GUARD_PAGE	0
-#elif defined(__PIC__)		/* enable in shared libc */
+#elif defined(_CTYPE_DYNAMIC)	/* enable in shared libc */
 #  define	_CTYPE_GUARD_PAGE	1
 #else	/* static libc -- let's aim for space-efficiency for now */
 #  define	_CTYPE_GUARD_PAGE	0

Reply via email to