There are only three users which require it to be reentrant, the rest is fine without. Instead, provide a reentrant format_host_r() for users which need it.
Signed-off-by: Phil Sutter <p...@nwl.cc> --- bridge/fdb.c | 4 +--- include/utils.h | 3 ++- ip/ip6tunnel.c | 2 +- ip/ipaddress.c | 13 ++++--------- ip/ipaddrlabel.c | 4 +--- ip/iplink_geneve.c | 5 ++--- ip/iplink_vxlan.c | 13 ++++++------- ip/ipmaddr.c | 6 +----- ip/ipneigh.c | 4 +--- ip/iproute.c | 21 +++++++-------------- ip/iproute_lwtunnel.c | 4 +--- ip/iprule.c | 9 +++------ ip/iptoken.c | 4 +--- ip/iptunnel.c | 6 +++--- ip/link_gre.c | 5 ++--- ip/link_gre6.c | 5 ++--- ip/link_iptnl.c | 7 +++---- ip/link_vti.c | 5 ++--- ip/link_vti6.c | 5 ++--- ip/tcp_metrics.c | 6 ++---- lib/utils.c | 9 ++++++++- misc/ss.c | 4 ++-- tc/m_nat.c | 4 ++-- 23 files changed, 59 insertions(+), 89 deletions(-) diff --git a/bridge/fdb.c b/bridge/fdb.c index 88f1b63c233e9..e8c314a3c0771 100644 --- a/bridge/fdb.c +++ b/bridge/fdb.c @@ -104,7 +104,6 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, "dev %s ", ll_index_to_name(r->ndm_ifindex)); if (tb[NDA_DST]) { - SPRINT_BUF(abuf); int family = AF_INET; if (RTA_PAYLOAD(tb[NDA_DST]) == sizeof(struct in6_addr)) @@ -113,8 +112,7 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, "dst %s ", format_host(family, RTA_PAYLOAD(tb[NDA_DST]), - RTA_DATA(tb[NDA_DST]), - abuf, sizeof(abuf))); + RTA_DATA(tb[NDA_DST]))); } if (tb[NDA_VLAN]) { diff --git a/include/utils.h b/include/utils.h index c43427c35a6cc..84083b0dbba71 100644 --- a/include/utils.h +++ b/include/utils.h @@ -122,8 +122,9 @@ int addr64_n2a(__u64 addr, char *buff, size_t len); int af_bit_len(int af); int af_byte_len(int af); -const char *format_host(int af, int len, const void *addr, +const char *format_host_r(int af, int len, const void *addr, char *buf, int buflen); +const char *format_host(int af, int lne, const void *addr); const char *rt_addr_n2a(int af, int len, const void *addr, char *buf, int buflen); diff --git a/ip/ip6tunnel.c b/ip/ip6tunnel.c index 2e9d3ed40d003..d588645eb942a 100644 --- a/ip/ip6tunnel.c +++ b/ip/ip6tunnel.c @@ -77,7 +77,7 @@ static void print_tunnel(struct ip6_tnl_parm2 *p) printf("%s: %s/ipv6 remote %s local %s", p->name, tnl_strproto(p->proto), - format_host(AF_INET6, 16, &p->raddr, s1, sizeof(s1)), + format_host_r(AF_INET6, 16, &p->raddr, s1, sizeof(s1)), rt_addr_n2a(AF_INET6, 16, &p->laddr, s2, sizeof(s2))); if (p->link) { const char *n = ll_index_to_name(p->link); diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 90d7b1096c3aa..03c8c03cd4a17 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -964,7 +964,6 @@ int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n, /* Use local copy of ifa_flags to not interfere with filtering code */ unsigned int ifa_flags; struct rtattr *rta_tb[IFA_MAX+1]; - char abuf[256]; SPRINT_BUF(b1); @@ -1061,8 +1060,7 @@ int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n, color_fprintf(fp, ifa_family_color(ifa->ifa_family), "%s", format_host(ifa->ifa_family, RTA_PAYLOAD(rta_tb[IFA_LOCAL]), - RTA_DATA(rta_tb[IFA_LOCAL]), - abuf, sizeof(abuf))); + RTA_DATA(rta_tb[IFA_LOCAL]))); if (rta_tb[IFA_ADDRESS] && memcmp(RTA_DATA(rta_tb[IFA_ADDRESS]), RTA_DATA(rta_tb[IFA_LOCAL]), @@ -1071,8 +1069,7 @@ int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n, color_fprintf(fp, ifa_family_color(ifa->ifa_family), "%s", format_host(ifa->ifa_family, RTA_PAYLOAD(rta_tb[IFA_ADDRESS]), - RTA_DATA(rta_tb[IFA_ADDRESS]), - abuf, sizeof(abuf))); + RTA_DATA(rta_tb[IFA_ADDRESS]))); } fprintf(fp, "/%d ", ifa->ifa_prefixlen); } @@ -1085,16 +1082,14 @@ int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n, color_fprintf(fp, ifa_family_color(ifa->ifa_family), "%s ", format_host(ifa->ifa_family, RTA_PAYLOAD(rta_tb[IFA_BROADCAST]), - RTA_DATA(rta_tb[IFA_BROADCAST]), - abuf, sizeof(abuf))); + RTA_DATA(rta_tb[IFA_BROADCAST]))); } if (rta_tb[IFA_ANYCAST]) { fprintf(fp, "any "); color_fprintf(fp, ifa_family_color(ifa->ifa_family), "%s ", format_host(ifa->ifa_family, RTA_PAYLOAD(rta_tb[IFA_ANYCAST]), - RTA_DATA(rta_tb[IFA_ANYCAST]), - abuf, sizeof(abuf))); + RTA_DATA(rta_tb[IFA_ANYCAST]))); } fprintf(fp, "scope %s ", rtnl_rtscope_n2a(ifa->ifa_scope, b1, sizeof(b1))); if (ifa_flags & IFA_F_SECONDARY) { diff --git a/ip/ipaddrlabel.c b/ip/ipaddrlabel.c index 05c44978ff37a..6076bb952297f 100644 --- a/ip/ipaddrlabel.c +++ b/ip/ipaddrlabel.c @@ -60,7 +60,6 @@ int print_addrlabel(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg struct ifaddrlblmsg *ifal = NLMSG_DATA(n); int len = n->nlmsg_len; struct rtattr *tb[IFAL_MAX+1]; - char abuf[256]; if (n->nlmsg_type != RTM_NEWADDRLABEL && n->nlmsg_type != RTM_DELADDRLABEL) return 0; @@ -78,8 +77,7 @@ int print_addrlabel(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg fprintf(fp, "prefix %s/%u ", format_host(ifal->ifal_family, RTA_PAYLOAD(tb[IFAL_ADDRESS]), - RTA_DATA(tb[IFAL_ADDRESS]), - abuf, sizeof(abuf)), + RTA_DATA(tb[IFAL_ADDRESS])), ifal->ifal_prefixlen); } diff --git a/ip/iplink_geneve.c b/ip/iplink_geneve.c index 40c08ec270d15..c6e7bbe0ce20e 100644 --- a/ip/iplink_geneve.c +++ b/ip/iplink_geneve.c @@ -138,7 +138,6 @@ static int geneve_parse_opt(struct link_util *lu, int argc, char **argv, static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) { __u32 vni; - char s1[1024]; __u8 tos; if (!tb) @@ -156,7 +155,7 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (addr) fprintf(f, "remote %s ", - format_host(AF_INET, 4, &addr, s1, sizeof(s1))); + format_host(AF_INET, 4, &addr)); } else if (tb[IFLA_GENEVE_REMOTE6]) { struct in6_addr addr; @@ -164,7 +163,7 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (memcmp(&addr, &in6addr_any, sizeof(addr)) != 0) { if (IN6_IS_ADDR_MULTICAST(&addr)) fprintf(f, "remote %s ", - format_host(AF_INET6, sizeof(struct in6_addr), &addr, s1, sizeof(s1))); + format_host(AF_INET6, sizeof(struct in6_addr), &addr)); } } diff --git a/ip/iplink_vxlan.c b/ip/iplink_vxlan.c index 5c23cf534ce81..543522e139ff4 100644 --- a/ip/iplink_vxlan.c +++ b/ip/iplink_vxlan.c @@ -310,7 +310,6 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) unsigned int link; __u8 tos; __u32 maxaddr; - char s1[1024]; char s2[64]; if (!tb) @@ -329,10 +328,10 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (addr) { if (IN_MULTICAST(ntohl(addr))) fprintf(f, "group %s ", - format_host(AF_INET, 4, &addr, s1, sizeof(s1))); + format_host(AF_INET, 4, &addr)); else fprintf(f, "remote %s ", - format_host(AF_INET, 4, &addr, s1, sizeof(s1))); + format_host(AF_INET, 4, &addr)); } } else if (tb[IFLA_VXLAN_GROUP6]) { struct in6_addr addr; @@ -341,10 +340,10 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (memcmp(&addr, &in6addr_any, sizeof(addr)) != 0) { if (IN6_IS_ADDR_MULTICAST(&addr)) fprintf(f, "group %s ", - format_host(AF_INET6, sizeof(struct in6_addr), &addr, s1, sizeof(s1))); + format_host(AF_INET6, sizeof(struct in6_addr), &addr)); else fprintf(f, "remote %s ", - format_host(AF_INET6, sizeof(struct in6_addr), &addr, s1, sizeof(s1))); + format_host(AF_INET6, sizeof(struct in6_addr), &addr)); } } @@ -353,14 +352,14 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (addr) fprintf(f, "local %s ", - format_host(AF_INET, 4, &addr, s1, sizeof(s1))); + format_host(AF_INET, 4, &addr)); } else if (tb[IFLA_VXLAN_LOCAL6]) { struct in6_addr addr; memcpy(&addr, RTA_DATA(tb[IFLA_VXLAN_LOCAL6]), sizeof(struct in6_addr)); if (memcmp(&addr, &in6addr_any, sizeof(addr)) != 0) fprintf(f, "local %s ", - format_host(AF_INET6, sizeof(struct in6_addr), &addr, s1, sizeof(s1))); + format_host(AF_INET6, sizeof(struct in6_addr), &addr)); } if (tb[IFLA_VXLAN_LINK] && diff --git a/ip/ipmaddr.c b/ip/ipmaddr.c index 347990b5c8f52..c3673979f9761 100644 --- a/ip/ipmaddr.c +++ b/ip/ipmaddr.c @@ -204,8 +204,6 @@ static void print_maddr(FILE *fp, struct ma_info *list) list->addr.bytelen, 0, b1, sizeof(b1))); } else { - char abuf[256]; - switch (list->addr.family) { case AF_INET: fprintf(fp, "inet "); @@ -219,9 +217,7 @@ static void print_maddr(FILE *fp, struct ma_info *list) } fprintf(fp, "%s", format_host(list->addr.family, - -1, - list->addr.data, - abuf, sizeof(abuf))); + -1, list->addr.data)); } if (list->users != 1) fprintf(fp, " users %d", list->users); diff --git a/ip/ipneigh.c b/ip/ipneigh.c index 6458c8eaa6b1e..583aad30dc820 100644 --- a/ip/ipneigh.c +++ b/ip/ipneigh.c @@ -198,7 +198,6 @@ int print_neigh(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) struct ndmsg *r = NLMSG_DATA(n); int len = n->nlmsg_len; struct rtattr *tb[NDA_MAX+1]; - char abuf[256]; static int logit = 1; if (n->nlmsg_type != RTM_NEWNEIGH && n->nlmsg_type != RTM_DELNEIGH && @@ -281,8 +280,7 @@ int print_neigh(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, "%s ", format_host(r->ndm_family, RTA_PAYLOAD(tb[NDA_DST]), - RTA_DATA(tb[NDA_DST]), - abuf, sizeof(abuf))); + RTA_DATA(tb[NDA_DST]))); } if (!filter.index && r->ndm_ifindex) fprintf(fp, "dev %s ", ll_index_to_name(r->ndm_ifindex)); diff --git a/ip/iproute.c b/ip/iproute.c index 19b28701d4da1..8315ad3e6c6ac 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -380,8 +380,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) } else { fprintf(fp, "%s ", format_host(r->rtm_family, RTA_PAYLOAD(tb[RTA_DST]), - RTA_DATA(tb[RTA_DST]), - abuf, sizeof(abuf)) + RTA_DATA(tb[RTA_DST])) ); } } else if (r->rtm_dst_len) { @@ -400,8 +399,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) } else { fprintf(fp, "from %s ", format_host(r->rtm_family, RTA_PAYLOAD(tb[RTA_SRC]), - RTA_DATA(tb[RTA_SRC]), - abuf, sizeof(abuf)) + RTA_DATA(tb[RTA_SRC])) ); } } else if (r->rtm_src_len) { @@ -410,8 +408,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) if (tb[RTA_NEWDST]) { fprintf(fp, "as to %s ", format_host(r->rtm_family, RTA_PAYLOAD(tb[RTA_NEWDST]), - RTA_DATA(tb[RTA_NEWDST]), - abuf, sizeof(abuf)) + RTA_DATA(tb[RTA_NEWDST])) ); } @@ -427,8 +424,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, "via %s ", format_host(r->rtm_family, RTA_PAYLOAD(tb[RTA_GATEWAY]), - RTA_DATA(tb[RTA_GATEWAY]), - abuf, sizeof(abuf))); + RTA_DATA(tb[RTA_GATEWAY]))); } if (tb[RTA_VIA]) { size_t len = RTA_PAYLOAD(tb[RTA_VIA]) - 2; @@ -436,8 +432,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, "via %s %s ", family_name(via->rtvia_family), - format_host(via->rtvia_family, len, via->rtvia_addr, - abuf, sizeof(abuf))); + format_host(via->rtvia_family, len, via->rtvia_addr)); } if (tb[RTA_OIF] && filter.oifmask != -1) fprintf(fp, "dev %s ", ll_index_to_name(*(int *)RTA_DATA(tb[RTA_OIF]))); @@ -671,8 +666,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, " via %s ", format_host(r->rtm_family, RTA_PAYLOAD(tb[RTA_GATEWAY]), - RTA_DATA(tb[RTA_GATEWAY]), - abuf, sizeof(abuf))); + RTA_DATA(tb[RTA_GATEWAY]))); } if (tb[RTA_VIA]) { size_t len = RTA_PAYLOAD(tb[RTA_VIA]) - 2; @@ -680,8 +674,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, "via %s %s ", family_name(via->rtvia_family), - format_host(via->rtvia_family, len, via->rtvia_addr, - abuf, sizeof(abuf))); + format_host(via->rtvia_family, len, via->rtvia_addr)); } if (tb[RTA_FLOW]) { __u32 to = rta_getattr_u32(tb[RTA_FLOW]); diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c index a53e11d9478e9..42abe3753ac6a 100644 --- a/ip/iproute_lwtunnel.c +++ b/ip/iproute_lwtunnel.c @@ -58,15 +58,13 @@ static const char *format_encap_type(int type) static void print_encap_mpls(FILE *fp, struct rtattr *encap) { struct rtattr *tb[MPLS_IPTUNNEL_MAX+1]; - char abuf[256]; parse_rtattr_nested(tb, MPLS_IPTUNNEL_MAX, encap); if (tb[MPLS_IPTUNNEL_DST]) fprintf(fp, " %s ", format_host(AF_MPLS, RTA_PAYLOAD(tb[MPLS_IPTUNNEL_DST]), - RTA_DATA(tb[MPLS_IPTUNNEL_DST]), - abuf, sizeof(abuf))); + RTA_DATA(tb[MPLS_IPTUNNEL_DST]))); } static void print_encap_ip(FILE *fp, struct rtattr *encap) diff --git a/ip/iprule.c b/ip/iprule.c index dc45c6b43e606..345b3b042307d 100644 --- a/ip/iprule.c +++ b/ip/iprule.c @@ -94,8 +94,7 @@ int print_rule(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) } else { fprintf(fp, "from %s ", format_host(r->rtm_family, RTA_PAYLOAD(tb[FRA_SRC]), - RTA_DATA(tb[FRA_SRC]), - abuf, sizeof(abuf)) + RTA_DATA(tb[FRA_SRC])) ); } } else if (r->rtm_src_len) { @@ -115,8 +114,7 @@ int print_rule(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) } else { fprintf(fp, "to %s ", format_host(r->rtm_family, RTA_PAYLOAD(tb[FRA_DST]), - RTA_DATA(tb[FRA_DST]), - abuf, sizeof(abuf))); + RTA_DATA(tb[FRA_DST]))); } } else if (r->rtm_dst_len) { fprintf(fp, "to 0/%d ", r->rtm_dst_len); @@ -191,8 +189,7 @@ int print_rule(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, "map-to %s ", format_host(r->rtm_family, RTA_PAYLOAD(tb[RTA_GATEWAY]), - RTA_DATA(tb[RTA_GATEWAY]), - abuf, sizeof(abuf))); + RTA_DATA(tb[RTA_GATEWAY]))); } else fprintf(fp, "masquerade"); } else if (r->rtm_type == FR_ACT_GOTO) { diff --git a/ip/iptoken.c b/ip/iptoken.c index 1d22c03c63ab7..02fe98e249526 100644 --- a/ip/iptoken.c +++ b/ip/iptoken.c @@ -51,7 +51,6 @@ static int print_token(const struct sockaddr_nl *who, struct nlmsghdr *n, void * int len = n->nlmsg_len; struct rtattr *tb[IFLA_MAX + 1]; struct rtattr *ltb[IFLA_INET6_MAX + 1]; - char abuf[256]; if (n->nlmsg_type != RTM_NEWLINK) return -1; @@ -82,8 +81,7 @@ static int print_token(const struct sockaddr_nl *who, struct nlmsghdr *n, void * fprintf(fp, "token %s ", format_host(ifi->ifi_family, RTA_PAYLOAD(ltb[IFLA_INET6_TOKEN]), - RTA_DATA(ltb[IFLA_INET6_TOKEN]), - abuf, sizeof(abuf))); + RTA_DATA(ltb[IFLA_INET6_TOKEN]))); fprintf(fp, "dev %s ", ll_index_to_name(ifi->ifi_index)); fprintf(fp, "\n"); fflush(fp); diff --git a/ip/iptunnel.c b/ip/iptunnel.c index 65a4e6e9c1a5a..bfee99561615a 100644 --- a/ip/iptunnel.c +++ b/ip/iptunnel.c @@ -308,7 +308,7 @@ static void print_tunnel(struct ip_tunnel_parm *p) printf("%s: %s/ip remote %s local %s", p->name, tnl_strproto(p->iph.protocol), - p->iph.daddr ? format_host(AF_INET, 4, &p->iph.daddr, s1, sizeof(s1)) : "any", + p->iph.daddr ? format_host_r(AF_INET, 4, &p->iph.daddr, s1, sizeof(s1)) : "any", p->iph.saddr ? rt_addr_n2a(AF_INET, 4, &p->iph.saddr, s2, sizeof(s2)) : "any"); if (p->iph.protocol == IPPROTO_IPV6 && (p->i_flags & SIT_ISATAP)) { @@ -324,7 +324,7 @@ static void print_tunnel(struct ip_tunnel_parm *p) if (prl[i].addr != htonl(INADDR_ANY)) { printf(" %s %s ", (prl[i].flags & PRL_DEFAULT) ? "pdr" : "pr", - format_host(AF_INET, 4, &prl[i].addr, s1, sizeof(s1))); + format_host(AF_INET, 4, &prl[i].addr)); } } } @@ -360,7 +360,7 @@ static void print_tunnel(struct ip_tunnel_parm *p) ip6rd.prefixlen); if (ip6rd.relay_prefix) { printf(" 6rd-relay_prefix %s/%u", - format_host(AF_INET, 4, &ip6rd.relay_prefix, s1, sizeof(s1)), + format_host(AF_INET, 4, &ip6rd.relay_prefix), ip6rd.relay_prefixlen); } } diff --git a/ip/link_gre.c b/ip/link_gre.c index c50963d79d3c5..bcf003aaa5d7a 100644 --- a/ip/link_gre.c +++ b/ip/link_gre.c @@ -339,7 +339,6 @@ get_failed: static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) { - char s1[1024]; char s2[64]; const char *local = "any"; const char *remote = "any"; @@ -353,7 +352,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) unsigned int addr = rta_getattr_u32(tb[IFLA_GRE_REMOTE]); if (addr) - remote = format_host(AF_INET, 4, &addr, s1, sizeof(s1)); + remote = format_host(AF_INET, 4, &addr); } fprintf(f, "remote %s ", remote); @@ -362,7 +361,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) unsigned int addr = rta_getattr_u32(tb[IFLA_GRE_LOCAL]); if (addr) - local = format_host(AF_INET, 4, &addr, s1, sizeof(s1)); + local = format_host(AF_INET, 4, &addr); } fprintf(f, "local %s ", local); diff --git a/ip/link_gre6.c b/ip/link_gre6.c index a48ea8b1ebae3..bddfc0ff97aa0 100644 --- a/ip/link_gre6.c +++ b/ip/link_gre6.c @@ -302,7 +302,6 @@ get_failed: static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) { - char s1[1024]; char s2[64]; const char *local = "any"; const char *remote = "any"; @@ -327,7 +326,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) memcpy(&addr, RTA_DATA(tb[IFLA_GRE_REMOTE]), sizeof(addr)); if (memcmp(&addr, &in6_addr_any, sizeof(addr))) - remote = format_host(AF_INET6, sizeof(addr), &addr, s1, sizeof(s1)); + remote = format_host(AF_INET6, sizeof(addr), &addr); } fprintf(f, "remote %s ", remote); @@ -338,7 +337,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) memcpy(&addr, RTA_DATA(tb[IFLA_GRE_LOCAL]), sizeof(addr)); if (memcmp(&addr, &in6_addr_any, sizeof(addr))) - local = format_host(AF_INET6, sizeof(addr), &addr, s1, sizeof(s1)); + local = format_host(AF_INET6, sizeof(addr), &addr); } fprintf(f, "local %s ", local); diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c index 04568ffbd81bf..8411a6a00a1b4 100644 --- a/ip/link_iptnl.c +++ b/ip/link_iptnl.c @@ -339,7 +339,7 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[ unsigned int addr = rta_getattr_u32(tb[IFLA_IPTUN_REMOTE]); if (addr) - remote = format_host(AF_INET, 4, &addr, s1, sizeof(s1)); + remote = format_host(AF_INET, 4, &addr); } fprintf(f, "remote %s ", remote); @@ -348,7 +348,7 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[ unsigned int addr = rta_getattr_u32(tb[IFLA_IPTUN_LOCAL]); if (addr) - local = format_host(AF_INET, 4, &addr, s1, sizeof(s1)); + local = format_host(AF_INET, 4, &addr); } fprintf(f, "local %s ", local); @@ -404,8 +404,7 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[ prefixlen); if (relayprefix) { printf("6rd-relay_prefix %s/%u ", - format_host(AF_INET, 4, &relayprefix, s1, - sizeof(s1)), + format_host(AF_INET, 4, &relayprefix), relayprefixlen); } } diff --git a/ip/link_vti.c b/ip/link_vti.c index 587993035e8d5..8052e7514989a 100644 --- a/ip/link_vti.c +++ b/ip/link_vti.c @@ -198,7 +198,6 @@ get_failed: static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) { - char s1[1024]; char s2[64]; const char *local = "any"; const char *remote = "any"; @@ -210,7 +209,7 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) unsigned int addr = *(__u32 *)RTA_DATA(tb[IFLA_VTI_REMOTE]); if (addr) - remote = format_host(AF_INET, 4, &addr, s1, sizeof(s1)); + remote = format_host(AF_INET, 4, &addr); } fprintf(f, "remote %s ", remote); @@ -219,7 +218,7 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) unsigned int addr = *(__u32 *)RTA_DATA(tb[IFLA_VTI_LOCAL]); if (addr) - local = format_host(AF_INET, 4, &addr, s1, sizeof(s1)); + local = format_host(AF_INET, 4, &addr); } fprintf(f, "local %s ", local); diff --git a/ip/link_vti6.c b/ip/link_vti6.c index 9a62eb5aa370d..9bcf7fe9dea46 100644 --- a/ip/link_vti6.c +++ b/ip/link_vti6.c @@ -197,7 +197,6 @@ get_failed: static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) { - char s1[1024]; char s2[64]; const char *local = "any"; const char *remote = "any"; @@ -210,7 +209,7 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (tb[IFLA_VTI_REMOTE]) { memcpy(&daddr, RTA_DATA(tb[IFLA_VTI_REMOTE]), sizeof(daddr)); - remote = format_host(AF_INET6, 16, &daddr, s1, sizeof(s1)); + remote = format_host(AF_INET6, 16, &daddr); } fprintf(f, "remote %s ", remote); @@ -218,7 +217,7 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (tb[IFLA_VTI_LOCAL]) { memcpy(&saddr, RTA_DATA(tb[IFLA_VTI_LOCAL]), sizeof(saddr)); - local = format_host(AF_INET6, 16, &saddr, s1, sizeof(s1)); + local = format_host(AF_INET6, 16, &saddr); } fprintf(f, "local %s ", local); diff --git a/ip/tcp_metrics.c b/ip/tcp_metrics.c index 3a649917191a8..f82604f458ada 100644 --- a/ip/tcp_metrics.c +++ b/ip/tcp_metrics.c @@ -95,7 +95,6 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n, struct genlmsghdr *ghdr; struct rtattr *attrs[TCP_METRICS_ATTR_MAX + 1], *a; int len = n->nlmsg_len; - char abuf[256]; inet_prefix daddr, saddr; int family, i, atype, stype, dlen = 0, slen = 0; @@ -194,7 +193,7 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n, fprintf(fp, "Deleted "); fprintf(fp, "%s", - format_host(family, dlen, &daddr.data, abuf, sizeof(abuf))); + format_host(family, dlen, &daddr.data)); a = attrs[TCP_METRICS_ATTR_AGE]; if (a) { @@ -298,8 +297,7 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n, if (slen) { fprintf(fp, " source %s", - format_host(family, slen, &saddr.data, abuf, - sizeof(abuf))); + format_host(family, slen, &saddr.data)); } fprintf(fp, "\n"); diff --git a/lib/utils.c b/lib/utils.c index fa35f4d044064..22a5ef8fa8213 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -818,7 +818,7 @@ static const char *resolve_address(const void *addr, int len, int af) } #endif -const char *format_host(int af, int len, const void *addr, +const char *format_host_r(int af, int len, const void *addr, char *buf, int buflen) { #ifdef RESOLVE_HOSTNAMES @@ -835,6 +835,13 @@ const char *format_host(int af, int len, const void *addr, return rt_addr_n2a(af, len, addr, buf, buflen); } +const char *format_host(int af, int len, const void *addr) +{ + static char buf[256]; + + return format_host_r(af, len, addr, buf, 256); +} + char *hexstring_n2a(const __u8 *str, int len, char *buf, int blen) { diff --git a/misc/ss.c b/misc/ss.c index 192389cc82371..38cf3312a746e 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -1016,10 +1016,10 @@ static void inet_addr_print(const inet_prefix *a, int port, unsigned int ifindex buf[0] = '*'; buf[1] = 0; } else { - ap = format_host(AF_INET, 4, a->data, buf, sizeof(buf)); + ap = format_host(AF_INET, 4, a->data); } } else { - ap = format_host(a->family, 16, a->data, buf, sizeof(buf)); + ap = format_host(a->family, 16, a->data); est_len = strlen(ap); if (est_len <= addr_width) est_len = addr_width; diff --git a/tc/m_nat.c b/tc/m_nat.c index deb071da90daf..4b90121c4b99e 100644 --- a/tc/m_nat.c +++ b/tc/m_nat.c @@ -191,9 +191,9 @@ print_nat(struct action_util *au, FILE * f, struct rtattr *arg) fprintf(f, " nat %s %s/%d %s %s", sel->flags & TCA_NAT_FLAG_EGRESS ? "egress" : "ingress", - format_host(AF_INET, 4, &sel->old_addr, buf1, sizeof(buf1)), + format_host_r(AF_INET, 4, &sel->old_addr, buf1, sizeof(buf1)), len, - format_host(AF_INET, 4, &sel->new_addr, buf2, sizeof(buf2)), + format_host_r(AF_INET, 4, &sel->new_addr, buf2, sizeof(buf2)), action_n2a(sel->action, buf3, sizeof(buf3))); if (show_stats) { -- 2.7.2