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

Commit 7371502a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "VehicleHal::set() should not be able to tamper with a property's...

Merge "VehicleHal::set() should not be able to tamper with a property's AVAILABLE status Properties being (UN)AVAILABLE is used as a one-way communication mechanism from the hardware to the operating system, and not viceversa." into pi-dev
parents 1d853503 74268e64
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ StatusCode EmulatedVehicleHal::set(const VehiclePropValue& propValue) {
            return status;
        }
    } else if (mHvacPowerProps.count(propValue.prop)) {
        // TODO(75328113): this should be handled by property status
        auto hvacPowerOn = mPropStore->readValueOrNull(
            toInt(VehicleProperty::HVAC_POWER_ON),
            (VehicleAreaZone::ROW_1_LEFT | VehicleAreaZone::ROW_1_RIGHT));
@@ -165,6 +166,22 @@ StatusCode EmulatedVehicleHal::set(const VehiclePropValue& propValue) {
        }
    }

    if (propValue.status != VehiclePropertyStatus::AVAILABLE) {
        // Android side cannot set property status - this value is the
        // purview of the HAL implementation to reflect the state of
        // its underlying hardware
        return StatusCode::INVALID_ARG;
    }
    auto currentPropValue = mPropStore->readValueOrNull(propValue);

    if (currentPropValue == nullptr) {
        return StatusCode::INVALID_ARG;
    }
    if (currentPropValue->status != VehiclePropertyStatus::AVAILABLE) {
        // do not allow Android side to set() a disabled/error property
        return StatusCode::NOT_AVAILABLE;
    }

    if (!mPropStore->writeValue(propValue)) {
        return StatusCode::INVALID_ARG;
    }