Skip to content

Commit 7f09646

Browse files
committed
fix(csysdig): don't let syslog parse enter events
Signed-off-by: Roberto Scolaro <roberto.scolaro21@gmail.com>
1 parent 0d3e86d commit 7f09646

File tree

3 files changed

+41
-24
lines changed

3 files changed

+41
-24
lines changed

userspace/sysdig/csysdig.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,17 @@ captureinfo do_inspect(sinsp* inspector,
283283

284284
syslog_decoder->reset();
285285
res = inspector->next(&ev);
286-
syslog_decoder->parse(ev);
286+
if (ev)
287+
{
288+
const uint16_t etype = ev->get_scap_evt()->type;
289+
if (etype == PPME_SYSCALL_WRITE_X || etype == PPME_SYSCALL_WRITEV_X ||
290+
etype == PPME_SYSCALL_PWRITE_X || etype == PPME_SYSCALL_PWRITEV_X ||
291+
etype == PPME_SOCKET_SEND_X || etype == PPME_SOCKET_SENDTO_X ||
292+
etype == PPME_SOCKET_SENDMSG_X || etype == PPME_SOCKET_SENDMMSG_X)
293+
{
294+
syslog_decoder->parse(ev);
295+
}
296+
}
287297

288298
if(res == SCAP_TIMEOUT || res == SCAP_FILTERED_EVENT)
289299
{

userspace/sysdig/sysdig.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,17 @@ captureinfo do_inspect(sinsp *inspector, sinsp_cycledumper *dumper,
745745
}
746746
syslog_decoder->reset();
747747
res = inspector->next(&ev);
748-
syslog_decoder->parse(ev);
748+
if (ev)
749+
{
750+
const uint16_t etype = ev->get_scap_evt()->type;
751+
if (etype == PPME_SYSCALL_WRITE_X || etype == PPME_SYSCALL_WRITEV_X ||
752+
etype == PPME_SYSCALL_PWRITE_X || etype == PPME_SYSCALL_PWRITEV_X ||
753+
etype == PPME_SOCKET_SEND_X || etype == PPME_SOCKET_SENDTO_X ||
754+
etype == PPME_SOCKET_SENDMSG_X || etype == PPME_SOCKET_SENDMMSG_X)
755+
{
756+
syslog_decoder->parse(ev);
757+
}
758+
}
749759

750760
if(dumper && ev && res != SCAP_EOF)
751761
{

userspace/sysdig/utils/sinsp_syslog.cpp

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -76,34 +76,31 @@ std::string sinsp_syslog_decoder::get_info_line() const {
7676
}
7777

7878
void sinsp_syslog_decoder::parse(sinsp_evt* evt) {
79-
if(!evt || !evt->get_fd_info()) {
79+
const sinsp_evt_param *parinfo = nullptr;
80+
uint16_t etype = evt->get_scap_evt()->type;
81+
82+
if((etype == PPME_SOCKET_SENDMMSG_X) &&
83+
evt->get_num_params() == 0) {
8084
return;
8185
}
8286

87+
if (evt->get_syscall_return_value() < 0) {
88+
return;
89+
}
90+
8391
// Check if this is a syslog fd
84-
if(!evt->get_fd_info()->is_syslog()) {
92+
if(evt->get_fd_info() == nullptr || !evt->get_fd_info()->is_syslog()) {
8593
return;
8694
}
8795

88-
// Extract the data buffer based on event type
89-
uint16_t etype = evt->get_type();
90-
const sinsp_evt_param* parinfo = nullptr;
91-
9296
// Determine which parameter contains the data based on event type
93-
if(etype == PPME_SOCKET_SENDMMSG_X) {
94-
parinfo = evt->get_param(2);
95-
} else if(etype == PPME_SYSCALL_READV_X || etype == PPME_SYSCALL_PREADV_X ||
96-
etype == PPME_SOCKET_RECVMSG_X) {
97-
parinfo = evt->get_param(2);
98-
} else if(etype == PPME_SOCKET_RECVMMSG_X) {
99-
parinfo = evt->get_param(3);
100-
} else {
101-
parinfo = evt->get_param(1);
102-
}
103-
104-
if(parinfo) {
105-
const char* data = parinfo->m_val;
106-
uint32_t datalen = parinfo->m_len;
107-
parse_data(data, datalen);
108-
}
97+
if(etype == PPME_SOCKET_SENDMMSG_X) {
98+
parinfo = evt->get_param(3);
99+
} else {
100+
parinfo = evt->get_param(1);
101+
}
102+
103+
const char* data = parinfo->m_val;
104+
uint32_t datalen = parinfo->m_len;
105+
parse_data(data, datalen);
109106
}

0 commit comments

Comments
 (0)