RESTRICT AUTOMERGE: Fix HMAC Compare time attack Added constant time HMAC comparison preventing attackers being able to forge HMAC for input by measuring the time difference between non-constant time comparison of HMAC Bug: 261085213 Test: None Tag: #security Change-Id: I7cd6b68589fd0042b9396dc599b917a0f3220ff7
diff --git a/services/inputflinger/dispatcher/InputDispatcher.cpp b/services/inputflinger/dispatcher/InputDispatcher.cpp index 5e9427a..da46128 100644 --- a/services/inputflinger/dispatcher/InputDispatcher.cpp +++ b/services/inputflinger/dispatcher/InputDispatcher.cpp
@@ -27,6 +27,7 @@ #include <ftl/enum.h> #include <gui/SurfaceComposerClient.h> #include <input/InputDevice.h> +#include <openssl/mem.h> #include <powermanager/PowerManager.h> #include <unistd.h> #include <utils/Trace.h> @@ -4422,7 +4423,7 @@ if (calculatedHmac == INVALID_HMAC) { return nullptr; } - if (calculatedHmac != event.getHmac()) { + if (0 != CRYPTO_memcmp(calculatedHmac.data(), event.getHmac().data(), calculatedHmac.size())) { return nullptr; } return result;