eve: fix C logger signatures for generic callbacks

Several C loggers are registered through a cast to
EveJsonSimpleTxLogFunc, which has an incompatible signature. Clang's
function sanitizer reports this as a call through a pointer to an
incorrect function type.

Change these loggers to the generic callback signature and register them
without casts.

Ticket: 9226
pull/16467/head
Jason Ish 1 week ago committed by Victor Julien
parent 37cc354809
commit 9451642a28

@ -1488,9 +1488,9 @@ uint16_t JsonGetNextLineFromBuffer(const char *buffer, const uint16_t len)
return c == NULL ? len : (uint16_t)(c - buffer + 1); return c == NULL ? len : (uint16_t)(c - buffer + 1);
} }
bool EveFTPDataAddMetadata(void *vtx, SCJsonBuilder *jb) bool EveFTPDataAddMetadata(const void *vtx, void *jb)
{ {
const FtpDataState *ftp_state = (FtpDataState *)vtx; const FtpDataState *ftp_state = vtx;
SCJbOpenObject(jb, "ftp_data"); SCJbOpenObject(jb, "ftp_data");
if (ftp_state->file_name) { if (ftp_state->file_name) {

@ -131,6 +131,6 @@ uint64_t FTPMemuseGlobalCounter(void);
uint64_t FTPMemcapGlobalCounter(void); uint64_t FTPMemcapGlobalCounter(void);
uint16_t JsonGetNextLineFromBuffer(const char *buffer, const uint16_t len); uint16_t JsonGetNextLineFromBuffer(const char *buffer, const uint16_t len);
bool EveFTPDataAddMetadata(void *vtx, SCJsonBuilder *jb); bool EveFTPDataAddMetadata(const void *vtx, void *jb);
#endif /* SURICATA_APP_LAYER_FTP_H */ #endif /* SURICATA_APP_LAYER_FTP_H */

@ -193,7 +193,7 @@ static void JsonDNP3LogResponse(SCJsonBuilder *js, DNP3Transaction *dnp3tx)
SCJbClose(js); SCJbClose(js);
} }
bool AlertJsonDnp3(void *vtx, SCJsonBuilder *js) bool AlertJsonDnp3(const void *vtx, void *js)
{ {
DNP3Transaction *tx = (DNP3Transaction *)vtx; DNP3Transaction *tx = (DNP3Transaction *)vtx;
if (tx->done && tx->buffer == NULL) { if (tx->done && tx->buffer == NULL) {

@ -21,6 +21,6 @@
#include "app-layer-dnp3.h" #include "app-layer-dnp3.h"
void JsonDNP3LogRegister(void); void JsonDNP3LogRegister(void);
bool AlertJsonDnp3(void *vtx, SCJsonBuilder *js); bool AlertJsonDnp3(const void *vtx, void *js);
#endif /* SURICATA_OUTPUT_JSON_DNP3_H */ #endif /* SURICATA_OUTPUT_JSON_DNP3_H */

@ -248,26 +248,26 @@ typedef struct LogDnsLogThread_ {
OutputJsonThreadCtx *ctx; OutputJsonThreadCtx *ctx;
} LogDnsLogThread; } LogDnsLogThread;
bool AlertJsonDns(void *txptr, SCJsonBuilder *js) bool AlertJsonDns(const void *txptr, void *js)
{ {
return SCDnsLogJson( return SCDnsLogJson(
txptr, LOG_FORMAT_DETAILED | LOG_QUERIES | LOG_ANSWERS | LOG_ALL_RRTYPES, js); txptr, LOG_FORMAT_DETAILED | LOG_QUERIES | LOG_ANSWERS | LOG_ALL_RRTYPES, js);
} }
bool AlertJsonDoh2(void *txptr, SCJsonBuilder *js) bool AlertJsonDoh2(const void *txptr, void *js)
{ {
SCJsonBuilderMark mark = { 0, 0, 0 }; SCJsonBuilderMark mark = { 0, 0, 0 };
SCJbGetMark(js, &mark); SCJbGetMark(js, &mark);
// first log HTTP2 part // first log HTTP2 part
bool r = SCHttp2LogJson(txptr, js); bool r = SCHttp2LogJson((void *)txptr, js);
if (!r) { if (!r) {
SCJbRestoreMark(js, &mark); SCJbRestoreMark(js, &mark);
} }
// then log one DNS tx if any, preferring the answer // then log one DNS tx if any, preferring the answer
void *tx_dns = DetectGetInnerTx(txptr, ALPROTO_DOH2, ALPROTO_DOH2, STREAM_TOCLIENT); void *tx_dns = DetectGetInnerTx((void *)txptr, ALPROTO_DOH2, ALPROTO_DOH2, STREAM_TOCLIENT);
if (tx_dns == NULL) { if (tx_dns == NULL) {
tx_dns = DetectGetInnerTx(txptr, ALPROTO_DOH2, ALPROTO_DOH2, STREAM_TOSERVER); tx_dns = DetectGetInnerTx((void *)txptr, ALPROTO_DOH2, ALPROTO_DOH2, STREAM_TOSERVER);
} }
bool r2 = false; bool r2 = false;
if (tx_dns) { if (tx_dns) {

@ -27,7 +27,7 @@
void JsonDnsLogRegister(void); void JsonDnsLogRegister(void);
void JsonDoh2LogRegister(void); void JsonDoh2LogRegister(void);
bool AlertJsonDns(void *vtx, SCJsonBuilder *js); bool AlertJsonDns(const void *vtx, void *js);
bool AlertJsonDoh2(void *vtx, SCJsonBuilder *js); bool AlertJsonDoh2(const void *vtx, void *js);
#endif /* SURICATA_OUTPUT_JSON_DNS_H */ #endif /* SURICATA_OUTPUT_JSON_DNS_H */

@ -44,9 +44,9 @@
#include "app-layer-ftp.h" #include "app-layer-ftp.h"
#include "output-json-ftp.h" #include "output-json-ftp.h"
bool EveFTPLogCommand(void *vtx, SCJsonBuilder *jb) bool EveFTPLogCommand(const void *vtx, void *jb)
{ {
FTPTransaction *tx = vtx; const FTPTransaction *tx = vtx;
/* Preallocate array objects to simplify failure case */ /* Preallocate array objects to simplify failure case */
SCJsonBuilder *js_resplist = NULL; SCJsonBuilder *js_resplist = NULL;
if (!TAILQ_EMPTY(&tx->response_list)) { if (!TAILQ_EMPTY(&tx->response_list)) {

@ -24,6 +24,6 @@
#ifndef SURICATA_OUTPUT_JSON_FTP_H #ifndef SURICATA_OUTPUT_JSON_FTP_H
#define SURICATA_OUTPUT_JSON_FTP_H #define SURICATA_OUTPUT_JSON_FTP_H
bool EveFTPLogCommand(void *vtx, SCJsonBuilder *js); bool EveFTPLogCommand(const void *vtx, void *js);
#endif /* SURICATA_OUTPUT_JSON_FTP_H */ #endif /* SURICATA_OUTPUT_JSON_FTP_H */

@ -41,9 +41,9 @@ typedef struct LogLLMNRLogThread_ {
OutputJsonThreadCtx *ctx; OutputJsonThreadCtx *ctx;
} SCLLMNRLogThread; } SCLLMNRLogThread;
bool AlertJsonLLMNR(void *txptr, SCJsonBuilder *js) bool AlertJsonLLMNR(const void *txptr, void *js)
{ {
return SCLLMNRLogJson(txptr, js); return SCLLMNRLogJson((void *)txptr, js);
} }
static int JsonLLMNRLogger(ThreadVars *tv, void *thread_data, const Packet *p, Flow *f, static int JsonLLMNRLogger(ThreadVars *tv, void *thread_data, const Packet *p, Flow *f,

@ -21,6 +21,6 @@
#define SURICATA_OUTPUT_JSON_LLMNR_H #define SURICATA_OUTPUT_JSON_LLMNR_H
void JsonLLMNRLogRegister(void); void JsonLLMNRLogRegister(void);
bool AlertJsonLLMNR(void *txptr, SCJsonBuilder *js); bool AlertJsonLLMNR(const void *txptr, void *js);
#endif /* SURICATA_OUTPUT_JSON_LLMNR_H */ #endif /* SURICATA_OUTPUT_JSON_LLMNR_H */

@ -39,7 +39,7 @@ typedef struct SCDnsLogThread_ {
OutputJsonThreadCtx *ctx; OutputJsonThreadCtx *ctx;
} SCDnsLogThread; } SCDnsLogThread;
bool AlertJsonMdns(void *txptr, SCJsonBuilder *js) bool AlertJsonMdns(const void *txptr, void *js)
{ {
return SCMdnsLogJson(txptr, js); return SCMdnsLogJson(txptr, js);
} }

@ -19,6 +19,6 @@
#define SURICATA_OUTPUT_JSON_MDNS_H #define SURICATA_OUTPUT_JSON_MDNS_H
void JsonMdnsLogRegister(void); void JsonMdnsLogRegister(void);
bool AlertJsonMdns(void *txptr, SCJsonBuilder *js); bool AlertJsonMdns(const void *txptr, void *js);
#endif /* SURICATA_OUTPUT_JSON_MDNS_H */ #endif /* SURICATA_OUTPUT_JSON_MDNS_H */

@ -59,9 +59,9 @@ typedef struct LogMQTTLogThread_ {
OutputJsonThreadCtx *ctx; OutputJsonThreadCtx *ctx;
} LogMQTTLogThread; } LogMQTTLogThread;
bool JsonMQTTAddMetadata(void *vtx, SCJsonBuilder *js) bool JsonMQTTAddMetadata(const void *vtx, void *js)
{ {
return SCMqttLoggerLog(vtx, MQTT_DEFAULT_FLAGS, MQTT_DEFAULT_MAXLOGLEN, js); return SCMqttLoggerLog((void *)vtx, MQTT_DEFAULT_FLAGS, MQTT_DEFAULT_MAXLOGLEN, js);
} }
static int JsonMQTTLogger(ThreadVars *tv, void *thread_data, static int JsonMQTTLogger(ThreadVars *tv, void *thread_data,

@ -25,6 +25,6 @@
#define SURICATA_OUTPUT_JSON_MQTT_H #define SURICATA_OUTPUT_JSON_MQTT_H
void JsonMQTTLogRegister(void); void JsonMQTTLogRegister(void);
bool JsonMQTTAddMetadata(void *vtx, SCJsonBuilder *js); bool JsonMQTTAddMetadata(const void *vtx, void *js);
#endif /* SURICATA_OUTPUT_JSON_MQTT_H */ #endif /* SURICATA_OUTPUT_JSON_MQTT_H */

@ -58,9 +58,9 @@ typedef struct LogPgsqlLogThread_ {
OutputJsonThreadCtx *ctx; OutputJsonThreadCtx *ctx;
} LogPgsqlLogThread; } LogPgsqlLogThread;
bool JsonPgsqlAddMetadata(void *vtx, SCJsonBuilder *jb) bool JsonPgsqlAddMetadata(const void *vtx, void *jb)
{ {
return SCPgsqlLogger(vtx, PGSQL_DEFAULTS, jb); return SCPgsqlLogger((void *)vtx, PGSQL_DEFAULTS, jb);
} }
static int JsonPgsqlLogger(ThreadVars *tv, void *thread_data, const Packet *p, Flow *f, void *state, static int JsonPgsqlLogger(ThreadVars *tv, void *thread_data, const Packet *p, Flow *f, void *state,

@ -25,6 +25,6 @@
#define SURICATA_OUTPUT_JSON_PGSQL_H #define SURICATA_OUTPUT_JSON_PGSQL_H
void JsonPgsqlLogRegister(void); void JsonPgsqlLogRegister(void);
bool JsonPgsqlAddMetadata(void *vtx, SCJsonBuilder *jb); bool JsonPgsqlAddMetadata(const void *vtx, void *jb);
#endif /* SURICATA_OUTPUT_JSON_PGSQL_H */ #endif /* SURICATA_OUTPUT_JSON_PGSQL_H */

@ -519,7 +519,7 @@ static void JsonTlsLogFields(SCJsonBuilder *js, SSLState *ssl_state, uint64_t fi
} }
} }
bool JsonTlsLogJSONExtended(void *vtx, SCJsonBuilder *tjs) bool JsonTlsLogJSONExtended(const void *vtx, void *tjs)
{ {
SSLState *state = (SSLState *)vtx; SSLState *state = (SSLState *)vtx;
SCJbOpenObject(tjs, "tls"); SCJbOpenObject(tjs, "tls");

@ -29,6 +29,6 @@ void JsonTlsLogRegister(void);
/* For SCJsonBuilder. */ /* For SCJsonBuilder. */
#include "rust.h" #include "rust.h"
bool JsonTlsLogJSONExtended(void *vtx, SCJsonBuilder *js); bool JsonTlsLogJSONExtended(const void *vtx, void *js);
#endif /* SURICATA_OUTPUT_JSON_TLS_H */ #endif /* SURICATA_OUTPUT_JSON_TLS_H */

@ -949,25 +949,23 @@ void OutputRegisterRootLoggers(void)
FatalError("Failed to allocate simple_json_applayer_loggers"); FatalError("Failed to allocate simple_json_applayer_loggers");
} }
// ALPROTO_HTTP1 special: uses some options flags // ALPROTO_HTTP1 special: uses some options flags
RegisterSimpleJsonApplayerLogger(ALPROTO_FTP, (EveJsonSimpleTxLogFunc)EveFTPLogCommand, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_FTP, EveFTPLogCommand, NULL);
// ALPROTO_SMTP special: uses state // ALPROTO_SMTP special: uses state
RegisterSimpleJsonApplayerLogger( RegisterSimpleJsonApplayerLogger(ALPROTO_TLS, JsonTlsLogJSONExtended, NULL);
ALPROTO_TLS, (EveJsonSimpleTxLogFunc)JsonTlsLogJSONExtended, NULL);
// no cast here but done in rust for SSHTransaction // no cast here but done in rust for SSHTransaction
RegisterSimpleJsonApplayerLogger(ALPROTO_SSH, (EveJsonSimpleTxLogFunc)SCSshLogJson, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_SSH, (EveJsonSimpleTxLogFunc)SCSshLogJson, NULL);
// ALPROTO_SMB special: uses state // ALPROTO_SMB special: uses state
// ALPROTO_DCERPC special: uses state // ALPROTO_DCERPC special: uses state
RegisterSimpleJsonApplayerLogger(ALPROTO_DNS, (EveJsonSimpleTxLogFunc)AlertJsonDns, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_DNS, AlertJsonDns, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_MDNS, (EveJsonSimpleTxLogFunc)AlertJsonMdns, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_MDNS, AlertJsonMdns, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_LLMNR, (EveJsonSimpleTxLogFunc)AlertJsonLLMNR, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_LLMNR, AlertJsonLLMNR, NULL);
// either need a cast here or in rust for ModbusTransaction, done here // either need a cast here or in rust for ModbusTransaction, done here
RegisterSimpleJsonApplayerLogger(ALPROTO_MODBUS, (EveJsonSimpleTxLogFunc)SCModbusToJson, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_MODBUS, (EveJsonSimpleTxLogFunc)SCModbusToJson, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_ENIP, (EveJsonSimpleTxLogFunc)SCEnipLoggerLog, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_ENIP, (EveJsonSimpleTxLogFunc)SCEnipLoggerLog, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_DNP3, (EveJsonSimpleTxLogFunc)AlertJsonDnp3, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_DNP3, AlertJsonDnp3, NULL);
// ALPROTO_NFS special: uses state // ALPROTO_NFS special: uses state
// underscore instead of dash for ftp_data // underscore instead of dash for ftp_data
RegisterSimpleJsonApplayerLogger( RegisterSimpleJsonApplayerLogger(ALPROTO_FTPDATA, EveFTPDataAddMetadata, "ftp_data");
ALPROTO_FTPDATA, (EveJsonSimpleTxLogFunc)EveFTPDataAddMetadata, "ftp_data");
RegisterSimpleJsonApplayerLogger( RegisterSimpleJsonApplayerLogger(
ALPROTO_TFTP, (EveJsonSimpleTxLogFunc)SCTftpLogJsonRequest, NULL); ALPROTO_TFTP, (EveJsonSimpleTxLogFunc)SCTftpLogJsonRequest, NULL);
// ALPROTO_IKE special: uses state // ALPROTO_IKE special: uses state
@ -978,14 +976,12 @@ void OutputRegisterRootLoggers(void)
RegisterSimpleJsonApplayerLogger(ALPROTO_SIP, (EveJsonSimpleTxLogFunc)SCSipLogJson, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_SIP, (EveJsonSimpleTxLogFunc)SCSipLogJson, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_RFB, (EveJsonSimpleTxLogFunc)SCRfbJsonLogger, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_RFB, (EveJsonSimpleTxLogFunc)SCRfbJsonLogger, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_POP3, (EveJsonSimpleTxLogFunc)SCPop3LoggerLog, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_POP3, (EveJsonSimpleTxLogFunc)SCPop3LoggerLog, NULL);
RegisterSimpleJsonApplayerLogger( RegisterSimpleJsonApplayerLogger(ALPROTO_MQTT, JsonMQTTAddMetadata, NULL);
ALPROTO_MQTT, (EveJsonSimpleTxLogFunc)JsonMQTTAddMetadata, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_PGSQL, JsonPgsqlAddMetadata, NULL);
RegisterSimpleJsonApplayerLogger(
ALPROTO_PGSQL, (EveJsonSimpleTxLogFunc)JsonPgsqlAddMetadata, NULL);
RegisterSimpleJsonApplayerLogger( RegisterSimpleJsonApplayerLogger(
ALPROTO_WEBSOCKET, (EveJsonSimpleTxLogFunc)SCWebSocketLoggerLog, NULL); ALPROTO_WEBSOCKET, (EveJsonSimpleTxLogFunc)SCWebSocketLoggerLog, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_LDAP, (EveJsonSimpleTxLogFunc)SCLdapLoggerLog, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_LDAP, (EveJsonSimpleTxLogFunc)SCLdapLoggerLog, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_DOH2, (EveJsonSimpleTxLogFunc)AlertJsonDoh2, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_DOH2, AlertJsonDoh2, NULL);
RegisterSimpleJsonApplayerLogger( RegisterSimpleJsonApplayerLogger(
ALPROTO_TEMPLATE, (EveJsonSimpleTxLogFunc)SCTemplateLoggerLog, NULL); ALPROTO_TEMPLATE, (EveJsonSimpleTxLogFunc)SCTemplateLoggerLog, NULL);
RegisterSimpleJsonApplayerLogger(ALPROTO_RDP, (EveJsonSimpleTxLogFunc)SCRdpToJson, NULL); RegisterSimpleJsonApplayerLogger(ALPROTO_RDP, (EveJsonSimpleTxLogFunc)SCRdpToJson, NULL);

Loading…
Cancel
Save