From: Dmitry V. Levin Date: Sun, 23 Dec 2018 22:12:36 +0000 (+0000) Subject: rtnl_link: fix off-by-one errors in indexed and sorted xlat lookups X-Git-Tag: v4.26~31 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d0ae0b3dcabfd61dd2134422114570862fdca283;p=strace rtnl_link: fix off-by-one errors in indexed and sorted xlat lookups * rtnl_link.c (decode_nla_tun_type, decode_ifla_xdp_attached, decode_ifla_inet_conf, decode_ifla_inet6_flags, decode_ifla_inet6_conf, decode_ifla_inet6_stats, decode_ifla_inet6_icmp6_stats, decode_ifla_inet6_agm): Decrement xlat size by one to account for XLAT_END as other users of indexed and sorted xlats do. Fixes: v4.25~71 "rtnl_link: decode named constants for IFLA_XDP_ATTACHED attribute value" Fixes: v4.23~41 "rtnl_link: decode IFLA_AF_SPEC" Fixes: v4.23~37 "rtnl_link: implement IFLA_INFO_DATA for tun devices" --- diff --git a/rtnl_link.c b/rtnl_link.c index 7830cd7e..fa6278ef 100644 --- a/rtnl_link.c +++ b/rtnl_link.c @@ -338,7 +338,7 @@ decode_nla_tun_type(struct tcb *const tcp, { const struct decode_nla_xlat_opts opts = { .xlat = tun_device_types, - .xlat_size = ARRAY_SIZE(tun_device_types), + .xlat_size = ARRAY_SIZE(tun_device_types) - 1, .xt = XT_INDEXED, .dflt = "IFF_???", .size = 1, @@ -564,7 +564,7 @@ decode_ifla_xdp_attached(struct tcb *const tcp, { const struct decode_nla_xlat_opts opts = { .xlat = rtnl_ifla_xdp_attached_mode, - .xlat_size = ARRAY_SIZE(rtnl_ifla_xdp_attached_mode), + .xlat_size = ARRAY_SIZE(rtnl_ifla_xdp_attached_mode) - 1, .xt = XT_INDEXED, .dflt = "XDP_ATTACHED_???", .size = 1, @@ -628,7 +628,8 @@ decode_ifla_inet_conf(struct tcb *const tcp, print_array_ex(tcp, addr, cnt, &elem, sizeof(elem), tfetch_mem, print_int32_array_member, NULL, PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED - | XLAT_STYLE_FMT_D, ARRSZ_PAIR(inet_devconf_indices), + | XLAT_STYLE_FMT_D, + ARRSZ_PAIR(inet_devconf_indices) - 1, "IPV4_DEVCONF_???"); return true; @@ -645,7 +646,7 @@ decode_ifla_inet6_flags(struct tcb *const tcp, const void *const opaque_data) { const struct decode_nla_xlat_opts opts = { - ARRSZ_PAIR(inet6_if_flags), "IF_???", + ARRSZ_PAIR(inet6_if_flags) - 1, "IF_???", .size = 4, }; @@ -667,7 +668,8 @@ decode_ifla_inet6_conf(struct tcb *const tcp, print_array_ex(tcp, addr, cnt, &elem, sizeof(elem), tfetch_mem, print_int32_array_member, NULL, PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED - | XLAT_STYLE_FMT_D, ARRSZ_PAIR(inet6_devconf_indices), + | XLAT_STYLE_FMT_D, + ARRSZ_PAIR(inet6_devconf_indices) - 1, "DEVCONF_???"); return true; @@ -688,7 +690,7 @@ decode_ifla_inet6_stats(struct tcb *const tcp, print_array_ex(tcp, addr, cnt, &elem, sizeof(elem), tfetch_mem, print_uint64_array_member, NULL, PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED - | XLAT_STYLE_FMT_U, ARRSZ_PAIR(snmp_ip_stats), + | XLAT_STYLE_FMT_U, ARRSZ_PAIR(snmp_ip_stats) - 1, "IPSTATS_MIB_???"); return true; @@ -735,7 +737,7 @@ decode_ifla_inet6_icmp6_stats(struct tcb *const tcp, print_array_ex(tcp, addr, cnt, &elem, sizeof(elem), tfetch_mem, print_uint64_array_member, NULL, PAF_PRINT_INDICES | PAF_INDEX_XLAT_VALUE_INDEXED - | XLAT_STYLE_FMT_U, ARRSZ_PAIR(snmp_icmp6_stats), + | XLAT_STYLE_FMT_U, ARRSZ_PAIR(snmp_icmp6_stats) - 1, "ICMP6_MIB_???"); return true; @@ -748,7 +750,7 @@ decode_ifla_inet6_agm(struct tcb *const tcp, const void *const opaque_data) { const struct decode_nla_xlat_opts opts = { - ARRSZ_PAIR(in6_addr_gen_mode), "IN6_ADDR_GEN_MODE_???", + ARRSZ_PAIR(in6_addr_gen_mode) - 1, "IN6_ADDR_GEN_MODE_???", .xt = XT_INDEXED, .size = 1, };