|
@@ -1995,7 +1995,19 @@ static int filename_trans_read(struct policydb *p, void *fp)
|
|
if (rc)
|
|
if (rc)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
- hashtab_insert(p->filename_trans, ft, otype);
|
|
|
|
|
|
+ rc = hashtab_insert(p->filename_trans, ft, otype);
|
|
|
|
+ if (rc) {
|
|
|
|
+ /*
|
|
|
|
+ * Do not return -EEXIST to the caller, or the system
|
|
|
|
+ * will not boot.
|
|
|
|
+ */
|
|
|
|
+ if (rc != -EEXIST)
|
|
|
|
+ goto out;
|
|
|
|
+ /* But free memory to avoid memory leak. */
|
|
|
|
+ kfree(ft);
|
|
|
|
+ kfree(name);
|
|
|
|
+ kfree(otype);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
hash_eval(p->filename_trans, "filenametr");
|
|
hash_eval(p->filename_trans, "filenametr");
|
|
return 0;
|
|
return 0;
|