aboutsummaryrefslogtreecommitdiff
path: root/src/sys/unix/uds/socketaddr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/unix/uds/socketaddr.rs')
-rw-r--r--src/sys/unix/uds/socketaddr.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/sys/unix/uds/socketaddr.rs b/src/sys/unix/uds/socketaddr.rs
index 31f8a51..a9f9ea9 100644
--- a/src/sys/unix/uds/socketaddr.rs
+++ b/src/sys/unix/uds/socketaddr.rs
@@ -28,6 +28,10 @@ enum AddressKind<'a> {
impl SocketAddr {
fn address(&self) -> AddressKind<'_> {
let offset = path_offset(&self.sockaddr);
+ // Don't underflow in `len` below.
+ if (self.socklen as usize) < offset {
+ return AddressKind::Unnamed;
+ }
let len = self.socklen as usize - offset;
let path = unsafe { &*(&self.sockaddr.sun_path as *const [libc::c_char] as *const [u8]) };