Skip to content

Commit

Permalink
decrease unsafe
Browse files Browse the repository at this point in the history
  • Loading branch information
xmh0511 committed Nov 22, 2024
1 parent b3708ba commit 7a9d60f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 18 deletions.
2 changes: 1 addition & 1 deletion .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ protocol = "sparse"

[build]
# target = ["x86_64-unknown-linux-musl"]
# target = ["x86_64-unknown-linux-gnu"]
target = ["x86_64-unknown-linux-gnu"]
# target = ["aarch64-linux-android"]
# target = ["x86_64-linux-android"]
# target = ["aarch64-apple-ios"]
Expand Down
29 changes: 12 additions & 17 deletions src/platform/linux/offload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -725,7 +725,8 @@ fn tcp_gro<B: ExpandBuffer>(
table: &mut TcpGROTable,
is_v6: bool,
) -> GroResult {
let pkt = unsafe { &*(&bufs[pkt_i].as_ref()[offset..] as *const [u8]) };
let pkt = bufs[pkt_i].as_ref()[offset..].to_vec();
let pkt = &pkt[..];
if pkt.len() > u16::MAX as usize {
// A valid IPv4 or IPv6 packet will never exceed this.
return GroResult::Noop;
Expand Down Expand Up @@ -901,11 +902,8 @@ pub fn apply_tcp_coalesce_accounting<B: ExpandBuffer>(
};

let src_addr_at = offset + addr_offset;
let src_addr =
unsafe { &*(&pkt[src_addr_at..src_addr_at + addr_len] as *const [u8]) };
let dst_addr = unsafe {
&*(&pkt[src_addr_at + addr_len..src_addr_at + addr_len * 2] as *const [u8])
};
let src_addr = pkt[src_addr_at..src_addr_at + addr_len].to_vec();
let dst_addr = pkt[src_addr_at + addr_len..src_addr_at + addr_len * 2].to_vec();
// Recalculate the total len (IPv4) or payload len (IPv6).
// Recalculate the (IPv4) header checksum.
if item.key.is_v6 {
Expand All @@ -926,8 +924,8 @@ pub fn apply_tcp_coalesce_accounting<B: ExpandBuffer>(

let psum = pseudo_header_checksum_no_fold(
IPPROTO_TCP as _,
src_addr,
dst_addr,
&src_addr,
&dst_addr,
pkt_len as u16 - item.iph_len as u16,
);
let tcp_csum = checksum(&[], psum);
Expand Down Expand Up @@ -979,12 +977,8 @@ pub fn apply_udp_coalesce_accounting<B: ExpandBuffer>(
};

let src_addr_at = offset + addr_offset;
let src_addr =
unsafe { &*(&pkt[src_addr_at..(src_addr_at + addr_len)] as *const [u8]) };
let dst_addr = unsafe {
&*(&pkt[(src_addr_at + addr_len)..(src_addr_at + addr_len * 2)]
as *const [u8])
};
let src_addr = pkt[src_addr_at..(src_addr_at + addr_len)].to_vec();
let dst_addr = pkt[(src_addr_at + addr_len)..(src_addr_at + addr_len * 2)].to_vec();

// Recalculate the total len (IPv4) or payload len (IPv6).
// Recalculate the (IPv4) header checksum.
Expand All @@ -1009,8 +1003,8 @@ pub fn apply_udp_coalesce_accounting<B: ExpandBuffer>(

let psum = pseudo_header_checksum_no_fold(
IPPROTO_UDP as _,
src_addr,
dst_addr,
&src_addr,
&dst_addr,
pkt_len as u16 - item.iph_len as u16,
);

Expand Down Expand Up @@ -1077,7 +1071,8 @@ fn udp_gro<B: ExpandBuffer>(
table: &mut UdpGROTable,
is_v6: bool,
) -> GroResult {
let pkt = unsafe { &*(&bufs[pkt_i].as_ref()[offset..] as *const [u8]) };
let pkt = bufs[pkt_i].as_ref()[offset..].to_vec();
let pkt = &pkt[..];
if pkt.len() > u16::MAX as usize {
// A valid IPv4 or IPv6 packet will never exceed this.
return GroResult::Noop;
Expand Down

0 comments on commit 7a9d60f

Please sign in to comment.