From 8bc89810c23125ca85142a441ac0b4a7f268eb95 Mon Sep 17 00:00:00 2001 From: Joe Richey Date: Thu, 13 Jun 2019 15:02:07 -0700 Subject: [PATCH 1/6] Add getrandom() bindings on linux and android Closes #659 --- src/unix/linux_like/android/mod.rs | 5 +++++ src/unix/linux_like/linux/mod.rs | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/unix/linux_like/android/mod.rs b/src/unix/linux_like/android/mod.rs index 2662262963c8c..0890eecbf35d4 100644 --- a/src/unix/linux_like/android/mod.rs +++ b/src/unix/linux_like/android/mod.rs @@ -2195,6 +2195,11 @@ extern { pub fn inotify_add_watch(fd: ::c_int, path: *const ::c_char, mask: u32) -> ::c_int; + pub fn getrandom( + buf: *mut u8, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; } cfg_if! { diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index 6d9c5e72576df..d995004302adc 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -2666,6 +2666,11 @@ extern { pub fn inotify_add_watch(fd: ::c_int, path: *const ::c_char, mask: u32) -> ::c_int; + pub fn getrandom( + buf: *mut u8, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; } cfg_if! { From 851e9a1ce1a5fe9670058b6f0c0eb26eece98edf Mon Sep 17 00:00:00 2001 From: Joe Richey Date: Thu, 13 Jun 2019 18:09:17 -0700 Subject: [PATCH 2/6] Use *mut c_void for buffer pointer. --- src/unix/linux_like/android/mod.rs | 2 +- src/unix/linux_like/linux/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/unix/linux_like/android/mod.rs b/src/unix/linux_like/android/mod.rs index 0890eecbf35d4..6e670c9986610 100644 --- a/src/unix/linux_like/android/mod.rs +++ b/src/unix/linux_like/android/mod.rs @@ -2196,7 +2196,7 @@ extern { path: *const ::c_char, mask: u32) -> ::c_int; pub fn getrandom( - buf: *mut u8, + buf: *mut ::c_void, buflen: ::size_t, flags: ::c_uint, ) -> ::ssize_t; diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index d995004302adc..cf0e578c6430b 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -2667,7 +2667,7 @@ extern { path: *const ::c_char, mask: u32) -> ::c_int; pub fn getrandom( - buf: *mut u8, + buf: *mut ::c_void, buflen: ::size_t, flags: ::c_uint, ) -> ::ssize_t; From 45083afd9c1cf3bcbd5deb96e8fbbf9ec07e8b7c Mon Sep 17 00:00:00 2001 From: Joe Richey Date: Thu, 13 Jun 2019 20:38:42 -0700 Subject: [PATCH 3/6] Android doesn't have getrandom() --- src/unix/linux_like/android/mod.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/unix/linux_like/android/mod.rs b/src/unix/linux_like/android/mod.rs index 6e670c9986610..2662262963c8c 100644 --- a/src/unix/linux_like/android/mod.rs +++ b/src/unix/linux_like/android/mod.rs @@ -2195,11 +2195,6 @@ extern { pub fn inotify_add_watch(fd: ::c_int, path: *const ::c_char, mask: u32) -> ::c_int; - pub fn getrandom( - buf: *mut ::c_void, - buflen: ::size_t, - flags: ::c_uint, - ) -> ::ssize_t; } cfg_if! { From 3a7da471b87f13826266226817cdb49892e3ebf6 Mon Sep 17 00:00:00 2001 From: Joe Richey Date: Thu, 13 Jun 2019 23:49:05 -0700 Subject: [PATCH 4/6] Older musl doesn't have getrandom() --- src/unix/linux_like/linux/gnu/mod.rs | 5 +++++ src/unix/linux_like/linux/mod.rs | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index cbca5a32363ee..13f7de5974a68 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -967,6 +967,11 @@ extern { tz: *mut ::timezone) -> ::c_int; pub fn statx(dirfd: ::c_int, pathname: *const c_char, flags: ::c_int, mask: ::c_uint, statxbuf: *mut statx) -> ::c_int; + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; } #[link(name = "util")] diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index cf0e578c6430b..6d9c5e72576df 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -2666,11 +2666,6 @@ extern { pub fn inotify_add_watch(fd: ::c_int, path: *const ::c_char, mask: u32) -> ::c_int; - pub fn getrandom( - buf: *mut ::c_void, - buflen: ::size_t, - flags: ::c_uint, - ) -> ::ssize_t; } cfg_if! { From 457c02d7b5a517cd7499e98582300058ebc71ade Mon Sep 17 00:00:00 2001 From: Joe Richey Date: Fri, 14 Jun 2019 02:21:17 -0700 Subject: [PATCH 5/6] Add getrandom() on non-mips musl --- src/unix/linux_like/linux/musl/b32/arm.rs | 8 ++++++++ src/unix/linux_like/linux/musl/b32/powerpc.rs | 8 ++++++++ src/unix/linux_like/linux/musl/b32/x86.rs | 8 ++++++++ src/unix/linux_like/linux/musl/b64/mod.rs | 8 ++++++++ 4 files changed, 32 insertions(+) diff --git a/src/unix/linux_like/linux/musl/b32/arm.rs b/src/unix/linux_like/linux/musl/b32/arm.rs index 9d79f5b53466a..016f81b9251f8 100644 --- a/src/unix/linux_like/linux/musl/b32/arm.rs +++ b/src/unix/linux_like/linux/musl/b32/arm.rs @@ -152,6 +152,14 @@ s! { } } +extern { + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; +} + pub const SIGSTKSZ: ::size_t = 8192; pub const MINSIGSTKSZ: ::size_t = 2048; diff --git a/src/unix/linux_like/linux/musl/b32/powerpc.rs b/src/unix/linux_like/linux/musl/b32/powerpc.rs index 0ea8e400d7801..6b07e47a9ad9c 100644 --- a/src/unix/linux_like/linux/musl/b32/powerpc.rs +++ b/src/unix/linux_like/linux/musl/b32/powerpc.rs @@ -155,6 +155,14 @@ s! { } } +extern { + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; +} + pub const MADV_SOFT_OFFLINE: ::c_int = 101; pub const SIGSTKSZ: ::size_t = 10240; pub const MINSIGSTKSZ: ::size_t = 4096; diff --git a/src/unix/linux_like/linux/musl/b32/x86.rs b/src/unix/linux_like/linux/musl/b32/x86.rs index b574a414edf74..8ba48da273c43 100644 --- a/src/unix/linux_like/linux/musl/b32/x86.rs +++ b/src/unix/linux_like/linux/musl/b32/x86.rs @@ -167,6 +167,14 @@ s_no_extra_traits!{ } } +extern { + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; +} + cfg_if! { if #[cfg(feature = "extra_traits")] { impl PartialEq for ucontext_t { diff --git a/src/unix/linux_like/linux/musl/b64/mod.rs b/src/unix/linux_like/linux/musl/b64/mod.rs index 34b376695735f..67f2ab1a4bb7e 100644 --- a/src/unix/linux_like/linux/musl/b64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/mod.rs @@ -129,6 +129,14 @@ s! { } } +extern { + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; +} + pub const __SIZEOF_PTHREAD_RWLOCK_T: usize = 56; pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 40; From 14b22c15d08bc6e91ee30a78fab115c8a6b65e50 Mon Sep 17 00:00:00 2001 From: Joe Richey Date: Fri, 14 Jun 2019 03:41:24 -0700 Subject: [PATCH 6/6] Fix style lints --- src/unix/linux_like/linux/musl/b32/arm.rs | 16 ++++++++-------- src/unix/linux_like/linux/musl/b32/powerpc.rs | 16 ++++++++-------- src/unix/linux_like/linux/musl/b32/x86.rs | 16 ++++++++-------- src/unix/linux_like/linux/musl/b64/mod.rs | 16 ++++++++-------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/unix/linux_like/linux/musl/b32/arm.rs b/src/unix/linux_like/linux/musl/b32/arm.rs index 016f81b9251f8..7d6dcfde0d75f 100644 --- a/src/unix/linux_like/linux/musl/b32/arm.rs +++ b/src/unix/linux_like/linux/musl/b32/arm.rs @@ -152,14 +152,6 @@ s! { } } -extern { - pub fn getrandom( - buf: *mut ::c_void, - buflen: ::size_t, - flags: ::c_uint, - ) -> ::ssize_t; -} - pub const SIGSTKSZ: ::size_t = 8192; pub const MINSIGSTKSZ: ::size_t = 2048; @@ -851,3 +843,11 @@ pub const AF_MAX: ::c_int = 45; https://github.com/rust-lang/libc/issues/665" )] pub const PF_MAX: ::c_int = AF_MAX; + +extern { + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; +} diff --git a/src/unix/linux_like/linux/musl/b32/powerpc.rs b/src/unix/linux_like/linux/musl/b32/powerpc.rs index 6b07e47a9ad9c..04999c625e37b 100644 --- a/src/unix/linux_like/linux/musl/b32/powerpc.rs +++ b/src/unix/linux_like/linux/musl/b32/powerpc.rs @@ -155,14 +155,6 @@ s! { } } -extern { - pub fn getrandom( - buf: *mut ::c_void, - buflen: ::size_t, - flags: ::c_uint, - ) -> ::ssize_t; -} - pub const MADV_SOFT_OFFLINE: ::c_int = 101; pub const SIGSTKSZ: ::size_t = 10240; pub const MINSIGSTKSZ: ::size_t = 4096; @@ -877,3 +869,11 @@ pub const AF_MAX: ::c_int = 43; https://github.com/rust-lang/libc/issues/665" )] pub const PF_MAX: ::c_int = AF_MAX; + +extern { + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; +} diff --git a/src/unix/linux_like/linux/musl/b32/x86.rs b/src/unix/linux_like/linux/musl/b32/x86.rs index 8ba48da273c43..3ccf80707b246 100644 --- a/src/unix/linux_like/linux/musl/b32/x86.rs +++ b/src/unix/linux_like/linux/musl/b32/x86.rs @@ -167,14 +167,6 @@ s_no_extra_traits!{ } } -extern { - pub fn getrandom( - buf: *mut ::c_void, - buflen: ::size_t, - flags: ::c_uint, - ) -> ::ssize_t; -} - cfg_if! { if #[cfg(feature = "extra_traits")] { impl PartialEq for ucontext_t { @@ -959,3 +951,11 @@ pub const AF_MAX: ::c_int = 45; https://github.com/rust-lang/libc/issues/665" )] pub const PF_MAX: ::c_int = AF_MAX; + +extern { + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; +} diff --git a/src/unix/linux_like/linux/musl/b64/mod.rs b/src/unix/linux_like/linux/musl/b64/mod.rs index 67f2ab1a4bb7e..12d5c849f6dc4 100644 --- a/src/unix/linux_like/linux/musl/b64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/mod.rs @@ -129,14 +129,6 @@ s! { } } -extern { - pub fn getrandom( - buf: *mut ::c_void, - buflen: ::size_t, - flags: ::c_uint, - ) -> ::ssize_t; -} - pub const __SIZEOF_PTHREAD_RWLOCK_T: usize = 56; pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 40; @@ -320,6 +312,14 @@ pub const VEOF: usize = 4; pub const POLLWRNORM: ::c_short = 0x100; pub const POLLWRBAND: ::c_short = 0x200; +extern { + pub fn getrandom( + buf: *mut ::c_void, + buflen: ::size_t, + flags: ::c_uint, + ) -> ::ssize_t; +} + cfg_if! { if #[cfg(target_arch = "aarch64")] { mod aarch64;