scripts/selinux/mdp/mdp.c
Source file repositories/reference/linux-study-clean/scripts/selinux/mdp/mdp.c
File Facts
- System
- Linux kernel
- Corpus path
scripts/selinux/mdp/mdp.c- Extension
.c- Size
- 6667 bytes
- Lines
- 267
- Domain
- Support Tooling And Documentation
- Bucket
- scripts
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
stdio.hstdlib.hunistd.hstring.hlinux/kconfig.hclassmap.hinitial_sid_to_string.hpolicycap_names.h
Detected Declarations
struct security_class_mappingfunction Copyrightfunction main
Annotated Snippet
struct security_class_mapping {
const char *name;
const char *perms[sizeof(unsigned) * 8 + 1];
};
#include "classmap.h"
#include "initial_sid_to_string.h"
#include "policycap_names.h"
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
int main(int argc, char *argv[])
{
int i, j, mls = 0;
int initial_sid_to_string_len;
char **arg, *polout, *ctxout;
FILE *fout;
if (argc < 3)
usage(argv[0]);
arg = argv+1;
if (argc==4 && strcmp(argv[1], "-m") == 0) {
mls = 1;
arg++;
}
polout = *arg++;
ctxout = *arg;
fout = fopen(polout, "w");
if (!fout) {
printf("Could not open %s for writing\n", polout);
usage(argv[0]);
}
/* print out the classes */
for (i = 0; secclass_map[i].name; i++)
fprintf(fout, "class %s\n", secclass_map[i].name);
fprintf(fout, "\n");
initial_sid_to_string_len = sizeof(initial_sid_to_string) / sizeof (char *);
/* print out the sids */
for (i = 1; i < initial_sid_to_string_len; i++) {
const char *name = initial_sid_to_string[i];
if (name)
fprintf(fout, "sid %s\n", name);
else
fprintf(fout, "sid unused%d\n", i);
}
fprintf(fout, "\n");
/* print out the class permissions */
for (i = 0; secclass_map[i].name; i++) {
const struct security_class_mapping *map = &secclass_map[i];
fprintf(fout, "class %s\n", map->name);
fprintf(fout, "{\n");
for (j = 0; map->perms[j]; j++)
fprintf(fout, "\t%s\n", map->perms[j]);
fprintf(fout, "}\n\n");
}
fprintf(fout, "\n");
/* print out mls declarations and constraints */
if (mls) {
fprintf(fout, "sensitivity s0;\n");
fprintf(fout, "sensitivity s1;\n");
fprintf(fout, "dominance { s0 s1 }\n");
fprintf(fout, "category c0;\n");
fprintf(fout, "category c1;\n");
fprintf(fout, "level s0:c0.c1;\n");
fprintf(fout, "level s1:c0.c1;\n");
#define SYSTEMLOW "s0"
#define SYSTEMHIGH "s1:c0.c1"
for (i = 0; secclass_map[i].name; i++) {
const struct security_class_mapping *map = &secclass_map[i];
fprintf(fout, "mlsconstrain %s {\n", map->name);
for (j = 0; map->perms[j]; j++)
fprintf(fout, "\t%s\n", map->perms[j]);
/*
* This requires all subjects and objects to be
* single-level (l2 eq h2), and that the subject
* level dominate the object level (h1 dom h2)
* in order to have any permissions to it.
*/
fprintf(fout, "} (l2 eq h2 and h1 dom h2);\n\n");
}
}
Annotation
- Immediate include surface: `stdio.h`, `stdlib.h`, `unistd.h`, `string.h`, `linux/kconfig.h`, `classmap.h`, `initial_sid_to_string.h`, `policycap_names.h`.
- Detected declarations: `struct security_class_mapping`, `function Copyright`, `function main`.
- Atlas domain: Support Tooling And Documentation / scripts.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.