lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <SN1PR0101MB1565B17856CB160B0B969F0DD0080@SN1PR0101MB1565.prod.exchangelabs.com>
Date:	Wed, 20 Jul 2016 15:55:45 +0000
From:	Hartley Sweeten <HartleyS@...ionengravers.com>
To:	Ian Abbott <abbotti@....co.uk>,
	"devel@...verdev.osuosl.org" <devel@...verdev.osuosl.org>
CC:	Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
	Spencer Olson <olsonse@...ch.edu>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: RE: [PATCH] staging: comedi: ni_mio_common: fix AO inttrig backwards
 compatibility

On Tuesday, July 19, 2016 4:18 AM, Ian Abbott wrote:
> Commit ebb657babfa9 ("staging: comedi: ni_mio_common: clarify the
> cmd->start_arg validation and use") introduced a backwards compatibility
> issue in the use of asynchronous commands on the AO subdevice when
> `start_src` is `TRIG_EXT`.  Valid values for `start_src` are `TRIG_INT`
> (for internal, software trigger), and `TRIG_EXT` (for external trigger).
> When set to `TRIG_EXT`.  In both cases, the driver relies on an
> internal, software trigger to set things up (allowing the user
> application to write sufficient samples to the data buffer before the
> trigger), so it acts as a software "pre-trigger" in the `TRIG_EXT` case.
> The software trigger is handled by `ni_ao_inttrig()`.
>
> Prior to the above change, when `start_src` was `TRIG_INT`, `start_arg`
> was required to be 0, and `ni_ao_inttrig()` checked that the software
> trigger number was also 0.  After the above change, when `start_src` was
> `TRIG_INT`, any value was allowed for `start_arg`, and `ni_ao_inttrig()`
> checked that the software trigger number matched this `start_arg` value.
> The backwards compatibility issue is that the internal trigger number
> now has to match `start_arg` when `start_src` is `TRIG_EXT` when it
> previously had to be 0.
>
> Fix the backwards compatibility issue in `ni_ao_inttrig()` by always
> allowing software trigger number 0 when `start_src` is something other
> than `TRIG_INT`.
>
> Thanks to Spencer Olson for reporting the issue.
>
> Signed-off-by: Ian Abbott <abbotti@....co.uk>
> Reported-by: Spencer Olson <olsonse@...ch.edu>
> Fixes: ebb657babfa9 ("staging: comedi: ni_mio_common: clarify the
>   cmd->start_arg validation and use")
> ---
>  drivers/staging/comedi/drivers/ni_mio_common.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c
> index 8dabb19..9f4036f 100644
> --- a/drivers/staging/comedi/drivers/ni_mio_common.c
> +++ b/drivers/staging/comedi/drivers/ni_mio_common.c
> @@ -2772,7 +2772,15 @@ static int ni_ao_inttrig(struct comedi_device *dev,
>  	int i;
>  	static const int timeout = 1000;
>  
> -	if (trig_num != cmd->start_arg)
> +	/*
> +	 * Require trig_num == cmd->start_arg when cmd->start_src == TRIG_INT.
> +	 * For backwards compatibility, also allow trig_num == 0 when
> +	 * cmd->start_src != TRIG_INT (i.e. when cmd->start_src == TRIG_EXT);
> +	 * in that case, the internal trigger is being used as a pre-trigger
> +	 * before the external trigger.
> +	 */
> +	if (!(trig_num == cmd->start_arg ||
> +	      (trig_num == 0 && cmd->start_src != TRIG_INT)))
>  		return -EINVAL;

Ian,

I think this test is a bit clearer:

+	/*
+	 * Require trig_num == cmd->start_arg when cmd->start_src == TRIG_INT.
+	 * For backwards compatibility, any trig_num is valid when
+	 * cmd->start_src != TRIG_INT (i.e. when cmd->start_src == TRIG_EXT);
+	 * in that case, the internal trigger is being used as a pre-trigger
+	 * before the external trigger.
+	 */
+	if (cmd->start_src == TRIG_INT && trig_num != cmd->start_arg)
		return -EINVAL;

But, either way:

Reviewed-by: H Hartley Sweeten <hsweeten@...ionengravers.com>

Thanks!

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ