|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
commit 541cb790e1e6ce666c4deb6ebac3212f1bc8f289
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
Author: Eric Paris <eparis@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
Date: Tue Jan 8 11:42:21 2013 -0500
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
start fixing stuff
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
diff --git a/libsepol/src/services.c b/libsepol/src/services.c
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
index 9b42d8d..23cef4c 100644
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
--- a/libsepol/src/services.c
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+++ b/libsepol/src/services.c
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
@@ -47,7 +47,6 @@
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
#define REASON_BUF_SIZE 30000
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
/* The maximum size of each malloc'd expression buffer */
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
#define EXPR_BUF_SIZE 1000
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
-/* Number expressions in a constraint - max seen in MLS policy is 21 */
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
#define EXPR_BUFFERS 30
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
#include <stdlib.h>
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
@@ -79,27 +78,42 @@ static sidtab_t mysidtab, *sidtab = &mysidtab;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
static policydb_t mypolicydb, *policydb = &mypolicydb;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
/* Stack services for RPN to infix conversion. Size is num of expr bufs */
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
-char *stack[EXPR_BUFFERS];
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
-int tos = 0;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
-
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
-void push(char * expr_ptr)
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+static char **stack;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+static int stack_len;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+static int next_stack_entry;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+static void push(char * expr_ptr)
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
{
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- if (tos >= EXPR_BUFFERS) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- ERR(NULL, "Stack is full");
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- return;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ if (next_stack_entry >= stack_len) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ char **new_stack = stack;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ int new_stack_len;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ if (stack_len == 0)
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ new_stack_len = 32;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ new_stack_len = stack_len * 2;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ new_stack = realloc(stack, new_stack_len * sizeof(*stack));
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ if (!new_stack) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ ERR(NULL, "unable to allocate space");
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ return;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ stack_len = new_stack_len;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ stack = new_stack;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
}
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- stack[tos] = expr_ptr;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- tos++;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ stack[next_stack_entry] = expr_ptr;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ next_stack_entry++;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
}
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
-
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
-char *pop()
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+static char *pop(void)
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
{
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- tos--;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- if (tos < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- ERR(NULL, "Stack is Empty");
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ next_stack_entry--;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ if (next_stack_entry < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ next_stack_entry = 0;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ ERR(NULL, "pop called with no stack entries");
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
}
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
- return (char *)stack[tos];
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ return stack[next_stack_entry];
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
}
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
/* End Stack services */
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
@@ -322,6 +336,10 @@ static int constraint_expr_eval_reason(context_struct_t * scontext,
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
/* Original function but with buffer support */
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
for (e = constraint->expr; e; e = e->next) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ if (expr_counter >= EXPR_BUFFERS) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ ERR(NULL, "%s: expr_buf overflow", __func__);
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ return -ENOMEM;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
/* malloc a buffer to store each expression text component */
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
expr_buf[expr_counter] = malloc(EXPR_BUF_SIZE);
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
if (!expr_buf[expr_counter]) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
@@ -622,6 +640,10 @@ static int constraint_expr_eval_reason(context_struct_t * scontext,
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
for (x = 0; expr_buf[x] != NULL; x++) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
if (strncmp(expr_buf[x], "and", 3) == 0 || strncmp(expr_buf[x],
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
"or", 2) == 0) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ if (answer_counter >= EXPR_BUFFERS) {
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ ERR(NULL, "%s: answer_buf overflow", __func__);
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ return -ENOMEM;
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
b = pop();
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
b_len = strlen(b);
|
|
![](https://seccdn.libravatar.org/avatar/736367bde6478dadf14113cbc0c504521dd994dc28b5fd55dacf3eaee94ae556?s=16&d=retro) |
5a38f90 |
a = pop();
|