Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jun 2026 12:36:02 +0000
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Cc:        androvonx95 <androvonx95@tutamail.com>
Subject:   git: 925f53682469 - main - improve renice user error messages
Message-ID:  <6a295a32.3e002.31d3fa83@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by imp:

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

commit 925f53682469ea12c017b48114b16e8f1627fb0b
Author:     androvonx95 <androvonx95@tutamail.com>
AuthorDate: 2025-07-15 18:01:28 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2026-06-10 12:35:02 +0000

    improve renice user error messages
    
    Improve error handling for invalid user names and UIDs in renice:
    - Use warnx() and err() for consistent error reporting
    - Set errno = EINVAL for invalid input
    - Provide clearer error messages for invalid user names and UIDs
    - Add test cases for invalid user input
    
    Signed-off-by: androvonx95 <androvonx95@tutamail.com>
    Reviewed by: imp
    Pull Request: https://github.com/freebsd/freebsd-src/pull/1768
---
 usr.bin/renice/renice.c             | 31 +++++++++++++++++---
 usr.bin/renice/tests/renice_test.sh | 57 +++++++++++++++++++++++++++++++++++++
 2 files changed, 84 insertions(+), 4 deletions(-)

diff --git a/usr.bin/renice/renice.c b/usr.bin/renice/renice.c
index 4931a39c0f67..240ddf54134c 100644
--- a/usr.bin/renice/renice.c
+++ b/usr.bin/renice/renice.c
@@ -97,6 +97,7 @@ main(int argc, char *argv[])
 			if ((pwd = getpwnam(*argv)) != NULL)
 				who = pwd->pw_uid;
 			else if (getnum("uid", *argv, &who)) {
+				warnx("invalid uid: %s", *argv);
 				errs++;
 				continue;
 			} else if (who < 0) {
@@ -106,6 +107,7 @@ main(int argc, char *argv[])
 			}
 		} else {
 			if (getnum("pid", *argv, &who)) {
+				warnx("invalid pid: %s", *argv);
 				errs++;
 				continue;
 			}
@@ -126,11 +128,27 @@ static int
 donice(int which, int who, int prio, bool incr)
 {
 	int oldprio;
+	const char *who_type;
+
+	switch (which) {
+	case PRIO_PROCESS:
+		who_type = "process";
+		break;
+	case PRIO_PGRP:
+		who_type = "process group";
+		break;
+	case PRIO_USER:
+		who_type = "user";
+		break;
+	default:
+		who_type = "unknown";
+		break;
+	}
 
 	errno = 0;
 	oldprio = getpriority(which, who);
 	if (oldprio == -1 && errno) {
-		warn("%d: getpriority", who);
+		warnx("%s %d: getpriority failed", who_type, who);
 		return (1);
 	}
 	if (incr)
@@ -140,11 +158,16 @@ donice(int which, int who, int prio, bool incr)
 	if (prio < PRIO_MIN)
 		prio = PRIO_MIN;
 	if (setpriority(which, who, prio) < 0) {
-		warn("%d: setpriority", who);
+		if (errno == EPERM) {
+			warnx("Permission denied: cannot set priority for %s %d",
+			    who_type, who);
+			return (1);
+		}
+		warnx("%s %d: setpriority failed", who_type, who);
 		return (1);
 	}
-	fprintf(stderr, "%d: old priority %d, new priority %d\n", who,
-	    oldprio, prio);
+	fprintf(stderr, "%s %d: old priority %d, new priority %d\n", who_type,
+	    who, oldprio, prio);
 	return (0);
 }
 
diff --git a/usr.bin/renice/tests/renice_test.sh b/usr.bin/renice/tests/renice_test.sh
index 7983eb594716..116f1be60fe9 100755
--- a/usr.bin/renice/tests/renice_test.sh
+++ b/usr.bin/renice/tests/renice_test.sh
@@ -51,6 +51,50 @@ renice_rel_pid_body() {
 	kill $pid
 }
 
+atf_test_case renice_invalid_priority
+renice_invalid_priority_head() {
+	atf_set "descr" "Verify handling of invalid priority values"
+}
+renice_invalid_priority_body() {
+	local pid
+	sleep 60 &
+	pid=$!
+
+	# Test out of range priority
+	atf_check -s exit:1 -e match:"numeric value out of range" renice 100000 $pid
+	atf_check -s exit:1 -e match:"numeric value out of range" renice -100000 $pid
+
+	# Test invalid priority format
+	atf_check -s exit:1 -e match:"invalid numeric value" renice "abc" $pid
+	atf_check -s exit:1 -e match:"invalid numeric value" renice "12.3" $pid
+
+	kill $pid
+}
+
+atf_test_case renice_permission_denied
+renice_permission_denied_head() {
+	atf_set "descr" "Verify handling of permission denied cases"
+}
+renice_permission_denied_body() {
+	local pid
+	sleep 60 &
+	pid=$!
+
+	# Test permission denied with non-root user
+	atf_check -s exit:1 -e match:"Permission denied: cannot set priority" renice -n 10 $pid
+
+	kill $pid
+}
+
+atf_test_case renice_nonexistent_process
+renice_nonexistent_process_head() {
+	atf_set "descr" "Verify handling of non-existent process"
+}
+renice_nonexistent_process_body() {
+	# Test with a non-existent PID
+	atf_check -s exit:1 -e match:"process 999999 not found" renice 10 999999
+}
+
 atf_test_case renice_abs_pgid
 renice_abs_pgid_head() {
 	atf_set "descr" "Set a process group's nice number to an absolute value"
@@ -115,6 +159,18 @@ renice_rel_user_body() {
 	kill $pid
 }
 
+atf_test_case renice_invalid_user
+renice_invalid_user_head() {
+	atf_set "descr" "Verify handling of invalid user names"
+}
+renice_invalid_user_body() {
+	# Test with non-existent user name
+	atf_check -s exit:1 -e match:"Invalid user name or UID: nonexist" renice 10 -u nonexist
+
+	# Test with invalid UID
+	atf_check -s exit:1 -e match:"Invalid UID: -1" renice 10 -u -1
+}
+
 atf_test_case renice_delim
 renice_delim_head() {
 	atf_set "descr" "Test various delimiter positions"
@@ -169,6 +225,7 @@ atf_init_test_cases() {
 	atf_add_test_case renice_rel_pgid
 	atf_add_test_case renice_abs_user
 	atf_add_test_case renice_rel_user
+	atf_add_test_case renice_invalid_user
 	atf_add_test_case renice_delim
 	atf_add_test_case renice_incr_noarg
 }


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a295a32.3e002.31d3fa83>