Revert "Implement alignment checks in PM"

This reverts commit c3e47ec1cad716d1dade6f76a0dea8e2c2247211.

Reason for revert: <DroidMonitor cretaed revert due to b/380568831.Will be verified through ABTD for standard investigation.>

Change-Id: Id6f9437fc4cec2ab1854e5047f5b6c07e1059633
diff --git a/core/java/com/android/internal/content/NativeLibraryHelper.java b/core/java/com/android/internal/content/NativeLibraryHelper.java
index 6ad7fef..0c56c67 100644
--- a/core/java/com/android/internal/content/NativeLibraryHelper.java
+++ b/core/java/com/android/internal/content/NativeLibraryHelper.java
@@ -26,7 +26,6 @@
 import static android.system.OsConstants.S_IXOTH;
 
 import android.content.Context;
-import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.parsing.ApkLiteParseUtils;
 import android.content.pm.parsing.PackageLite;
@@ -178,13 +177,6 @@
     private native static int nativeCopyNativeBinaries(long handle, String sharedLibraryPath,
             String abiToCopy, boolean extractNativeLibs, boolean debuggable);
 
-    private static native int nativeCheckAlignment(
-            long handle,
-            String sharedLibraryPath,
-            String abi,
-            boolean extractNativeLibs,
-            boolean debuggable);
-
     private static long sumNativeBinaries(Handle handle, String abi) {
         long sum = 0;
         for (long apkHandle : handle.apkHandles) {
@@ -440,51 +432,6 @@
         }
     }
 
-    /**
-     * Checks alignment of APK and native libraries for 16KB device
-     *
-     * @param handle APK file to scan for native libraries
-     * @param libraryRoot directory for libraries
-     * @param abiOverride abiOverride for package
-     * @return {@link Modes from ApplicationInfo.PageSizeAppCompat} if successful or error code
-     *     which suggests undefined mode
-     */
-    @ApplicationInfo.PageSizeAppCompatFlags
-    public static int checkAlignmentForCompatMode(
-            Handle handle,
-            String libraryRoot,
-            boolean nativeLibraryRootRequiresIsa,
-            String abiOverride) {
-        // Keep the code below in sync with copyNativeBinariesForSupportedAbi
-        int abi = findSupportedAbi(handle, Build.SUPPORTED_64_BIT_ABIS);
-        if (abi < 0) {
-            return ApplicationInfo.PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-        }
-
-        final String supportedAbi = Build.SUPPORTED_64_BIT_ABIS[abi];
-        final String instructionSet = VMRuntime.getInstructionSet(supportedAbi);
-        String subDir = libraryRoot;
-        if (nativeLibraryRootRequiresIsa) {
-            subDir += "/" + instructionSet;
-        }
-
-        int mode = ApplicationInfo.PAGE_SIZE_APP_COMPAT_FLAG_UNDEFINED;
-        for (long apkHandle : handle.apkHandles) {
-            int res =
-                    nativeCheckAlignment(
-                            apkHandle,
-                            subDir,
-                            Build.SUPPORTED_64_BIT_ABIS[abi],
-                            handle.extractNativeLibs,
-                            handle.debuggable);
-            if (res == ApplicationInfo.PAGE_SIZE_APP_COMPAT_FLAG_ERROR) {
-                return res;
-            }
-            mode |= res;
-        }
-        return mode;
-    }
-
     public static long sumNativeBinariesWithOverride(Handle handle, String abiOverride)
             throws IOException {
         long sum = 0;
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index b2eeff3..7ad18b8 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -21,7 +21,6 @@
 #include <androidfw/ApkParsing.h>
 #include <androidfw/ZipFileRO.h>
 #include <androidfw/ZipUtils.h>
-#include <elf.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <inttypes.h>
@@ -39,7 +38,6 @@
 
 #include <memory>
 #include <string>
-#include <vector>
 
 #include "com_android_internal_content_FileSystemUtils.h"
 #include "core_jni_helpers.h"
@@ -62,12 +60,6 @@
     NO_NATIVE_LIBRARIES = -114
 };
 
-// These code should match with PageSizeAppCompatFlags inside ApplicationInfo.java
-constexpr int PAGE_SIZE_APP_COMPAT_FLAG_ERROR = -1;
-constexpr int PAGE_SIZE_APP_COMPAT_FLAG_UNDEFINED = 0;
-constexpr int PAGE_SIZE_APP_COMPAT_FLAG_UNCOMPRESSED_LIBS_NOT_ALIGNED = 1 << 1;
-constexpr int PAGE_SIZE_APP_COMPAT_FLAG_ELF_NOT_ALIGNED = 1 << 2;
-
 typedef install_status_t (*iterFunc)(JNIEnv*, void*, ZipFileRO*, ZipEntryRO, const char*);
 
 static bool
@@ -532,7 +524,11 @@
     static const size_t kPageSize = getpagesize();
 
     // App compat is only applicable on 16kb-page-size devices.
-    return kPageSize == 0x4000;
+    if (kPageSize != 0x4000) {
+        return false;
+    }
+
+    return android::base::GetBoolProperty("bionic.linker.16kb.app_compat.enabled", false);
 }
 
 static jint
@@ -630,166 +626,6 @@
     return reinterpret_cast<jlong>(zipFile);
 }
 
-static jint checkLoadSegmentAlignment(const char* fileName, off64_t offset) {
-    std::vector<Elf64_Phdr> programHeaders;
-    if (!getLoadSegmentPhdrs(fileName, offset, programHeaders)) {
-        ALOGE("Failed to read program headers from ELF file.");
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-
-    int mode = PAGE_SIZE_APP_COMPAT_FLAG_UNDEFINED;
-    for (auto programHeader : programHeaders) {
-        if (programHeader.p_type != PT_LOAD) {
-            continue;
-        }
-
-        // Set ELF alignment bit if 4 KB aligned LOAD segment is found
-        if (programHeader.p_align == 0x1000) {
-            ALOGI("Setting page size compat mode PAGE_SIZE_APP_COMPAT_FLAG_ELF_NOT_ALIGNED");
-            mode |= PAGE_SIZE_APP_COMPAT_FLAG_ELF_NOT_ALIGNED;
-            break;
-        }
-    }
-
-    return mode;
-}
-
-static jint checkExtractedLibAlignment(ZipFileRO* zipFile, ZipEntryRO zipEntry,
-                                       const char* fileName, const std::string nativeLibPath) {
-    // Build local file path
-    const size_t fileNameLen = strlen(fileName);
-    char localFileName[nativeLibPath.size() + fileNameLen + 2];
-
-    if (strlcpy(localFileName, nativeLibPath.c_str(), sizeof(localFileName)) !=
-        nativeLibPath.size()) {
-        ALOGE("Couldn't allocate local file name for library");
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-
-    *(localFileName + nativeLibPath.size()) = '/';
-
-    if (strlcpy(localFileName + nativeLibPath.size() + 1, fileName,
-                sizeof(localFileName) - nativeLibPath.size() - 1) != fileNameLen) {
-        ALOGE("Couldn't allocate local file name for library");
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-
-    struct statfs64 fsInfo;
-    int result = statfs64(localFileName, &fsInfo);
-    if (result < 0) {
-        ALOGE("Failed to stat file :%s", localFileName);
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-
-    return checkLoadSegmentAlignment(localFileName, 0);
-}
-
-static jint checkAlignment(JNIEnv* env, jstring javaNativeLibPath, jboolean extractNativeLibs,
-                           ZipFileRO* zipFile, ZipEntryRO zipEntry, const char* fileName) {
-    int mode = PAGE_SIZE_APP_COMPAT_FLAG_UNDEFINED;
-    // Need two separate install status for APK and ELF alignment
-    static const size_t kPageSize = getpagesize();
-    jint ret = INSTALL_SUCCEEDED;
-
-    ScopedUtfChars nativeLibPath(env, javaNativeLibPath);
-    if (extractNativeLibs) {
-        ALOGI("extractNativeLibs specified, checking for extracted lib %s", fileName);
-        return checkExtractedLibAlignment(zipFile, zipEntry, fileName, nativeLibPath.c_str());
-    }
-
-    uint16_t method;
-    off64_t offset;
-    if (!zipFile->getEntryInfo(zipEntry, &method, nullptr, nullptr, &offset, nullptr, nullptr,
-                               nullptr)) {
-        ALOGE("Couldn't read zip entry info from zipFile %s", zipFile->getZipFileName());
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-
-    // check if library is uncompressed and page-aligned
-    if (method != ZipFileRO::kCompressStored) {
-        ALOGE("Library '%s' is compressed - will not be able to open it directly from apk.\n",
-              fileName);
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-
-    if (offset % kPageSize != 0) {
-        ALOGW("Library '%s' is not PAGE(%zu)-aligned - will not be able to open it directly "
-              "from apk.\n",
-              fileName, kPageSize);
-        mode |= PAGE_SIZE_APP_COMPAT_FLAG_UNCOMPRESSED_LIBS_NOT_ALIGNED;
-        ALOGI("Setting page size compat mode "
-              "PAGE_SIZE_APP_COMPAT_FLAG_UNCOMPRESSED_LIBS_NOT_ALIGNED for %s",
-              zipFile->getZipFileName());
-    }
-
-    int loadMode = checkLoadSegmentAlignment(zipFile->getZipFileName(), offset);
-    if (loadMode == PAGE_SIZE_APP_COMPAT_FLAG_ERROR) {
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-    mode |= loadMode;
-    return mode;
-}
-
-// TODO(b/371049373): This function is copy of iterateOverNativeFiles with different way of handling
-// and combining return values for all ELF and APKs. Find a way to consolidate two functions.
-static jint com_android_internal_content_NativeLibraryHelper_checkApkAlignment(
-        JNIEnv* env, jclass clazz, jlong apkHandle, jstring javaNativeLibPath, jstring javaCpuAbi,
-        jboolean extractNativeLibs, jboolean debuggable) {
-    int mode = PAGE_SIZE_APP_COMPAT_FLAG_UNDEFINED;
-    ZipFileRO* zipFile = reinterpret_cast<ZipFileRO*>(apkHandle);
-    if (zipFile == nullptr) {
-        ALOGE("zipfile handle is null");
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-
-    auto result = NativeLibrariesIterator::create(zipFile, debuggable);
-    if (!result.ok()) {
-        ALOGE("Can't iterate over native libs for file:%s", zipFile->getZipFileName());
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-    std::unique_ptr<NativeLibrariesIterator> it(std::move(result.value()));
-
-    const ScopedUtfChars cpuAbi(env, javaCpuAbi);
-    if (cpuAbi.c_str() == nullptr) {
-        ALOGE("cpuAbi is nullptr");
-        // This would've thrown, so this return code isn't observable by Java.
-        return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-    }
-
-    while (true) {
-        auto next = it->next();
-        if (!next.ok()) {
-            ALOGE("next iterator not found Error:%d", next.error());
-            return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-        }
-        auto entry = next.value();
-        if (entry == nullptr) {
-            break;
-        }
-
-        const char* fileName = it->currentEntry();
-        const char* lastSlash = it->lastSlash();
-
-        // Check to make sure the CPU ABI of this file is one we support.
-        const char* cpuAbiOffset = fileName + APK_LIB_LEN;
-        const size_t cpuAbiRegionSize = lastSlash - cpuAbiOffset;
-
-        if (cpuAbi.size() == cpuAbiRegionSize &&
-            !strncmp(cpuAbiOffset, cpuAbi.c_str(), cpuAbiRegionSize)) {
-            int ret = checkAlignment(env, javaNativeLibPath, extractNativeLibs, zipFile, entry,
-                                     lastSlash + 1);
-            if (ret == PAGE_SIZE_APP_COMPAT_FLAG_ERROR) {
-                ALOGE("Alignment check returned for zipfile: %s, entry:%s",
-                      zipFile->getZipFileName(), lastSlash + 1);
-                return PAGE_SIZE_APP_COMPAT_FLAG_ERROR;
-            }
-            mode |= ret;
-        }
-    }
-
-    return mode;
-}
-
 static void
 com_android_internal_content_NativeLibraryHelper_close(JNIEnv *env, jclass, jlong apkHandle)
 {
@@ -797,23 +633,29 @@
 }
 
 static const JNINativeMethod gMethods[] = {
-        {"nativeOpenApk", "(Ljava/lang/String;)J",
-         (void*)com_android_internal_content_NativeLibraryHelper_openApk},
-        {"nativeOpenApkFd", "(Ljava/io/FileDescriptor;Ljava/lang/String;)J",
-         (void*)com_android_internal_content_NativeLibraryHelper_openApkFd},
-        {"nativeClose", "(J)V", (void*)com_android_internal_content_NativeLibraryHelper_close},
-        {"nativeCopyNativeBinaries", "(JLjava/lang/String;Ljava/lang/String;ZZ)I",
-         (void*)com_android_internal_content_NativeLibraryHelper_copyNativeBinaries},
-        {"nativeSumNativeBinaries", "(JLjava/lang/String;Z)J",
-         (void*)com_android_internal_content_NativeLibraryHelper_sumNativeBinaries},
-        {"nativeFindSupportedAbi", "(J[Ljava/lang/String;Z)I",
-         (void*)com_android_internal_content_NativeLibraryHelper_findSupportedAbi},
-        {"hasRenderscriptBitcode", "(J)I",
-         (void*)com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode},
-        {"nativeCheckAlignment", "(JLjava/lang/String;Ljava/lang/String;ZZ)I",
-         (void*)com_android_internal_content_NativeLibraryHelper_checkApkAlignment},
+    {"nativeOpenApk",
+            "(Ljava/lang/String;)J",
+            (void *)com_android_internal_content_NativeLibraryHelper_openApk},
+    {"nativeOpenApkFd",
+            "(Ljava/io/FileDescriptor;Ljava/lang/String;)J",
+            (void *)com_android_internal_content_NativeLibraryHelper_openApkFd},
+    {"nativeClose",
+            "(J)V",
+            (void *)com_android_internal_content_NativeLibraryHelper_close},
+    {"nativeCopyNativeBinaries",
+            "(JLjava/lang/String;Ljava/lang/String;ZZ)I",
+            (void *)com_android_internal_content_NativeLibraryHelper_copyNativeBinaries},
+    {"nativeSumNativeBinaries",
+            "(JLjava/lang/String;Z)J",
+            (void *)com_android_internal_content_NativeLibraryHelper_sumNativeBinaries},
+    {"nativeFindSupportedAbi",
+            "(J[Ljava/lang/String;Z)I",
+            (void *)com_android_internal_content_NativeLibraryHelper_findSupportedAbi},
+    {"hasRenderscriptBitcode", "(J)I",
+            (void *)com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode},
 };
 
+
 int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env)
 {
     return RegisterMethodsOrDie(env,
diff --git a/services/core/java/com/android/server/pm/PackageAbiHelper.java b/services/core/java/com/android/server/pm/PackageAbiHelper.java
index 0930299..c66a9e9 100644
--- a/services/core/java/com/android/server/pm/PackageAbiHelper.java
+++ b/services/core/java/com/android/server/pm/PackageAbiHelper.java
@@ -18,7 +18,6 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.content.pm.ApplicationInfo;
 import android.util.ArraySet;
 import android.util.Pair;
 
@@ -29,6 +28,8 @@
 
 import java.io.File;
 
+
+
 // TODO: Move to .parsing sub-package
 @VisibleForTesting
 public interface PackageAbiHelper {
@@ -78,23 +79,6 @@
             AndroidPackage scannedPackage);
 
     /**
-     * Checks alignment of APK and native libraries for 16KB device
-     *
-     * @param pkg AndroidPackage for which alignment check is being done
-     * @param libraryRoot directory for libraries
-     * @param nativeLibraryRootRequiresIsa use isa
-     * @param cpuAbiOverride ABI override mentioned in package
-     * @return {ApplicationInfo.PageSizeAppCompat} if successful or error code
-     *     which suggests undefined mode
-     */
-    @ApplicationInfo.PageSizeAppCompatFlags
-    int checkPackageAlignment(
-            AndroidPackage pkg,
-            String libraryRoot,
-            boolean nativeLibraryRootRequiresIsa,
-            String cpuAbiOverride);
-
-    /**
      * The native library paths and related properties that should be set on a
      * {@link ParsedPackage}.
      */
diff --git a/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java b/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
index 0f245b6..9db4d33 100644
--- a/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
+++ b/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java
@@ -625,20 +625,4 @@
         }
         return adjustedAbi;
     }
-
-    @Override
-    public int checkPackageAlignment(
-            AndroidPackage pkg,
-            String libraryRoot,
-            boolean nativeLibraryRootRequiresIsa,
-            String abiOverride) {
-        NativeLibraryHelper.Handle handle = null;
-        try {
-            handle = AndroidPackageUtils.createNativeLibraryHandle(pkg);
-            return NativeLibraryHelper.checkAlignmentForCompatMode(
-                            handle, libraryRoot, nativeLibraryRootRequiresIsa, abiOverride);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
 }
diff --git a/services/core/java/com/android/server/pm/ScanPackageUtils.java b/services/core/java/com/android/server/pm/ScanPackageUtils.java
index 2665196..0802e9e 100644
--- a/services/core/java/com/android/server/pm/ScanPackageUtils.java
+++ b/services/core/java/com/android/server/pm/ScanPackageUtils.java
@@ -52,7 +52,6 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.Flags;
 import android.content.pm.PackageManager;
 import android.content.pm.SharedLibraryInfo;
 import android.content.pm.SigningDetails;
@@ -64,8 +63,6 @@
 import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
-import android.system.Os;
-import android.system.OsConstants;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -108,9 +105,6 @@
  * Helper class that handles package scanning logic
  */
 final class ScanPackageUtils {
-
-    public static final int PAGE_SIZE_16KB = 16384;
-
     /**
      * Just scans the package without any side effects.
      *
@@ -424,32 +418,6 @@
                     + " abiOverride=" + pkgSetting.getCpuAbiOverride());
         }
 
-        boolean is16KbDevice = Os.sysconf(OsConstants._SC_PAGESIZE) == PAGE_SIZE_16KB;
-        if (Flags.appCompatOption16kb() && is16KbDevice) {
-            // Alignment checks are used decide whether this app should run in compat mode when
-            // nothing was specified in manifest. Manifest should always take precedence over
-            // something decided by platform.
-            if (parsedPackage.getPageSizeAppCompatFlags()
-                    > ApplicationInfo.PAGE_SIZE_APP_COMPAT_FLAG_UNDEFINED) {
-                pkgSetting.setPageSizeAppCompatFlags(parsedPackage.getPageSizeAppCompatFlags());
-            } else {
-                // 16 KB is only support for 64 bit ABIs and for apps which are being installed
-                // Check alignment. System, Apex and Platform packages should be page-agnostic now
-                if ((Build.SUPPORTED_64_BIT_ABIS.length > 0)
-                        && !isSystemApp
-                        && !isApex
-                        && !isPlatformPackage) {
-                    int mode =
-                            packageAbiHelper.checkPackageAlignment(
-                                    parsedPackage,
-                                    pkgSetting.getLegacyNativeLibraryPath(),
-                                    parsedPackage.isNativeLibraryRootRequiresIsa(),
-                                    pkgSetting.getCpuAbiOverride());
-                    pkgSetting.setPageSizeAppCompatFlags(mode);
-                }
-            }
-        }
-
         if ((scanFlags & SCAN_BOOTING) == 0 && oldSharedUserSetting != null) {
             // We don't do this here during boot because we can do it all
             // at once after scanning all existing packages.