2006-05-17 00:20:47

by Alessandro Zummo

[permalink] [raw]
Subject: [PATCH] rtc subsystem, fix capability checks in kernel interface


Remove CAP_SYS_XXX checks from the in kernel interface. Those
functions are meant to be used in-kernel only.

Signed-off-by: Alessandro Zummo <[email protected]>
---
drivers/rtc/interface.c | 22 ++++++----------------
1 file changed, 6 insertions(+), 16 deletions(-)

--- linux-rtc.orig/drivers/rtc/interface.c 2006-05-17 01:18:19.000000000 +0200
+++ linux-rtc/drivers/rtc/interface.c 2006-05-17 01:41:17.000000000 +0200
@@ -229,6 +229,9 @@ int rtc_irq_set_state(struct class_devic
unsigned long flags;
struct rtc_device *rtc = to_rtc_device(class_dev);

+ if (rtc->ops->irq_set_state == NULL)
+ return -ENXIO;
+
spin_lock_irqsave(&rtc->irq_task_lock, flags);
if (rtc->irq_task != task)
err = -ENXIO;
@@ -243,25 +246,12 @@ EXPORT_SYMBOL_GPL(rtc_irq_set_state);

int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int freq)
{
- int err = 0, tmp = 0;
+ int err = 0;
unsigned long flags;
struct rtc_device *rtc = to_rtc_device(class_dev);

- /* allowed range is 2-8192 */
- if (freq < 2 || freq > 8192)
- return -EINVAL;
-/*
- FIXME: this does not belong here, will move where appropriate
- at a later stage. It cannot hurt right now, trust me :)
- if ((freq > rtc_max_user_freq) && (!capable(CAP_SYS_RESOURCE)))
- return -EACCES;
-*/
- /* check if freq is a power of 2 */
- while (freq > (1 << tmp))
- tmp++;
-
- if (freq != (1 << tmp))
- return -EINVAL;
+ if (rtc->ops->irq_set_freq == NULL)
+ return -ENXIO;

spin_lock_irqsave(&rtc->irq_task_lock, flags);
if (rtc->irq_task != task)


2006-05-18 06:57:53

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] rtc subsystem, fix capability checks in kernel interface

Alessandro Zummo <[email protected]> wrote:
>
>
> Remove CAP_SYS_XXX checks from the in kernel interface. Those
> functions are meant to be used in-kernel only.
>
> Signed-off-by: Alessandro Zummo <[email protected]>
> ---
> drivers/rtc/interface.c | 22 ++++++----------------
> 1 file changed, 6 insertions(+), 16 deletions(-)
>
> --- linux-rtc.orig/drivers/rtc/interface.c 2006-05-17 01:18:19.000000000 +0200
> +++ linux-rtc/drivers/rtc/interface.c 2006-05-17 01:41:17.000000000 +0200
> @@ -229,6 +229,9 @@ int rtc_irq_set_state(struct class_devic
> unsigned long flags;
> struct rtc_device *rtc = to_rtc_device(class_dev);
>
> + if (rtc->ops->irq_set_state == NULL)
> + return -ENXIO;
> +
> spin_lock_irqsave(&rtc->irq_task_lock, flags);
> if (rtc->irq_task != task)
> err = -ENXIO;
> @@ -243,25 +246,12 @@ EXPORT_SYMBOL_GPL(rtc_irq_set_state);
>
> int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int freq)
> {
> - int err = 0, tmp = 0;
> + int err = 0;
> unsigned long flags;
> struct rtc_device *rtc = to_rtc_device(class_dev);
>
> - /* allowed range is 2-8192 */
> - if (freq < 2 || freq > 8192)
> - return -EINVAL;
> -/*
> - FIXME: this does not belong here, will move where appropriate
> - at a later stage. It cannot hurt right now, trust me :)
> - if ((freq > rtc_max_user_freq) && (!capable(CAP_SYS_RESOURCE)))
> - return -EACCES;
> -*/
> - /* check if freq is a power of 2 */
> - while (freq > (1 << tmp))
> - tmp++;
> -
> - if (freq != (1 << tmp))
> - return -EINVAL;
> + if (rtc->ops->irq_set_freq == NULL)
> + return -ENXIO;
>
> spin_lock_irqsave(&rtc->irq_task_lock, flags);
> if (rtc->irq_task != task)

The changelog and the patch don't have much correlation.

Are you sure this was the right patch?

2006-05-18 08:13:04

by Alessandro Zummo

[permalink] [raw]
Subject: Re: [PATCH] rtc subsystem, fix capability checks in kernel interface

On Wed, 17 May 2006 23:57:40 -0700
Andrew Morton <[email protected]> wrote:

> Alessandro Zummo <[email protected]> wrote:
> >
> >
> > Remove CAP_SYS_XXX checks from the in kernel interface. Those
> > functions are meant to be used in-kernel only.

> The changelog and the patch don't have much correlation.
>
> Are you sure this was the right patch?

I should have said "remove commented capability checks and
add some others" :(

--

Best regards,

Alessandro Zummo,
Tower Technologies - Turin, Italy

http://www.towertech.it