git: b88df1e893c4 - main - Reapply "sbin/ping: allow normal users to specify larger packets"

From: Pedro F. Giffuni <pfg_at_FreeBSD.org>
Date: Wed, 16 Oct 2024 18:40:08 UTC
The branch main has been updated by pfg:

URL: https://cgit.FreeBSD.org/src/commit/?id=b88df1e893c455731c7915f72a3b97b078ab04e2

commit b88df1e893c455731c7915f72a3b97b078ab04e2
Author:     Pedro F. Giffuni <pfg@FreeBSD.org>
AuthorDate: 2024-10-16 18:35:44 +0000
Commit:     Pedro F. Giffuni <pfg@FreeBSD.org>
CommitDate: 2024-10-16 18:39:48 +0000

    Reapply "sbin/ping: allow normal users to specify larger packets"
    
    The ping tests were originally broken by an unrelated isue that
    is now fixed ( 2926c2594249f64fecbbdcb0b0b9a3591931ab04 ).
    
    THanks to kp@ for fixing the test and Jose Luis Duran for pinting it out.
    
    This reverts commit 7bc0cb91a2dfc7e23d96efd0fb7866ee2a23ba88.
---
 sbin/ping/ping.8 |  3 +--
 sbin/ping/ping.c | 11 +++++------
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8
index 0eaec196e1e3..951049d0f252 100644
--- a/sbin/ping/ping.8
+++ b/sbin/ping/ping.8
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd September 15, 2023
+.Dd October 15, 2024
 .Dt PING 8
 .Os
 .Sh NAME
@@ -312,7 +312,6 @@ with the 8 bytes of
 ICMP
 header data.
 .Pp
-For IPv4, only the super-user may specify values more than default.
 This option cannot be used with ping sweeps.
 .Pp
 For IPv6, you may need to specify
diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c
index d9d544bc75c8..e6b1247af497 100644
--- a/sbin/ping/ping.c
+++ b/sbin/ping/ping.c
@@ -96,8 +96,8 @@
 #define	DEFDATALEN	56		/* default data length */
 #define	FLOOD_BACKOFF	20000		/* usecs to back off if F_FLOOD mode */
 					/* runs out of buffer space */
-#define	MAXIPLEN	(sizeof(struct ip) + MAX_IPOPTLEN)
-#define	MAXICMPLEN	(ICMP_ADVLENMIN + MAX_IPOPTLEN)
+#define	MAXIPLEN	((int)sizeof(struct ip) + MAX_IPOPTLEN)
+#define	MAXPAYLOAD	(IP_MAXPACKET - MAXIPLEN - ICMP_MINLEN)
 #define	MAXWAIT		10000		/* max ms to wait for response */
 #define	MAXALARM	(60 * 60)	/* max seconds for alarm timeout */
 #define	MAXTOS		255
@@ -458,11 +458,10 @@ ping(int argc, char *const *argv)
 				errx(EX_USAGE, "invalid packet size: `%s'",
 				    optarg);
 			datalen = (int)ltmp;
-			if (uid != 0 && datalen > DEFDATALEN) {
-				errno = EPERM;
-				err(EX_NOPERM,
+			if (datalen > MAXPAYLOAD) {
+				errx(EX_USAGE,
 				    "packet size too large: %d > %u",
-				    datalen, DEFDATALEN);
+				    datalen, MAXPAYLOAD);
 			}
 			break;
 		case 'T':		/* multicast TTL */