#include #include #include #include extern int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); static int write_binary_policy(policydb_t *p, FILE *outfp) { struct policy_file pf; policy_file_init(&pf); pf.type = PF_USE_STDIO; pf.fp = outfp; return policydb_write(p, &pf); } int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { policydb_t policydb = {}; sidtab_t sidtab = {}; struct policy_file pf; FILE *devnull = NULL; sepol_debug(0); policy_file_init(&pf); pf.type = PF_USE_MEMORY; pf.data = (char *) data; pf.len = size; if (policydb_init(&policydb)) goto exit; if (policydb_read(&policydb, &pf, /*verbose=*/0)) goto exit; if (policydb_load_isids(&policydb, &sidtab)) goto exit; if (policydb.policy_type == POLICY_KERN) (void) policydb_optimize(&policydb); devnull = fopen("/dev/null", "w"); if (!devnull) goto exit; (void) write_binary_policy(&policydb, devnull); (void) sepol_kernel_policydb_to_conf(devnull, &policydb); (void) sepol_kernel_policydb_to_cil(devnull, &policydb); exit: if (devnull != NULL) fclose(devnull); policydb_destroy(&policydb); sepol_sidtab_destroy(&sidtab); /* Non-zero return values are reserved for future use. */ return 0; }