From a54902ca84923ef2a3aef6e6bcdaa4f004e38ecc Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Mon, 14 Nov 2022 11:35:21 -0800 Subject: [PATCH] Catch potential SecurityExceptions while binding Do not allow SecurityExceptions to crash the system server. Test: none Change-Id: I951a20cca95801520168a2a27c87ee4e3609c9a0 --- .../servicewatcher/ServiceWatcherImpl.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java b/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java index d9f504e5f270e..ac970389b8b1c 100644 --- a/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java +++ b/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java @@ -206,16 +206,21 @@ class ServiceWatcherImpl implements Log.d(TAG, "[" + mTag + "] binding to " + mBoundServiceInfo); } + mRebinder = null; + Intent bindIntent = new Intent(mBoundServiceInfo.getAction()).setComponent( mBoundServiceInfo.getComponentName()); - if (!mContext.bindServiceAsUser(bindIntent, this, - BIND_AUTO_CREATE | BIND_NOT_FOREGROUND | BIND_NOT_VISIBLE, - mHandler, UserHandle.of(mBoundServiceInfo.getUserId()))) { - Log.e(TAG, "[" + mTag + "] unexpected bind failure - retrying later"); - mRebinder = this::bind; - mHandler.postDelayed(mRebinder, RETRY_DELAY_MS); - } else { - mRebinder = null; + try { + if (!mContext.bindServiceAsUser(bindIntent, this, + BIND_AUTO_CREATE | BIND_NOT_FOREGROUND | BIND_NOT_VISIBLE, + mHandler, UserHandle.of(mBoundServiceInfo.getUserId()))) { + Log.e(TAG, "[" + mTag + "] unexpected bind failure - retrying later"); + mRebinder = this::bind; + mHandler.postDelayed(mRebinder, RETRY_DELAY_MS); + } + } catch (SecurityException e) { + // if anything goes wrong it shouldn't crash the system server + Log.e(TAG, "[" + mTag + "] " + mBoundServiceInfo + " bind failed", e); } }