Fix garbage IP addresses in UDP log_in_vain messages
If multiple threads emit a UDP log_in_vain message concurrently, the IP addresses could be garbage due to concurrent usage of a single string buffer inside inet_ntoa(). Use inet_ntoa_r() with two stack buffers instead. Reported by: Mark Martinec <Mark.Martinec+freebsd@ijs.si> MFC after: 3 days Relnotes: yes Sponsored by: Dell EMC
This commit is contained in:
parent
337e20c486
commit
a55a27b7c6
@ -667,13 +667,13 @@ udp_input(struct mbuf **mp, int *offp, int proto)
|
||||
INPLOOKUP_RLOCKPCB, ifp, m);
|
||||
if (inp == NULL) {
|
||||
if (udp_log_in_vain) {
|
||||
char buf[4*sizeof "123"];
|
||||
char src[INET_ADDRSTRLEN];
|
||||
char dst[INET_ADDRSTRLEN];
|
||||
|
||||
strcpy(buf, inet_ntoa(ip->ip_dst));
|
||||
log(LOG_INFO,
|
||||
"Connection attempt to UDP %s:%d from %s:%d\n",
|
||||
buf, ntohs(uh->uh_dport), inet_ntoa(ip->ip_src),
|
||||
ntohs(uh->uh_sport));
|
||||
inet_ntoa_r(ip->ip_dst, dst), ntohs(uh->uh_dport),
|
||||
inet_ntoa_r(ip->ip_src, src), ntohs(uh->uh_sport));
|
||||
}
|
||||
UDPSTAT_INC(udps_noport);
|
||||
if (m->m_flags & (M_BCAST | M_MCAST)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user