125 lines
3.9 KiB
Groff
125 lines
3.9 KiB
Groff
.\" $NetBSD: pthread_attr_getguardsize.3,v 1.2 2010/07/08 18:24:34 wiz Exp $
|
|
.\"
|
|
.\" Copyright (c) 2010 Jukka Ruohonen <jruohonen@iki.fi>
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\"
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
.\" POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.Dd July 7, 2010
|
|
.Dt PTHREAD_ATTR_GETGUARDSIZE 3
|
|
.Os
|
|
.Sh NAME
|
|
.Nm pthread_attr_getguardsize
|
|
.Nd get and set thread guard size
|
|
.Sh LIBRARY
|
|
.Lb libpthread
|
|
.Sh SYNOPSIS
|
|
.In pthread.h
|
|
.Ft int
|
|
.Fn pthread_attr_getguardsize \
|
|
"const pthread_attr_t * restrict attr" "size_t * restrict guardsize"
|
|
.Ft int
|
|
.Fn pthread_attr_setguardsize "pthread_attr_t *attr" "size_t guardsize"
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Fn pthread_attr_getguardsize
|
|
and
|
|
.Fn pthread_attr_setguardsize
|
|
functions get and set
|
|
.Fa guardsize
|
|
in the
|
|
.Fa attr
|
|
object.
|
|
If
|
|
.Fa guardsize
|
|
is larger than 0, the system reserves
|
|
an additional region of guarded memory of at least
|
|
.Fa guardsize
|
|
bytes at the end of the thread's stack for each new thread created by using
|
|
.Fa attr .
|
|
.Pp
|
|
The guarded area is understood to be pages of memory
|
|
that are protected from read and write access.
|
|
While the guarded area should be rounded by the system page size,
|
|
the actual default size is implementation-defined.
|
|
In
|
|
.Nx
|
|
the default
|
|
.Fa guardsize
|
|
is
|
|
.Dv _SC_PAGESIZE ,
|
|
the system page size.
|
|
.Pp
|
|
The rationale behind
|
|
.Fa guardsize
|
|
is two-fold:
|
|
.Bl -enum -offset 2n
|
|
.It
|
|
On the one hand, it provides protection against overflow of the stack pointer.
|
|
If there is a guard area and a thread overflows its
|
|
stack pointer into this extra memory area, it should receive a
|
|
.Dv SIGSEGV
|
|
signal or experience other comparable fatal error condition.
|
|
Note that if a thread allocates large data structures on stack,
|
|
it may be necessary to raise the default
|
|
.Fa guardsize
|
|
in order to detect stack overflows.
|
|
.It
|
|
On the other hand, the overflow protection may waste system resources
|
|
if an application that creates a large number of threads knows that it
|
|
will never overflow the stack.
|
|
In this case it is possible to set
|
|
.Fa guardsize
|
|
to 0.
|
|
.El
|
|
.Pp
|
|
If
|
|
.Xr pthread_attr_setstack 3
|
|
or
|
|
.Xr pthread_attr_setstackaddr 3
|
|
is used to set the stack address attribute in
|
|
.Fa attr ,
|
|
the guard size attribute is ignored and no guard area will be allocated;
|
|
it is the responsibility of the application to handle the overflow conditions.
|
|
.Sh RETURN VALUES
|
|
If successful, both functions return 0.
|
|
Otherwise, an error number is returned to indicate the error.
|
|
.Sh ERRORS
|
|
No errors are defined for
|
|
.Fn pthread_attr_getguardsize .
|
|
.Pp
|
|
The
|
|
.Fn pthread_attr_setguardsize
|
|
may fail if:
|
|
.Bl -tag -width Er
|
|
.It Bq Er ENOMEM
|
|
There was insufficient memory.
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr pthread_attr 3 ,
|
|
.Xr pthread_attr_setstack 3 ,
|
|
.Xr sysconf 3
|
|
.Sh STANDARDS
|
|
Both functions conform to
|
|
.St -p1003.1-2008 .
|