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

Commit ae97fa75 authored by Luca Stefani's avatar Luca Stefani
Browse files

Merge remote-tracking branch 'aosp/pie-gsi' into lineage-16.0-gsi

* aosp/pie-gsi:
  Add dump permission check in the MediaExtractorFactory::dump(int fd, const Vector<String16>&) same as dumpExtractors(int fd, const Vector<String16>&)

Change-Id: I93b7f4ce9b59a3817d31d2ed44bd057764329b70
parents b376590c 618f871b
Loading
Loading
Loading
Loading
+23 −10
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
#define LOG_TAG "MediaExtractorFactory"
#include <utils/Log.h>

#include <binder/IPCThreadState.h>
#include <binder/PermissionCache.h>
#include <binder/IServiceManager.h>
#include <media/DataSource.h>
#include <media/MediaAnalyticsItem.h>
@@ -326,6 +328,16 @@ void MediaExtractorFactory::UpdateExtractors(const char *newUpdateApkPath) {
status_t MediaExtractorFactory::dump(int fd, const Vector<String16>&) {
    Mutex::Autolock autoLock(gPluginMutex);
    String8 out;

    const IPCThreadState* ipc = IPCThreadState::self();
    const int pid = ipc->getCallingPid();
    const int uid = ipc->getCallingUid();
    if (!PermissionCache::checkPermission(String16("android.permission.DUMP"), pid, uid)) {
        // dumpExtractors() will append the following string.
        // out.appendFormat("Permission Denial: "
        //        "can't dump MediaExtractor from pid=%d, uid=%d\n", pid, uid);
        ALOGE("Permission Denial: can't dump MediaExtractor from pid=%d, uid=%d", pid, uid);
    } else {
        out.append("Available extractors:\n");
        if (gPluginsRegistered) {
            for (auto it = gPlugins->begin(); it != gPlugins->end(); ++it) {
@@ -338,6 +350,7 @@ status_t MediaExtractorFactory::dump(int fd, const Vector<String16>&) {
        } else {
            out.append("  (no plugins registered)\n");
        }
    }
    write(fd, out.string(), out.size());
    return OK;
}