summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorharald@redhat.com <harald@redhat.com>2004-12-17 03:59:22 +0100
committerGreg KH <gregkh@suse.de>2005-04-26 23:17:47 -0700
commitb817644b5b4bdb805c55cbec749258b7ff545f51 (patch)
treed991b07cc0d0b7c4be867114014e68cf8ae572eb
parent83c35223ed164b95f53633b97846d0963c7bcea9 (diff)
[PATCH] selinux patch
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=142713 /sbin/udevstart segfaults on an ATIIXP chipset which is not supported well by the kernel yet. There, /proc/ide/hda/media can not be read (EIO error) and udevstart seems to give a null-pointer to an SELinux function checking the media-type.
-rw-r--r--selinux.h43
1 files changed, 26 insertions, 17 deletions
diff --git a/selinux.h b/selinux.h
index 38c60a3588..df5bab69d7 100644
--- a/selinux.h
+++ b/selinux.h
@@ -30,31 +30,40 @@ static inline int selinux_get_media(char *path, int mode, char **media)
FILE *fp;
char buf[PATH_MAX];
char mediabuf[PATH_MAX];
+ int ret = -1;
*media = NULL;
if (!(mode && S_IFBLK)) {
return -1;
}
- snprintf(buf,sizeof(buf), "/proc/ide/%s/media", basename(path));
+
+ snprintf(buf, sizeof(buf), "/proc/ide/%s/media", basename(path));
+
fp=fopen(buf,"r");
- if (fp) {
- if (fgets(mediabuf,sizeof(mediabuf), fp)) {
- int size = strlen(mediabuf);
- while (size-- > 0) {
- if (isspace(mediabuf[size])) {
- mediabuf[size]='\0';
- } else {
- break;
- }
- }
- *media = strdup(mediabuf);
- info("selinux_get_media(%s)->%s \n", path, *media);
+ if (!fp)
+ goto out;
+
+ mediabuf[0] = '\0';
+
+ if (fgets(mediabuf, sizeof(mediabuf), fp) == NULL)
+ goto close_out;
+
+ int size = strlen(mediabuf);
+ while (size-- > 0) {
+ if (isspace(mediabuf[size])) {
+ mediabuf[size]='\0';
+ } else {
+ break;
}
- fclose(fp);
- return 0;
- } else {
- return -1;
}
+ *media = strdup(mediabuf);
+ info("selinux_get_media(%s)->%s \n", path, *media);
+ ret = 0;
+
+close_out:
+ fclose(fp);
+out:
+ return ret;
}
static inline void selinux_setfilecon(char *file, unsigned int mode)