1 //===-- selinux.c ---------------------------------------------------------===//
2 //
3 // The KLEE Symbolic Virtual Machine
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 /* Very basic SELinux support */
11
12 #include "klee/Config/config.h"
13
14 #ifdef HAVE_SELINUX_SELINUX_H
15
16 #include "klee/klee.h"
17
18 #include <selinux/selinux.h>
19 #include <stdlib.h>
20 #include <errno.h>
21
22 /* for now, assume we run on an SELinux machine */
23 int exe_selinux = 1;
24
25 /* NULL is the default policy behavior */
26 KLEE_SELINUX_CTX_CONST char *create_con = NULL;
27
28
is_selinux_enabled()29 int is_selinux_enabled() {
30 return exe_selinux;
31 }
32
33
34 /***/
35
getfscreatecon(char ** context)36 int getfscreatecon(char **context) {
37 *context = (char *)create_con;
38 return 0;
39 }
40
41
setfscreatecon(KLEE_SELINUX_CTX_CONST char * context)42 int setfscreatecon(KLEE_SELINUX_CTX_CONST char *context) {
43 if (context == NULL) {
44 create_con = context;
45 return 0;
46 }
47
48 /* on my machine, setfscreatecon seems to incorrectly accept one
49 char strings.. Also, make sure mcstrans > 0.2.8 for replay
50 (important bug fixed) */
51 if (context[0] != '\0' && context[1] == '\0')
52 klee_silent_exit(1);
53
54 return -1;
55 }
56
57 /***/
58
setfilecon(const char * path,KLEE_SELINUX_CTX_CONST char * con)59 int setfilecon(const char *path, KLEE_SELINUX_CTX_CONST char *con) {
60 if (con)
61 return 0;
62
63 errno = ENOSPC;
64 return -1;
65 }
66
lsetfilecon(const char * path,KLEE_SELINUX_CTX_CONST char * con)67 int lsetfilecon(const char *path, KLEE_SELINUX_CTX_CONST char *con) {
68 return setfilecon(path, con);
69 }
70
fsetfilecon(int fd,KLEE_SELINUX_CTX_CONST char * con)71 int fsetfilecon(int fd, KLEE_SELINUX_CTX_CONST char *con) {
72 return setfilecon("", con);
73 }
74
75 /***/
76
freecon(char * con)77 void freecon(char *con) {}
freeconary(char ** con)78 void freeconary(char **con) {}
79
80 #endif
81