Commit 1b11c88d authored by Dmitry Torokhov's avatar Dmitry Torokhov

Input: ff-memless - another fix for signed to unsigned overflow

The commit 9e68177e changed 'gain' from
signed to unsigned to fix an issue with rumble effect calculation, however
it introduced problems when calculating constant effects. Having 'gain'
being unsigned int was an unfortunate choice since it dominates all
implicit type conversions causing everything to be treated as unsigned
int.

Let's change it back to signed int and simply add proper casts to rumble
effect calculations.
Reported-by: default avatarGary Stein <lordcnidarian@gmail.com>
Acked-by: default avatarAnssi Hannula <anssi.hannula@iki.fi>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 25ae0831
......@@ -225,7 +225,7 @@ static int get_compatible_type(struct ff_device *ff, int effect_type)
*/
static void ml_combine_effects(struct ff_effect *effect,
struct ml_effect_state *state,
unsigned int gain)
int gain)
{
struct ff_effect *new = state->effect;
unsigned int strong, weak, i;
......@@ -252,8 +252,8 @@ static void ml_combine_effects(struct ff_effect *effect,
break;
case FF_RUMBLE:
strong = new->u.rumble.strong_magnitude * gain / 0xffff;
weak = new->u.rumble.weak_magnitude * gain / 0xffff;
strong = (u32)new->u.rumble.strong_magnitude * gain / 0xffff;
weak = (u32)new->u.rumble.weak_magnitude * gain / 0xffff;
effect->u.rumble.strong_magnitude =
min(strong + effect->u.rumble.strong_magnitude,
0xffffU);
......
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