From dda7945ca9c9d2371fc37cfaed688f92bd627224 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 28 Feb 2024 12:52:04 +1100 Subject: pcap: Handle short writes in pcap_frame() Currently pcap_frame() assumes that if write() doesn't return an error, it has written everything we want. That's not necessarily true, because it could return a short write. That's not likely to happen on a regular file, but there's not a lot of reason not to be robust here; it's conceivable we might want to direct the pcap fd at a named pipe or similar. So, make pcap_frame() handle short frames by using the write_remainder() helper. Signed-off-by: David Gibson [sbrivio: Formatting fix, and avoid gcc warning in pcap_frame()] Signed-off-by: Stefano Brivio --- tap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tap.c') diff --git a/tap.c b/tap.c index dd11d1d..87d176b 100644 --- a/tap.c +++ b/tap.c @@ -433,7 +433,7 @@ size_t tap_send_frames(const struct ctx *c, const struct iovec *iov, size_t n) if (m < n) debug("tap: failed to send %zu frames of %zu", n - m, n); - pcap_multiple(iov, m, c->mode == MODE_PASST ? sizeof(uint32_t) : 0); + pcap_multiple(iov, 1, n, c->mode == MODE_PASST ? sizeof(uint32_t) : 0); return m; } -- cgit v1.2.3