1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
From f45e805033c6aed205863d87fe56f5bc7e6fd0c4 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/3] 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 3677ad7..b428330 100644
--- a/auparse/auparse.c
+++ b/auparse/auparse.c
@@ -1096,10 +1096,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 3f0162d..a1c2c51 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 b1aec06..5d461b0 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.11.1
|