Patch "iio:core: fix IIO_VAL_FRACTIONAL sign handling" has been added to the 4.7-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iio:core: fix IIO_VAL_FRACTIONAL sign handling
to the 4.7-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
iio-core-fix-iio_val_fractional-sign-handling.patch
and it can be found in the queue-4.7 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
171c0091837c81ed5c949fec6966bb5afff2d1cfMon Sep 17 00:00:00 2001
From: Gregor Boirie <[email protected]>
Date: Fri, 2 Sep 2016 20:27:46 +0200
Subject: iio:core: fix IIO_VAL_FRACTIONAL sign handling
From: Gregor Boirie <[email protected]>
commit 171c0091837c81ed5c949fec6966bb5afff2d1cf upstream.
7985e7c100 ("iio: Introduce a new fractional value type") introduced a new IIO_VAL_FRACTIONAL value type meant to represent rational type numbers expressed by a numerator and denominator combination.
Formating of IIO_VAL_FRACTIONAL values relies upon do_div() usage. This fails handling negative values properly since parameters are reevaluated as unsigned values.
Fix this by using div_s64_rem() instead. Computed integer part will carry properly signed value. Formatted fractional part will always be positive.
--- drivers/iio/industrialio-core.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/iio/industrialio-core.c +2 -3
@@ -532,9 +532,8 @@ ssize_t iio_format_value(char *buf, unsireturn sprintf (buf,"%d.%09u\n" , vals[0 ], vals[1 ]);case IIO_VAL_FRACTIONAL : tmp =div_s64 ((s64 )vals[0 ] *1000000000LL , vals[1 ]); - vals[1 ] =do_div (tmp,1000000000LL ); - vals[0 ] = tmp; -return sprintf (buf,"%d.%09u\n" , vals[0 ], vals[1 ]); + vals[0 ] = (int )div_s64_rem (tmp,1000000000 , &vals[1 ]); +return sprintf (buf,"%d.%09u\n" , vals[0 ],abs (vals[1 ]));case IIO_VAL_FRACTIONAL_LOG2 : tmp = (s64 )vals[0 ] *1000000000LL >> vals[1 ]; vals[1 ] =do_div (tmp,1000000000LL );
Patches currently in stable-queue which might be from [email protected] are
queue-4.7/iio-core-fix-iio_val_fractional-sign-handling.patch