Skip to content

Commit 049df4a

Browse files
dzamlolittle-dude
authored andcommitted
Use CString for the prefix NLA
1 parent cc76f51 commit 049df4a

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/nflog/packet.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// SPDX-License-Identifier: MIT
22

3+
use std::ffi::{CStr, CString};
4+
35
use anyhow::Context;
46
use byteorder::{BigEndian, ByteOrder};
57
use derive_more::{From, IsVariant};
@@ -54,7 +56,7 @@ pub enum PacketNla {
5456
#[from]
5557
HwAddr(HwAddr),
5658
Payload(Vec<u8>),
57-
Prefix(Vec<u8>),
59+
Prefix(CString),
5860
Uid(u32),
5961
Seq(u32),
6062
SeqGlobal(u32),
@@ -78,7 +80,7 @@ impl Nla for PacketNla {
7880
PacketNla::IfIndexPhysOutDev(_) => 4,
7981
PacketNla::HwAddr(attr) => attr.value_len(),
8082
PacketNla::Payload(vec) => vec.len(),
81-
PacketNla::Prefix(vec) => vec.len(),
83+
PacketNla::Prefix(cstring) => cstring.as_bytes_with_nul().len(),
8284
PacketNla::Uid(_) => 4,
8385
PacketNla::Seq(_) => 4,
8486
PacketNla::SeqGlobal(_) => 4,
@@ -124,7 +126,7 @@ impl Nla for PacketNla {
124126
PacketNla::IfIndexPhysOutDev(value) => BigEndian::write_u32(buffer, *value),
125127
PacketNla::HwAddr(attr) => attr.emit_value(buffer),
126128
PacketNla::Payload(vec) => buffer.copy_from_slice(vec),
127-
PacketNla::Prefix(vec) => buffer.copy_from_slice(vec),
129+
PacketNla::Prefix(cstring) => buffer.copy_from_slice(cstring.as_bytes_with_nul()),
128130
PacketNla::Uid(value) => BigEndian::write_u32(buffer, *value),
129131
PacketNla::Seq(value) => BigEndian::write_u32(buffer, *value),
130132
PacketNla::SeqGlobal(value) => BigEndian::write_u32(buffer, *value),
@@ -174,7 +176,11 @@ impl<'buffer, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'buffer T>> for Pack
174176
PacketNla::HwAddr(HwAddr::parse(&buf)?)
175177
}
176178
NFULA_PAYLOAD => PacketNla::Payload(payload.to_vec()),
177-
NFULA_PREFIX => PacketNla::Prefix(payload.to_vec()),
179+
NFULA_PREFIX => PacketNla::Prefix(
180+
CStr::from_bytes_with_nul(payload)
181+
.context("invalid NFULA_PREFIX value")?
182+
.to_owned(),
183+
),
178184
NFULA_UID => PacketNla::Uid(parse_u32_be(payload).context("invalid NFULA_UID value")?),
179185
NFULA_SEQ => PacketNla::Seq(parse_u32_be(payload).context("invalid NFULA_SEQ value")?),
180186
NFULA_SEQ_GLOBAL => PacketNla::SeqGlobal(

0 commit comments

Comments
 (0)