freebsd-src/sbin/ping
Cy Schubert 70960bb86a ping: Fix unsigned integer underflow resuling in a ping -R segfault
ping -R (F_RROUTE) will loop at ping.c:1381 until it segfaults or
the unsigned int hlen happens to be less than the size of an IP header:

slippy$ ping -R 192.168.0.101
PING 192.168.0.101 (192.168.0.101): 56 data bytes
64 bytes from 192.168.0.101: icmp_seq=0 ttl=63 time=1.081 ms
RR: 	192.168.0.1
	192.168.0.101
	192.168.0.101
	10.1.1.254
	10.1.1.91
unknown option bb
unknown option 32
unknown option 6
...
unknown option 96
unknown option 2d
Segmentation fault

The reason for this is while looping through loose source routing (LSRR)
and strict source routing (SSRR), hlen will become smaller than the IP
header. It may even become negative. This should terminate the loop.
However, when hlen is unsigned, an integer underflow occurs becoming a
large number causing the loop to continue virtually forever until hlen
is either by chance smaller than the lenghth of an IP header or it
segfaults.

Reviewed by:	asomers
Fixes:		46d7b45a26
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D38744
2023-02-24 06:50:53 -08:00
..
tests ping: Add ATF-Python tests 2023-02-20 10:34:33 +00:00
main.c ping: main.c: Consistent use of white space/tabs 2022-11-03 10:39:32 -04:00
main.h ping: split the visual part of -f into a new option -. 2022-04-18 18:10:50 +02:00
Makefile ping: allow building without INET support 2020-11-28 23:24:19 +00:00
Makefile.depend Update Makefile.depend files 2019-12-11 17:37:53 +00:00
Makefile.depend.options Add Makefile.depend.options 2019-12-11 17:37:37 +00:00
ping.8 ping(8): man page cleanup 2023-01-02 00:48:25 +00:00
ping.c ping: Fix unsigned integer underflow resuling in a ping -R segfault 2023-02-24 06:50:53 -08:00
ping.h Merge ping6 to ping 2020-11-26 04:29:30 +00:00
ping6.c ping(8): Correct a typo in source code comment 2022-09-04 13:26:34 +02:00
ping6.h Merge ping6 to ping 2020-11-26 04:29:30 +00:00
utils.c ping: Move in_cksum() to a separate source file 2019-08-17 15:25:01 +00:00
utils.h ping: fix include guard symbol name to reflect the header file name 2019-08-23 15:24:18 +00:00