On 09/19/2017 07:42 AM, Mauro Carvalho Chehab wrote:
> Two readonly ioctls can't be allowed if the frontend device
> is opened in read only mode. Explain why.
> 
> Signed-off-by: Mauro Carvalho Chehab <mche...@s-opensource.com>
> ---
>  drivers/media/dvb-core/dvb_frontend.c | 20 +++++++++++++++++---
>  1 file changed, 17 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/dvb-core/dvb_frontend.c 
> b/drivers/media/dvb-core/dvb_frontend.c
> index d0a17d67ab1b..db3f8c597a24 100644
> --- a/drivers/media/dvb-core/dvb_frontend.c
> +++ b/drivers/media/dvb-core/dvb_frontend.c
> @@ -1940,9 +1940,23 @@ static int dvb_frontend_ioctl(struct file *file, 
> unsigned int cmd, void *parg)
>               return -ENODEV;
>       }
>  
> -     if ((file->f_flags & O_ACCMODE) == O_RDONLY &&
> -         (_IOC_DIR(cmd) != _IOC_READ || cmd == FE_GET_EVENT ||
> -          cmd == FE_DISEQC_RECV_SLAVE_REPLY)) {
> +     /*
> +      * If the frontend is opened in read-only mode, only the ioctls
> +      * that don't interfere at the tune logic should be accepted.

Nit:

with the tune logic

> +      * That allows an external application to monitor the DVB QoS and
> +      * statistics parameters.
> +      *
> +      * That matches all _IOR() ioctls, except for two special cases:
> +      *   - FE_GET_EVENT is part of the tuning logic on a DVB application;
> +      *   - FE_DISEQC_RECV_SLAVE_REPLY is part of DiSEqC 2.0
> +      *     setup
> +      * So, those two ioctls should also return -EPERM, as otherwise
> +      * reading from them would interfere with a DVB tune application
> +      */
> +     if ((file->f_flags & O_ACCMODE) == O_RDONLY
> +         && (_IOC_DIR(cmd) != _IOC_READ
> +             || cmd == FE_GET_EVENT
> +             || cmd == FE_DISEQC_RECV_SLAVE_REPLY)) {
>               up(&fepriv->sem);
>               return -EPERM;
>       }
> 

Looks good to me

Reviewed by: Shuah Khan <shua...@osg.samsung.com>

thanks,
-- Shuah

Reply via email to