File check-for-AF_UNIX-unnamed-sockets.patch of Package audit-secondary (Revision e22aae9e580e040d565055f1fa3967d6)
Currently displaying revision e22aae9e580e040d565055f1fa3967d6 , Show latest
83
1
From 4fcf946ea07f696166364e015239d904946617a8 Mon Sep 17 00:00:00 2001
2
From: Enzo Matsumiya <ematsumiya@suse.de>
3
Date: Thu, 27 Apr 2023 12:46:30 -0300
4
Subject: [PATCH] Check for AF_UNIX unnamed sockets
5
6
Change the interpreted message for unnamed/anonymous sockets, and
7
make sure to not return an error if so.
8
9
Also check if sun_path[1] is valid for abstract sockets cases before
10
trying to strdup() it.
11
12
Signed-off-by: Enzo Matsumiya <ematsumiya@suse.de>
13
---
14
auparse/interpret.c | 7 ++++---
15
src/ausearch-parse.c | 19 ++++++++++++-------
16
2 files changed, 16 insertions(+), 10 deletions(-)
17
18
diff --git a/auparse/interpret.c b/auparse/interpret.c
19
index f8c5c84a5..bb4d0e1e1 100644
20
--- a/auparse/interpret.c
21
+++ b/auparse/interpret.c
22
23
switch (saddr->sa_family) {
24
case AF_LOCAL:
25
if (slen < 4) {
26
- rc = asprintf(&out,
27
- "{ saddr_fam=%s sockaddr len too short }",
28
- str);
29
+ rc = asprintf(&out, "{ saddr_fam=%s %s }", str,
30
+ slen == sizeof(saddr->sa_family) ?
31
+ "unnamed socket" : // ignore sun_path
32
+ "sockaddr len too short");
33
break;
34
} else {
35
const struct sockaddr_un *un =
36
diff --git a/src/ausearch-parse.c b/src/ausearch-parse.c
37
index 597d45f12..f9aad6303 100644
38
--- a/src/ausearch-parse.c
39
+++ b/src/ausearch-parse.c
40
41
}
42
len = sizeof(struct sockaddr_in6);
43
} else if (saddr->sa_family == AF_UNIX) {
44
- if (len < 4) {
45
- fprintf(stderr,
46
- "sun_path len too short\n");
47
- return 3;
48
- }
49
struct sockaddr_un *un =
50
(struct sockaddr_un *)saddr;
51
+ if (len != sizeof(saddr->sa_family) &&
52
+ len < 4) {
53
+ fprintf(stderr,
54
+ "sun_path len too short (%d)\n",
55
+ len);
56
+ return 4;
57
+ }
58
if (event_filename) {
59
if (!s->filename) {
60
//create
61
s->filename =
62
malloc(sizeof(slist));
63
if (s->filename == NULL)
64
- return 4;
65
+ return 5;
66
slist_create(s->filename);
67
}
68
if (s->filename) {
69
70
if (un->sun_path[0])
71
sn.str =
72
strdup(un->sun_path);
73
- else
74
+ else if (un->sun_path[1])
75
sn.str =
76
strdup(un->sun_path+1);
77
+ else
78
+ return 6;
79
+
80
sn.key = NULL;
81
sn.hits = 1;
82
slist_append(s->filename, &sn);
83