* manual/startup.texi: Document MTASC-safety properties.

This commit is contained in:
Alexandre Oliva 2014-02-01 01:04:59 -02:00
parent 973f180bd5
commit 663b02d7bd
2 changed files with 81 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2014-02-01 Alexandre Oliva <aoliva@redhat.com>
* manual/startup.texi: Document MTASC-safety properties.
2014-02-01 Alexandre Oliva <aoliva@redhat.com> 2014-02-01 Alexandre Oliva <aoliva@redhat.com>
* manual/socket.texi: Document MTASC-safety properties. * manual/socket.texi: Document MTASC-safety properties.

View File

@ -221,6 +221,11 @@ available.
@comment stdlib.h @comment stdlib.h
@deftypefun int getsubopt (char **@var{optionp}, char *const *@var{tokens}, char **@var{valuep}) @deftypefun int getsubopt (char **@var{optionp}, char *const *@var{tokens}, char **@var{valuep})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c getsubopt ok
@c strchrnul dup ok
@c memchr dup ok
@c strncmp dup ok
The @var{optionp} parameter must be a pointer to a variable containing The @var{optionp} parameter must be a pointer to a variable containing
the address of the string to process. When the function returns the the address of the string to process. When the function returns the
@ -322,6 +327,8 @@ functions can be safely used in multi-threaded programs.
@comment stdlib.h @comment stdlib.h
@comment ISO @comment ISO
@deftypefun {char *} getenv (const char *@var{name}) @deftypefun {char *} getenv (const char *@var{name})
@safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}}
@c Unguarded access to __environ.
This function returns a string that is the value of the environment This function returns a string that is the value of the environment
variable @var{name}. You must not modify this string. In some non-Unix variable @var{name}. You must not modify this string. In some non-Unix
systems not using @theglibc{}, it might be overwritten by subsequent systems not using @theglibc{}, it might be overwritten by subsequent
@ -333,6 +340,8 @@ pointer.
@comment stdlib.h @comment stdlib.h
@comment GNU @comment GNU
@deftypefun {char *} secure_getenv (const char *@var{name}) @deftypefun {char *} secure_getenv (const char *@var{name})
@safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}}
@c Calls getenv unless secure mode is enabled.
This function is similar to @code{getenv}, but it returns a null This function is similar to @code{getenv}, but it returns a null
pointer if the environment is untrusted. This happens when the pointer if the environment is untrusted. This happens when the
program file has SUID or SGID bits set. General-purpose libraries program file has SUID or SGID bits set. General-purpose libraries
@ -346,6 +355,13 @@ This function is a GNU extension.
@comment stdlib.h @comment stdlib.h
@comment SVID @comment SVID
@deftypefun int putenv (char *@var{string}) @deftypefun int putenv (char *@var{string})
@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
@c putenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
@c strchr dup ok
@c strndup dup @ascuheap @acsmem
@c add_to_environ dup @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
@c free dup @ascuheap @acsmem
@c unsetenv dup @mtasuconst:@mtsenv @asulock @aculock
The @code{putenv} function adds or removes definitions from the environment. The @code{putenv} function adds or removes definitions from the environment.
If the @var{string} is of the form @samp{@var{name}=@var{value}}, the If the @var{string} is of the form @samp{@var{name}=@var{value}}, the
definition is added to the environment. Otherwise, the @var{string} is definition is added to the environment. Otherwise, the @var{string} is
@ -358,8 +374,8 @@ value is nonzero and @code{errno} is set to indicate the error.
The difference to the @code{setenv} function is that the exact string The difference to the @code{setenv} function is that the exact string
given as the parameter @var{string} is put into the environment. If the given as the parameter @var{string} is put into the environment. If the
user should change the string after the @code{putenv} call this will user should change the string after the @code{putenv} call this will
reflect in automatically in the environment. This also requires that reflect automatically in the environment. This also requires that
@var{string} is no automatic variable which scope is left before the @var{string} not be an automatic variable whose scope is left before the
variable is removed from the environment. The same applies of course to variable is removed from the environment. The same applies of course to
dynamically allocated variables which are freed later. dynamically allocated variables which are freed later.
@ -372,6 +388,24 @@ available in old SVID libraries you should define either
@comment stdlib.h @comment stdlib.h
@comment BSD @comment BSD
@deftypefun int setenv (const char *@var{name}, const char *@var{value}, int @var{replace}) @deftypefun int setenv (const char *@var{name}, const char *@var{value}, int @var{replace})
@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
@c setenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
@c add_to_environ @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
@c strlen dup ok
@c libc_lock_lock @asulock @aculock
@c strncmp dup ok
@c realloc dup @ascuheap @acsmem
@c libc_lock_unlock @aculock
@c malloc dup @ascuheap @acsmem
@c free dup @ascuheap @acsmem
@c mempcpy dup ok
@c memcpy dup ok
@c KNOWN_VALUE ok
@c tfind(strcmp) [no @mtsrace guarded access]
@c strcmp dup ok
@c STORE_VALUE @ascuheap @acucorrupt @acsmem
@c tsearch(strcmp) @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt guarded access makes for mtsafe and @asulock]
@c strcmp dup ok
The @code{setenv} function can be used to add a new definition to the The @code{setenv} function can be used to add a new definition to the
environment. The entry with the name @var{name} is replaced by the environment. The entry with the name @var{name} is replaced by the
value @samp{@var{name}=@var{value}}. Please note that this is also true value @samp{@var{name}=@var{value}}. Please note that this is also true
@ -395,6 +429,13 @@ the Unix standard.
@comment stdlib.h @comment stdlib.h
@comment BSD @comment BSD
@deftypefun int unsetenv (const char *@var{name}) @deftypefun int unsetenv (const char *@var{name})
@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
@c unsetenv @mtasuconst:@mtsenv @asulock @aculock
@c strchr dup ok
@c strlen dup ok
@c libc_lock_lock @asulock @aculock
@c strncmp dup ok
@c libc_lock_unlock @aculock
Using this function one can remove an entry completely from the Using this function one can remove an entry completely from the
environment. If the environment contains an entry with the key environment. If the environment contains an entry with the key
@var{name} this whole entry is removed. A call to this function is @var{name} this whole entry is removed. A call to this function is
@ -418,6 +459,11 @@ to enable writing standard compliant Fortran environments.
@comment stdlib.h @comment stdlib.h
@comment GNU @comment GNU
@deftypefun int clearenv (void) @deftypefun int clearenv (void)
@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
@c clearenv @mtasuconst:@mtsenv @ascuheap @asulock @aculock @acsmem
@c libc_lock_lock @asulock @aculock
@c free dup @ascuheap @acsmem
@c libc_lock_unlock @aculock
The @code{clearenv} function removes all entries from the environment. The @code{clearenv} function removes all entries from the environment.
Using @code{putenv} and @code{setenv} new entries can be added again Using @code{putenv} and @code{setenv} new entries can be added again
later. later.
@ -622,6 +668,8 @@ basis there may be information that is not available any other way.
@subsection Definition of @code{getauxval} @subsection Definition of @code{getauxval}
@comment sys/auxv.h @comment sys/auxv.h
@deftypefun {unsigned long int} getauxval (unsigned long int @var{type}) @deftypefun {unsigned long int} getauxval (unsigned long int @var{type})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c Reads from hwcap or iterates over constant auxv.
This function is used to inquire about the entries in the auxiliary This function is used to inquire about the entries in the auxiliary
vector. The @var{type} argument should be one of the @samp{AT_} symbols vector. The @var{type} argument should be one of the @samp{AT_} symbols
defined in @file{elf.h}. If a matching entry is found, the value is defined in @file{elf.h}. If a matching entry is found, the value is
@ -678,6 +726,7 @@ anyway.
@comment unistd.h @comment unistd.h
@comment ??? @comment ???
@deftypefun {long int} syscall (long int @var{sysno}, @dots{}) @deftypefun {long int} syscall (long int @var{sysno}, @dots{})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{syscall} performs a generic system call. @code{syscall} performs a generic system call.
@ -783,6 +832,10 @@ the argument to @code{exit}.
@comment stdlib.h @comment stdlib.h
@comment ISO @comment ISO
@deftypefun void exit (int @var{status}) @deftypefun void exit (int @var{status})
@safety{@prelim{}@mtunsafe{@mtasurace{:exit}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
@c Access to the atexit/on_exit list, the libc_atexit hook and tls dtors
@c is not guarded. Streams must be flushed, and that triggers the usual
@c AS and AC issues with streams.
The @code{exit} function tells the system that the program is done, which The @code{exit} function tells the system that the program is done, which
causes it to terminate the process. causes it to terminate the process.
@ -899,6 +952,15 @@ using @code{atexit} or @code{on_exit}.
@comment stdlib.h @comment stdlib.h
@comment ISO @comment ISO
@deftypefun int atexit (void (*@var{function}) (void)) @deftypefun int atexit (void (*@var{function}) (void))
@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
@c atexit @ascuheap @asulock @aculock @acsmem
@c cxa_atexit @ascuheap @asulock @aculock @acsmem
@c __internal_atexit @ascuheap @asulock @aculock @acsmem
@c __new_exitfn @ascuheap @asulock @aculock @acsmem
@c __libc_lock_lock @asulock @aculock
@c calloc dup @ascuheap @acsmem
@c __libc_lock_unlock @aculock
@c atomic_write_barrier dup ok
The @code{atexit} function registers the function @var{function} to be The @code{atexit} function registers the function @var{function} to be
called at normal program termination. The @var{function} is called with called at normal program termination. The @var{function} is called with
no arguments. no arguments.
@ -910,6 +972,10 @@ the function cannot be registered.
@comment stdlib.h @comment stdlib.h
@comment SunOS @comment SunOS
@deftypefun int on_exit (void (*@var{function})(int @var{status}, void *@var{arg}), void *@var{arg}) @deftypefun int on_exit (void (*@var{function})(int @var{status}, void *@var{arg}), void *@var{arg})
@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
@c on_exit @ascuheap @asulock @aculock @acsmem
@c new_exitfn dup @ascuheap @asulock @aculock @acsmem
@c atomic_write_barrier dup ok
This function is a somewhat more powerful variant of @code{atexit}. It This function is a somewhat more powerful variant of @code{atexit}. It
accepts two arguments, a function @var{function} and an arbitrary accepts two arguments, a function @var{function} and an arbitrary
pointer @var{arg}. At normal program termination, the @var{function} is pointer @var{arg}. At normal program termination, the @var{function} is
@ -941,6 +1007,10 @@ for this function is in @file{stdlib.h}.
@comment stdlib.h @comment stdlib.h
@comment ISO @comment ISO
@deftypefun void abort (void) @deftypefun void abort (void)
@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
@c The implementation takes a recursive lock and attempts to support
@c calls from signal handlers, but if we're in the middle of flushing or
@c using streams, we may encounter them in inconsistent states.
The @code{abort} function causes abnormal program termination. This The @code{abort} function causes abnormal program termination. This
does not execute cleanup functions registered with @code{atexit} or does not execute cleanup functions registered with @code{atexit} or
@code{on_exit}. @code{on_exit}.
@ -968,6 +1038,9 @@ by @code{exit}. It is declared in the header file @file{unistd.h}.
@comment unistd.h @comment unistd.h
@comment POSIX.1 @comment POSIX.1
@deftypefun void _exit (int @var{status}) @deftypefun void _exit (int @var{status})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c Direct syscall (exit_group or exit); calls __task_terminate on hurd,
@c and abort in the generic posix implementation.
The @code{_exit} function is the primitive for causing a process to The @code{_exit} function is the primitive for causing a process to
terminate with status @var{status}. Calling this function does not terminate with status @var{status}. Calling this function does not
execute cleanup functions registered with @code{atexit} or execute cleanup functions registered with @code{atexit} or
@ -977,6 +1050,8 @@ execute cleanup functions registered with @code{atexit} or
@comment stdlib.h @comment stdlib.h
@comment ISO @comment ISO
@deftypefun void _Exit (int @var{status}) @deftypefun void _Exit (int @var{status})
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c Alias for _exit.
The @code{_Exit} function is the @w{ISO C} equivalent to @code{_exit}. The @code{_Exit} function is the @w{ISO C} equivalent to @code{_exit}.
The @w{ISO C} committee members were not sure whether the definitions of The @w{ISO C} committee members were not sure whether the definitions of
@code{_exit} and @code{_Exit} were compatible so they have not used the @code{_exit} and @code{_Exit} were compatible so they have not used the