1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun# devtmpfs does not get automounted for initramfs 4*4882a593Smuzhiyun/bin/mount -t devtmpfs devtmpfs /dev 5*4882a593Smuzhiyun/bin/mount -t proc proc /proc 6*4882a593Smuzhiyun/bin/mount -t sysfs sysfs /sys 7*4882a593Smuzhiyun/bin/mount -t tmpfs tmpfs /tmp 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunexec 1>/dev/console 10*4882a593Smuzhiyunexec 2>/dev/console 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunSLOT_SUFIX= 13*4882a593SmuzhiyunSYSTEM_NAME=rootfs 14*4882a593SmuzhiyunBLOCK_PATH=/sys/class/block 15*4882a593SmuzhiyunBLOCK_TYPE_SUPPORTED=" 16*4882a593Smuzhiyunmmcblk 17*4882a593Smuzhiyunflash" 18*4882a593Smuzhiyun 19*4882a593SmuzhiyunMSG_OUTPUT=/dev/null 20*4882a593SmuzhiyunDEBUG() { 21*4882a593Smuzhiyun echo $1 > $MSG_OUTPUT 22*4882a593Smuzhiyun} 23*4882a593Smuzhiyun 24*4882a593Smuzhiyuncheck_device_is_supported() { 25*4882a593Smuzhiyun for i in $BLOCK_TYPE_SUPPORTED 26*4882a593Smuzhiyun do 27*4882a593Smuzhiyun if [ ! -z "$(echo $(basename $1) | grep $i)" ]; then 28*4882a593Smuzhiyun echo $1 29*4882a593Smuzhiyun return 0 30*4882a593Smuzhiyun fi 31*4882a593Smuzhiyun done 32*4882a593Smuzhiyun} 33*4882a593Smuzhiyun 34*4882a593Smuzhiyunfind_raw_partition() { 35*4882a593Smuzhiyun local target=$1 36*4882a593Smuzhiyun local target_dev= 37*4882a593Smuzhiyun local partname= 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun DEBUG "try to find block $target" 40*4882a593Smuzhiyun while true 41*4882a593Smuzhiyun do 42*4882a593Smuzhiyun for dev in ${BLOCK_PATH}/* 43*4882a593Smuzhiyun do 44*4882a593Smuzhiyun target_dev=$(check_device_is_supported $dev) 45*4882a593Smuzhiyun if [ ! -z "$target_dev" ]; then 46*4882a593Smuzhiyun partname=$(cat $target_dev/uevent | grep PARTNAME | sed "s#.*PARTNAME=##") 47*4882a593Smuzhiyun if [ "$partname" == "$target" ]; then 48*4882a593Smuzhiyun echo "$(basename $target_dev)" 49*4882a593Smuzhiyun return 0 50*4882a593Smuzhiyun fi 51*4882a593Smuzhiyun fi 52*4882a593Smuzhiyun done 53*4882a593Smuzhiyun done 54*4882a593Smuzhiyun} 55*4882a593Smuzhiyun 56*4882a593SmuzhiyunDEBUG "--------------------------" 57*4882a593SmuzhiyunDEBUG "Debug For Security Ramboot" 58*4882a593SmuzhiyunDEBUG "--------------------------" 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun# make sure /dev/ has mounted 61*4882a593Smuzhiyunwhile [ ! -e /dev/mapper/control -o ! -e /proc/mounts ] 62*4882a593Smuzhiyundo 63*4882a593Smuzhiyun usleep 10000 64*4882a593Smuzhiyun echo . 65*4882a593Smuzhiyundone 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun# check a/b system 68*4882a593Smuzhiyunif [ ! -z "$(cat /proc/cmdline | grep android_slotsufix)" ]; then 69*4882a593Smuzhiyun SLOT_SUFIX=$(cat /proc/cmdline | sed "s#.*android_slotsufix=##" | cut -d ' ' -f 1) 70*4882a593Smuzhiyun SYSTEM_NAME=system 71*4882a593Smuzhiyunfi 72*4882a593Smuzhiyun 73*4882a593SmuzhiyunDEBUG "system name is ${SYSTEM_NAME}${SLOT_SUFIX}" 74*4882a593Smuzhiyunmkdir -p /dev/block/by-name 75*4882a593SmuzhiyunBLOCK=$(find_raw_partition "${SYSTEM_NAME}${SLOT_SUFIX}") 76*4882a593SmuzhiyunDEBUG "find system -> ${BLOCK}" 77*4882a593Smuzhiyunln -s /dev/$BLOCK /dev/block/by-name/system 78*4882a593Smuzhiyun 79*4882a593SmuzhiyunOFFSET= 80*4882a593Smuzhiyun# encrypto partition should get size from dev 81*4882a593Smuzhiyunif [ -z "$OFFSET" ]; then 82*4882a593Smuzhiyun OFFSET=$(cat /sys/class/block/${BLOCK}/size) 83*4882a593Smuzhiyunfi 84*4882a593Smuzhiyun 85*4882a593SmuzhiyunDEBUG "OFFSET is ${OFFSET}" 86*4882a593Smuzhiyun 87*4882a593SmuzhiyunHASH= 88*4882a593SmuzhiyunCIPHER= 89*4882a593SmuzhiyunENC_EN= 90*4882a593SmuzhiyunFORCE_KEY_WRITE=false 91*4882a593Smuzhiyun 92*4882a593Smuzhiyunif [ "${ENC_EN}" = "true" ]; then 93*4882a593Smuzhiyun /usr/bin/tee-supplicant & 94*4882a593Smuzhiyun /usr/bin/keybox_app 95*4882a593Smuzhiyun if [ "$?" != 0 ] || [ "$FORCE_KEY_WRITE" = "true" ]; then 96*4882a593Smuzhiyun DEBUG "BAD KEY FETCH -> try to find misc" 97*4882a593Smuzhiyun MISC_BLOCK=$(find_raw_partition "misc") 98*4882a593Smuzhiyun DEBUG "find misc -> $MISC_BLOCK" 99*4882a593Smuzhiyun ln -s /dev/$MISC_BLOCK /dev/block/by-name/misc 100*4882a593Smuzhiyun /usr/bin/updateEngine --misc_custom read 101*4882a593Smuzhiyun if [ "$?" != 0 ]; then 102*4882a593Smuzhiyun if [ "$FORCE_KEY_WRITE" != "true" ]; then 103*4882a593Smuzhiyun DEBUG "Can't fetch key from misc, reboot !!!" 104*4882a593Smuzhiyun reboot loader & 105*4882a593Smuzhiyun while true 106*4882a593Smuzhiyun do 107*4882a593Smuzhiyun sleep 1 108*4882a593Smuzhiyun killall -15 reboot 109*4882a593Smuzhiyun done 110*4882a593Smuzhiyun exit 0 111*4882a593Smuzhiyun fi 112*4882a593Smuzhiyun else 113*4882a593Smuzhiyun mv /tmp/custom_cmdline /tmp/syspw 114*4882a593Smuzhiyun /usr/bin/updateEngine --misc_custom clean 115*4882a593Smuzhiyun /usr/bin/keybox_app write 116*4882a593Smuzhiyun echo None > /tmp/syspw 117*4882a593Smuzhiyun fi 118*4882a593Smuzhiyun /usr/bin/keybox_app 119*4882a593Smuzhiyun fi 120*4882a593Smuzhiyun KEY=`cat /tmp/syspw` 121*4882a593Smuzhiyun DEBUG "key=$KEY" 122*4882a593Smuzhiyun dmsetup create vroot --table "0 ${OFFSET} crypt ${CIPHER} ${KEY} 0 /dev/block/by-name/system 0 1 allow_discards" 123*4882a593Smuzhiyun echo None > /tmp/syspw 124*4882a593Smuzhiyunelse 125*4882a593Smuzhiyun /usr/sbin/veritysetup --hash-offset=${OFFSET} create vroot /dev/block/by-name/system /dev/block/by-name/system ${HASH} > /dev/null 2>&1 126*4882a593Smuzhiyunfi 127*4882a593Smuzhiyun 128*4882a593Smuzhiyunkillall tee-supplicant 129*4882a593Smuzhiyun 130*4882a593Smuzhiyunmount /dev/mapper/vroot /mnt 131*4882a593Smuzhiyun 132*4882a593SmuzhiyunLABLE=$(dumpe2fs -h /dev/mapper/vroot | grep name | xargs -n 1 | tail -1) 133*4882a593Smuzhiyun 134*4882a593Smuzhiyunif [ "$LABLE" != "rootfs" ]; then 135*4882a593Smuzhiyun mount -o remount,rw /mnt 136*4882a593Smuzhiyun resize2fs /dev/mapper/vroot && tune2fs /dev/mapper/vroot -L rootfs 137*4882a593Smuzhiyunfi 138*4882a593Smuzhiyun 139*4882a593Smuzhiyunif [ -e "/mnt/init" ]; then 140*4882a593Smuzhiyun INIT=/init 141*4882a593Smuzhiyunelse 142*4882a593Smuzhiyun INIT=/sbin/init 143*4882a593Smuzhiyunfi 144*4882a593Smuzhiyun# exec /sbin/init "$@" 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun# echo "exec busybox switch_root /mnt ${INIT}" 147*4882a593Smuzhiyun# exec busybox switch_root /mnt ${INIT} 148*4882a593Smuzhiyunexec 0</dev/console 149*4882a593Smuzhiyunexec /sbin/init "$@" 150