aboutsummaryrefslogtreecommitdiffstats
path: root/main/audit/0003-all-get-rid-of-strndupa.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/audit/0003-all-get-rid-of-strndupa.patch')
-rw-r--r--main/audit/0003-all-get-rid-of-strndupa.patch86
1 files changed, 86 insertions, 0 deletions
diff --git a/main/audit/0003-all-get-rid-of-strndupa.patch b/main/audit/0003-all-get-rid-of-strndupa.patch
new file mode 100644
index 0000000000..d34bf0cfb7
--- /dev/null
+++ b/main/audit/0003-all-get-rid-of-strndupa.patch
@@ -0,0 +1,86 @@
+From 38d950e468c1e51937530f884b138076e4897da2 Mon Sep 17 00:00:00 2001
+From: Tycho Andersen <tycho@docker.com>
+Date: Mon, 13 Mar 2017 16:40:08 -0700
+Subject: [PATCH 3/4] all: get rid of strndupa
+
+in one case (src/auditd.c) we don't even need to allocate a buffer, in the
+other two we do it in two steps to avoid using a non-standard function.
+
+Signed-off-by: Tycho Andersen <tycho@docker.com>
+---
+ auparse/auparse.c | 6 ++++--
+ src/auditd.c | 10 +++++-----
+ src/ausearch-lol.c | 6 ++++--
+ 3 files changed, 13 insertions(+), 9 deletions(-)
+
+diff --git a/auparse/auparse.c b/auparse/auparse.c
+index 058f544..f61d204 100644
+--- a/auparse/auparse.c
++++ b/auparse/auparse.c
+@@ -1102,10 +1102,12 @@ static int extract_timestamp(const char *b, au_event_t *e)
+ int rc = 1;
+
+ e->host = NULL;
++
++ tmp = alloca(340);
+ if (*b == 'n')
+- tmp = strndupa(b, 340);
++ tmp = strncpy(tmp, b, 340);
+ else
+- tmp = strndupa(b, 80);
++ tmp = strncpy(tmp, b, 80);
+ ptr = audit_strsplit(tmp);
+ if (ptr) {
+ // Optionally grab the node - may or may not be included
+diff --git a/src/auditd.c b/src/auditd.c
+index cd49758..2de065a 100644
+--- a/src/auditd.c
++++ b/src/auditd.c
+@@ -185,7 +185,7 @@ static void child_handler2( int sig )
+
+ static int extract_type(const char *str)
+ {
+- const char *tptr, *ptr2, *ptr = str;
++ const char *ptr2, *ptr = str;
+ if (*str == 'n') {
+ ptr = strchr(str+1, ' ');
+ if (ptr == NULL)
+@@ -194,12 +194,12 @@ static int extract_type(const char *str)
+ }
+ // ptr should be at 't'
+ ptr2 = strchr(ptr, ' ');
+- // get type=xxx in a buffer
+- tptr = strndupa(ptr, ptr2 - ptr);
++
+ // find =
+- str = strchr(tptr, '=');
+- if (str == NULL)
++ str = strchr(ptr, '=');
++ if (str == NULL || str >= ptr2)
+ return -1; // Malformed - bomb out
++
+ // name is 1 past
+ str++;
+ return audit_name_to_msg_type(str);
+diff --git a/src/ausearch-lol.c b/src/ausearch-lol.c
+index 29d0a32..3a2e5e8 100644
+--- a/src/ausearch-lol.c
++++ b/src/ausearch-lol.c
+@@ -135,10 +135,12 @@ static int extract_timestamp(const char *b, event *e)
+ char *ptr, *tmp, *tnode, *ttype;
+
+ e->node = NULL;
++
++ tmp = alloca(340);
+ if (*b == 'n')
+- tmp = strndupa(b, 340);
++ tmp = strncpy(tmp, b, 340);
+ else
+- tmp = strndupa(b, 80);
++ tmp = strncpy(tmp, b, 80);
+ ptr = audit_strsplit(tmp);
+ if (ptr) {
+ // Check to see if this is the node info
+--
+2.13.1
+