61 lines
1.9 KiB
Diff
61 lines
1.9 KiB
Diff
diff -urp audit-2.6.5.orig/audisp/audispd.c audit-2.6.5/audisp/audispd.c
|
|
--- audit-2.6.5.orig/audisp/audispd.c 2016-07-08 12:17:53.000000000 -0400
|
|
+++ audit-2.6.5/audisp/audispd.c 2016-07-08 17:11:18.659015835 -0400
|
|
@@ -825,13 +825,25 @@ static void process_inbound_event(int fd
|
|
|
|
if (rc > 0) {
|
|
/* Sanity check */
|
|
- if (!(e->hdr.ver == AUDISP_PROTOCOL_VER ||
|
|
- e->hdr.ver == AUDISP_PROTOCOL_VER2) ||
|
|
- e->hdr.hlen != sizeof(e->hdr) ||
|
|
- e->hdr.size > MAX_AUDIT_MESSAGE_LENGTH) {
|
|
+ if ((e->hdr.ver != AUDISP_PROTOCOL_VER &&
|
|
+ e->hdr.ver != AUDISP_PROTOCOL_VER2)) {
|
|
+ syslog(LOG_ERR,
|
|
+ "Unknown dispatcher protocol %u, exiting",
|
|
+ e->hdr.ver);
|
|
free(e);
|
|
+ exit(1);
|
|
+ }
|
|
+ if (e->hdr.hlen != sizeof(e->hdr)) {
|
|
syslog(LOG_ERR,
|
|
- "Dispatcher protocol mismatch, exiting");
|
|
+ "Header length mismatch %u %lu, exiting",
|
|
+ e->hdr.hlen, sizeof(e->hdr));
|
|
+ free(e);
|
|
+ exit(1);
|
|
+ }
|
|
+ if (e->hdr.size > MAX_AUDIT_MESSAGE_LENGTH) {
|
|
+ syslog(LOG_ERR, "Header size mismatch %d, exiting",
|
|
+ e->hdr.size);
|
|
+ free(e);
|
|
exit(1);
|
|
}
|
|
|
|
diff -urp audit-2.6.5.orig/src/auditd-dispatch.c audit-2.6.5/src/auditd-dispatch.c
|
|
--- audit-2.6.5.orig/src/auditd-dispatch.c 2016-07-08 12:17:53.000000000 -0400
|
|
+++ audit-2.6.5/src/auditd-dispatch.c 2016-07-08 17:00:58.081896384 -0400
|
|
@@ -183,17 +183,19 @@ int dispatch_event(const struct audit_re
|
|
hdr.ver = protocol_ver;
|
|
hdr.hlen = sizeof(struct audit_dispatcher_header);
|
|
hdr.type = rep->type;
|
|
- hdr.size = rep->len;
|
|
|
|
vec[0].iov_base = (void*)&hdr;
|
|
vec[0].iov_len = sizeof(hdr);
|
|
if (protocol_ver == AUDISP_PROTOCOL_VER) {
|
|
+ hdr.size = rep->msg.nlh.nlmsg_len;
|
|
vec[1].iov_base = (void*)rep->message;
|
|
vec[1].iov_len = rep->msg.nlh.nlmsg_len;
|
|
- } else {
|
|
+ } else if (protocol_ver == AUDISP_PROTOCOL_VER2) {
|
|
+ hdr.size = rep->len;
|
|
vec[1].iov_base = (void*)rep->msg.data;
|
|
vec[1].iov_len = rep->len;
|
|
- }
|
|
+ } else
|
|
+ return 0;
|
|
|
|
do {
|
|
rc = writev(disp_pipe[1], vec, 2);
|