16d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#!/bin/bash 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#===- lib/asan/scripts/asan_device_setup -----------------------------------===# 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# The LLVM Compiler Infrastructure 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# This file is distributed under the University of Illinois Open Source 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# License. See LICENSE.TXT for details. 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# Prepare Android device to run ASan applications. 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#===------------------------------------------------------------------------===# 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 136d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesset -e 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesHERE="$(cd "$(dirname "$0")" && pwd)" 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesrevert=no 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesextra_options= 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesdevice= 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hineslib= 2186277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesuse_su=0 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesfunction usage { 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo "usage: $0 [--revert] [--device device-id] [--lib path] [--extra-options options]" 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo " --revert: Uninstall ASan from the device." 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo " --lib: Path to ASan runtime library." 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo " --extra-options: Extra ASAN_OPTIONS." 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo " --device: Install to the given device. Use 'adb devices' to find" 292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo " device-id." 3086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo " --use-su: Use 'su -c' prefix for every adb command instead of using" 3186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo " 'adb root' once." 322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo 332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines exit 1 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 3686277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesfunction adb_push { 3786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if [ $use_su -eq 0 ]; then 3886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB push "$1" "$2" 3986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines else 4086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines local FILENAME=$(basename $1) 4186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB push "$1" "/data/local/tmp/$FILENAME" 4286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB shell su -c "rm \\\"$2/$FILENAME\\\"" >&/dev/null 4386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB shell su -c "cat \\\"/data/local/tmp/$FILENAME\\\" > \\\"$2/$FILENAME\\\"" 4486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB shell su -c "rm \\\"/data/local/tmp/$FILENAME\\\"" 4586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines fi 4686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 4786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 4886277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesfunction adb_remount { 4986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if [ $use_su -eq 0 ]; then 5086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB remount 5186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines else 5286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines local STORAGE=`$ADB shell mount | grep /system | cut -d ' ' -f1` 5386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if [ "$STORAGE" != "" ]; then 5486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo Remounting $STORAGE at /system 5586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB shell su -c "mount -o remount,rw $STORAGE /system" 5686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines else 5786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo Failed to get storage device name for "/system" mount point 5886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines fi 5986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines fi 6086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 6186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 6286277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesfunction adb_shell { 6386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if [ $use_su -eq 0 ]; then 6486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB shell $@ 6586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines else 6686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB shell su -c "$*" 6786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines fi 6886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 6986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 7086277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesfunction adb_root { 7186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if [ $use_su -eq 0 ]; then 7286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB root 7386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines fi 7486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 7586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 7686277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesfunction adb_wait_for_device { 7786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB wait-for-device 7886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 7986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 8086277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesfunction adb_pull { 8186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if [ $use_su -eq 0 ]; then 8286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB pull "$1" "$2" 8386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines else 8486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines local FILENAME=$(basename $1) 8586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB shell rm "/data/local/tmp/$FILENAME" >&/dev/null 8686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB shell su -c "[ -f \\\"$1\\\" ] && cat \\\"$1\\\" > \\\"/data/local/tmp/$FILENAME\\\" && chown root.shell \\\"/data/local/tmp/$FILENAME\\\" && chmod 755 \\\"/data/local/tmp/$FILENAME\\\"" && 8786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines $ADB pull "/data/local/tmp/$FILENAME" "$2" >&/dev/null && $ADB shell "rm \"/data/local/tmp/$FILENAME\"" 8886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines fi 8986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 9086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 91799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfunction get_device_arch { # OUT OUT64 926d1862363c88c183b0ed7740fca876342cf0474bStephen Hines local _outvar=$1 93799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _outvar64=$2 9486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines local _ABI=$(adb_shell getprop ro.product.cpu.abi) 956d1862363c88c183b0ed7740fca876342cf0474bStephen Hines local _ARCH= 96799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _ARCH64= 976d1862363c88c183b0ed7740fca876342cf0474bStephen Hines if [[ $_ABI == x86* ]]; then 986d1862363c88c183b0ed7740fca876342cf0474bStephen Hines _ARCH=i686 996d1862363c88c183b0ed7740fca876342cf0474bStephen Hines elif [[ $_ABI == armeabi* ]]; then 1006d1862363c88c183b0ed7740fca876342cf0474bStephen Hines _ARCH=arm 101799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar elif [[ $_ABI == arm64-v8a* ]]; then 102799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar _ARCH=arm 103799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar _ARCH64=aarch64 1046d1862363c88c183b0ed7740fca876342cf0474bStephen Hines else 1056d1862363c88c183b0ed7740fca876342cf0474bStephen Hines echo "Unrecognized device ABI: $_ABI" 1066d1862363c88c183b0ed7740fca876342cf0474bStephen Hines exit 1 1076d1862363c88c183b0ed7740fca876342cf0474bStephen Hines fi 1086d1862363c88c183b0ed7740fca876342cf0474bStephen Hines eval $_outvar=\$_ARCH 109799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar eval $_outvar64=\$_ARCH64 1106d1862363c88c183b0ed7740fca876342cf0474bStephen Hines} 1116d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 1122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hineswhile [[ $# > 0 ]]; do 1132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines case $1 in 1142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines --revert) 1152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines revert=yes 1162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ;; 1172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines --extra-options) 1182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines shift 1192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if [[ $# == 0 ]]; then 1202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo "--extra-options requires an argument." 1212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines exit 1 1222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fi 1232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines extra_options="$1" 1242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ;; 1252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines --lib) 1262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines shift 1272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if [[ $# == 0 ]]; then 1282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo "--lib requires an argument." 1292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines exit 1 1302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fi 1312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines lib="$1" 1322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ;; 1332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines --device) 1342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines shift 1352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if [[ $# == 0 ]]; then 1362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo "--device requires an argument." 1372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines exit 1 1382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fi 1392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines device="$1" 1402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ;; 14186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines --use-su) 14286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines use_su=1 14386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines ;; 1442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines *) 1452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines usage 1462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ;; 1472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines esac 1482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines shift 1492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesdone 1502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 1512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesADB=${ADB:-adb} 1522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesif [[ x$device != x ]]; then 1532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ADB="$ADB -s $device" 1542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesfi 1552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 15686277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesif [ $use_su -eq 1 ]; then 15786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines # Test if 'su' is present on the device 15886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines SU_TEST_OUT=`$ADB shell su -c "echo foo" 2>&1 | sed 's/\r$//'` 15986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if [ $? != 0 -o "$SU_TEST_OUT" != "foo" ]; then 16086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo "ERROR: Cannot use 'su -c':" 16186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo "$ adb shell su -c \"echo foo\"" 16286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo $SU_TEST_OUT 16386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo "Check that 'su' binary is correctly installed on the device or omit" 16486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines echo " --use-su flag" 16586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines exit 1 16686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines fi 16786277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesfi 16886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 1696d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesecho '>> Remounting /system rw' 17086277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesadb_wait_for_device 17186277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesadb_root 17286277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesadb_wait_for_device 17386277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesadb_remount 17486277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesadb_wait_for_device 1756d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 176799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarget_device_arch ARCH ARCH64 1776d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesecho "Target architecture: $ARCH" 1786d1862363c88c183b0ed7740fca876342cf0474bStephen HinesASAN_RT="libclang_rt.asan-$ARCH-android.so" 179799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarif [[ -n $ARCH64 ]]; then 180799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar echo "Target architecture: $ARCH64" 181799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar ASAN_RT64="libclang_rt.asan-$ARCH64-android.so" 182799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfi 1832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 1842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesif [[ x$revert == xyes ]]; then 1852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo '>> Uninstalling ASan' 1866d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 18786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if ! adb_shell ls -l /system/bin/app_process | grep -o '\->.*app_process' >&/dev/null; then 188799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar echo '>> Pre-L device detected.' 189799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell mv /system/bin/app_process.real /system/bin/app_process 190799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell rm /system/bin/asanwrapper 191799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar elif ! adb_shell ls -l /system/bin/app_process64.real | grep -o 'No such file or directory' >&/dev/null; then 192799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar # 64-bit installation. 193799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell mv /system/bin/app_process32.real /system/bin/app_process32 194799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell mv /system/bin/app_process64.real /system/bin/app_process64 195799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell rm /system/bin/asanwrapper 196799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell rm /system/bin/asanwrapper64 1976d1862363c88c183b0ed7740fca876342cf0474bStephen Hines else 198799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar # 32-bit installation. 199799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell rm /system/bin/app_process.wrap 200799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell rm /system/bin/asanwrapper 201799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell rm /system/bin/app_process 202799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell ln -s /system/bin/app_process32 /system/bin/app_process 2036d1862363c88c183b0ed7740fca876342cf0474bStephen Hines fi 2042d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 2052d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo '>> Restarting shell' 20686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell stop 20786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell start 20886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 20986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines # Remove the library on the last step to give a chance to the 'su' binary to 21086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines # be executed without problem. 21186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell rm /system/lib/$ASAN_RT 2122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 2132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo '>> Done' 2142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines exit 0 2152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesfi 2162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 2172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesif [[ -d "$lib" ]]; then 2182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ASAN_RT_PATH="$lib" 2192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hineselif [[ -f "$lib" && "$lib" == *"$ASAN_RT" ]]; then 2202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ASAN_RT_PATH=$(dirname "$lib") 2212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hineselif [[ -f "$HERE/$ASAN_RT" ]]; then 2222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ASAN_RT_PATH="$HERE" 2232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hineselif [[ $(basename "$HERE") == "bin" ]]; then 2242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines # We could be in the toolchain's base directory. 225799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar # Consider ../lib, ../lib/asan, ../lib/linux, 226799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar # ../lib/clang/$VERSION/lib/linux, and ../lib64/clang/$VERSION/lib/linux. 227799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar P=$(ls "$HERE"/../lib/"$ASAN_RT" \ 228799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar "$HERE"/../lib/asan/"$ASAN_RT" \ 229799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar "$HERE"/../lib/linux/"$ASAN_RT" \ 230799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar "$HERE"/../lib/clang/*/lib/linux/"$ASAN_RT" \ 231799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar "$HERE"/../lib64/clang/*/lib/linux/"$ASAN_RT" 2>/dev/null | sort | tail -1) 2322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if [[ -n "$P" ]]; then 2332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ASAN_RT_PATH="$(dirname "$P")" 2342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines fi 2352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesfi 2362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 2372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesif [[ -z "$ASAN_RT_PATH" || ! -f "$ASAN_RT_PATH/$ASAN_RT" ]]; then 2386d1862363c88c183b0ed7740fca876342cf0474bStephen Hines echo ">> ASan runtime library not found" 2392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines exit 1 2402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesfi 2412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 242799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarif [[ -n "$ASAN_RT64" ]]; then 243799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar if [[ -z "$ASAN_RT_PATH" || ! -f "$ASAN_RT_PATH/$ASAN_RT64" ]]; then 244799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar echo ">> ASan runtime library not found" 245799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar exit 1 246799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar fi 247799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfi 248799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 2492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesTMPDIRBASE=$(mktemp -d) 2502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesTMPDIROLD="$TMPDIRBASE/old" 2512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesTMPDIR="$TMPDIRBASE/new" 2522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesmkdir "$TMPDIROLD" 2532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 25486277eb844c4983c81de62d7c050e92fe7155788Stephen HinesRELEASE=$(adb_shell getprop ro.build.version.release) 2556d1862363c88c183b0ed7740fca876342cf0474bStephen HinesPRE_L=0 2566d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesif echo "$RELEASE" | grep '^4\.' >&/dev/null; then 2576d1862363c88c183b0ed7740fca876342cf0474bStephen Hines PRE_L=1 2586d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesfi 2596d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 26086277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesif ! adb_shell ls -l /system/bin/app_process | grep -o '\->.*app_process' >&/dev/null; then 2616d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 26286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if adb_pull /system/bin/app_process.real /dev/null >&/dev/null; then 2636d1862363c88c183b0ed7740fca876342cf0474bStephen Hines echo '>> Old-style ASan installation detected. Reverting.' 26486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell mv /system/bin/app_process.real /system/bin/app_process 2656d1862363c88c183b0ed7740fca876342cf0474bStephen Hines fi 2666d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 2676d1862363c88c183b0ed7740fca876342cf0474bStephen Hines echo '>> Pre-L device detected. Setting up app_process symlink.' 26886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell mv /system/bin/app_process /system/bin/app_process32 26986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell ln -s /system/bin/app_process32 /system/bin/app_process 2706d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesfi 2712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 2722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesecho '>> Copying files from the device' 273799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarif [[ -n "$ASAN_RT64" ]]; then 274799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/lib/"$ASAN_RT" "$TMPDIROLD" || true 275799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/lib64/"$ASAN_RT64" "$TMPDIROLD" || true 276799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/app_process32 "$TMPDIROLD" || true 277799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/app_process32.real "$TMPDIROLD" || true 278799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/app_process64 "$TMPDIROLD" || true 279799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/app_process64.real "$TMPDIROLD" || true 280799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/asanwrapper "$TMPDIROLD" || true 281799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/asanwrapper64 "$TMPDIROLD" || true 282799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarelse 283799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/lib/"$ASAN_RT" "$TMPDIROLD" || true 284799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/app_process32 "$TMPDIROLD" || true 285799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/app_process.wrap "$TMPDIROLD" || true 286799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_pull /system/bin/asanwrapper "$TMPDIROLD" || true 287799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfi 2882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinescp -r "$TMPDIROLD" "$TMPDIR" 2892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 290799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarif [[ -f "$TMPDIR/app_process.wrap" || -f "$TMPDIR/app_process64.real" ]]; then 2916d1862363c88c183b0ed7740fca876342cf0474bStephen Hines echo ">> Previous installation detected" 2922d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hineselse 2936d1862363c88c183b0ed7740fca876342cf0474bStephen Hines echo ">> New installation" 2942d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesfi 2952d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 2962d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesecho '>> Generating wrappers' 2972d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 2982d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinescp "$ASAN_RT_PATH/$ASAN_RT" "$TMPDIR/" 299799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarif [[ -n "$ASAN_RT64" ]]; then 300799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar cp "$ASAN_RT_PATH/$ASAN_RT64" "$TMPDIR/" 301799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfi 3022d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 303c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga NainarASAN_OPTIONS=start_deactivated=1,malloc_context_size=0 304799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 305799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfunction generate_zygote_wrapper { # from, to, asan_rt 306799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _from=$1 307799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _to=$2 308799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _asan_rt=$3 309c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar if [[ PRE_L -eq 0 ]]; then 310c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar # LD_PRELOAD parsing is broken in N if it starts with ":". Luckily, it is 311c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar # unset in the system environment since L. 312c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar local _ld_preload=$_asan_rt 313c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar else 314c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar local _ld_preload=\$LD_PRELOAD:$_asan_rt 315c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar fi 316799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar cat <<EOF >"$TMPDIR/$_from" 317799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#!/system/bin/sh-from-zygote 318799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga NainarASAN_OPTIONS=$ASAN_OPTIONS \\ 319799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga NainarASAN_ACTIVATION_OPTIONS=include_if_exists=/data/local/tmp/asan.options.%b \\ 320c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga NainarLD_PRELOAD=$_ld_preload \\ 321799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarexec $_to \$@ 322799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 323799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga NainarEOF 324799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar} 3256d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 3266d1862363c88c183b0ed7740fca876342cf0474bStephen Hines# On Android-L not allowing user segv handler breaks some applications. 32786277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesif [[ PRE_L -eq 0 ]]; then 3286d1862363c88c183b0ed7740fca876342cf0474bStephen Hines ASAN_OPTIONS="$ASAN_OPTIONS,allow_user_segv_handler=1" 3296d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesfi 3306d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 3312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesif [[ x$extra_options != x ]] ; then 3322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ASAN_OPTIONS="$ASAN_OPTIONS,$extra_options" 3332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesfi 3342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 3352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# Zygote wrapper. 336799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarif [[ -f "$TMPDIR/app_process64" ]]; then 337799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar # A 64-bit device. 338799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar if [[ ! -f "$TMPDIR/app_process64.real" ]]; then 339799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar # New installation. 340799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar mv "$TMPDIR/app_process32" "$TMPDIR/app_process32.real" 341799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar mv "$TMPDIR/app_process64" "$TMPDIR/app_process64.real" 342799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar fi 343799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar generate_zygote_wrapper "app_process32" "/system/bin/app_process32.real" "$ASAN_RT" 344799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar generate_zygote_wrapper "app_process64" "/system/bin/app_process64.real" "$ASAN_RT64" 345799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarelse 346799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar # A 32-bit device. 347799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar generate_zygote_wrapper "app_process.wrap" "/system/bin/app_process32" "$ASAN_RT" 348799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfi 3492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 3502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# General command-line tool wrapper (use for anything that's not started as 3512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# zygote). 3522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinescat <<EOF >"$TMPDIR/asanwrapper" 3532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#!/system/bin/sh 3546d1862363c88c183b0ed7740fca876342cf0474bStephen HinesLD_PRELOAD=$ASAN_RT \\ 3552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesexec \$@ 3562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 3572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesEOF 3582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 359799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarif [[ -n "$ASAN_RT64" ]]; then 360799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar cat <<EOF >"$TMPDIR/asanwrapper64" 361799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#!/system/bin/sh 362799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga NainarLD_PRELOAD=$ASAN_RT64 \\ 363799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarexec \$@ 364799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 365799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga NainarEOF 366799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfi 367799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 368799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarfunction install { # from, to, chmod, chcon 369799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _from=$1 370799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _to=$2 371799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _mode=$3 372799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _context=$4 373799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar local _basename="$(basename "$_from")" 374799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar echo "Installing $_to/$_basename $_mode $_context" 375799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_push "$_from" "$_to/$_basename" 376799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell chown root.shell "$_to/$_basename" 377799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar if [[ -n "$_mode" ]]; then 378799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell chmod "$_mode" "$_to/$_basename" 379799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar fi 380799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar if [[ -n "$_context" ]]; then 381799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell chcon "$_context" "$_to/$_basename" 382799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar fi 383799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar} 3842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 385799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarif ! ( cd "$TMPDIRBASE" && diff -qr old/ new/ ) ; then 3866d1862363c88c183b0ed7740fca876342cf0474bStephen Hines # Make SELinux happy by keeping app_process wrapper and the shell 3876d1862363c88c183b0ed7740fca876342cf0474bStephen Hines # it runs on in zygote domain. 3886d1862363c88c183b0ed7740fca876342cf0474bStephen Hines ENFORCING=0 38986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if adb_shell getenforce | grep Enforcing >/dev/null; then 3906d1862363c88c183b0ed7740fca876342cf0474bStephen Hines # Sometimes shell is not allowed to change file contexts. 3916d1862363c88c183b0ed7740fca876342cf0474bStephen Hines # Temporarily switch to permissive. 3926d1862363c88c183b0ed7740fca876342cf0474bStephen Hines ENFORCING=1 39386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell setenforce 0 3946d1862363c88c183b0ed7740fca876342cf0474bStephen Hines fi 3956d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 3966d1862363c88c183b0ed7740fca876342cf0474bStephen Hines if [[ PRE_L -eq 1 ]]; then 3976d1862363c88c183b0ed7740fca876342cf0474bStephen Hines CTX=u:object_r:system_file:s0 3986d1862363c88c183b0ed7740fca876342cf0474bStephen Hines else 3996d1862363c88c183b0ed7740fca876342cf0474bStephen Hines CTX=u:object_r:zygote_exec:s0 4006d1862363c88c183b0ed7740fca876342cf0474bStephen Hines fi 401799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 402799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar echo '>> Pushing files to the device' 403799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 404799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar if [[ -n "$ASAN_RT64" ]]; then 405799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/$ASAN_RT" /system/lib 644 406799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/$ASAN_RT64" /system/lib64 644 407799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/app_process32" /system/bin 755 $CTX 408799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/app_process32.real" /system/bin 755 $CTX 409799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/app_process64" /system/bin 755 $CTX 410799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/app_process64.real" /system/bin 755 $CTX 411799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/asanwrapper" /system/bin 755 412799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/asanwrapper64" /system/bin 755 413799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar else 414799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/$ASAN_RT" /system/lib 644 415799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/app_process32" /system/bin 755 $CTX 416799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/app_process.wrap" /system/bin 755 $CTX 417799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar install "$TMPDIR/asanwrapper" /system/bin 755 $CTX 418799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 419799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell rm /system/bin/app_process 420799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell ln -s /system/bin/app_process.wrap /system/bin/app_process 421799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar fi 422799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 423799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell cp /system/bin/sh /system/bin/sh-from-zygote 424799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar adb_shell chcon $CTX /system/bin/sh-from-zygote 4256d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 4266d1862363c88c183b0ed7740fca876342cf0474bStephen Hines if [ $ENFORCING == 1 ]; then 42786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell setenforce 1 4286d1862363c88c183b0ed7740fca876342cf0474bStephen Hines fi 4296d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 4302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo '>> Restarting shell (asynchronous)' 43186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell stop 43286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines adb_shell start 4332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 4342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo '>> Please wait until the device restarts' 4352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hineselse 4362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines echo '>> Device is up to date' 4372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesfi 4382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 4392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesrm -r "$TMPDIRBASE" 440