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

Commit 726c1300 authored by Wyatt Riley's avatar Wyatt Riley Committed by android-build-merger
Browse files

Merge "Prevent use of a null sCallbackObj by Hardware FLP" into nyc-dev am: 793ac342

am: a8687234

* commit 'a8687234':
  Prevent use of a null sCallbackObj by Hardware FLP

Change-Id: Iacb495c4c26c4d79042e91575b3f7cdfb84b6e5c
parents b53dea88 a8687234
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ static inline void ThrowOnError(
  env->ThrowNew(exceptionClass, methodName);
}

static bool IsValidCallbackThread() {
static bool IsValidCallbackThreadEnvOnly() {
  JNIEnv* env = AndroidRuntime::getJNIEnv();

  if(sCallbackEnv == NULL || sCallbackEnv != env) {
@@ -89,6 +89,20 @@ static bool IsValidCallbackThread() {
  return true;
}

static bool IsValidCallbackThread() {
  // sCallbacksObject is created when FlpHardwareProvider on Java side is
  // initialized. Sometimes the hardware may call a function before the Java
  // side is ready. In order to prevent a system crash, check whether
  // sCallbacksObj has been created. If not, simply ignore this event from
  // hardware.
  if (sCallbacksObj == NULL) {
    ALOGE("Attempt to use FlpHardwareProvider blocked, because it hasn't been initialized.");
    return false;
  }

  return IsValidCallbackThreadEnvOnly();
}

static void BatchingCapabilitiesCallback(int32_t capabilities) {
  if(!IsValidCallbackThread()) {
    return;
@@ -154,7 +168,7 @@ static int SetThreadEvent(ThreadEvent event) {
    }
    case DISASSOCIATE_JVM:
    {
      if (!IsValidCallbackThread()) {
      if (!IsValidCallbackThreadEnvOnly()) {
        ALOGE(
            "Attempted to dissasociate an unnownk callback thread : '%s'.",
            __FUNCTION__
@@ -661,16 +675,6 @@ static void GeofenceMonitorStatusCallback(
    TranslateToObject(lastLocation, locationObject);
  }

  // sCallbacksObject is created when FlpHardwareProvider on Java side is
  // initialized. Sometimes the hardware may call this function before the Java
  // side is ready. In order to prevent the system crash, check whether
  // sCallbacksObj has been created. If not, simply ignore this event from
  // hardware.
  if (sCallbacksObj == NULL) {
    ALOGE("FlpHardwareProvider hasn't been initialized.");
    return;
  }

  sCallbackEnv->CallVoidMethod(
      sCallbacksObj,
      sOnGeofenceMonitorStatus,