Skip to content

Commit 66c8f56

Browse files
committed
rust/ffi: use ThreadVars wrapper in eve callback
Update the EVE callback registration to pass the safe ThreadVars wrapper instead of a raw pointer. Ticket: OISF#8598
1 parent 2f5b0e3 commit 66c8f56

2 files changed

Lines changed: 13 additions & 9 deletions

File tree

examples/plugins/rust/src/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ unsafe extern "C" fn log_eve_raw(
5454
}
5555

5656
fn log_eve_wrapped(
57-
_tv: *mut sys::ThreadVars,
57+
_tv: &mut ThreadVars,
5858
_p: *const Packet,
5959
f: *mut Flow,
6060
jb: &mut JsonBuilder,

rust/ffi/src/eve.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
use std::ffi::CString;
1919
use std::os::raw::c_void;
2020

21-
pub use suricata_sys::sys::{Flow, Packet, SCEveUserCallbackFn, SCJsonBuilder, ThreadVars};
2221
use suricata_sys::sys::{
23-
SCEveFileType, SCEveFileTypeDeinitFunc, SCEveFileTypeInitFunc, SCEveFileTypeThreadDeinitFunc,
24-
SCEveFileTypeThreadInitFunc, SCEveFileTypeWriteFunc, SCEveRegisterCallback,
25-
SCRegisterEveFileType,
22+
self, SCEveFileType, SCEveFileTypeDeinitFunc, SCEveFileTypeInitFunc,
23+
SCEveFileTypeThreadDeinitFunc, SCEveFileTypeThreadInitFunc, SCEveFileTypeWriteFunc,
24+
SCEveRegisterCallback, SCRegisterEveFileType,
2625
};
26+
pub use suricata_sys::sys::{Flow, Packet, SCEveUserCallbackFn, SCJsonBuilder};
27+
28+
use crate::thread::ThreadVars;
2729

2830
pub struct EveFileType {
2931
pub name: &'static str,
@@ -111,7 +113,7 @@ impl EveFileType {
111113
pub fn register_callback<F>(callback: F) -> Result<(), &'static str>
112114
where
113115
F: Fn(
114-
*mut ThreadVars,
116+
&mut ThreadVars,
115117
*const Packet,
116118
*mut Flow,
117119
&mut crate::jsonbuilder::JsonBuilder,
@@ -134,10 +136,11 @@ where
134136
/// Internal wrapper used to adapt the C EVE callback to a Rust
135137
/// closure callback.
136138
unsafe extern "C" fn callback_wrapper<F>(
137-
tv: *mut ThreadVars, p: *const Packet, f: *mut Flow, jb: *mut SCJsonBuilder, user: *mut c_void,
139+
tv: *mut sys::ThreadVars, p: *const Packet, f: *mut Flow, jb: *mut SCJsonBuilder,
140+
user: *mut c_void,
138141
) where
139142
F: Fn(
140-
*mut ThreadVars,
143+
&mut ThreadVars,
141144
*const Packet,
142145
*mut Flow,
143146
&mut crate::jsonbuilder::JsonBuilder,
@@ -147,9 +150,10 @@ unsafe extern "C" fn callback_wrapper<F>(
147150
+ 'static,
148151
{
149152
let callback = &*(user as *const F);
153+
let mut tv = ThreadVars::from_ptr(tv);
150154
let mut jb = crate::jsonbuilder::JsonBuilder::from_raw(jb);
151155
let mark = jb.get_mark();
152-
if callback(tv, p, f, &mut jb).is_err() {
156+
if callback(&mut tv, p, f, &mut jb).is_err() {
153157
let _ = jb.restore_mark(&mark);
154158
}
155159
}

0 commit comments

Comments
 (0)