From: Ian Abbott <abbotti@mev.co.uk>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Peter Huewe <peterhuewe@gmx.de>,
Ian Abbott <ian.abbott@mev.co.uk>,
"devel@driverdev.osuosl.org" <devel@driverdev.osuosl.org>,
Mori Hess <fmhess@users.sourceforge.net>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] staging/comedi: Fix undefined array subscript
Date: Wed, 13 Feb 2013 11:56:08 +0000 [thread overview]
Message-ID: <511B7F58.4000909@mev.co.uk> (raw)
In-Reply-To: <20130213073214.GR4937@mwanda>
On 2013-02-13 07:32, Dan Carpenter wrote:
> On Wed, Feb 13, 2013 at 04:30:54AM +0100, Peter Huewe wrote:
>> In vmk80xx_do_insn_bits the local variable reg, which is used as an
>> index to the tx_buf array, can be used uninitialized if
>> - data[0] == 0
>> and
>> - devpriv->model != VMK8061_MODEL
>> -> we get into the else branch without having reg initialized.
>
> It's weird that GCC doesn't warn about this...
>
> This patch works, or at least it doesn't break anything that wasn't
> already broken, but it doesn't feel like the right thing. Probably
> we could move the reg setting outside the if statement.
>
> if (devpriv->model == VMK8055_MODEL) {
> reg = VMK8055_DO_REG;
> cmd = VMK8055_CMD_WRT_AD;
> } else { /* VMK8061_MODEL */
> reg = VMK8061_DO_REG;
> cmd = VMK8061_CMD_DO;
> }
>
> if (data[0]) {
> tx_buf[reg] &= ~data[0];
Either method would be fine.
> Or maybe data[0] == 0 needs to be handled differently.
>
> Ian would know for sure.
The insn_bits instruction always reads back the channels after any
modification of the channels specified by bitmask data[0] with the new
channel values bitmask data[1]. data[0] == 0 implies you are not
changing any of the channels so only read back the current values.
For a digital output subdevice, you could either read back the current
values directly from the hardware or just use the value previously
written. The Velleman K8055 doesn't have a command to read back the
digital outputs from the hardware, so the last written value has to be
used. But what if the digital outputs have never been written (or the
analog outputs have never been written, since the same command updates
all analog and digital channels)? A "reset" command is sent to the
hardware on initialization by vmk80xx_reset_device() (only called for
the K8055), but I don't know what effect this has on the actual digital
(and analog) outputs (though I could find out easily enough as we appear
to have one of these kits (assembled) lying around in the office). If
necessary, we may have to also send a "write" command on initialization
to make the hardware outputs match the initial software state.
For the Velleman K8061, reading the digital outputs from the hardware
every time is a bit inefficient as it should only be necessary in the
case where the digital outputs have never been written (similarly for
the analog outputs). We could read back the initial state of the
digital and analog outputs during hardware initialization and keep the
state up-to-date in software without having to query the hardware again.
--
-=( Ian Abbott @ MEV Ltd. E-mail: <abbotti@mev.co.uk> )=-
-=( Tel: +44 (0)161 477 1898 FAX: +44 (0)161 718 3587 )=-
next prev parent reply other threads:[~2013-02-13 11:56 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-13 3:30 [PATCH] staging/comedi: Fix undefined array subscript Peter Huewe
2013-02-13 7:32 ` Dan Carpenter
2013-02-13 11:56 ` Ian Abbott [this message]
2013-02-13 13:47 ` Ian Abbott
2013-02-13 14:01 ` Dan Carpenter
2013-02-13 14:28 ` [PATCH v2] " Peter Huewe
2013-02-13 14:58 ` Dan Carpenter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=511B7F58.4000909@mev.co.uk \
--to=abbotti@mev.co.uk \
--cc=dan.carpenter@oracle.com \
--cc=devel@driverdev.osuosl.org \
--cc=fmhess@users.sourceforge.net \
--cc=gregkh@linuxfoundation.org \
--cc=ian.abbott@mev.co.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=peterhuewe@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox