Make sure kernel does not provide geneve data larger than
NFTNL_TUNNEL_GENEVE_DATA_MAXLEN, which might overrun the buffer.
Fixes: 239fbdb8979d ("tunnel: add support to geneve options")
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (tb[NFTA_TUNNEL_KEY_GENEVE_DATA]) {
uint32_t len = mnl_attr_get_payload_len(tb[NFTA_TUNNEL_KEY_GENEVE_DATA]);
+ if (len > NFTNL_TUNNEL_GENEVE_DATA_MAXLEN) {
+ free(opt);
+ return -1;
+ }
+
memcpy(opt->geneve.data,
mnl_attr_get_payload(tb[NFTA_TUNNEL_KEY_GENEVE_DATA]),
len);