Commit aabcbfe8 authored by Dan Carpenter's avatar Dan Carpenter Committed by Jonathan Cameron
Browse files

iio: sca3000: Potential endian bug in sca3000_read_event_value()



The problem is that "ret" is an int but we're casting it as
"(unsigned long *)&ret" when we do the for_each_set_bit() loop.  This
will not work on big endian 64 bit systems.

Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 05b8bcc9
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -872,8 +872,9 @@ static int sca3000_read_event_value(struct iio_dev *indio_dev,
				    enum iio_event_info info,
				    int *val, int *val2)
{
	int ret, i;
	struct sca3000_state *st = iio_priv(indio_dev);
	long ret;
	int i;

	switch (info) {
	case IIO_EV_INFO_VALUE:
@@ -885,11 +886,11 @@ static int sca3000_read_event_value(struct iio_dev *indio_dev,
			return ret;
		*val = 0;
		if (chan->channel2 == IIO_MOD_Y)
			for_each_set_bit(i, (unsigned long *)&ret,
			for_each_set_bit(i, &ret,
					 ARRAY_SIZE(st->info->mot_det_mult_y))
				*val += st->info->mot_det_mult_y[i];
		else
			for_each_set_bit(i, (unsigned long *)&ret,
			for_each_set_bit(i, &ret,
					 ARRAY_SIZE(st->info->mot_det_mult_xz))
				*val += st->info->mot_det_mult_xz[i];