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

Commit 5375f28e authored by Hongguang's avatar Hongguang
Browse files

Add more robust SharedFilter permission checks.

Bug: 196124225
Test: atest android.media.tv.tuner.cts on both AIDL and HIDL HAL.
Change-Id: Ie224e08073484516cb59869addc6f2e3d397200f
parent 7cb80e51
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -38,7 +38,12 @@ using namespace std;

TunerFilter::TunerFilter(shared_ptr<IFilter> filter, shared_ptr<FilterCallback> cb,
                         DemuxFilterType type)
      : mFilter(filter), mType(type), mStarted(false), mShared(false), mFilterCallback(cb) {}
      : mFilter(filter),
        mType(type),
        mStarted(false),
        mShared(false),
        mClientPid(-1),
        mFilterCallback(cb) {}

TunerFilter::~TunerFilter() {
    Mutex::Autolock _l(mLock);
@@ -278,8 +283,10 @@ TunerFilter::~TunerFilter() {
        }
    }

    auto res = mFilter->stop();
    mStarted = false;
    return mFilter->stop();

    return res;
}

::ndk::ScopedAStatus TunerFilter::flush() {
@@ -334,6 +341,7 @@ TunerFilter::~TunerFilter() {
    mFilter = nullptr;
    mStarted = false;
    mShared = false;
    mClientPid = -1;

    return res;
}
@@ -398,7 +406,7 @@ TunerFilter::~TunerFilter() {
}

bool TunerFilter::isSharedFilterAllowed(int callingPid) {
    return mClientPid != callingPid;
    return mShared && mClientPid != callingPid;
}

void TunerFilter::attachSharedFilterCallback(const shared_ptr<ITunerFilterCallback>& in_cb) {
+9 −3
Original line number Diff line number Diff line
@@ -91,7 +91,12 @@ namespace tuner {

TunerHidlFilter::TunerHidlFilter(sp<HidlIFilter> filter, sp<FilterCallback> cb,
                                 DemuxFilterType type)
      : mFilter(filter), mType(type), mStarted(false), mShared(false), mFilterCallback(cb) {
      : mFilter(filter),
        mType(type),
        mStarted(false),
        mShared(false),
        mClientPid(-1),
        mFilterCallback(cb) {
    mFilter_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(filter);
}

@@ -441,10 +446,10 @@ TunerHidlFilter::~TunerHidlFilter() {
    }

    HidlResult res = mFilter->stop();
    mStarted = false;
    if (res != HidlResult::SUCCESS) {
        return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res));
    }
    mStarted = false;

    return ::ndk::ScopedAStatus::ok();
}
@@ -507,6 +512,7 @@ TunerHidlFilter::~TunerHidlFilter() {
    mFilter_1_1 = nullptr;
    mStarted = false;
    mShared = false;
    mClientPid = -1;

    if (res != HidlResult::SUCCESS) {
        return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res));
@@ -575,7 +581,7 @@ TunerHidlFilter::~TunerHidlFilter() {
}

bool TunerHidlFilter::isSharedFilterAllowed(int callingPid) {
    return mClientPid != callingPid;
    return mShared && mClientPid != callingPid;
}

void TunerHidlFilter::attachSharedFilterCallback(const shared_ptr<ITunerFilterCallback>& in_cb) {