diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-02-09 22:15:08 +0400 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-02-09 22:16:51 +0400 |
commit | 630d673c143dc57d92f8c28888eb136927f6825d (patch) | |
tree | 4c55570779d0de8848018066c5f9b3c986f98b2d | |
parent | 2492fc3f55e8e3ac88dd20c3244343e272918545 (diff) | |
download | slirp-630d673c143dc57d92f8c28888eb136927f6825d.zip slirp-630d673c143dc57d92f8c28888eb136927f6825d.tar.gz slirp-630d673c143dc57d92f8c28888eb136927f6825d.tar.bz2 |
Replace inet_ntoa() with safer inet_ntop()
inet_ntoa() returns a static pointer which is subject to safety issues.
Use the recommended alternative.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
-rw-r--r-- | src/arp_table.c | 8 | ||||
-rw-r--r-- | src/ip_icmp.c | 10 | ||||
-rw-r--r-- | src/misc.c | 22 | ||||
-rw-r--r-- | src/udp.c | 6 |
4 files changed, 29 insertions, 17 deletions
diff --git a/src/arp_table.c b/src/arp_table.c index ba8c8a4..3cf2ecc 100644 --- a/src/arp_table.c +++ b/src/arp_table.c @@ -35,9 +35,11 @@ void arp_table_add(Slirp *slirp, uint32_t ip_addr, ArpTable *arptbl = &slirp->arp_table; int i; char ethaddr_str[ETH_ADDRSTRLEN]; + char addr[INET_ADDRSTRLEN]; DEBUG_CALL("arp_table_add"); - DEBUG_ARG("ip = %s", inet_ntoa((struct in_addr){ .s_addr = ip_addr })); + DEBUG_ARG("ip = %s", inet_ntop(AF_INET, &(struct in_addr){ .s_addr = ip_addr }, + addr, sizeof(addr))); DEBUG_ARG("hw addr = %s", slirp_ether_ntoa(ethaddr, ethaddr_str, sizeof(ethaddr_str))); @@ -69,9 +71,11 @@ bool arp_table_search(Slirp *slirp, uint32_t ip_addr, ArpTable *arptbl = &slirp->arp_table; int i; char ethaddr_str[ETH_ADDRSTRLEN]; + char addr[INET_ADDRSTRLEN]; DEBUG_CALL("arp_table_search"); - DEBUG_ARG("ip = %s", inet_ntoa((struct in_addr){ .s_addr = ip_addr })); + DEBUG_ARG("ip = %s", inet_ntop(AF_INET, &(struct in_addr){ .s_addr = ip_addr }, + addr, sizeof(addr))); /* If broadcast address */ if (ip_addr == 0 || ip_addr == 0xffffffff || ip_addr == broadcast_addr) { diff --git a/src/ip_icmp.c b/src/ip_icmp.c index 4e47d51..554ffa2 100644 --- a/src/ip_icmp.c +++ b/src/ip_icmp.c @@ -324,10 +324,12 @@ void icmp_forward_error(struct mbuf *msrc, uint8_t type, uint8_t code, int minsi goto end_error; ip = mtod(msrc, struct ip *); if (slirp_debug & DBG_MISC) { - char bufa[20], bufb[20]; - slirp_pstrcpy(bufa, sizeof(bufa), inet_ntoa(ip->ip_src)); - slirp_pstrcpy(bufb, sizeof(bufb), inet_ntoa(ip->ip_dst)); - DEBUG_MISC(" %.16s to %.16s", bufa, bufb); + char addr_src[INET_ADDRSTRLEN]; + char addr_dst[INET_ADDRSTRLEN]; + + inet_ntop(AF_INET, &ip->ip_src, addr_src, sizeof(addr_src)); + inet_ntop(AF_INET, &ip->ip_dst, addr_dst, sizeof(addr_dst)); + DEBUG_MISC(" %.16s to %.16s", addr_src, addr_dst); } if (ip->ip_off & IP_OFFMASK) goto end_error; /* Only reply to fragment 0 */ @@ -301,6 +301,7 @@ char *slirp_connection_info(Slirp *slirp) uint16_t dst_port; struct socket *so; const char *state; + char addr[INET_ADDRSTRLEN]; char buf[20]; g_string_append_printf(str, @@ -330,10 +331,11 @@ char *slirp_connection_info(Slirp *slirp) } slirp_fmt0(buf, sizeof(buf), " TCP[%s]", state); g_string_append_printf(str, "%-19s %3d %15s %5d ", buf, so->s, - src.sin_addr.s_addr ? inet_ntoa(src.sin_addr) : - "*", + src.sin_addr.s_addr ? + inet_ntop(AF_INET, &src.sin_addr, addr, sizeof(addr)) : "*", ntohs(src.sin_port)); - g_string_append_printf(str, "%15s %5d %5d %5d\n", inet_ntoa(dst_addr), + g_string_append_printf(str, "%15s %5d %5d %5d\n", + inet_ntop(AF_INET, &dst_addr, addr, sizeof(addr)), ntohs(dst_port), so->so_rcv.sb_cc, so->so_snd.sb_cc); } @@ -354,10 +356,11 @@ char *slirp_connection_info(Slirp *slirp) dst_port = so->so_fport; } g_string_append_printf(str, "%-19s %3d %15s %5d ", buf, so->s, - src.sin_addr.s_addr ? inet_ntoa(src.sin_addr) : - "*", + src.sin_addr.s_addr ? + inet_ntop(AF_INET, &src.sin_addr, addr, sizeof(addr)) : "*", ntohs(src.sin_port)); - g_string_append_printf(str, "%15s %5d %5d %5d\n", inet_ntoa(dst_addr), + g_string_append_printf(str, "%15s %5d %5d %5d\n", + inet_ntop(AF_INET, &dst_addr, addr, sizeof(addr)), ntohs(dst_port), so->so_rcv.sb_cc, so->so_snd.sb_cc); } @@ -368,9 +371,10 @@ char *slirp_connection_info(Slirp *slirp) src.sin_addr = so->so_laddr; dst_addr = so->so_faddr; g_string_append_printf(str, "%-19s %3d %15s - ", buf, so->s, - src.sin_addr.s_addr ? inet_ntoa(src.sin_addr) : - "*"); - g_string_append_printf(str, "%15s - %5d %5d\n", inet_ntoa(dst_addr), + src.sin_addr.s_addr ? + inet_ntop(AF_INET, &src.sin_addr, addr, sizeof(addr)) : "*"); + g_string_append_printf(str, "%15s - %5d %5d\n", + inet_ntop(AF_INET, &dst_addr, addr, sizeof(addr)), so->so_rcv.sb_cc, so->so_snd.sb_cc); } @@ -251,6 +251,8 @@ int udp_output(struct socket *so, struct mbuf *m, struct sockaddr_in *saddr, struct sockaddr_in *daddr, int iptos) { Slirp *slirp = m->slirp; + char addr[INET_ADDRSTRLEN]; + M_DUP_DEBUG(slirp, m, 0, sizeof(struct udpiphdr)); register struct udpiphdr *ui; @@ -259,8 +261,8 @@ int udp_output(struct socket *so, struct mbuf *m, struct sockaddr_in *saddr, DEBUG_CALL("udp_output"); DEBUG_ARG("so = %p", so); DEBUG_ARG("m = %p", m); - DEBUG_ARG("saddr = %s", inet_ntoa(saddr->sin_addr)); - DEBUG_ARG("daddr = %s", inet_ntoa(daddr->sin_addr)); + DEBUG_ARG("saddr = %s", inet_ntop(AF_INET, &saddr->sin_addr, addr, sizeof(addr))); + DEBUG_ARG("daddr = %s", inet_ntop(AF_INET, &daddr->sin_addr, addr, sizeof(addr))); /* * Adjust for header |