svn commit: r366643 - stable/12/usr.sbin/pwm

Andriy Gapon avg at FreeBSD.org
Mon Oct 12 11:04:53 UTC 2020


Author: avg
Date: Mon Oct 12 11:04:52 2020
New Revision: 366643
URL: https://svnweb.freebsd.org/changeset/base/366643

Log:
  MFC r366144: pwm(8): fix potential duty overflow, use unsigneds for period and duty

Modified:
  stable/12/usr.sbin/pwm/pwm.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/usr.sbin/pwm/pwm.c
==============================================================================
--- stable/12/usr.sbin/pwm/pwm.c	Mon Oct 12 11:03:26 2020	(r366642)
+++ stable/12/usr.sbin/pwm/pwm.c	Mon Oct 12 11:04:52 2020	(r366643)
@@ -76,7 +76,7 @@ main(int argc, char *argv[])
 {
 	struct pwm_state state;
 	int fd;
-	int period, duty;
+	u_int period, duty;
 	int action, ch;
 	cap_rights_t right_ioctl;
 	const unsigned long pwm_ioctls[] = {PWMGETSTATE, PWMSETSTATE};
@@ -109,16 +109,16 @@ main(int argc, char *argv[])
 			if (action & PWM_SHOW_CONFIG)
 				usage();
 			action |= PWM_PERIOD;
-			period = strtol(optarg, NULL, 10);
+			period = strtoul(optarg, NULL, 10);
 			break;
 		case 'd':
 			if (action & PWM_SHOW_CONFIG)
 				usage();
 			action |= PWM_DUTY;
-			duty = strtol(optarg, &percent, 10);
+			duty = strtoul(optarg, &percent, 10);
 			if (*percent == '%') {
-				if (duty < 0 || duty > 100) {
-					fprintf(stderr, 
+				if (duty > 100) {
+					fprintf(stderr,
 					    "Invalid duty percentage\n");
 					usage();
 				}
@@ -186,11 +186,11 @@ main(int argc, char *argv[])
 			state.period = period;
 		if (action & PWM_DUTY) {
 			if (*percent != '\0')
-				state.duty = state.period * duty / 100;
+				state.duty = (uint64_t)state.period * duty / 100;
 			else
 				state.duty = duty;
 		}
-	
+
 		if (ioctl(fd, PWMSETSTATE, &state) == -1) {
 			fprintf(stderr,
 			  "Cannot configure the pwm controller\n");


More information about the svn-src-stable mailing list