diff options
-rw-r--r-- | examples/not_oops1 | 22 | ||||
-rw-r--r-- | examples/oops1 | 41 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsSysLog.cpp | 90 |
3 files changed, 101 insertions, 52 deletions
diff --git a/examples/not_oops1 b/examples/not_oops1 new file mode 100644 index 00000000..63dba803 --- /dev/null +++ b/examples/not_oops1 @@ -0,0 +1,22 @@ +Nov 9 10:19:35 ohm openvpn[1118]: WARNING: Make sure you understand the semantics of --tls-remote before using it (see the man page). +Nov 9 10:19:35 ohm openvpn[1118]: NOTE: the current --script-security setting may allow this configuration to call user-defined scripts +Nov 9 10:19:35 ohm openvpn[1118]: Re-using SSL/TLS context +Nov 9 10:19:35 ohm openvpn[1118]: LZO compression initialized +Nov 9 10:19:35 ohm openvpn[1118]: UDPv4 link local: [undef] +Nov 9 10:19:35 ohm openvpn[1118]: UDPv4 link remote: 216.17.180.2:5000 +Nov 9 10:19:35 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:37 ohm openvpn[1122]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:37 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:37 ohm restorecond: Unable to watch (/home/kevin/public_html/*) No such file or directory +Nov 9 10:19:39 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:39 ohm openvpn[1122]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:41 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:42 ohm openvpn[1122]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:43 ohm openvpn[1118]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:43 ohm pulseaudio[1867]: module.c: module-hal-detect is deprecated: Please use module-udev-detect instead of module-hal-detect! +Nov 9 10:19:43 ohm pulseaudio[1867]: module-hal-detect-compat.c: We will now load module-udev-detect. Please make sure to remove module-hal-detect from your configuration. +Nov 9 10:19:44 ohm openvpn[1122]: write UDPv4 []: Network is unreachable (code=101) +Nov 9 10:19:45 ohm openvpn[1122]: [UNDEF] Inactivity timeout (--ping-restart), restarting +Nov 9 10:19:45 ohm openvpn[1122]: SIGUSR1[soft,ping-restart] received, process restarting +Nov 9 10:19:46 ohm openvpn[1118]: [UNDEF] Inactivity timeout (--ping-restart), restarting +Nov 9 10:19:46 ohm openvpn[1118]: SIGUSR1[soft,ping-restart] received, process restarting diff --git a/examples/oops1 b/examples/oops1 new file mode 100644 index 00000000..e4f02d26 --- /dev/null +++ b/examples/oops1 @@ -0,0 +1,41 @@ +Jan 11 22:31:37 kids1 kernel: [drm] Num pipes: 1 +Jan 11 22:31:38 kids1 kernel: [drm] Setting GART location based on new memorymap +Jan 11 22:31:38 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 11 22:31:38 kids1 kernel: [drm] Num pipes: 1 +Jan 11 22:31:38 kids1 kernel: [drm] writeback test succeeded in 1 usecs +Jan 12 14:32:19 kids1 kernel: [drm] Num pipes: 1 +Jan 12 14:32:21 kids1 kernel: [drm] Setting GART location based on new memorymap +Jan 12 14:32:21 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 12 14:32:21 kids1 kernel: [drm] Num pipes: 1 +Jan 12 14:32:21 kids1 kernel: [drm] writeback test succeeded in 1 usecs +Jan 12 16:12:16 kids1 kernel: [drm] Num pipes: 1 +Jan 12 19:08:41 kids1 kernel: [drm:radeon_set_igpgart] *ERROR* Unable to useIGP GART table size 32768 +Jan 12 19:08:41 kids1 kernel: [drm] Loading RS690/RS740 Microcode +Jan 12 19:08:41 kids1 kernel: BUG: unable to handle kernel NULL pointer dereference at 00000000 +Jan 12 19:08:41 kids1 kernel: IP: [<f88dec25>] :radeon:radeon_cp_init_ring_buffer+0x90/0x302 +Jan 12 19:08:41 kids1 kernel: *pde = 6f5c6067 +Jan 12 19:08:41 kids1 kernel: Oops: 0000 [#1] SMP. +Jan 12 19:08:41 kids1 kernel: Modules linked in: r8169 mii fuse nfsd lockd nfs_acl auth_rpcgss exportfs bridge stp bnep sco l2cap bl +Jan 12 19:08:41 kids1 kernel: Pid: 8003, comm: Xorg Not tainted (2.6.27.9-159.fc10.i686 #1) +Jan 12 19:08:41 kids1 kernel: EIP: 0060:[<f88dec25>] EFLAGS: 00213246 CPU: 1 +Jan 12 19:08:41 kids1 kernel: EIP is at radeon_cp_init_ring_buffer+0x90/0x302 [radeon] +Jan 12 19:08:41 kids1 kernel: EAX: 00000000 EBX: f78b4000 ECX: f78b4000 EDX: 00000000 +Jan 12 19:08:41 kids1 kernel: ESI: f5dbe800 EDI: 00006458 EBP: f0a0cf18 ESP: f0a0cf08 +Jan 12 19:08:41 kids1 kernel: DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 +Jan 12 19:08:41 kids1 kernel: Process Xorg (pid: 8003, ti=f0a0c000 task=f2380000 task.ti=f0a0c000) +Jan 12 19:08:41 kids1 kernel: Stack: f0a0cf18 f78b4000 f5dbe800 00006458 f0a0cf28 f88e11c7 f8911a24 00000000. +Jan 12 19:08:41 kids1 kernel: f0a0cf4c f88745f8 f30c3ba0 f5dbe800 f88e114a f5dbe828 f890fd78 f097ac00. +Jan 12 19:08:41 kids1 kernel: 00000000 f0a0cf68 c049b1c0 00000000 00006458 f097ac00 f097ac00 00000000. +Jan 12 19:08:41 kids1 kernel: Call Trace: +Jan 12 19:08:41 kids1 kernel: [<f88e11c7>] ? radeon_cp_resume+0x7d/0xbc [radeon] +Jan 12 19:08:41 kids1 kernel: [<f88745f8>] ? drm_ioctl+0x1b0/0x225 [drm] +Jan 12 19:08:41 kids1 kernel: [<f88e114a>] ? radeon_cp_resume+0x0/0xbc [radeon] +Jan 12 19:08:41 kids1 kernel: [<c049b1c0>] ? vfs_ioctl+0x50/0x69 +Jan 12 19:08:41 kids1 kernel: [<c049b414>] ? do_vfs_ioctl+0x23b/0x247 +Jan 12 19:08:41 kids1 kernel: [<c0460a56>] ? audit_syscall_entry+0xf9/0x123 +Jan 12 19:08:41 kids1 kernel: [<c049b460>] ? sys_ioctl+0x40/0x5c +Jan 12 19:08:41 kids1 kernel: [<c0403c76>] ? syscall_call+0x7/0xb +Jan 12 19:08:41 kids1 kernel: ======================= +Jan 12 19:08:41 kids1 kernel: Code: 66 31 d2 09 c2 89 d8 e8 fc e7 ff ff 8b 83 cc 00 00 00 8b 53 34 03 10 8b 86 70 02 00 00 2b 50 44 +Jan 12 19:08:41 kids1 kernel: EIP: [<f88dec25>] radeon_cp_init_ring_buffer+0x90/0x302 [radeon] SS:ESP 0068:f0a0cf08 +Jan 12 19:08:41 kids1 kernel: ---[ end trace 81e3cf9431f7af0c ]--- diff --git a/lib/Plugins/KerneloopsSysLog.cpp b/lib/Plugins/KerneloopsSysLog.cpp index d28ce399..839e2f86 100644 --- a/lib/Plugins/KerneloopsSysLog.cpp +++ b/lib/Plugins/KerneloopsSysLog.cpp @@ -75,7 +75,6 @@ struct line_info { int extract_oopses(vector_string_t &oopses, char *buffer, size_t buflen) { char *c; - enum { maybe, no, yes } syslog_format = maybe; int linecount = 0; int lines_info_alloc = 0; struct line_info *lines_info = NULL; @@ -86,86 +85,73 @@ int extract_oopses(vector_string_t &oopses, char *buffer, size_t buflen) buffer[buflen - 1] = '\n'; /* the buffer usually ends with \n, but let's make sure */ c = buffer; while (c < buffer + buflen) { - char v, linelevel; - int len = 0; + char linelevel; char *c9; char *linepointer; c9 = (char*)memchr(c, '\n', buffer + buflen - c); /* a \n will always be found */ assert(c9); - len = c9 - c; + *c9 = '\0'; /* turn the \n into a string termination */ + if (c9 == c) + goto next_line; /* in /var/log/messages, we need to strip the first part off, upto the 3rd ':' */ - if (syslog_format == yes - || (syslog_format == maybe - && len > sizeof("Jul 4 11:11:41") - && c[3] == ' ' && c[6] == ' ' && c[9] == ':' && c[12] == ':' - && (v = (c[5] | c[7]|c[8] | c[10]|c[11] | c[13]|c[14])) <= '9' - && v >= '0' - && (v = (c[5] & c[7]&c[8] & c[10]&c[11] & c[13]&c[14])) <= '9' - && v >= '0' - ) + /* 01234567890123456 */ + if ((c9 - c) > sizeof("Jul 4 11:11:11 ") + && c[3] == ' ' + && (c[4] == ' ' || isdigit(c[4])) + && isdigit(c[5]) + && c[6] == ' ' + && isdigit(c[7]) + && isdigit(c[8]) + && c[9] == ':' + && isdigit(c[10]) + && isdigit(c[11]) + && c[12] == ':' + && isdigit(c[13]) + && isdigit(c[14]) + && c[15] == ' ' ) { /* It's syslog file, not a bare dmesg */ - syslog_format = yes; - char *c2; - int i; + /* Skip over timestamp */ + c += 16; /* skip non-kernel lines */ - c2 = (char*)memmem(c, len, "kernel:", 7); - if (!c2) - c2 = (char*)memmem(c, len, "abrt:", 5); - if (!c2) + char *kernel_str = strstr(c, "kernel: "); + if (kernel_str == NULL) { + /* if we see our own marker: + * "hostname abrt: Kerneloops: Reported 1 kernel oopses to Abrt" + * we know we submitted everything upto here already */ + if (strstr(c, "abrt:") && strstr(linepointer, "Abrt")) { + linecount = 0; + lines_info_alloc = 0; + free(lines_info); + lines_info = NULL; + } goto next_line; - - /* skip to message in "Jan 01 01:23:45 hostname kernel: message" */ - for (i = 0; i < 3; i++) { - c = (char*)memchr(c, ':', len); - if (!c) - goto next_line; - c++; - len = c9 - c; } - c++; - len--; - } else if (len) { - syslog_format = no; + c = kernel_str + sizeof("kernel: ")-1; } - linepointer = c; linelevel = 0; /* store and remove kernel log level */ - if (len >= 3 && *c == '<' && *(c+2) == '>') { - linelevel = *(c+1); + if (*c == '<' && c[1] && c[2] == '>') { + linelevel = c[1]; c += 3; - len -= 3; - linepointer = c; } /* remove jiffies time stamp counter if present */ if (*c == '[') { char *c2, *c3; - c2 = (char*)memchr(c, '.', len); - c3 = (char*)memchr(c, ']', len); + c2 = strchr(c, '.'); + c3 = strchr(c, ']'); if (c2 && c3 && (c2 < c3) && (c3-c) < 14 && (c2-c) < 8) { c = c3 + 1; if (*c == ' ') c++; - len = c9 - c; - linepointer = c; } } - - assert(c + len == c9); - *c9 = '\0'; /* turn the \n into a string termination */ - - /* if we see our own marker, we know we submitted everything upto here already */ - if (len >= 4 && memmem(linepointer, len, "Abrt", 4)) { - linecount = 0; - lines_info_alloc = 0; - free(lines_info); - lines_info = NULL; - } + linepointer = c; if (linecount >= lines_info_alloc) { lines_info_alloc += REALLOC_CHUNK; |