fix(client): harden ancillary control message parsing
This commit is contained in:
1 file changed
+10
-7
@@ -86,13 +86,16 @@ unsafe fn parse_receive_meta(msg: &libc::msghdr) -> ReceiveMeta {
|
|||||||
let mut cmsg = libc::CMSG_FIRSTHDR(msg);
|
let mut cmsg = libc::CMSG_FIRSTHDR(msg);
|
||||||
while !cmsg.is_null() {
|
while !cmsg.is_null() {
|
||||||
let cmsg_ref = &*cmsg;
|
let cmsg_ref = &*cmsg;
|
||||||
if cmsg_ref.cmsg_len >= libc::CMSG_LEN(0) as usize {
|
let header_len = libc::CMSG_LEN(0) as usize;
|
||||||
let data_len = cmsg_ref.cmsg_len - libc::CMSG_LEN(0) as usize;
|
if cmsg_ref.cmsg_len < header_len {
|
||||||
if is_traffic_class_cmsg(cmsg_ref) {
|
cmsg = libc::CMSG_NXTHDR(msg, cmsg);
|
||||||
meta.traffic_class = read_int_cmsg_low_byte(cmsg, data_len);
|
continue;
|
||||||
} else if is_kernel_rx_timestamp_cmsg(cmsg_ref) {
|
}
|
||||||
meta.kernel_rx_timestamp = read_timespec_cmsg(cmsg, data_len);
|
let data_len = cmsg_ref.cmsg_len - header_len;
|
||||||
}
|
if is_traffic_class_cmsg(cmsg_ref) {
|
||||||
|
meta.traffic_class = read_int_cmsg_low_byte(cmsg, data_len);
|
||||||
|
} else if is_kernel_rx_timestamp_cmsg(cmsg_ref) {
|
||||||
|
meta.kernel_rx_timestamp = read_timespec_cmsg(cmsg, data_len);
|
||||||
}
|
}
|
||||||
cmsg = libc::CMSG_NXTHDR(msg, cmsg);
|
cmsg = libc::CMSG_NXTHDR(msg, cmsg);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user