Recreate libselinux-rhat.patch from 4395ef2b8b
This commit is contained in:
parent
fc7694d2b9
commit
51344661b0
@ -558,7 +558,7 @@ index e89b1ef..fd20363 100644
|
|||||||
Every confined service on the system has a man page in the following format:
|
Every confined service on the system has a man page in the following format:
|
||||||
.br
|
.br
|
||||||
diff --git libselinux-2.3/src/Makefile libselinux-2.3/src/Makefile
|
diff --git libselinux-2.3/src/Makefile libselinux-2.3/src/Makefile
|
||||||
index 4d07ba6..d7f8dbd 100644
|
index 4d07ba6..0a34d9b 100644
|
||||||
--- libselinux-2.3/src/Makefile
|
--- libselinux-2.3/src/Makefile
|
||||||
+++ libselinux-2.3/src/Makefile
|
+++ libselinux-2.3/src/Makefile
|
||||||
@@ -59,7 +59,7 @@ CFLAGS ?= -O -Wall -W -Wundef -Wformat-y2k -Wformat-security -Winit-self -Wmissi
|
@@ -59,7 +59,7 @@ CFLAGS ?= -O -Wall -W -Wundef -Wformat-y2k -Wformat-security -Winit-self -Wmissi
|
||||||
@ -570,15 +570,6 @@ index 4d07ba6..d7f8dbd 100644
|
|||||||
-Wsync-nand -Wattributes -Wcoverage-mismatch -Wmultichar -Wcpp \
|
-Wsync-nand -Wattributes -Wcoverage-mismatch -Wmultichar -Wcpp \
|
||||||
-Wdeprecated-declarations -Wdiv-by-zero -Wdouble-promotion -Wendif-labels -Wextra \
|
-Wdeprecated-declarations -Wdiv-by-zero -Wdouble-promotion -Wendif-labels -Wextra \
|
||||||
-Wformat-contains-nul -Wformat-extra-args -Wformat-zero-length -Wformat=2 -Wmultichar \
|
-Wformat-contains-nul -Wformat-extra-args -Wformat-zero-length -Wformat=2 -Wmultichar \
|
||||||
@@ -111,7 +111,7 @@ $(LIBA): $(OBJS)
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
$(LIBSO): $(LOBJS)
|
|
||||||
- $(CC) $(CFLAGS) -shared -o $@ $^ -lpcre -ldl $(LDFLAGS) -L$(LIBDIR) -Wl,-soname,$(LIBSO),-z,defs,-z,relro
|
|
||||||
+ $(CC) $(CFLAGS) -shared -o $@ $^ -lpcre -llzma -ldl $(LDFLAGS) -L$(LIBDIR) -Wl,-soname,$(LIBSO),-z,defs,-z,relro
|
|
||||||
ln -sf $@ $(TARGET)
|
|
||||||
|
|
||||||
$(LIBPC): $(LIBPC).in ../VERSION
|
|
||||||
diff --git libselinux-2.3/src/avc.c libselinux-2.3/src/avc.c
|
diff --git libselinux-2.3/src/avc.c libselinux-2.3/src/avc.c
|
||||||
index 2bd7d13..b1ec57f 100644
|
index 2bd7d13..b1ec57f 100644
|
||||||
--- libselinux-2.3/src/avc.c
|
--- libselinux-2.3/src/avc.c
|
||||||
@ -968,185 +959,6 @@ index 896ef02..8435b76 100644
|
|||||||
path, lineno, type);
|
path, lineno, type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
diff --git libselinux-2.3/src/load_policy.c libselinux-2.3/src/load_policy.c
|
|
||||||
index e419f1a..275672d 100644
|
|
||||||
--- libselinux-2.3/src/load_policy.c
|
|
||||||
+++ libselinux-2.3/src/load_policy.c
|
|
||||||
@@ -16,6 +16,82 @@
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#include "policy.h"
|
|
||||||
#include <limits.h>
|
|
||||||
+#include <lzma.h>
|
|
||||||
+
|
|
||||||
+static char *lzmaread(int fd, size_t *rsize) {
|
|
||||||
+ int capacity = 64*1024;
|
|
||||||
+ char *buf = NULL;
|
|
||||||
+ int tmpsize = 8 * 1024;
|
|
||||||
+ unsigned char tmp[tmpsize];
|
|
||||||
+ unsigned char tmp_out[tmpsize];
|
|
||||||
+ size_t size = 0;
|
|
||||||
+ lzma_stream strm = LZMA_STREAM_INIT;
|
|
||||||
+ lzma_action action = LZMA_RUN;
|
|
||||||
+ lzma_ret ret;
|
|
||||||
+
|
|
||||||
+ FILE *stream = fdopen (fd, "r");
|
|
||||||
+ if (!stream) {
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+ ret = lzma_stream_decoder(&strm, UINT64_MAX,
|
|
||||||
+ LZMA_CONCATENATED);
|
|
||||||
+
|
|
||||||
+ strm.avail_in = 0;
|
|
||||||
+ strm.next_out = tmp_out;
|
|
||||||
+ strm.avail_out = tmpsize;
|
|
||||||
+
|
|
||||||
+ buf = (char *) malloc (capacity);
|
|
||||||
+ if (!buf)
|
|
||||||
+ goto err;
|
|
||||||
+
|
|
||||||
+ while (1) {
|
|
||||||
+ if (strm.avail_in == 0) {
|
|
||||||
+ strm.next_in = tmp;
|
|
||||||
+ strm.avail_in = fread(tmp, 1, tmpsize, stream);
|
|
||||||
+
|
|
||||||
+ if (ferror(stream)) {
|
|
||||||
+ // POSIX says that fread() sets errno if
|
|
||||||
+ // an error occurred. ferror() doesn't
|
|
||||||
+ // touch errno.
|
|
||||||
+ goto err;
|
|
||||||
+ }
|
|
||||||
+ if (feof(stream)) action = LZMA_FINISH;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ret = lzma_code(&strm, action);
|
|
||||||
+
|
|
||||||
+ // Write and check write error before checking decoder error.
|
|
||||||
+ // This way as much data as possible gets written to output
|
|
||||||
+ // even if decoder detected an error.
|
|
||||||
+ if (strm.avail_out == 0 || ret != LZMA_OK) {
|
|
||||||
+ const size_t num = tmpsize - strm.avail_out;
|
|
||||||
+ if (num > capacity) {
|
|
||||||
+ buf = (char*) realloc (buf, size*2);
|
|
||||||
+ capacity = size;
|
|
||||||
+ }
|
|
||||||
+ memcpy (buf+size, tmp_out, num);
|
|
||||||
+ capacity -= num;
|
|
||||||
+ size += num;
|
|
||||||
+ strm.next_out = tmp_out;
|
|
||||||
+ strm.avail_out = tmpsize;
|
|
||||||
+ }
|
|
||||||
+ if (ret != LZMA_OK) {
|
|
||||||
+ if (ret == LZMA_STREAM_END) {
|
|
||||||
+ break;
|
|
||||||
+ } else {
|
|
||||||
+ goto err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ *rsize = size;
|
|
||||||
+
|
|
||||||
+ goto exit;
|
|
||||||
+err:
|
|
||||||
+ free(buf); buf = NULL;
|
|
||||||
+exit:
|
|
||||||
+ lzma_end(&strm);
|
|
||||||
+ return buf;
|
|
||||||
+}
|
|
||||||
|
|
||||||
int security_load_policy(void *data, size_t len)
|
|
||||||
{
|
|
||||||
@@ -55,7 +131,7 @@ int selinux_mkload_policy(int preservebools)
|
|
||||||
struct stat sb;
|
|
||||||
struct utsname uts;
|
|
||||||
size_t size;
|
|
||||||
- void *map, *data;
|
|
||||||
+ void *map = NULL, *data=NULL;
|
|
||||||
int fd, rc = -1, prot;
|
|
||||||
sepol_policydb_t *policydb;
|
|
||||||
sepol_policy_file_t *pf;
|
|
||||||
@@ -181,24 +257,28 @@ checkbool:
|
|
||||||
goto dlclose;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (fstat(fd, &sb) < 0) {
|
|
||||||
- fprintf(stderr,
|
|
||||||
- "SELinux: Could not stat policy file %s: %s\n",
|
|
||||||
- path, strerror(errno));
|
|
||||||
- goto close;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- prot = PROT_READ;
|
|
||||||
- if (setlocaldefs || preservebools)
|
|
||||||
- prot |= PROT_WRITE;
|
|
||||||
+ data = lzmaread(fd,&size);
|
|
||||||
|
|
||||||
- size = sb.st_size;
|
|
||||||
- data = map = mmap(NULL, size, prot, MAP_PRIVATE, fd, 0);
|
|
||||||
- if (map == MAP_FAILED) {
|
|
||||||
- fprintf(stderr,
|
|
||||||
- "SELinux: Could not map policy file %s: %s\n",
|
|
||||||
+ if (!data) {
|
|
||||||
+ if (fstat(fd, &sb) < 0) {
|
|
||||||
+ fprintf(stderr,
|
|
||||||
+ "SELinux: Could not stat policy file %s: %s\n",
|
|
||||||
path, strerror(errno));
|
|
||||||
- goto close;
|
|
||||||
+ goto close;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ prot = PROT_READ;
|
|
||||||
+ if (setlocaldefs || preservebools)
|
|
||||||
+ prot |= PROT_WRITE;
|
|
||||||
+
|
|
||||||
+ size = sb.st_size;
|
|
||||||
+ data = map = mmap(NULL, size, prot, MAP_PRIVATE, fd, 0);
|
|
||||||
+ if (map == MAP_FAILED) {
|
|
||||||
+ fprintf(stderr,
|
|
||||||
+ "SELinux: Could not map policy file %s: %s\n",
|
|
||||||
+ path, strerror(errno));
|
|
||||||
+ goto close;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vers > kernvers && usesepol) {
|
|
||||||
@@ -210,6 +290,8 @@ checkbool:
|
|
||||||
goto unmap;
|
|
||||||
}
|
|
||||||
policy_file_set_mem(pf, data, size);
|
|
||||||
+ if (!map)
|
|
||||||
+ free(data);
|
|
||||||
if (policydb_read(policydb, pf)) {
|
|
||||||
policy_file_free(pf);
|
|
||||||
policydb_free(policydb);
|
|
||||||
@@ -223,7 +305,8 @@ checkbool:
|
|
||||||
path);
|
|
||||||
policy_file_free(pf);
|
|
||||||
policydb_free(policydb);
|
|
||||||
- munmap(map, sb.st_size);
|
|
||||||
+ if (map)
|
|
||||||
+ munmap(map, sb.st_size);
|
|
||||||
close(fd);
|
|
||||||
vers--;
|
|
||||||
goto search;
|
|
||||||
@@ -275,7 +358,7 @@ checkbool:
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-
|
|
||||||
+
|
|
||||||
rc = security_load_policy(data, size);
|
|
||||||
|
|
||||||
if (rc)
|
|
||||||
@@ -286,7 +369,8 @@ checkbool:
|
|
||||||
unmap:
|
|
||||||
if (data != map)
|
|
||||||
free(data);
|
|
||||||
- munmap(map, sb.st_size);
|
|
||||||
+ if (map)
|
|
||||||
+ munmap(map, sb.st_size);
|
|
||||||
close:
|
|
||||||
close(fd);
|
|
||||||
dlclose:
|
|
||||||
diff --git libselinux-2.3/src/lsetfilecon.c libselinux-2.3/src/lsetfilecon.c
|
diff --git libselinux-2.3/src/lsetfilecon.c libselinux-2.3/src/lsetfilecon.c
|
||||||
index 1d3b28a..ea6d70b 100644
|
index 1d3b28a..ea6d70b 100644
|
||||||
--- libselinux-2.3/src/lsetfilecon.c
|
--- libselinux-2.3/src/lsetfilecon.c
|
||||||
|
@ -18,7 +18,7 @@ Source1: selinuxconlist.8
|
|||||||
Source2: selinuxdefcon.8
|
Source2: selinuxdefcon.8
|
||||||
Url: https://github.com/SELinuxProject/selinux/wiki
|
Url: https://github.com/SELinuxProject/selinux/wiki
|
||||||
# use make-rhat-patches.sh to create following patches from https://github.com/fedora-selinux/selinux/
|
# use make-rhat-patches.sh to create following patches from https://github.com/fedora-selinux/selinux/
|
||||||
# https://github.com/fedora-selinux/selinux/commit/986cbec51cf3777202a90a680f86e389af6
|
# https://github.com/fedora-selinux/selinux/commit/4395ef2b8bb086878b5fad80321ac9d32f424f51
|
||||||
Patch1: libselinux-rhat.patch
|
Patch1: libselinux-rhat.patch
|
||||||
BuildRequires: pkgconfig python-devel ruby-devel ruby libsepol-static >= %{libsepolver} swig pcre-devel xz-devel
|
BuildRequires: pkgconfig python-devel ruby-devel ruby libsepol-static >= %{libsepolver} swig pcre-devel xz-devel
|
||||||
%if 0%{?with_python3}
|
%if 0%{?with_python3}
|
||||||
|
Loading…
Reference in New Issue
Block a user