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

Commit 40a001d5 authored by Nan Wu's avatar Nan Wu
Browse files

Log instances where ParcelFileDescriptor.open is called with mode

w, but without a or t. Starting in Android Q, the ParcelFileDescriptor#parseMode method no longer implicitly adds the truncate flag to mode "w". This commit adds logging to the central location where the result of parseMode would typically be passed to identify apps potentially affected by this change.
Test: manual test.

Change-Id: I35e0ceaafff0bef616ce8f998530cc610206e46b
parent 4d63c1ff
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import static android.system.OsConstants.S_IWOTH;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.annotation.TestApi;
import android.app.ActivityThread;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.BroadcastReceiver;
import android.content.ContentProvider;
@@ -45,6 +46,7 @@ import android.system.Os;
import android.system.OsConstants;
import android.system.StructStat;
import android.util.Log;
import android.util.Slog;

import dalvik.system.CloseGuard;
import dalvik.system.VMRuntime;
@@ -329,6 +331,17 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
    }

    private static FileDescriptor openInternal(File file, int mode) throws FileNotFoundException {
        if ((mode & MODE_WRITE_ONLY) != 0 && (mode & MODE_APPEND) == 0
                && (mode & MODE_TRUNCATE) == 0 && ((mode & MODE_READ_ONLY) == 0)
                && file.exists()) {
            String packageName = ActivityThread.currentApplication().getApplicationContext()
                    .getPackageName();
            Slog.wtfQuiet(TAG, "ParcelFileDescriptor.open is called with w without t or a or r, "
                    + "which will have a different behavior beginning in Android Q."
                    + "\nPackage Name: " + packageName + "\nMode: " + mode
                    + "\nFilename: " + file.getPath());
        }

        final int flags = FileUtils.translateModePfdToPosix(mode) | ifAtLeastQ(O_CLOEXEC);

        int realMode = S_IRWXU | S_IRWXG;