diff --git a/sys/include/net/ieee802154.h b/sys/include/net/ieee802154.h index a11330cd01bbb08dafb6560d05991ab0d2f546d5..bd3f539156b8ac28a5f1d9910fa8162190c35026 100644 --- a/sys/include/net/ieee802154.h +++ b/sys/include/net/ieee802154.h @@ -46,6 +46,8 @@ extern "C" { * @{ */ #define IEEE802154_MAX_HDR_LEN (23U) +#define IEEE802154_MIN_FRAME_LEN (IEEE802154_FCF_LEN + sizeof(uint8_t)) + #define IEEE802154_FCF_LEN (2U) #define IEEE802154_FCS_LEN (2U) diff --git a/sys/net/gnrc/netif/gnrc_netif_ieee802154.c b/sys/net/gnrc/netif/gnrc_netif_ieee802154.c index e568f66b22045cf0f087d0f5ed4cf785034e9dcb..a482c64c1154708c10f38e6d318b49194fd9de27 100644 --- a/sys/net/gnrc/netif/gnrc_netif_ieee802154.c +++ b/sys/net/gnrc/netif/gnrc_netif_ieee802154.c @@ -82,7 +82,7 @@ static gnrc_pktsnip_t *_recv(gnrc_netif_t *netif) gnrc_pktsnip_t *pkt = NULL; int bytes_expected = dev->driver->recv(dev, NULL, 0, NULL); - if (bytes_expected > 0) { + if (bytes_expected >= (int)IEEE802154_MIN_FRAME_LEN) { int nread; pkt = gnrc_pktbuf_add(NULL, NULL, bytes_expected, GNRC_NETTYPE_UNDEF); @@ -155,6 +155,9 @@ static gnrc_pktsnip_t *_recv(gnrc_netif_t *netif) DEBUG("_recv_ieee802154: reallocating.\n"); gnrc_pktbuf_realloc_data(pkt, nread); + } else if (bytes_expected > 0) { + DEBUG("_recv_ieee802154: received frame is too short\n"); + dev->driver->recv(dev, NULL, bytes_expected, NULL); } return pkt;