From 951391137708a900be7f75c9f66dca3db7b297ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Wed, 24 Jul 2019 20:45:12 +0300 Subject: [PATCH] Pad the frame to the required length. If we don't do that, the NIC will generate padding that contains non-zero bytes. EtherMess excepts all-zero padding, so this will break. --- ethermess-backend.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/ethermess-backend.c b/ethermess-backend.c index 09ebddf..2e84bae 100644 --- a/ethermess-backend.c +++ b/ethermess-backend.c @@ -256,8 +256,19 @@ void drop_privileges(void) { } void send_frame(const unsigned char *frame, size_t frame_length) { - if (write(packet_socket, frame, frame_length) == -1) { - err(1, "write"); + // 64B is the minimum frame side + // We check for 60B, since kernel handles the FCS (4B) + if (frame_length < 60) { + unsigned char padded_frame[60]; + memset(padded_frame, 0, sizeof(padded_frame)); + memcpy(padded_frame, frame, frame_length); + if (write(packet_socket, padded_frame, sizeof(padded_frame)) == -1) { + err(1, "write"); + } + } else { + if (write(packet_socket, frame, frame_length) == -1) { + err(1, "write"); + } } }