sony-laptop: Fix handling sony_nc_hotkeys_decode result
authorAndrzej Hajda <a.hajda@samsung.com>
Thu, 24 Sep 2015 14:00:22 +0000 (16:00 +0200)
committerDarren Hart <dvhart@linux.intel.com>
Sat, 3 Oct 2015 16:41:54 +0000 (09:41 -0700)
sony_nv_hotkeys_decode can return a negative value. real_ev is a u32 variable.
The check for real_ev > 0 is incorrect.

Use an intermediate ret variable.

The problem has been detected using proposed semantic patch
scripts/coccinelle/tests/assign_signed_to_unsigned.cocci [1].

[1]: http://permalink.gmane.org/gmane.linux.kernel/2046107

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
[dvhart: clarify commit msg, drop superfluous else block]
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
drivers/platform/x86/sony-laptop.c

index aeb80d1c2b07e7d8d9ef17e540bab09c7c48a139..f73c29558cd3958105401d91fb37edf323e79b9c 100644 (file)
@@ -1204,6 +1204,8 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
 {
        u32 real_ev = event;
        u8 ev_type = 0;
+       int ret;
+
        dprintk("sony_nc_notify, event: 0x%.2x\n", event);
 
        if (event >= 0x90) {
@@ -1225,13 +1227,12 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
                case 0x0100:
                case 0x0127:
                        ev_type = HOTKEY;
-                       real_ev = sony_nc_hotkeys_decode(event, handle);
+                       ret = sony_nc_hotkeys_decode(event, handle);
 
-                       if (real_ev > 0)
-                               sony_laptop_report_input_event(real_ev);
-                       else
-                               /* restore the original event for reporting */
-                               real_ev = event;
+                       if (ret > 0) {
+                               sony_laptop_report_input_event(ret);
+                               real_ev = ret;
+                       }
 
                        break;