Message ID | 1296669842-32611-1-git-send-email-mroberto@cpti.cetuc.puc-rio.br |
---|---|
State | Accepted |
Headers | show |
On Wed, 2011-02-02 at 16:04 -0200, Marcelo Roberto Jimenez wrote: > This patch prevents a user space program from calling the RTC_IRQP_SET > ioctl with a negative value of frequency. Also, if this call is make > with a zero value of frequency, there would be a division by zero in the > kernel code. > > Signed-off-by: Marcelo Roberto Jimenez <mroberto@cpti.cetuc.puc-rio.br> Probably need to also initialize irq_freq to 1 on rtc_device_register so we don't trip over the divbyzero on rtc devices that don't initialize that value. I'll add that and fwd on your patch! Great catch! thanks -john > --- > drivers/rtc/interface.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c > index 925006d..a0c0196 100644 > --- a/drivers/rtc/interface.c > +++ b/drivers/rtc/interface.c > @@ -464,6 +464,9 @@ int rtc_irq_set_freq(struct rtc_device *rtc, struct rtc_task *task, int freq) > int err = 0; > unsigned long flags; > > + if (freq <= 0) > + return -EINVAL; > + > spin_lock_irqsave(&rtc->irq_task_lock, flags); > if (rtc->irq_task != NULL && task == NULL) > err = -EBUSY;
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 925006d..a0c0196 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c @@ -464,6 +464,9 @@ int rtc_irq_set_freq(struct rtc_device *rtc, struct rtc_task *task, int freq) int err = 0; unsigned long flags; + if (freq <= 0) + return -EINVAL; + spin_lock_irqsave(&rtc->irq_task_lock, flags); if (rtc->irq_task != NULL && task == NULL) err = -EBUSY;
This patch prevents a user space program from calling the RTC_IRQP_SET ioctl with a negative value of frequency. Also, if this call is make with a zero value of frequency, there would be a division by zero in the kernel code. Signed-off-by: Marcelo Roberto Jimenez <mroberto@cpti.cetuc.puc-rio.br> --- drivers/rtc/interface.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)