.TH "getcon" "3" "21 December 2011" "russell@coker.com.au" "SELinux API documentation"
.SH "NAME"
getcon, getprevcon, getpidcon \- get SELinux security context of a process

freecon, freeconary \- free memory associated with SELinux security contexts

getpeercon \- get security context of a peer socket

setcon \- set current security context of a process
.
.SH "SYNOPSIS"
.B #include <selinux/selinux.h>
.sp
.BI "int getcon(char **" context );
.sp
.BI "int getcon_raw(char **" context );
.sp
.BI "int getprevcon(char **" context );
.sp
.BI "int getprevcon_raw(char **" context );
.sp
.BI "int getpidcon(pid_t " pid ", char **" context );
.sp
.BI "int getpidcon_raw(pid_t " pid ", char **" context );
.sp
.BI "int getpeercon(int " fd ", char **" context );
.sp
.BI "int getpeercon_raw(int " fd ", char **" context );
.sp
.BI "void freecon(char * "con );
.sp
.BI "void freeconary(char **" con );
.sp
.BI "int setcon(char * " context );
.sp
.BI "int setcon_raw(char * " context );
.
.SH "DESCRIPTION"
.BR getcon ()
retrieves the context of the current process, which must be free'd with
freecon.

.BR getprevcon ()
same as getcon but gets the context before the last exec.

.BR getpidcon ()
returns the process context for the specified PID.

.BR getpeercon ()
retrieves context of peer socket, and set
.BI * context
to refer to it, which must be free'd with
.BR freecon ().

.BR freecon ()
frees the memory allocated for a security context.

.BR freeconary ()
frees the memory allocated for a context array.

If
.I con
is NULL, no operation is performed.

.BR setcon ()
sets the current security context of the process to a new value.  Note
that use of this function requires that the entire application be
trusted to maintain any desired separation between the old and new
security contexts, unlike exec-based transitions performed via
.BR setexeccon (3).
When possible, decompose your application and use
.BR setexeccon (3)
and
.BR execve (3)
instead.

Since access to file descriptors is revalidated upon use by SELinux,
the new context must be explicitly authorized in the policy to use the
descriptors opened by the old context if that is desired.  Otherwise,
attempts by the process to use any existing descriptors (including
.IR stdin ,
.IR stdout ,
and
.IR stderr )
after performing the
.BR setcon ()
will fail.

A multi-threaded application can perform a
.BR setcon ()
prior to creating
any child threads, in which case all of the child threads will inherit
the new context.  However, prior to Linux 2.6.28,
.BR setcon ()
would fail if there are any other
threads running in the same process since this would yield
an inconsistency among the security contexts of threads sharing
the same memory space.  Since Linux 2.6.28,
.BR setcon()
is permitted for threads within a multi-threaded process if the
new security context is bounded by the old security context, where
the bounded relation is defined through typebounds statements in the
policy and guarantees that the new security context has a subset of
the permissions of the old security context.

If the process was being ptraced at the time of the
.BR setcon ()
operation, ptrace permission will be revalidated against the new
context and the
.BR setcon ()
will fail if it is not allowed by policy.

.BR getcon_raw (),
.BR getprevcon_raw (),
.BR getpidcon_raw (),
.BR getpeercon_raw ()
and
.BR setcon_raw ()
behave identically to their non-raw counterparts but do not perform context
translation.
.
.SH "RETURN VALUE"
On error \-1 is returned.  On success 0 is returned.
.
.SH "SEE ALSO"
.BR selinux "(8), " setexeccon "(3)"
