ping: Verify whether a datagram timestamp was actually received.
ping(8) uses SO_TIMESTAMP, which attaches a timestamp to each IP datagram at the time it's received by the kernel. Except that occasionally it doesn't. Add a check to see whether such a timestamp was actually set before trying to read it. This fixes segfaults that can happen when the kernel doesn't attach a timestamp. The bug has always existed, but prior to r351461 it manifested as an implausible round-trip-time, not a segfault. Reported by: pho MFC after: 3 days MFC-With: 351461
This commit is contained in:
parent
b799855a78
commit
6a82e3a0a3
@ -931,7 +931,8 @@ main(int argc, char *const *argv)
|
||||
continue;
|
||||
}
|
||||
#ifdef SO_TIMESTAMP
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
if (cmsg != NULL &&
|
||||
cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SCM_TIMESTAMP &&
|
||||
cmsg->cmsg_len == CMSG_LEN(sizeof *tv)) {
|
||||
/* Copy to avoid alignment problems: */
|
||||
|
Loading…
Reference in New Issue
Block a user