diff options
Diffstat (limited to 'drivers/hwmon/pwm-fan.c')
| -rw-r--r-- | drivers/hwmon/pwm-fan.c | 12 | 
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c index 777439f48c14..111a91dc6b79 100644 --- a/drivers/hwmon/pwm-fan.c +++ b/drivers/hwmon/pwm-fan.c @@ -334,8 +334,18 @@ static int pwm_fan_probe(struct platform_device *pdev)  	ctx->pwm_value = MAX_PWM; -	/* Set duty cycle to maximum allowed and enable PWM output */  	pwm_init_state(ctx->pwm, &state); +	/* +	 * __set_pwm assumes that MAX_PWM * (period - 1) fits into an unsigned +	 * long. Check this here to prevent the fan running at a too low +	 * frequency. +	 */ +	if (state.period > ULONG_MAX / MAX_PWM + 1) { +		dev_err(dev, "Configured period too big\n"); +		return -EINVAL; +	} + +	/* Set duty cycle to maximum allowed and enable PWM output */  	state.duty_cycle = ctx->pwm->args.period - 1;  	state.enabled = true;  | 
