I think this patch originally came from Eric Paris and was updated by
others but has not been adopted yet. Not sure why.
Always free buf on exit.
--- nsalibselinux/src/init.c 2009-07-14 11:16:03.000000000 -0400
+++ libselinux-2.0.90/src/init.c 2010-02-22 11:04:16.000000000 -0500
@@ -23,7 +23,7 @@
static void init_selinuxmnt(void)
{
char *buf=NULL, *p;
- FILE *fp;
+ FILE *fp=NULL;
struct statfs sfbuf;
int rc;
size_t len;
@@ -57,16 +57,17 @@
break;
}
}
- fclose(fp);
- if (!exists)
- return;
+ if (!exists)
+ goto out;
+
+ fclose(fp);
/* At this point, the usual spot doesn't have an selinuxfs so
* we look around for it */
fp = fopen("/proc/mounts", "r");
if (!fp)
- return;
+ goto out;
__fsetlocking(fp, FSETLOCKING_BYCALLER);
while ((num = getline(&buf, &len, fp)) != -1) {
@@ -90,7 +91,8 @@
out:
free(buf);
- fclose(fp);
+ if (fp)
+ fclose(fp);
return;
}