Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56f5ad2d authored by Akhilesh Sanikop's avatar Akhilesh Sanikop
Browse files

inputflinger: Restricted invalid InputDeviceClass enum values

Updated FuzzEventHub::getDeviceClasses() to avoid
returning invalid InputDeviceClass enum values.

Added IfThisThenThat Lint to remind the InputClassDevices
enum to sync

Test: ./inputflinger_keyboard_input_fuzzer
Bug: 351972616
Flag: EXEMPT bugfix in fuzzer

Change-Id: I23fa0e501714c8a6029d132934293c1884950a7e
parent 01f7c334
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ std::ostream& operator<<(std::ostream& out, const std::optional<RawAbsoluteAxisI
 * If any new classes are added, we need to add them in rust input side too.
 */
enum class InputDeviceClass : uint32_t {
    // LINT.IfChange
    /* The input device is a keyboard or has buttons. */
    KEYBOARD = android::os::IInputConstants::DEVICE_CLASS_KEYBOARD,

@@ -144,6 +145,7 @@ enum class InputDeviceClass : uint32_t {

    /* The input device is external (not built-in). */
    EXTERNAL = android::os::IInputConstants::DEVICE_CLASS_EXTERNAL,
    // LINT.ThenChange(frameworks/native/services/inputflinger/tests/fuzzers/MapperHelpers.h)
};

enum class SysfsClass : uint32_t {
+29 −1
Original line number Diff line number Diff line
@@ -34,6 +34,28 @@ constexpr size_t kValidTypes[] = {EV_SW,
                                  android::EventHubInterface::DEVICE_ADDED,
                                  android::EventHubInterface::DEVICE_REMOVED};

static const android::InputDeviceClass kInputDeviceClasses[] = {
        android::InputDeviceClass::KEYBOARD,
        android::InputDeviceClass::ALPHAKEY,
        android::InputDeviceClass::TOUCH,
        android::InputDeviceClass::CURSOR,
        android::InputDeviceClass::TOUCH_MT,
        android::InputDeviceClass::DPAD,
        android::InputDeviceClass::GAMEPAD,
        android::InputDeviceClass::SWITCH,
        android::InputDeviceClass::JOYSTICK,
        android::InputDeviceClass::VIBRATOR,
        android::InputDeviceClass::MIC,
        android::InputDeviceClass::EXTERNAL_STYLUS,
        android::InputDeviceClass::ROTARY_ENCODER,
        android::InputDeviceClass::SENSOR,
        android::InputDeviceClass::BATTERY,
        android::InputDeviceClass::LIGHT,
        android::InputDeviceClass::TOUCHPAD,
        android::InputDeviceClass::VIRTUAL,
        android::InputDeviceClass::EXTERNAL,
};

constexpr size_t kValidCodes[] = {
        SYN_REPORT,
        ABS_MT_SLOT,
@@ -105,7 +127,13 @@ public:
    void addProperty(std::string key, std::string value) { mFuzzConfig.addProperty(key, value); }

    ftl::Flags<InputDeviceClass> getDeviceClasses(int32_t deviceId) const override {
        return ftl::Flags<InputDeviceClass>(mFdp->ConsumeIntegral<uint32_t>());
        uint32_t flags = 0;
        for (auto inputDeviceClass : kInputDeviceClasses) {
            if (mFdp->ConsumeBool()) {
                flags |= static_cast<uint32_t>(inputDeviceClass);
            }
        }
        return ftl::Flags<InputDeviceClass>(flags);
    }
    InputDeviceIdentifier getDeviceIdentifier(int32_t deviceId) const override {
        return mIdentifier;