Repository : ssh://git@open-mesh.org/batman-adv
On branch : master
commit 28dab2693a0e52b15789bb67360aa27c3cf6df0f Author: Antonio Quartulli antonio@meshcoding.com Date: Fri Nov 22 18:38:30 2013 +0100
batman-adv: fix compat macro for kstrtou32
The macro previously introduced in the compat code to replace kstrtou32() may not work properly in case of a too large user input.
Fix it by using a temporary variable of the proper length and then cast the result.
Possibly return -ERANGE is the result is too big to fix a 32bit long variable.
Cc: Matthias Schiffer mschiffer@universe-factory.net Signed-off-by: Antonio Quartulli antonio@meshcoding.com Signed-off-by: Marek Lindner mareklindner@neomailbox.ch
28dab2693a0e52b15789bb67360aa27c3cf6df0f compat.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/compat.h b/compat.h index a050bb8..6daeff9 100644 --- a/compat.h +++ b/compat.h @@ -152,8 +152,16 @@ static inline int batadv_param_set_copystring(const char *val,
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 39)
-/* cast last argument of strict_strtoul() because we have a uint32_t */ -#define kstrtou32(cp, base, v) strict_strtoul(cp, base, (unsigned long *)v) +#define kstrtou32(cp, base, v)\ +({\ + unsigned long _v;\ + int _r;\ + _r = strict_strtoul(cp, base, &_v);\ + *(v) = (uint32_t)_v;\ + if ((unsigned long)*(v) != _v)\ + _r = -ERANGE;\ + _r;\ +}) #define kstrtoul strict_strtoul #define kstrtol strict_strtol