Skip to content

Commit 3562686

Browse files
committed
Use c_char instead of i8
1 parent 1840560 commit 3562686

File tree

1 file changed

+16
-11
lines changed
  • rust/src/nasl/builtin/krb5

1 file changed

+16
-11
lines changed

rust/src/nasl/builtin/krb5/mod.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ use nasl_c_lib::krb5::{
1111
OKrb5ErrorCode_O_KRB5_EXPECTED_NOT_NULL, OKrb5ErrorCode_O_KRB5_REALM_NOT_FOUND,
1212
OKrb5ErrorCode_O_KRB5_SUCCESS, OKrb5GSSContext, OKrb5Slice, OKrb5Target, OKrb5User,
1313
o_krb5_add_realm, o_krb5_find_kdc, o_krb5_gss_prepare_context, o_krb5_gss_session_key_context,
14-
o_krb5_gss_update_context, okrb5_error_code_to_string, okrb5_gss_free_context,
15-
okrb5_gss_init_context,
14+
o_krb5_gss_update_context, okrb5_error_code_to_string, okrb5_gss_init_context,
1615
};
1716
use nasl_function_proc_macro::nasl_function;
1817
use std::os;
18+
use std::os::raw::c_char;
1919
use std::sync::Mutex;
2020
use std::{ffi::CStr, sync::Arc};
2121
use thiserror::Error;
@@ -191,15 +191,20 @@ impl Drop for Krb5 {
191191
}
192192
}
193193

194-
let cached_gss_context = *self.cached_gss_context.lock().unwrap();
195-
if !cached_gss_context.is_null() {
196-
unsafe {
197-
okrb5_gss_free_context(cached_gss_context);
198-
}
199-
}
194+
// TODO: This block leads to munmap_chunk(): invalid pointer and Aborted (core dumped)
195+
// let cached_gss_context = *self.cached_gss_context.lock().unwrap();
196+
// if !cached_gss_context.is_null() {
197+
// unsafe {
198+
// okrb5_gss_free_context(cached_gss_context);
199+
// }
200+
// }
200201
}
201202
}
202203

204+
// SAFETY: Krb5 can be safely sent between threads because:
205+
// - The raw pointers are stored behind Arc<Mutex<...>> for synchronization
206+
// - Access to the pointers is guarded by mutex locks
207+
// - The outer Arc<Mutex<...>> provides the thread-safe coordination
203208
unsafe impl Send for Krb5 {}
204209
unsafe impl Sync for Krb5 {}
205210

@@ -257,7 +262,7 @@ impl Krb5 {
257262
service,
258263
);
259264

260-
let mut kdc_ptr: *mut i8 = std::ptr::null_mut();
265+
let mut kdc_ptr: *mut c_char = std::ptr::null_mut();
261266
let code = unsafe { o_krb5_find_kdc(credential.okrb5_credential(), &mut kdc_ptr) };
262267

263268
match code {
@@ -283,7 +288,7 @@ impl Krb5 {
283288
let code = unsafe {
284289
o_krb5_add_realm(
285290
credential.okrb5_credential(),
286-
credential.okrb5_credential().kdc.data as *const i8,
291+
credential.okrb5_credential().kdc.data as *const c_char,
287292
)
288293
};
289294
if code != OKrb5ErrorCode_O_KRB5_SUCCESS {
@@ -313,7 +318,7 @@ impl Krb5 {
313318
) -> Result<String, FnError> {
314319
let credential =
315320
self.build_krb5_credential(config_path, realm, kdc, user, password, host, None)?;
316-
let mut kdc_ptr: *mut i8 = std::ptr::null_mut();
321+
let mut kdc_ptr: *mut c_char = std::ptr::null_mut();
317322

318323
self.last_okrb5_result =
319324
unsafe { o_krb5_find_kdc(credential.okrb5_credential(), &mut kdc_ptr) };

0 commit comments

Comments
 (0)