selinux/libselinux/man/man3/getfilecon.3
Christian Göttsche a782abf226 libselinux: emulate O_PATH support in fgetfilecon/fsetfilecon
Operating on a file descriptor avoids TOCTOU issues and one opened via
O_PATH avoids the requirement of having read access to the file.  Since
Linux does not natively support file descriptors opened via O_PATH in
fgetxattr(2) and at least glibc and musl does not emulate O_PATH support
in their implementations, fgetfilecon(3) and fsetfilecon(3) also do not
currently support file descriptors opened with O_PATH.

Inspired by CVE-2013-4392: https://github.com/systemd/systemd/pull/8583
Implementation adapted from: 2825f10b7f%5E%21/

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
2022-05-16 10:21:47 -04:00

75 lines
1.9 KiB
Groff

.TH "getfilecon" "3" "1 January 2004" "russell@coker.com.au" "SELinux API documentation"
.SH "NAME"
getfilecon, fgetfilecon, lgetfilecon \- get SELinux security context of a file
.
.SH "SYNOPSIS"
.B #include <selinux/selinux.h>
.sp
.BI "int getfilecon(const char *" path ", char **" con );
.sp
.BI "int getfilecon_raw(const char *" path ", char **" con );
.sp
.BI "int lgetfilecon(const char *" path ", char **" con );
.sp
.BI "int lgetfilecon_raw(const char *" path ", char **" con );
.sp
.BI "int fgetfilecon(int "fd ", char **" con );
.sp
.BI "int fgetfilecon_raw(int "fd ", char **" con );
.
.SH "DESCRIPTION"
.BR getfilecon ()
retrieves the context associated with the given path in the file system, the
length of the context is returned.
.BR lgetfilecon ()
is identical to
.BR getfilecon (),
except in the case of a symbolic link, where the
link itself is interrogated, not the file that it refers to.
.BR fgetfilecon ()
is identical to
.BR getfilecon (),
only the open file pointed to by filedes (as returned by
.BR open (2))
is interrogated in place of path. Since libselinux 3.4 a file opened via
.I O_PATH
is supported.
.BR getfilecon_raw (),
.BR lgetfilecon_raw ()
and
.BR fgetfilecon_raw ()
behave identically to their non-raw counterparts but do not perform context
translation.
The returned context should be freed with
.BR freecon (3)
if non-NULL.
.
.SH "RETURN VALUE"
On success, a positive number is returned indicating the size of the
extended attribute value. On failure, \-1 is returned and
.I errno
is set appropriately.
If the context does not exist, or the process has no access to
this attribute,
.I errno
is set to
.BR ENODATA .
If extended attributes are not supported by the filesystem, or are
disabled,
.I errno
is set to
.BR ENOTSUP .
The errors documented for the
.BR stat (2)
system call are also applicable here.
.
.SH "SEE ALSO"
.BR selinux "(8), " freecon "(3), " setfilecon "(3), " setfscreatecon "(3)"