diff --git a/mullvad-api/src/ffi/device.rs b/mullvad-api/src/ffi/device.rs index 87fdfcf98b..9007d6d8df 100644 --- a/mullvad-api/src/ffi/device.rs +++ b/mullvad-api/src/ffi/device.rs @@ -72,7 +72,7 @@ where } } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mullvad_api_device_iter_next( mut iter: MullvadApiDeviceIterator, device_ptr: *mut MullvadApiDevice, @@ -93,12 +93,12 @@ pub extern "C" fn mullvad_api_device_iter_next( true } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mullvad_api_device_iter_drop(iter: MullvadApiDeviceIterator) { iter.drop() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mullvad_api_device_drop(device: MullvadApiDevice) { device.drop() } diff --git a/mullvad-api/src/ffi/error.rs b/mullvad-api/src/ffi/error.rs index 66ffc01220..2468515c25 100644 --- a/mullvad-api/src/ffi/error.rs +++ b/mullvad-api/src/ffi/error.rs @@ -64,7 +64,7 @@ impl MullvadApiError { } } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mullvad_api_error_drop(error: MullvadApiError) { error.drop() } diff --git a/mullvad-api/src/ffi/mod.rs b/mullvad-api/src/ffi/mod.rs index 9677488257..7fc385d145 100644 --- a/mullvad-api/src/ffi/mod.rs +++ b/mullvad-api/src/ffi/mod.rs @@ -7,9 +7,9 @@ use std::{ }; use crate::{ + AccountsProxy, ApiEndpoint, DevicesProxy, proxy::ApiConnectionMode, rest::{self, MullvadRestHandle}, - AccountsProxy, ApiEndpoint, DevicesProxy, }; mod device; @@ -237,7 +237,7 @@ impl FfiClient { /// * `hostname`: pointer to a null-terminated UTF-8 string representing the hostname that will be /// used for TLS validation. /// * `disable_tls`: only valid when built for tests, can be ignored when consumed by Swift. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mullvad_api_client_initialize( client_ptr: *mut MullvadApiClient, api_address_ptr: *const libc::c_char, @@ -275,7 +275,7 @@ pub unsafe extern "C" fn mullvad_api_client_initialize( /// /// * `account_str_ptr`: pointer to nul-terminated UTF-8 string containing the account number of the /// account that will have all of it's devices removed. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mullvad_api_remove_all_devices( client_ptr: MullvadApiClient, account_ptr: *const libc::c_char, @@ -297,7 +297,7 @@ pub unsafe extern "C" fn mullvad_api_remove_all_devices( /// /// * `expiry_unix_timestamp`: a pointer to a signed 64 bit integer. If this function returns no /// error, the expiry timestamp will be written to this pointer. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mullvad_api_get_expiry( client_ptr: MullvadApiClient, account_str_ptr: *const libc::c_char, @@ -325,7 +325,7 @@ pub unsafe extern "C" fn mullvad_api_get_expiry( /// * `device_iter_ptr`: a pointer to a `device::MullvadApiDeviceIterator`. If this function doesn't /// return an error, the pointer will be initialized with a valid instance of /// `device::MullvadApiDeviceIterator`, which can be used to iterate through the devices. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mullvad_api_list_devices( client_ptr: MullvadApiClient, account_str_ptr: *const libc::c_char, @@ -355,7 +355,7 @@ pub unsafe extern "C" fn mullvad_api_list_devices( /// /// * `new_device_ptr`: a pointer to enough memory to allocate a `MullvadApiDevice`. If this /// function doesn't return an error, it will be initialized. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mullvad_api_add_device( client_ptr: MullvadApiClient, account_str_ptr: *const libc::c_char, @@ -385,7 +385,7 @@ pub unsafe extern "C" fn mullvad_api_add_device( /// * `account_str_ptr`: If a new account is created successfully, a pointer to an allocated C /// string containing the new account number will be written to this pointer. It must be freed via /// `mullvad_api_cstring_drop`. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mullvad_api_create_account( client_ptr: MullvadApiClient, account_str_ptr: *mut *const libc::c_char, @@ -414,7 +414,7 @@ pub unsafe extern "C" fn mullvad_api_create_account( /// * `client_ptr`: Must be a valid, initialized instance of `MullvadApiClient` /// /// * `account_str_ptr`: Must be a null-terminated string representing the account to be deleted. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mullvad_api_delete_account( client_ptr: MullvadApiClient, account_str_ptr: *const libc::c_char, @@ -426,7 +426,7 @@ pub unsafe extern "C" fn mullvad_api_delete_account( } } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mullvad_api_client_drop(client: MullvadApiClient) { client.drop() } @@ -436,7 +436,7 @@ pub extern "C" fn mullvad_api_client_drop(client: MullvadApiClient) { /// # Safety /// /// `cstr_ptr` must be a pointer to a string allocated by another `mullvad_api` function. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mullvad_api_cstring_drop(cstr_ptr: *mut libc::c_char) { let _ = unsafe { CString::from_raw(cstr_ptr) }; } diff --git a/mullvad-ios/src/encrypted_dns_proxy.rs b/mullvad-ios/src/encrypted_dns_proxy.rs index f23482f355..3551d74179 100644 --- a/mullvad-ios/src/encrypted_dns_proxy.rs +++ b/mullvad-ios/src/encrypted_dns_proxy.rs @@ -93,7 +93,7 @@ impl EncryptedDnsProxyState { /// /// * The caller must ensure that the pointer to the [domain_name] string contains a nul terminator /// at the end of the string. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn encrypted_dns_proxy_init( domain_name: *const c_char, ) -> *mut EncryptedDnsProxyState { @@ -116,7 +116,7 @@ pub unsafe extern "C" fn encrypted_dns_proxy_init( /// `ptr` must be a valid, exclusive pointer to `EncryptedDnsProxyState`, initialized /// by `encrypted_dns_proxy_init`. This function is not thread safe, and should only be called /// once. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn encrypted_dns_proxy_free(ptr: *mut EncryptedDnsProxyState) { let _ = unsafe { Box::from_raw(ptr) }; } @@ -130,7 +130,7 @@ pub unsafe extern "C" fn encrypted_dns_proxy_free(ptr: *mut EncryptedDnsProxySta /// /// `proxy_handle` will only contain valid values if the return value is zero. It is still valid to /// deallocate the memory. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn encrypted_dns_proxy_start( encrypted_dns_proxy: *mut EncryptedDnsProxyState, proxy_handle: *mut ProxyHandle, @@ -166,7 +166,7 @@ pub unsafe extern "C" fn encrypted_dns_proxy_start( /// # Safety /// `proxy_config` must be a valid pointer to a `ProxyHandle` as initialized by /// [`encrypted_dns_proxy_start`]. It should only ever be called once. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn encrypted_dns_proxy_stop(proxy_config: *mut ProxyHandle) -> i32 { let ptr = unsafe { (*proxy_config).context }; if !ptr.is_null() { diff --git a/mullvad-ios/src/ephemeral_peer_proxy/mod.rs b/mullvad-ios/src/ephemeral_peer_proxy/mod.rs index 6d598c5e40..7318cef649 100644 --- a/mullvad-ios/src/ephemeral_peer_proxy/mod.rs +++ b/mullvad-ios/src/ephemeral_peer_proxy/mod.rs @@ -118,7 +118,7 @@ extern "C" { /// # Safety /// `sender` must be pointing to a valid instance of a `EphemeralPeerCancelToken` created by the /// `PacketTunnelProvider`. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn cancel_ephemeral_peer_exchange( sender: *mut peer_exchange::ExchangeCancelToken, ) { @@ -132,7 +132,7 @@ pub unsafe extern "C" fn cancel_ephemeral_peer_exchange( /// # Safety /// `sender` must be pointing to a valid instance of a `EphemeralPeerCancelToken` created by the /// `PacketTunnelProvider`. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn drop_ephemeral_peer_exchange_token( sender: *mut peer_exchange::ExchangeCancelToken, ) { @@ -148,7 +148,7 @@ pub unsafe extern "C" fn drop_ephemeral_peer_exchange_token( /// function is called, and thus must be copied here. `packet_tunnel` must be valid pointers to a /// packet tunnel, the packet tunnel pointer must outlive the ephemeral peer exchange. /// `cancel_token` should be owned by the caller of this function. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn request_ephemeral_peer( public_key: *const u8, ephemeral_key: *const u8, diff --git a/mullvad-ios/src/lib.rs b/mullvad-ios/src/lib.rs index 61c47803a4..0d88a33df9 100644 --- a/mullvad-ios/src/lib.rs +++ b/mullvad-ios/src/lib.rs @@ -10,7 +10,7 @@ pub struct ProxyHandle { pub port: u16, } -#[no_mangle] +#[unsafe(no_mangle)] pub static CONFIG_SERVICE_PORT: u16 = talpid_tunnel_config_client::CONFIG_SERVICE_PORT; mod ios { diff --git a/mullvad-ios/src/shadowsocks_proxy/ffi.rs b/mullvad-ios/src/shadowsocks_proxy/ffi.rs index de16659851..229993445e 100644 --- a/mullvad-ios/src/shadowsocks_proxy/ffi.rs +++ b/mullvad-ios/src/shadowsocks_proxy/ffi.rs @@ -14,7 +14,7 @@ static INIT_LOGGING: Once = Once::new(); /// /// `proxy_config` must be pointing to a valid memory region for the size of a `ProxyHandle` /// instance. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn start_shadowsocks_proxy( forward_address: *const u8, forward_address_len: usize, @@ -90,7 +90,7 @@ pub unsafe extern "C" fn start_shadowsocks_proxy( /// # Safety /// `proxy_config` must be pointing to a valid instance of a `ProxyInstance`, as instantiated by /// `start_shadowsocks_proxy`. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn stop_shadowsocks_proxy(proxy_config: *mut ProxyHandle) -> i32 { let context_ptr = unsafe { (*proxy_config).context }; if context_ptr.is_null() { diff --git a/mullvad-ios/src/tunnel_obfuscator_proxy/ffi.rs b/mullvad-ios/src/tunnel_obfuscator_proxy/ffi.rs index e9ad7ba794..d36e0c6ff4 100644 --- a/mullvad-ios/src/tunnel_obfuscator_proxy/ffi.rs +++ b/mullvad-ios/src/tunnel_obfuscator_proxy/ffi.rs @@ -14,7 +14,7 @@ pub enum TunnelObfuscatorProtocol { Shadowsocks, } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn start_tunnel_obfuscator_proxy( peer_address: *const u8, peer_address_len: usize, @@ -56,7 +56,7 @@ pub unsafe extern "C" fn start_tunnel_obfuscator_proxy( } } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn stop_tunnel_obfuscator_proxy(proxy_handle: *mut ProxyHandle) -> i32 { let context_ptr = unsafe { (*proxy_handle).context }; if context_ptr.is_null() { diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 8b1018d926..acced273a3 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -73,7 +73,7 @@ struct DaemonContext { /// Spawn Mullvad daemon. There can only be a single instance, which must be shut down using /// `MullvadDaemon.shutdown`. On success, nothing is returned. On error, an exception is thrown. -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_initialize( env: JNIEnv<'_>, _class: JClass<'_>, @@ -121,7 +121,7 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_initial } /// Shut down Mullvad daemon that was initialized using `MullvadDaemon.initialize`. -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_shutdown( _: JNIEnv<'_>, diff --git a/mullvad-jni/src/problem_report.rs b/mullvad-jni/src/problem_report.rs index dc3693cfff..3819e30001 100644 --- a/mullvad-jni/src/problem_report.rs +++ b/mullvad-jni/src/problem_report.rs @@ -10,7 +10,7 @@ use mullvad_api::ApiEndpoint; use std::path::Path; use talpid_types::ErrorExt; -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_mullvadvpn_dataproxy_MullvadProblemReport_collectReport( env: JNIEnv<'_>, @@ -36,7 +36,7 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_dataproxy_MullvadProblemRepor } } -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_mullvadvpn_dataproxy_MullvadProblemReport_sendProblemReport( env: JNIEnv<'_>, diff --git a/mullvad-nsis/src/lib.rs b/mullvad-nsis/src/lib.rs index b97685169f..e47436da5d 100644 --- a/mullvad-nsis/src/lib.rs +++ b/mullvad-nsis/src/lib.rs @@ -23,7 +23,7 @@ const MAX_PATH_SIZE: isize = 32_767; /// SAFETY: path needs to be a windows path encoded as a string of u16 that terminates in 0 (two /// nul-bytes). The string is also not allowed to be greater than `MAX_PATH_SIZE`. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn create_privileged_directory(path: *const u16) -> Status { catch_and_log_unwind(|| { let mut i = 0; @@ -52,7 +52,7 @@ pub unsafe extern "C" fn create_privileged_directory(path: *const u16) -> Status /// is returned, and the required buffer size (in chars) is returned in `buffer_size`. /// On success, `buffer_size` is set to the length of the string, including /// the final null terminator. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn get_system_local_appdata( buffer: *mut u16, buffer_size: *mut usize, @@ -91,7 +91,7 @@ pub unsafe extern "C" fn get_system_local_appdata( /// `InsufficientBufferSize` is returned, and the required buffer size (in /// chars) is returned in `buffer_size`. On success, `buffer_size` is set to the /// length of the string, including the final null terminator. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn get_system_version(buffer: *mut u16, buffer_size: *mut usize) -> Status { use talpid_platform_metadata::version; catch_and_log_unwind(|| { diff --git a/talpid-core/src/connectivity_listener.rs b/talpid-core/src/connectivity_listener.rs index 9bdf4bf87a..767673123e 100644 --- a/talpid-core/src/connectivity_listener.rs +++ b/talpid-core/src/connectivity_listener.rs @@ -157,7 +157,7 @@ impl ConnectivityListener { } /// Entry point for Android Java code to notify the connectivity status. -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_talpid_ConnectivityListener_notifyConnectivityChange( _: JNIEnv<'_>, diff --git a/talpid-routing/src/unix/android.rs b/talpid-routing/src/unix/android.rs index be9f8b7d6a..137e69c1de 100644 --- a/talpid-routing/src/unix/android.rs +++ b/talpid-routing/src/unix/android.rs @@ -161,7 +161,7 @@ fn configured_routes(state: &NetworkState) -> HashSet { } /// Entry point for Android Java code to notify the current default network state. -#[no_mangle] +#[unsafe(no_mangle)] #[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_talpid_ConnectivityListener_notifyDefaultNetworkChange( env: JNIEnv<'_>,