From 5fc15828af43ba81246e40b0453350a296124d65 Mon Sep 17 00:00:00 2001 From: Justin Ossevoort Date: Tue, 2 Mar 2021 17:34:29 +0100 Subject: Allow sockaddr_ll size mismatch Apparently the Linux kernel can return smaller sizes when the value in the last element of sockaddr_ll (`sll_addr`) is smaller than the declared size of that field. --- src/sys/socket/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/sys/socket/mod.rs b/src/sys/socket/mod.rs index 4db7ac6e..73f976b8 100644 --- a/src/sys/socket/mod.rs +++ b/src/sys/socket/mod.rs @@ -1711,7 +1711,10 @@ pub fn sockaddr_storage_to_addr( #[cfg(any(target_os = "android", target_os = "linux"))] libc::AF_PACKET => { use libc::sockaddr_ll; - assert_eq!(len as usize, mem::size_of::()); + // Apparently the Linux kernel can return smaller sizes when + // the value in the last element of sockaddr_ll (`sll_addr`) is + // smaller than the declared size of that field + assert!(len as usize <= mem::size_of::()); let sll = unsafe { *(addr as *const _ as *const sockaddr_ll) }; -- cgit v1.2.3