Commit 4bc6c2d5d8386800fde23a8e78cd4f04a0ade0ad
Committed by
Eric Paris
1 parent
0b24dcb7f2
Exists in
master
and in
39 other branches
SELinux: Auto-generate security_is_socket_class
The security_is_socket_class() is auto-generated by genheaders based on classmap.h to reduce maintenance effort when a new class is defined in SELinux kernel. The name for any socket class should be suffixed by "socket" and doesn't contain more than one substr of "socket". Signed-off-by: Harry Ciao <qingtao.cao@windriver.com> Signed-off-by: Eric Paris <eparis@redhat.com> Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Showing 2 changed files with 24 additions and 0 deletions Side-by-side Diff
scripts/selinux/genheaders/genheaders.c
... | ... | @@ -43,6 +43,8 @@ |
43 | 43 | int i, j, k; |
44 | 44 | int isids_len; |
45 | 45 | FILE *fout; |
46 | + const char *needle = "SOCKET"; | |
47 | + char *substr; | |
46 | 48 | |
47 | 49 | progname = argv[0]; |
48 | 50 | |
... | ... | @@ -88,6 +90,24 @@ |
88 | 90 | fprintf(fout, "%2d\n", i); |
89 | 91 | } |
90 | 92 | fprintf(fout, "\n#define SECINITSID_NUM %d\n", i-1); |
93 | + fprintf(fout, "\nstatic inline bool security_is_socket_class(u16 kern_tclass)\n"); | |
94 | + fprintf(fout, "{\n"); | |
95 | + fprintf(fout, "\tbool sock = false;\n\n"); | |
96 | + fprintf(fout, "\tswitch (kern_tclass) {\n"); | |
97 | + for (i = 0; secclass_map[i].name; i++) { | |
98 | + struct security_class_mapping *map = &secclass_map[i]; | |
99 | + substr = strstr(map->name, needle); | |
100 | + if (substr && strcmp(substr, needle) == 0) | |
101 | + fprintf(fout, "\tcase SECCLASS_%s:\n", map->name); | |
102 | + } | |
103 | + fprintf(fout, "\t\tsock = true;\n"); | |
104 | + fprintf(fout, "\t\tbreak;\n"); | |
105 | + fprintf(fout, "\tdefault:\n"); | |
106 | + fprintf(fout, "\t\tbreak;\n"); | |
107 | + fprintf(fout, "\t}\n\n"); | |
108 | + fprintf(fout, "\treturn sock;\n"); | |
109 | + fprintf(fout, "}\n"); | |
110 | + | |
91 | 111 | fprintf(fout, "\n#endif\n"); |
92 | 112 | fclose(fout); |
93 | 113 |
security/selinux/include/classmap.h
... | ... | @@ -12,6 +12,10 @@ |
12 | 12 | #define COMMON_IPC_PERMS "create", "destroy", "getattr", "setattr", "read", \ |
13 | 13 | "write", "associate", "unix_read", "unix_write" |
14 | 14 | |
15 | +/* | |
16 | + * Note: The name for any socket class should be suffixed by "socket", | |
17 | + * and doesn't contain more than one substr of "socket". | |
18 | + */ | |
15 | 19 | struct security_class_mapping secclass_map[] = { |
16 | 20 | { "security", |
17 | 21 | { "compute_av", "compute_create", "compute_member", |