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);
}
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");
if (ftp_state->file_name) {

@ -131,6 +131,6 @@ uint64_t FTPMemuseGlobalCounter(void);
uint64_t FTPMemcapGlobalCounter(void);
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 */

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

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

@ -248,26 +248,26 @@ typedef struct LogDnsLogThread_ {
OutputJsonThreadCtx *ctx;
} LogDnsLogThread;
bool AlertJsonDns(void *txptr, SCJsonBuilder *js)
bool AlertJsonDns(const void *txptr, void *js)
{
return SCDnsLogJson(
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 };
SCJbGetMark(js, &mark);
// first log HTTP2 part
bool r = SCHttp2LogJson(txptr, js);
bool r = SCHttp2LogJson((void *)txptr, js);
if (!r) {
SCJbRestoreMark(js, &mark);
}
// 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) {
tx_dns = DetectGetInnerTx(txptr, ALPROTO_DOH2, ALPROTO_DOH2, STREAM_TOSERVER);
tx_dns = DetectGetInnerTx((void *)txptr, ALPROTO_DOH2, ALPROTO_DOH2, STREAM_TOSERVER);
}
bool r2 = false;
if (tx_dns) {

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

@ -44,9 +44,9 @@
#include "app-layer-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 */
SCJsonBuilder *js_resplist = NULL;
if (!TAILQ_EMPTY(&tx->response_list)) {

@ -24,6 +24,6 @@
#ifndef 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 */

@ -41,9 +41,9 @@ typedef struct LogLLMNRLogThread_ {
OutputJsonThreadCtx *ctx;
} 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,

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

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

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

@ -59,9 +59,9 @@ typedef struct LogMQTTLogThread_ {
OutputJsonThreadCtx *ctx;
} 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,

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

@ -58,9 +58,9 @@ typedef struct LogPgsqlLogThread_ {
OutputJsonThreadCtx *ctx;
} 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,

@ -25,6 +25,6 @@
#define SURICATA_OUTPUT_JSON_PGSQL_H
void JsonPgsqlLogRegister(void);
bool JsonPgsqlAddMetadata(void *vtx, SCJsonBuilder *jb);
bool JsonPgsqlAddMetadata(const void *vtx, void *jb);
#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;
SCJbOpenObject(tjs, "tls");

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

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

Loading…
Cancel
Save