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

Commit 8bf5518c authored by Mark Hong's avatar Mark Hong Committed by Marco Nelissen
Browse files

Add dump permission check in the MediaExtractorFactory::dump(int fd, const...


Add dump permission check in the MediaExtractorFactory::dump(int fd, const Vector<String16>&) same as dumpExtractors(int fd, const Vector<String16>&)

The purpose of TC is to check if the dump produces minimal output, but it fails because the output of dump() has more than one line.

BUG: 118364777
Test: run cts -m CtsSecurityTestCases -t android.security.cts.ServicePermissionsTest#testDumpProtected

Change-Id: Ifd15f4e7a6626feadb9debe5c1d4f3fbeedfb964
Merged-In: Ifd15f4e7a6626feadb9debe5c1d4f3fbeedfb964
Signed-off-by: default avatarMark Hong <sungmin.h@samsung.com>
parent 5a80267c
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>
@@ -320,6 +322,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) {
@@ -332,6 +344,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;
}