Avoid sync IPCs from TSMS to SpellCheckerService
Currently, TextServicesManagerServices uses an AIDL interface called ISpellCheckerService when binding to a spell-checking service. However, this interface uses synchronous (blocking) binder calls rather than asynchronous (oneway) calls. As a result, there are situations where the system process has made a blocking binder call into untrusted application code from its main looper thread. As general policy, the system process must never allow its looper threads to block on application code. This CL addresses the above issue by converting ISpellCheckerService into oneway interface, which instead takes a result receiver ISpellCheckerServiceCallback so that spell-checking services can return results asynchronously. Note that the above protocol issue was also the root cause of Bug 5471520. Hence we can also logically revert the previous CL [1] for Bug 5471520. [1]: Iedf2c2cdd8d4834545d06d72ade3ce211b104b1d 4e713f14 Test: Ran `adb shell dumpsys textservices` to check the "Spell Checker Bind Groups:" section in the following three steps. 1. Before apps start requesting spell checker sessions. 2. While apps are owning active spell checker sessions. 3. After all the apps that owned spell checker sessions are gone. Made sure that spell checker service is not running when there is not spell checker bind group. Bug: 7254002 Change-Id: I92e7aa40dc9ea14f67d355f0bfa15325b775d27b
Loading
Please register or sign in to comment