Skip to content

Commit 4bc6c2d

Browse files
qcao-zzeparis
authored andcommitted
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>
1 parent 0b24dcb commit 4bc6c2d

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

scripts/selinux/genheaders/genheaders.c

+20
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ int main(int argc, char *argv[])
4343
int i, j, k;
4444
int isids_len;
4545
FILE *fout;
46+
const char *needle = "SOCKET";
47+
char *substr;
4648

4749
progname = argv[0];
4850

@@ -88,6 +90,24 @@ int main(int argc, char *argv[])
8890
fprintf(fout, "%2d\n", i);
8991
}
9092
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+
91111
fprintf(fout, "\n#endif\n");
92112
fclose(fout);
93113

security/selinux/include/classmap.h

+4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
#define COMMON_IPC_PERMS "create", "destroy", "getattr", "setattr", "read", \
1313
"write", "associate", "unix_read", "unix_write"
1414

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+
*/
1519
struct security_class_mapping secclass_map[] = {
1620
{ "security",
1721
{ "compute_av", "compute_create", "compute_member",

0 commit comments

Comments
 (0)