Module Name: src
Committed By: riastradh
Date: Thu Dec 7 16:55:01 UTC 2023
Modified Files:
src/lib/libpthread: pthread_attr_getguardsize.3 pthread_attr_getstack.3
Log Message:
pthread: Document the setstack vs setguardsize bug.
Suggest the safe, compatible workaround.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/lib/libpthread/pthread_attr_getguardsize.3
cvs rdiff -u -r1.8 -r1.9 src/lib/libpthread/pthread_attr_getstack.3
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libpthread/pthread_attr_getguardsize.3
diff -u src/lib/libpthread/pthread_attr_getguardsize.3:1.5 src/lib/libpthread/pthread_attr_getguardsize.3:1.6
--- src/lib/libpthread/pthread_attr_getguardsize.3:1.5 Sun Oct 22 16:37:24 2017
+++ src/lib/libpthread/pthread_attr_getguardsize.3 Thu Dec 7 16:55:01 2023
@@ -1,4 +1,4 @@
-.\" $NetBSD: pthread_attr_getguardsize.3,v 1.5 2017/10/22 16:37:24 abhinav Exp $
+.\" $NetBSD: pthread_attr_getguardsize.3,v 1.6 2023/12/07 16:55:01 riastradh Exp $
.\"
.\" Copyright (c) 2010 Jukka Ruohonen <[email protected]>
.\" All rights reserved.
@@ -123,3 +123,27 @@ There was insufficient memory.
.Sh STANDARDS
Both functions conform to
.St -p1003.1-2008 .
+.Sh BUGS
+Older versions of
+.Nx ,
+prior to 10.0, 9.4, and 8.3, incorrectly adjust the stack address by
+the guard size in threads configured with
+.Xr pthread_attr_setstack 3 ,
+instead of ignoring the guard size in that case as
+.Tn POSIX
+prescribes
+.Po
+see
+.Lk https://gnats.NetBSD.org/57721 "PR lib/57721"
+.Pc .
+.Pp
+Even if you didn't set a nonzero guard size with
+.Fn pthread_attr_setguardsize ,
+the system will choose a nonzero default guard size.
+.Pp
+To work around this in applications that run on older and newer
+versions of
+.Nx ,
+as well as on other operating systems, you can safely set the guard
+size to zero:
+.Dl "pthread_attr_setguardsize(&attr, 0);"
Index: src/lib/libpthread/pthread_attr_getstack.3
diff -u src/lib/libpthread/pthread_attr_getstack.3:1.8 src/lib/libpthread/pthread_attr_getstack.3:1.9
--- src/lib/libpthread/pthread_attr_getstack.3:1.8 Mon Oct 23 01:03:23 2017
+++ src/lib/libpthread/pthread_attr_getstack.3 Thu Dec 7 16:55:01 2023
@@ -1,4 +1,4 @@
-.\" $NetBSD: pthread_attr_getstack.3,v 1.8 2017/10/23 01:03:23 wiz Exp $
+.\" $NetBSD: pthread_attr_getstack.3,v 1.9 2023/12/07 16:55:01 riastradh Exp $
.\"
.\" Copyright (c) 2010 Jukka Ruohonen <[email protected]>
.\" All rights reserved.
@@ -177,3 +177,27 @@ and
were however removed from the specification in the
.St -p1003.1-2008
revision.
+.Sh BUGS
+Older versions of
+.Nx ,
+prior to 10.0, 9.4, and 8.3, incorrectly adjust the stack address by
+the guard size in threads configured with
+.Fn pthread_attr_setstack ,
+instead of ignoring the guard size in that case as
+.Tn POSIX
+prescribes
+.Po
+see
+.Lk https://gnats.NetBSD.org/57721 "PR lib/57721"
+.Pc .
+.Pp
+Even if you didn't set a nonzero guard size with
+.Xr pthread_attr_setguardsize 3 ,
+the system will choose a nonzero default guard size.
+.Pp
+To work around this in applications that run on older and newer
+versions of
+.Nx ,
+as well as on other operating systems, you can safely set the guard
+size to zero:
+.Dl "pthread_attr_setguardsize(&attr, 0);"