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

Commit f8e0f65e authored by Amit Mahajan's avatar Amit Mahajan
Browse files

Run ImsSmsListener callbacks as self.

Earlier there was an implicit assumption that IMS (caller of the
callbacks) runs under the same uid, but that may not always be
true now.

Test: atest SmsManagerTest
Bug: 162487575
Merged-in: Ic0bb62c3b960fda8708e7bebefb1154a2380fd4f
Change-Id: Ic0bb62c3b960fda8708e7bebefb1154a2380fd4f
parent e6e6fe9e
Loading
Loading
Loading
Loading
+100 −84
Original line number Original line Diff line number Diff line
@@ -117,6 +117,8 @@ public class ImsSmsDispatcher extends SMSDispatcher {
        @Override
        @Override
        public void onSendSmsResult(int token, int messageRef, @SendStatusResult int status,
        public void onSendSmsResult(int token, int messageRef, @SendStatusResult int status,
                int reason, int networkReasonCode) {
                int reason, int networkReasonCode) {
            final long identity = Binder.clearCallingIdentity();
            try {
                logd("onSendSmsResult token=" + token + " messageRef=" + messageRef
                logd("onSendSmsResult token=" + token + " messageRef=" + messageRef
                        + " status=" + status + " reason=" + reason + " networkReasonCode="
                        + " status=" + status + " reason=" + reason + " networkReasonCode="
                        + networkReasonCode);
                        + networkReasonCode);
@@ -152,11 +154,16 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                        break;
                        break;
                    default:
                    default:
                }
                }
            } finally {
                Binder.restoreCallingIdentity(identity);
            }
        }
        }


        @Override
        @Override
        public void onSmsStatusReportReceived(int token, String format, byte[] pdu)
        public void onSmsStatusReportReceived(int token, String format, byte[] pdu)
                throws RemoteException {
                throws RemoteException {
            final long identity = Binder.clearCallingIdentity();
            try {
                logd("Status report received.");
                logd("Status report received.");
                android.telephony.SmsMessage message =
                android.telephony.SmsMessage message =
                        android.telephony.SmsMessage.createFromPdu(pdu, format);
                        android.telephony.SmsMessage.createFromPdu(pdu, format);
@@ -178,10 +185,15 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                } catch (ImsException e) {
                } catch (ImsException e) {
                    loge("Failed to acknowledgeSmsReport(). Error: " + e.getMessage());
                    loge("Failed to acknowledgeSmsReport(). Error: " + e.getMessage());
                }
                }
            } finally {
                Binder.restoreCallingIdentity(identity);
            }
        }
        }


        @Override
        @Override
        public void onSmsReceived(int token, String format, byte[] pdu) {
        public void onSmsReceived(int token, String format, byte[] pdu) {
            final long identity = Binder.clearCallingIdentity();
            try {
                logd("SMS received.");
                logd("SMS received.");
                android.telephony.SmsMessage message =
                android.telephony.SmsMessage message =
                        android.telephony.SmsMessage.createFromPdu(pdu, format);
                        android.telephony.SmsMessage.createFromPdu(pdu, format);
@@ -196,7 +208,8 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                            mappedResult = ImsSmsImplBase.DELIVER_STATUS_ERROR_NO_MEMORY;
                            mappedResult = ImsSmsImplBase.DELIVER_STATUS_ERROR_NO_MEMORY;
                            break;
                            break;
                        case Intents.RESULT_SMS_UNSUPPORTED:
                        case Intents.RESULT_SMS_UNSUPPORTED:
                        mappedResult = ImsSmsImplBase.DELIVER_STATUS_ERROR_REQUEST_NOT_SUPPORTED;
                            mappedResult =
                                    ImsSmsImplBase.DELIVER_STATUS_ERROR_REQUEST_NOT_SUPPORTED;
                            break;
                            break;
                        default:
                        default:
                            mappedResult = ImsSmsImplBase.DELIVER_STATUS_ERROR_GENERIC;
                            mappedResult = ImsSmsImplBase.DELIVER_STATUS_ERROR_GENERIC;
@@ -214,6 +227,9 @@ public class ImsSmsDispatcher extends SMSDispatcher {
                        loge("Failed to acknowledgeSms(). Error: " + e.getMessage());
                        loge("Failed to acknowledgeSms(). Error: " + e.getMessage());
                    }
                    }
                }, true);
                }, true);
            } finally {
                Binder.restoreCallingIdentity(identity);
            }
        }
        }
    };
    };