From daf075efd8fb7e6db429a941c1125383c8e289dd Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 14:33:03 +0300 Subject: [PATCH 01/17] Add AF_ALG constants and structures --- src/unix/notbsd/mod.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/unix/notbsd/mod.rs b/src/unix/notbsd/mod.rs index baabd6e8..f1b6d37f 100644 --- a/src/unix/notbsd/mod.rs +++ b/src/unix/notbsd/mod.rs @@ -45,6 +45,19 @@ s! { pub sin6_scope_id: u32, } + pub struct sockaddr_alg { + pub salg_family: sa_family_t, + pub salg_type: [u8; 14], + pub salg_feat: u32, + pub salg_mask: u32, + pub salg_name: [u8; 64], + } + + pub struct af_alg_iv { + pub ivlen: u32, + pub iv: [u8; 0], + } + pub struct addrinfo { pub ai_flags: ::c_int, pub ai_family: ::c_int, @@ -657,6 +670,7 @@ pub const SOL_DCCP: ::c_int = 269; pub const SOL_NETLINK: ::c_int = 270; pub const SOL_TIPC: ::c_int = 271; pub const SOL_BLUETOOTH: ::c_int = 274; +pub const SOL_ALG: ::c_int = 279; pub const AF_UNSPEC: ::c_int = 0; pub const AF_UNIX: ::c_int = 1; @@ -1128,6 +1142,15 @@ pub const ARPHRD_IEEE802154: u16 = 804; pub const ARPHRD_VOID: u16 = 0xFFFF; pub const ARPHRD_NONE: u16 = 0xFFFE; +pub const ALG_SET_KEY: ::c_int = 1; +pub const ALG_SET_IV: ::c_int = 2; +pub const ALG_SET_OP: ::c_int = 3; +pub const ALG_SET_AEAD_ASSOCLEN: ::c_int = 4; +pub const ALG_SET_AEAD_AUTHSIZE: ::c_int = 5; + +pub const ALG_OP_DECRYPT: ::c_int = 0; +pub const ALG_OP_ENCRYPT: ::c_int = 1; + fn CMSG_ALIGN(len: usize) -> usize { len + mem::size_of::() - 1 & !(mem::size_of::() - 1) } From 4a6cb83b21967b4be0a8ea5958393c2fbc4de0d1 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 15:41:30 +0300 Subject: [PATCH 02/17] fixed some build errors --- src/unix/notbsd/linux/other/mod.rs | 1 - src/unix/notbsd/mod.rs | 26 +++++++++++++------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/unix/notbsd/linux/other/mod.rs b/src/unix/notbsd/linux/other/mod.rs index 497ea6d7..28630e18 100644 --- a/src/unix/notbsd/linux/other/mod.rs +++ b/src/unix/notbsd/linux/other/mod.rs @@ -321,7 +321,6 @@ pub const SOL_PNPIPE: ::c_int = 275; pub const SOL_RDS: ::c_int = 276; pub const SOL_IUCV: ::c_int = 277; pub const SOL_CAIF: ::c_int = 278; -pub const SOL_ALG: ::c_int = 279; pub const SOL_NFC: ::c_int = 280; pub const SOL_XDP: ::c_int = 283; diff --git a/src/unix/notbsd/mod.rs b/src/unix/notbsd/mod.rs index f1b6d37f..22d4bcb4 100644 --- a/src/unix/notbsd/mod.rs +++ b/src/unix/notbsd/mod.rs @@ -45,19 +45,6 @@ s! { pub sin6_scope_id: u32, } - pub struct sockaddr_alg { - pub salg_family: sa_family_t, - pub salg_type: [u8; 14], - pub salg_feat: u32, - pub salg_mask: u32, - pub salg_name: [u8; 64], - } - - pub struct af_alg_iv { - pub ivlen: u32, - pub iv: [u8; 0], - } - pub struct addrinfo { pub ai_flags: ::c_int, pub ai_family: ::c_int, @@ -253,6 +240,19 @@ s_no_extra_traits!{ __ss_pad2: [u8; 128 - 2 * 8], } + pub struct sockaddr_alg { + pub salg_family: sa_family_t, + pub salg_type: [::c_uchar; 14], + pub salg_feat: u32, + pub salg_mask: u32, + pub salg_name: [::c_uchar; 64], + } + + pub struct af_alg_iv { + pub ivlen: u32, + pub iv: [::c_uchar; 0], + } + pub struct utsname { pub sysname: [::c_char; 65], pub nodename: [::c_char; 65], From 32226f5d8527fb45321ea045da24a966dca922df Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 18:19:29 +0300 Subject: [PATCH 03/17] Include if_alg.h. Limit AF_ALG constants to only linux and android. --- libc-test/build.rs | 3 ++ src/unix/notbsd/mod.rs | 84 +++++++++++++++++++++++++++++++++++------- 2 files changed, 74 insertions(+), 13 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index e0bd795b..745cd46c 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -102,6 +102,9 @@ fn do_ctest() { cfg.header("net/route.h"); cfg.header("net/if_arp.h"); } + if linux || android { + cfg.header("linux/if_alg.h"); + } cfg.header("netdb.h"); cfg.header("netinet/in.h"); cfg.header("netinet/ip.h"); diff --git a/src/unix/notbsd/mod.rs b/src/unix/notbsd/mod.rs index 22d4bcb4..9a63b4a7 100644 --- a/src/unix/notbsd/mod.rs +++ b/src/unix/notbsd/mod.rs @@ -209,6 +209,13 @@ s! { pub ar_pln: u8, pub ar_op: u16, } + + #[cfg(any(target_os = "linux", target_os = "android"))] + pub struct af_alg_iv { + pub ivlen: u32, + pub iv: [::c_uchar; 0], + } + } s_no_extra_traits!{ @@ -240,19 +247,6 @@ s_no_extra_traits!{ __ss_pad2: [u8; 128 - 2 * 8], } - pub struct sockaddr_alg { - pub salg_family: sa_family_t, - pub salg_type: [::c_uchar; 14], - pub salg_feat: u32, - pub salg_mask: u32, - pub salg_name: [::c_uchar; 64], - } - - pub struct af_alg_iv { - pub ivlen: u32, - pub iv: [::c_uchar; 0], - } - pub struct utsname { pub sysname: [::c_char; 65], pub nodename: [::c_char; 65], @@ -261,6 +255,16 @@ s_no_extra_traits!{ pub machine: [::c_char; 65], pub domainname: [::c_char; 65] } + + #[cfg(any(target_os = "linux", target_os = "android"))] + pub struct sockaddr_alg { + pub salg_family: sa_family_t, + pub salg_type: [::c_uchar; 14], + pub salg_feat: u32, + pub salg_mask: u32, + pub salg_name: [::c_uchar; 64], + } + } cfg_if! { @@ -324,6 +328,52 @@ cfg_if! { } } + #[cfg(any(target_os = "linux", target_os = "android"))] + impl PartialEq for sockaddr_alg { + fn eq(&self, other: &sockaddr_alg) -> bool { + self.salg_family == other.salg_family + && self + .salg_type + .iter() + .zip(other.salg_type.iter()) + .all(|(a, b)| a == b) + && self.salg_feat == other.salg_feat + && self.salg_mask == other.salg_mask + && self + .salg_name + .iter() + .zip(other.salg_name.iter()) + .all(|(a, b)| a == b) + } + } + + #[cfg(any(target_os = "linux", target_os = "android"))] + impl Eq for sockaddr_alg {} + + #[cfg(any(target_os = "linux", target_os = "android"))] + impl ::fmt::Debug for sockaddr_alg { + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { + f.debug_struct("sockaddr_alg") + .field("salg_family", &self.salg_family) +// .field("salg_type", &self.salg_type) + .field("salg_feat", &self.salg_feat) + .field("salg_mask", &self.salg_mask) +// .field("salg_name", &self.salg_name) + .finish() + } + } + + #[cfg(any(target_os = "linux", target_os = "android"))] + impl ::hash::Hash for sockaddr_alg { + fn hash(&self, state: &mut H) { + self.salg_family.hash(state); + self.salg_type.hash(state); + self.salg_feat.hash(state); + self.salg_mask.hash(state); + self.salg_name.hash(state); + } + } + impl PartialEq for utsname { fn eq(&self, other: &utsname) -> bool { self.sysname @@ -670,6 +720,7 @@ pub const SOL_DCCP: ::c_int = 269; pub const SOL_NETLINK: ::c_int = 270; pub const SOL_TIPC: ::c_int = 271; pub const SOL_BLUETOOTH: ::c_int = 274; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const SOL_ALG: ::c_int = 279; pub const AF_UNSPEC: ::c_int = 0; @@ -1142,13 +1193,20 @@ pub const ARPHRD_IEEE802154: u16 = 804; pub const ARPHRD_VOID: u16 = 0xFFFF; pub const ARPHRD_NONE: u16 = 0xFFFE; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_KEY: ::c_int = 1; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_IV: ::c_int = 2; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_OP: ::c_int = 3; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_AEAD_ASSOCLEN: ::c_int = 4; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_AEAD_AUTHSIZE: ::c_int = 5; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_OP_DECRYPT: ::c_int = 0; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_OP_ENCRYPT: ::c_int = 1; fn CMSG_ALIGN(len: usize) -> usize { From 97ca63fd37c87ea56335f5f5869ace03885f2e40 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 18:50:07 +0300 Subject: [PATCH 04/17] Move AF_ALG constants and structs to both android and linux --- src/unix/notbsd/android/mod.rs | 68 +++++++++++++++++++++++++++++ src/unix/notbsd/linux/mod.rs | 67 ++++++++++++++++++++++++++++ src/unix/notbsd/mod.rs | 80 ---------------------------------- 3 files changed, 135 insertions(+), 80 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 2213b75b..9a55a9cc 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -192,6 +192,7 @@ s! { pub ipi6_addr: ::in6_addr, pub ipi6_ifindex: ::c_int, } + } s_no_extra_traits!{ @@ -238,6 +239,20 @@ s_no_extra_traits!{ pub ut_addr_v6: [::int32_t; 4], unused: [::c_char; 20], } + + pub struct sockaddr_alg { + pub salg_family: sa_family_t, + pub salg_type: [::c_uchar; 14], + pub salg_feat: u32, + pub salg_mask: u32, + pub salg_name: [::c_uchar; 64], + } + + pub struct af_alg_iv { + pub ivlen: u32, + pub iv: [::c_uchar; 0], + } + } cfg_if! { @@ -451,6 +466,48 @@ cfg_if! { self.unused.hash(state); } } + + impl PartialEq for sockaddr_alg { + fn eq(&self, other: &sockaddr_alg) -> bool { + self.salg_family == other.salg_family + && self + .salg_type + .iter() + .zip(other.salg_type.iter()) + .all(|(a, b)| a == b) + && self.salg_feat == other.salg_feat + && self.salg_mask == other.salg_mask + && self + .salg_name + .iter() + .zip(other.salg_name.iter()) + .all(|(a, b)| a == b) + } + } + + impl Eq for sockaddr_alg {} + + impl ::fmt::Debug for sockaddr_alg { + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { + f.debug_struct("sockaddr_alg") + .field("salg_family", &self.salg_family) +// .field("salg_type", &self.salg_type) + .field("salg_feat", &self.salg_feat) + .field("salg_mask", &self.salg_mask) +// .field("salg_name", &self.salg_name) + .finish() + } + } + + impl ::hash::Hash for sockaddr_alg { + fn hash(&self, state: &mut H) { + self.salg_family.hash(state); + self.salg_type.hash(state); + self.salg_feat.hash(state); + self.salg_mask.hash(state); + self.salg_name.hash(state); + } + } } } @@ -822,6 +879,7 @@ pub const SOL_AX25: ::c_int = 257; pub const SOL_ATALK: ::c_int = 258; pub const SOL_NETROM: ::c_int = 259; pub const SOL_ROSE: ::c_int = 260; +pub const SOL_ALG: ::c_int = 279; #[doc(hidden)] pub const AF_MAX: ::c_int = 43; @@ -1690,6 +1748,16 @@ pub const MODULE_INIT_IGNORE_VERMAGIC: ::c_uint = 0x0002; // Similarity to Linux it's not used but defined for compatibility. pub const ENOATTR: ::c_int = ::ENODATA; +// linux/if_alg.h +pub const ALG_SET_KEY: ::c_int = 1; +pub const ALG_SET_IV: ::c_int = 2; +pub const ALG_SET_OP: ::c_int = 3; +pub const ALG_SET_AEAD_ASSOCLEN: ::c_int = 4; +pub const ALG_SET_AEAD_AUTHSIZE: ::c_int = 5; + +pub const ALG_OP_DECRYPT: ::c_int = 0; +pub const ALG_OP_ENCRYPT: ::c_int = 1; + f! { pub fn CMSG_NXTHDR(mhdr: *const msghdr, cmsg: *const cmsghdr) -> *mut cmsghdr { diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index 03192e62..c371325a 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -507,6 +507,11 @@ s! { pub cookie: ::uint32_t, pub len: ::uint32_t } + + pub struct af_alg_iv { + pub ivlen: u32, + pub iv: [::c_uchar; 0], + } } s_no_extra_traits!{ @@ -525,6 +530,15 @@ s_no_extra_traits!{ pub d_type: ::c_uchar, pub d_name: [::c_char; 256], } + + pub struct sockaddr_alg { + pub salg_family: sa_family_t, + pub salg_type: [::c_uchar; 14], + pub salg_feat: u32, + pub salg_mask: u32, + pub salg_name: [::c_uchar; 64], + } + } cfg_if! { @@ -670,6 +684,49 @@ cfg_if! { self.size.hash(state); } } + + + impl PartialEq for sockaddr_alg { + fn eq(&self, other: &sockaddr_alg) -> bool { + self.salg_family == other.salg_family + && self + .salg_type + .iter() + .zip(other.salg_type.iter()) + .all(|(a, b)| a == b) + && self.salg_feat == other.salg_feat + && self.salg_mask == other.salg_mask + && self + .salg_name + .iter() + .zip(other.salg_name.iter()) + .all(|(a, b)| a == b) + } + } + + impl Eq for sockaddr_alg {} + + impl ::fmt::Debug for sockaddr_alg { + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { + f.debug_struct("sockaddr_alg") + .field("salg_family", &self.salg_family) +// .field("salg_type", &self.salg_type) + .field("salg_feat", &self.salg_feat) + .field("salg_mask", &self.salg_mask) +// .field("salg_name", &self.salg_name) + .finish() + } + } + + impl ::hash::Hash for sockaddr_alg { + fn hash(&self, state: &mut H) { + self.salg_family.hash(state); + self.salg_type.hash(state); + self.salg_feat.hash(state); + self.salg_mask.hash(state); + self.salg_name.hash(state); + } + } } } @@ -1751,6 +1808,16 @@ pub const SOF_TIMESTAMPING_SOFTWARE: ::c_uint = 1 << 4; pub const SOF_TIMESTAMPING_SYS_HARDWARE: ::c_uint = 1 << 5; pub const SOF_TIMESTAMPING_RAW_HARDWARE: ::c_uint = 1 << 6; +// linux/if_alg.h +pub const ALG_SET_KEY: ::c_int = 1; +pub const ALG_SET_IV: ::c_int = 2; +pub const ALG_SET_OP: ::c_int = 3; +pub const ALG_SET_AEAD_ASSOCLEN: ::c_int = 4; +pub const ALG_SET_AEAD_AUTHSIZE: ::c_int = 5; + +pub const ALG_OP_DECRYPT: ::c_int = 0; +pub const ALG_OP_ENCRYPT: ::c_int = 1; + f! { pub fn CMSG_NXTHDR(mhdr: *const msghdr, cmsg: *const cmsghdr) -> *mut cmsghdr { diff --git a/src/unix/notbsd/mod.rs b/src/unix/notbsd/mod.rs index 9a63b4a7..a4540f82 100644 --- a/src/unix/notbsd/mod.rs +++ b/src/unix/notbsd/mod.rs @@ -209,13 +209,6 @@ s! { pub ar_pln: u8, pub ar_op: u16, } - - #[cfg(any(target_os = "linux", target_os = "android"))] - pub struct af_alg_iv { - pub ivlen: u32, - pub iv: [::c_uchar; 0], - } - } s_no_extra_traits!{ @@ -255,16 +248,6 @@ s_no_extra_traits!{ pub machine: [::c_char; 65], pub domainname: [::c_char; 65] } - - #[cfg(any(target_os = "linux", target_os = "android"))] - pub struct sockaddr_alg { - pub salg_family: sa_family_t, - pub salg_type: [::c_uchar; 14], - pub salg_feat: u32, - pub salg_mask: u32, - pub salg_name: [::c_uchar; 64], - } - } cfg_if! { @@ -328,52 +311,6 @@ cfg_if! { } } - #[cfg(any(target_os = "linux", target_os = "android"))] - impl PartialEq for sockaddr_alg { - fn eq(&self, other: &sockaddr_alg) -> bool { - self.salg_family == other.salg_family - && self - .salg_type - .iter() - .zip(other.salg_type.iter()) - .all(|(a, b)| a == b) - && self.salg_feat == other.salg_feat - && self.salg_mask == other.salg_mask - && self - .salg_name - .iter() - .zip(other.salg_name.iter()) - .all(|(a, b)| a == b) - } - } - - #[cfg(any(target_os = "linux", target_os = "android"))] - impl Eq for sockaddr_alg {} - - #[cfg(any(target_os = "linux", target_os = "android"))] - impl ::fmt::Debug for sockaddr_alg { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("sockaddr_alg") - .field("salg_family", &self.salg_family) -// .field("salg_type", &self.salg_type) - .field("salg_feat", &self.salg_feat) - .field("salg_mask", &self.salg_mask) -// .field("salg_name", &self.salg_name) - .finish() - } - } - - #[cfg(any(target_os = "linux", target_os = "android"))] - impl ::hash::Hash for sockaddr_alg { - fn hash(&self, state: &mut H) { - self.salg_family.hash(state); - self.salg_type.hash(state); - self.salg_feat.hash(state); - self.salg_mask.hash(state); - self.salg_name.hash(state); - } - } - impl PartialEq for utsname { fn eq(&self, other: &utsname) -> bool { self.sysname @@ -720,7 +657,6 @@ pub const SOL_DCCP: ::c_int = 269; pub const SOL_NETLINK: ::c_int = 270; pub const SOL_TIPC: ::c_int = 271; pub const SOL_BLUETOOTH: ::c_int = 274; -#[cfg(any(target_os = "linux", target_os = "android"))] pub const SOL_ALG: ::c_int = 279; pub const AF_UNSPEC: ::c_int = 0; @@ -1193,22 +1129,6 @@ pub const ARPHRD_IEEE802154: u16 = 804; pub const ARPHRD_VOID: u16 = 0xFFFF; pub const ARPHRD_NONE: u16 = 0xFFFE; -#[cfg(any(target_os = "linux", target_os = "android"))] -pub const ALG_SET_KEY: ::c_int = 1; -#[cfg(any(target_os = "linux", target_os = "android"))] -pub const ALG_SET_IV: ::c_int = 2; -#[cfg(any(target_os = "linux", target_os = "android"))] -pub const ALG_SET_OP: ::c_int = 3; -#[cfg(any(target_os = "linux", target_os = "android"))] -pub const ALG_SET_AEAD_ASSOCLEN: ::c_int = 4; -#[cfg(any(target_os = "linux", target_os = "android"))] -pub const ALG_SET_AEAD_AUTHSIZE: ::c_int = 5; - -#[cfg(any(target_os = "linux", target_os = "android"))] -pub const ALG_OP_DECRYPT: ::c_int = 0; -#[cfg(any(target_os = "linux", target_os = "android"))] -pub const ALG_OP_ENCRYPT: ::c_int = 1; - fn CMSG_ALIGN(len: usize) -> usize { len + mem::size_of::() - 1 & !(mem::size_of::() - 1) } From 7e3cacbcebbc0656b6630959465cf1ced59d20b4 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 19:04:27 +0300 Subject: [PATCH 05/17] fix missprint --- src/unix/notbsd/android/mod.rs | 2 +- src/unix/notbsd/linux/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 9a55a9cc..a5d6d5b1 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -241,7 +241,7 @@ s_no_extra_traits!{ } pub struct sockaddr_alg { - pub salg_family: sa_family_t, + pub salg_family: ::sa_family_t, pub salg_type: [::c_uchar; 14], pub salg_feat: u32, pub salg_mask: u32, diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index c371325a..2e7d9d9d 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -532,7 +532,7 @@ s_no_extra_traits!{ } pub struct sockaddr_alg { - pub salg_family: sa_family_t, + pub salg_family: ::sa_family_t, pub salg_type: [::c_uchar; 14], pub salg_feat: u32, pub salg_mask: u32, From f2101727d7e014cd69957abbc525a748725ea30f Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 19:58:41 +0300 Subject: [PATCH 06/17] remove SOL_ALG from android (already defined in notbsd) --- src/unix/notbsd/android/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index a5d6d5b1..00a0d5fc 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -879,7 +879,6 @@ pub const SOL_AX25: ::c_int = 257; pub const SOL_ATALK: ::c_int = 258; pub const SOL_NETROM: ::c_int = 259; pub const SOL_ROSE: ::c_int = 260; -pub const SOL_ALG: ::c_int = 279; #[doc(hidden)] pub const AF_MAX: ::c_int = 43; From 11e33a9a5563caa98ed20867b6fede60b3f66609 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 22:22:03 +0300 Subject: [PATCH 07/17] Implement traits for af_alg_iv --- src/unix/notbsd/android/mod.rs | 28 +++++++++++++++++++++++++ src/unix/notbsd/linux/mod.rs | 38 ++++++++++++++++++++++++++++------ 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 00a0d5fc..5e64ac35 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -508,6 +508,34 @@ cfg_if! { self.salg_name.hash(state); } } + + impl af_alg_iv { + unsafe fn iv(&self) -> &[u8] { + ::std::slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) + } + } + + impl PartialEq for af_alg_iv { + fn eq(&self, other: &af_alg_iv) -> bool { + *self.iv() == *other.iv() + } + } + + impl Eq for af_alg_iv {} + + impl ::fmt::Debug for af_alg_iv { + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { + f.debug_struct("af_alg_iv") + .field("iv", self.iv()) + .finish() + } + } + + impl ::hash::Hash for af_alg_iv { + fn hash(&self, state: &mut H) { + self.iv().hash(state); + } + } } } diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index 2e7d9d9d..c41e1a02 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -507,11 +507,6 @@ s! { pub cookie: ::uint32_t, pub len: ::uint32_t } - - pub struct af_alg_iv { - pub ivlen: u32, - pub iv: [::c_uchar; 0], - } } s_no_extra_traits!{ @@ -539,6 +534,10 @@ s_no_extra_traits!{ pub salg_name: [::c_uchar; 64], } + pub struct af_alg_iv { + pub ivlen: u32, + pub iv: [::c_uchar; 0], + } } cfg_if! { @@ -685,7 +684,6 @@ cfg_if! { } } - impl PartialEq for sockaddr_alg { fn eq(&self, other: &sockaddr_alg) -> bool { self.salg_family == other.salg_family @@ -727,6 +725,34 @@ cfg_if! { self.salg_name.hash(state); } } + + impl af_alg_iv { + unsafe fn iv(&self) -> &[u8] { + ::std::slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) + } + } + + impl PartialEq for af_alg_iv { + fn eq(&self, other: &af_alg_iv) -> bool { + *self.iv() == *other.iv() + } + } + + impl Eq for af_alg_iv {} + + impl ::fmt::Debug for af_alg_iv { + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { + f.debug_struct("af_alg_iv") + .field("iv", self.iv()) + .finish() + } + } + + impl ::hash::Hash for af_alg_iv { + fn hash(&self, state: &mut H) { + self.iv().hash(state); + } + } } } From b08ae2ccd63d6756c94fcb7c8728ae96d98a73bb Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 22:27:25 +0300 Subject: [PATCH 08/17] Remove empty lines --- src/unix/notbsd/android/mod.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 5e64ac35..88a1af96 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -192,7 +192,6 @@ s! { pub ipi6_addr: ::in6_addr, pub ipi6_ifindex: ::c_int, } - } s_no_extra_traits!{ @@ -252,7 +251,6 @@ s_no_extra_traits!{ pub ivlen: u32, pub iv: [::c_uchar; 0], } - } cfg_if! { From 97b5b3494beb1d6a45b86ff55485864d4eabb7df Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Mon, 18 Feb 2019 22:35:42 +0300 Subject: [PATCH 09/17] improve naming --- src/unix/notbsd/android/mod.rs | 8 ++++---- src/unix/notbsd/linux/mod.rs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 88a1af96..089780f5 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -508,14 +508,14 @@ cfg_if! { } impl af_alg_iv { - unsafe fn iv(&self) -> &[u8] { + unsafe fn as_slice(&self) -> &[u8] { ::std::slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) } } impl PartialEq for af_alg_iv { fn eq(&self, other: &af_alg_iv) -> bool { - *self.iv() == *other.iv() + *self.as_slice() == *other.as_slice() } } @@ -524,14 +524,14 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - .field("iv", self.iv()) + .field("iv", self.as_slice()) .finish() } } impl ::hash::Hash for af_alg_iv { fn hash(&self, state: &mut H) { - self.iv().hash(state); + self.as_slice().hash(state); } } } diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index c41e1a02..df0cce7b 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -727,14 +727,14 @@ cfg_if! { } impl af_alg_iv { - unsafe fn iv(&self) -> &[u8] { + unsafe fn as_slice(&self) -> &[u8] { ::std::slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) } } impl PartialEq for af_alg_iv { fn eq(&self, other: &af_alg_iv) -> bool { - *self.iv() == *other.iv() + *self.as_slice() == *other.as_slice() } } @@ -743,14 +743,14 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - .field("iv", self.iv()) + .field("iv", self.as_slice()) .finish() } } impl ::hash::Hash for af_alg_iv { fn hash(&self, state: &mut H) { - self.iv().hash(state); + self.as_slice().hash(state); } } } From 3ec632cbd99214bf129f5581744bc0bb1e457b1d Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Tue, 19 Feb 2019 10:46:05 +0300 Subject: [PATCH 10/17] fix as_slice for af_alg_iv --- src/unix/notbsd/android/mod.rs | 6 ++++-- src/unix/notbsd/linux/mod.rs | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 089780f5..fd4dd8ff 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -509,7 +509,9 @@ cfg_if! { impl af_alg_iv { unsafe fn as_slice(&self) -> &[u8] { - ::std::slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) + use core::slice; + + slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) } } @@ -524,7 +526,7 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - .field("iv", self.as_slice()) + // .field("iv", self.as_slice()) .finish() } } diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index df0cce7b..7332eece 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -728,7 +728,9 @@ cfg_if! { impl af_alg_iv { unsafe fn as_slice(&self) -> &[u8] { - ::std::slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) + use core::slice; + + slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) } } @@ -743,7 +745,7 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - .field("iv", self.as_slice()) + // .field("iv", self.as_slice()) .finish() } } From d6fe4f5463f722b721e510de127f0ba3fd390516 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Tue, 19 Feb 2019 12:51:58 +0300 Subject: [PATCH 11/17] fix unsafe blocks --- src/unix/notbsd/android/mod.rs | 11 +++++++---- src/unix/notbsd/linux/mod.rs | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index fd4dd8ff..82ccda93 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -508,10 +508,13 @@ cfg_if! { } impl af_alg_iv { - unsafe fn as_slice(&self) -> &[u8] { - use core::slice; - - slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) + fn as_slice(&self) -> &[u8] { + unsafe { + ::core::slice::from_raw_parts( + self.iv.as_ptr(), + self.ivlen as usize + ) + } } } diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index 7332eece..9eb79223 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -727,10 +727,13 @@ cfg_if! { } impl af_alg_iv { - unsafe fn as_slice(&self) -> &[u8] { - use core::slice; - - slice::from_raw_parts(self.iv.as_ptr(), self.ivlen as usize) + fn as_slice(&self) -> &[u8] { + unsafe { + ::core::slice::from_raw_parts( + self.iv.as_ptr(), + self.ivlen as usize + ) + } } } From d0f4c6e0fce678391bb395805b64c522589ccfb5 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Tue, 19 Feb 2019 16:35:25 +0300 Subject: [PATCH 12/17] Ignore ALG_SET_AEAD_* constants on MUSL tests --- libc-test/build.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libc-test/build.rs b/libc-test/build.rs index 745cd46c..b87594bb 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -630,6 +630,8 @@ fn do_ctest() { | "RENAME_NOREPLACE" | "RENAME_EXCHANGE" | "RENAME_WHITEOUT" + | "ALG_SET_AEAD_ASSOCLEN" + | "ALG_SET_AEAD_AUTHSIZE" if musl => { true From 34c96d74e18eb51a76886c3bb5d305a2b8dcb277 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Tue, 19 Feb 2019 18:14:01 +0300 Subject: [PATCH 13/17] Add comment on ALG_SET_AEAD_* exclusion --- libc-test/build.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/libc-test/build.rs b/libc-test/build.rs index b87594bb..5446a300 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -630,6 +630,7 @@ fn do_ctest() { | "RENAME_NOREPLACE" | "RENAME_EXCHANGE" | "RENAME_WHITEOUT" + // ALG_SET_AEAD_* constants are available starting from kernel 3.19 | "ALG_SET_AEAD_ASSOCLEN" | "ALG_SET_AEAD_AUTHSIZE" if musl => From c35d8fbfbe39b963d9d5be456ca24d89b2e1a0d1 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Tue, 19 Feb 2019 18:17:25 +0300 Subject: [PATCH 14/17] Uncomment salg_type from socket_alg debug_struct --- src/unix/notbsd/android/mod.rs | 2 +- src/unix/notbsd/linux/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 82ccda93..7578da05 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -489,7 +489,7 @@ cfg_if! { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("sockaddr_alg") .field("salg_family", &self.salg_family) -// .field("salg_type", &self.salg_type) + .field("salg_type", &self.salg_type) .field("salg_feat", &self.salg_feat) .field("salg_mask", &self.salg_mask) // .field("salg_name", &self.salg_name) diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index 9eb79223..0ec83c1c 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -708,7 +708,7 @@ cfg_if! { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("sockaddr_alg") .field("salg_family", &self.salg_family) -// .field("salg_type", &self.salg_type) + .field("salg_type", &self.salg_type) .field("salg_feat", &self.salg_feat) .field("salg_mask", &self.salg_mask) // .field("salg_name", &self.salg_name) From ae2663a7db5463617dc811ed4724caacf796c303 Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Tue, 19 Feb 2019 23:41:52 +0300 Subject: [PATCH 15/17] Improve Debug for AF_ALG structures --- src/unix/notbsd/android/mod.rs | 4 ++-- src/unix/notbsd/linux/mod.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 7578da05..b70a2a88 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -492,7 +492,7 @@ cfg_if! { .field("salg_type", &self.salg_type) .field("salg_feat", &self.salg_feat) .field("salg_mask", &self.salg_mask) -// .field("salg_name", &self.salg_name) + .field("salg_name", &self.salg_name.iter().collect::>()) .finish() } } @@ -529,7 +529,7 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - // .field("iv", self.as_slice()) + .field("iv", &self.as_slice().iter().collect::>()) .finish() } } diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index 0ec83c1c..4ea0882a 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -711,7 +711,7 @@ cfg_if! { .field("salg_type", &self.salg_type) .field("salg_feat", &self.salg_feat) .field("salg_mask", &self.salg_mask) -// .field("salg_name", &self.salg_name) + .field("salg_name", &self.salg_name.iter().collect::>()) .finish() } } @@ -748,7 +748,7 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - // .field("iv", self.as_slice()) + .field("iv", &self.as_slice().iter().collect::>()) .finish() } } From 2e5358ae60b73a7328e63a85c61a7e8c9f84fc0f Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Wed, 20 Feb 2019 00:10:35 +0300 Subject: [PATCH 16/17] Revert "Improve Debug for AF_ALG structures" This reverts commit ae2663a7db5463617dc811ed4724caacf796c303. --- src/unix/notbsd/android/mod.rs | 4 ++-- src/unix/notbsd/linux/mod.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index b70a2a88..7578da05 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -492,7 +492,7 @@ cfg_if! { .field("salg_type", &self.salg_type) .field("salg_feat", &self.salg_feat) .field("salg_mask", &self.salg_mask) - .field("salg_name", &self.salg_name.iter().collect::>()) +// .field("salg_name", &self.salg_name) .finish() } } @@ -529,7 +529,7 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - .field("iv", &self.as_slice().iter().collect::>()) + // .field("iv", self.as_slice()) .finish() } } diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index 4ea0882a..0ec83c1c 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -711,7 +711,7 @@ cfg_if! { .field("salg_type", &self.salg_type) .field("salg_feat", &self.salg_feat) .field("salg_mask", &self.salg_mask) - .field("salg_name", &self.salg_name.iter().collect::>()) +// .field("salg_name", &self.salg_name) .finish() } } @@ -748,7 +748,7 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - .field("iv", &self.as_slice().iter().collect::>()) + // .field("iv", self.as_slice()) .finish() } } From bce3ee3e718982e3defea48bc4224e29e31788cb Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov Date: Wed, 20 Feb 2019 01:04:50 +0300 Subject: [PATCH 17/17] Properly implement Debug for AF_ALG structures --- src/unix/notbsd/android/mod.rs | 4 ++-- src/unix/notbsd/linux/mod.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 7578da05..e8f7007b 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -492,7 +492,7 @@ cfg_if! { .field("salg_type", &self.salg_type) .field("salg_feat", &self.salg_feat) .field("salg_mask", &self.salg_mask) -// .field("salg_name", &self.salg_name) + .field("salg_name", &&self.salg_name[..]) .finish() } } @@ -529,7 +529,7 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - // .field("iv", self.as_slice()) + .field("iv", &self.as_slice()) .finish() } } diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs index 0ec83c1c..91e99ef3 100644 --- a/src/unix/notbsd/linux/mod.rs +++ b/src/unix/notbsd/linux/mod.rs @@ -711,7 +711,7 @@ cfg_if! { .field("salg_type", &self.salg_type) .field("salg_feat", &self.salg_feat) .field("salg_mask", &self.salg_mask) -// .field("salg_name", &self.salg_name) + .field("salg_name", &&self.salg_name[..]) .finish() } } @@ -748,7 +748,7 @@ cfg_if! { impl ::fmt::Debug for af_alg_iv { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { f.debug_struct("af_alg_iv") - // .field("iv", self.as_slice()) + .field("iv", &self.as_slice()) .finish() } }