@@ -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} ;
1716use nasl_function_proc_macro:: nasl_function;
1817use std:: os;
18+ use std:: os:: raw:: c_char;
1919use std:: sync:: Mutex ;
2020use std:: { ffi:: CStr , sync:: Arc } ;
2121use 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
203208unsafe impl Send for Krb5 { }
204209unsafe 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