Commit 6543f376 authored by Matti Vaittinen's avatar Matti Vaittinen Committed by Jonathan Cameron

iio: buffer: document known issue

Add documentation explaining why the code which scans all available scan
masks is checking only a single long worth of bits even though the code
was intended to be supporting masks wider than single long.
Signed-off-by: default avatarMatti Vaittinen <mazziesaccount@gmail.com>
Link: https://lore.kernel.org/r/ef61c2c1e9a1c5e9f713f656871fdcb1652afdc2.1697452986.git.mazziesaccount@gmail.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 2718f154
......@@ -413,6 +413,22 @@ static const unsigned long *iio_scan_mask_match(const unsigned long *av_masks,
{
if (bitmap_empty(mask, masklength))
return NULL;
/*
* The condition here do not handle multi-long masks correctly.
* It only checks the first long to be zero, and will use such mask
* as a terminator even if there was bits set after the first long.
*
* Correct check would require using:
* while (!bitmap_empty(av_masks, masklength))
* instead. This is potentially hazardous because the
* avaliable_scan_masks is a zero terminated array of longs - and
* using the proper bitmap_empty() check for multi-long wide masks
* would require the array to be terminated with multiple zero longs -
* which is not such an usual pattern.
*
* As writing of this no multi-long wide masks were found in-tree, so
* the simple while (*av_masks) check is working.
*/
while (*av_masks) {
if (strict) {
if (bitmap_equal(mask, av_masks, masklength))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment