about summary refs log tree commit diff
path: root/library/std/src/sys/unix/ext
diff options
context:
space:
mode:
authorLinkTed <LinkTed@users.noreply.github.com>2020-08-25 18:38:25 +0200
committerLinkTed <LinkTed@users.noreply.github.com>2020-10-10 15:19:11 +0200
commit3dfab6fb6443983d22fa075920a3d66dd54817c7 (patch)
tree312abd34768f62a556f47f7e02c5541910e3a354 /library/std/src/sys/unix/ext
parente1084052a7f6d65a5c5e9656ba507ba42c4caacb (diff)
downloadrust-3dfab6fb6443983d22fa075920a3d66dd54817c7.tar.gz
rust-3dfab6fb6443983d22fa075920a3d66dd54817c7.zip
Add integer overflow check
Diffstat (limited to 'library/std/src/sys/unix/ext')
-rw-r--r--library/std/src/sys/unix/ext/net/ancillary.rs10
1 files changed, 9 insertions, 1 deletions
diff --git a/library/std/src/sys/unix/ext/net/ancillary.rs b/library/std/src/sys/unix/ext/net/ancillary.rs
index 142526f3a41..8ba389762fb 100644
--- a/library/std/src/sys/unix/ext/net/ancillary.rs
+++ b/library/std/src/sys/unix/ext/net/ancillary.rs
@@ -72,7 +72,15 @@ fn add_to_ancillary_data<T: Clone>(
     cmsg_level: libc::c_int,
     cmsg_type: libc::c_int,
 ) -> bool {
-    let len = (source.len() * size_of::<T>()) as u32;
+    let len = if let Some(len) = source.len().checked_mul(size_of::<T>()) {
+        if let Ok(len) = u32::try_from(len) {
+            len
+        } else {
+            return false;
+        }
+    } else {
+        return false;
+    };
 
     unsafe {
         let additional_space = libc::CMSG_SPACE(len) as usize;