Change input injection security model to require INJECT_EVENTS permission
Previously, any app could inject input events into the system via the IInputManager#injectInputEvent API. The injection was only allowed if the input event targeted a window owned by the same UID as that of the process calling the API. This had drawbacks metioned in the bug. Here, we change the input injection security model so that the signature permission INJECT_EVENTS is required to inject events. This permission is given to the system and the shell, so input injection can still be done through the 'adb shell input' command. We also allow injection from instrumeted processes where the instrumentation source has the permission. For exmaple, running a test from the shell allows for the test to inject events. We also add support for a targeted injection mode, where the input injection succeeds only if the target window for the event is owned by the provided UID. This allows us to support injection from the Instrumentation class, which only allows for injection into windows owned by the same UID. In contrast to this, injection from the UiAutomation class will target all windows, including system and spy windows. Bug: 207667844 Bug: 194952792 Test: atest inputflinger_tests Test: atest WindowInputTests Test: manual with test app: app cannot inject navigation gestures Change-Id: Ib0d66eff3fc2f061e7c0d3b7e139a841a9bcebc7
Loading
Please register or sign in to comment