Cppcheck complains: Shifting signed 32-bit value by 31 bits is undefined behaviour. Indeed, NFTNL_OBJ_TUNNEL_ERSPAN_V2_DIR enum value is 31. Make sure behaviour is as intended by shifting unsigned 1. Fixes: ea63a05272f54 ("obj: add tunnel support") Signed-off-by: Phil Sutter <phil@xxxxxx> --- src/obj/tunnel.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/obj/tunnel.c b/src/obj/tunnel.c index 7ffade8c46ae7..100aa099c6e97 100644 --- a/src/obj/tunnel.c +++ b/src/obj/tunnel.c @@ -227,7 +227,7 @@ nftnl_obj_tunnel_build(struct nlmsghdr *nlh, const struct nftnl_obj *e) if (e->flags & (1 << NFTNL_OBJ_TUNNEL_ERSPAN_VERSION) && (e->flags & (1 << NFTNL_OBJ_TUNNEL_ERSPAN_V1_INDEX) || (e->flags & (1 << NFTNL_OBJ_TUNNEL_ERSPAN_V2_HWID) && - e->flags & (1 << NFTNL_OBJ_TUNNEL_ERSPAN_V2_DIR)))) { + e->flags & (1u << NFTNL_OBJ_TUNNEL_ERSPAN_V2_DIR)))) { struct nlattr *nest_inner; nest = mnl_attr_nest_start(nlh, NFTA_TUNNEL_KEY_OPTS); @@ -240,7 +240,7 @@ nftnl_obj_tunnel_build(struct nlmsghdr *nlh, const struct nftnl_obj *e) if (e->flags & (1 << NFTNL_OBJ_TUNNEL_ERSPAN_V2_HWID)) mnl_attr_put_u8(nlh, NFTA_TUNNEL_KEY_ERSPAN_V2_HWID, tun->u.tun_erspan.u.v2.hwid); - if (e->flags & (1 << NFTNL_OBJ_TUNNEL_ERSPAN_V2_DIR)) + if (e->flags & (1u << NFTNL_OBJ_TUNNEL_ERSPAN_V2_DIR)) mnl_attr_put_u8(nlh, NFTA_TUNNEL_KEY_ERSPAN_V2_DIR, tun->u.tun_erspan.u.v2.dir); mnl_attr_nest_end(nlh, nest_inner); @@ -430,7 +430,7 @@ nftnl_obj_tunnel_parse_erspan(struct nftnl_obj *e, struct nlattr *attr, if (tb[NFTA_TUNNEL_KEY_ERSPAN_V2_DIR]) { tun->u.tun_erspan.u.v2.dir = mnl_attr_get_u8(tb[NFTA_TUNNEL_KEY_ERSPAN_V2_DIR]); - e->flags |= (1 << NFTNL_OBJ_TUNNEL_ERSPAN_V2_DIR); + e->flags |= (1u << NFTNL_OBJ_TUNNEL_ERSPAN_V2_DIR); } return 0; -- 2.23.0