diff options
author | harald@redhat.com <harald@redhat.com> | 2004-12-17 03:59:22 +0100 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 23:17:47 -0700 |
commit | b817644b5b4bdb805c55cbec749258b7ff545f51 (patch) | |
tree | d991b07cc0d0b7c4be867114014e68cf8ae572eb | |
parent | 83c35223ed164b95f53633b97846d0963c7bcea9 (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.h | 43 |
1 files changed, 26 insertions, 17 deletions
@@ -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) |