Fix deadlock caused by synchronous setOccluded() method in keyguard

This fixes a deadlock where WindowManagerService can call into
KeyguardService.setOccluded() while holding a lock. As soon as keyguard
receives the call, it immediately needs to check permission and calls
back into the system service which is waiting for the lock to be
released. Boom!

The fix does a quick check of the calling UID and allows the call
if coming from the System UID, thus bypassing the need for a
binder call to checkPermission().

Fixes bug 18362246

Change-Id: Iab4be8a885f330fb2a62ee7e3579966e1447f8b0
1 file changed