Skip to content

Commit bf76050

Browse files
ime: add vendor_init script and update patchlevel script
- Remove mount command in qcom_decrypt.rc - Add symlink for tzdata - Set patch level back to 2018-12-01 Change-Id: I187c554d33dff4f71c32c38bf700560ec5af6a0c
1 parent 5ec2fb3 commit bf76050

5 files changed

Lines changed: 233 additions & 53 deletions

File tree

BoardConfig.mk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ PLATFORM_VERSION := 8.0.0
110110
# 1.30 OTA
111111
#PLATFORM_SECURITY_PATCH := 2018-09-01
112112
# 1.53 OTA
113-
#PLATFORM_SECURITY_PATCH := 2018-12-01
113+
PLATFORM_SECURITY_PATCH := 2018-12-01
114114
# 1.57 OTA
115-
PLATFORM_SECURITY_PATCH := 2019-01-01
115+
#PLATFORM_SECURITY_PATCH := 2019-01-01
116116

117117
# Encryption
118118
TARGET_HW_DISK_ENCRYPTION := true

recovery/root/init.recovery.qcom_decrypt.rc

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,6 @@ on fs
1919
on property:init.svc.sbinhwservicemanager=running && property:hwservicemanager.ready=true
2020
start sbinkeymaster-3-0
2121

22-
#############################################################
23-
# #
24-
# Note: On AB devices using vold decrypt, system #
25-
# needs to be mounted at /system_root, and then the #
26-
# below mount needs to be included here so the #
27-
# binaries can be found and linker will work properly #
28-
# #
29-
#############################################################
30-
on property:vold_decrypt.symlinked_vendor=1
31-
mount /system_root/system /system
32-
3322
on property:ro.crypto.fs_crypto_blkdev=*
3423
setprop fde.ready 0
3524
stop sbinqseecomd

recovery/root/sbin/patchlevel.sh

Lines changed: 130 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
#!/sbin/sh
22

3-
finish()
4-
{
5-
umount /v
6-
umount /s
7-
rmdir /v
8-
rmdir /s
9-
setprop fde.ready 1
10-
exit 0
11-
}
12-
13-
osver=$(getprop ro.build.version.release_orig)
14-
patchlevel=$(getprop ro.build.version.security_patch_orig)
3+
SCRIPTNAME="PatchLevel"
4+
LOGFILE=/tmp/recovery.log
5+
TEMPSYS=/s
6+
TEMPVEN=/v
7+
BUILDPROP=system/build.prop
8+
DEFAULTPROP=prop.default
159
suffix=$(getprop ro.boot.slot_suffix)
1610

1711
if [ -z "$suffix" ]; then
@@ -20,58 +14,154 @@ if [ -z "$suffix" ]; then
2014
fi
2115

2216
venpath="/dev/block/bootdevice/by-name/vendor$suffix"
23-
mkdir /v
24-
mount -t ext4 -o ro "$venpath" /v
2517
syspath="/dev/block/bootdevice/by-name/system$suffix"
26-
mkdir /s
27-
mount -t ext4 -o ro "$syspath" /s
2818

29-
if [ -f /s/system/build.prop ]; then
19+
log_info()
20+
{
21+
echo "I:$SCRIPTNAME:$1" >> "$LOGFILE"
22+
}
23+
24+
log_error()
25+
{
26+
echo "E:$SCRIPTNAME:$1" >> "$LOGFILE"
27+
}
28+
29+
finish()
30+
{
31+
umount "$TEMPVEN"
32+
umount "$TEMPSYS"
33+
rmdir "$TEMPVEN"
34+
rmdir "$TEMPSYS"
35+
setprop fde.ready 1
36+
log_info "fde.ready=$(getprop fde.ready)"
37+
log_info "Script complete. Device ready for decryption."
38+
exit 0
39+
}
40+
41+
finish_error()
42+
{
43+
umount "$TEMPVEN"
44+
umount "$TEMPSYS"
45+
rmdir "$TEMPVEN"
46+
rmdir "$TEMPSYS"
47+
log_error "Script run incomplete. Device not ready for decryption."
48+
exit 0
49+
}
50+
51+
osver_orig=$(getprop ro.build.version.release_orig)
52+
patchlevel_orig=$(getprop ro.build.version.security_patch_orig)
53+
osver=$(getprop ro.build.version.release)
54+
patchlevel=$(getprop ro.build.version.security_patch)
55+
device=$(getprop ro.product.device)
56+
fingerprint=$(getprop ro.build.fingerprint)
57+
product=$(getprop ro.build.product)
58+
59+
log_info "Running patchlevel pre-decrypt script for TWRP..."
60+
61+
mkdir "$TEMPVEN"
62+
if [ -d "$TEMPVEN" ]; then
63+
log_info "Temporary vendor folder created at $TEMPVEN."
64+
else
65+
log_error "Unable to create temporary vendor folder."
66+
finish_error
67+
fi
68+
mount -t ext4 -o ro "$venpath" "$TEMPVEN"
69+
if [ -n "$(ls -A "$TEMPVEN" 2>/dev/null)" ]; then
70+
log_info "Vendor mounted at $TEMPVEN."
71+
else
72+
log_error "Unable to mount vendor to temporary folder."
73+
finish_error
74+
fi
75+
76+
mkdir "$TEMPSYS"
77+
if [ -d "$TEMPSYS" ]; then
78+
log_info "Temporary system folder created at $TEMPSYS."
79+
else
80+
log_error "Unable to create temporary system folder."
81+
finish_error
82+
fi
83+
mount -t ext4 -o ro "$syspath" "$TEMPSYS"
84+
if [ -n "$(ls -A "$TEMPSYS" 2>/dev/null)" ]; then
85+
log_info "System mounted at $TEMPSYS."
86+
else
87+
log_error "Unable to mount system to temporary folder."
88+
finish_error
89+
fi
90+
91+
if [ -f "$TEMPSYS/$BUILDPROP" ]; then
92+
log_info "Build.prop exists! Setting system properties from build.prop"
3093
# TODO: It may be better to try to read these from the boot image than from /system
31-
osver=$(grep -i 'ro.build.version.release' /s/system/build.prop | cut -f2 -d'=' -s)
32-
patchlevel=$(grep -i 'ro.build.version.security_patch' /s/system/build.prop | cut -f2 -d'=' -s)
33-
if [ ! -z "$osver" ]; then
94+
log_info "Current OS version: $osver"
95+
osver=$(grep -i 'ro.build.version.release' "$TEMPSYS/$BUILDPROP" | cut -f2 -d'=' -s)
96+
if [ -n "$osver" ]; then
3497
resetprop ro.build.version.release "$osver"
35-
sed -i "s/ro.build.version.release=.*/ro.build.version.release="$osver"/g" /prop.default ;
98+
sed -i "s/ro.build.version.release=.*/ro.build.version.release="$osver"/g" "/$DEFAULTPROP" ;
99+
log_info "New OS Version: $osver"
36100
fi
37-
if [ ! -z "$patchlevel" ]; then
101+
log_info "Current security patch level: $patchlevel"
102+
patchlevel=$(grep -i 'ro.build.version.security_patch' "$TEMPSYS/$BUILDPROP" | cut -f2 -d'=' -s)
103+
if [ -n "$patchlevel" ]; then
38104
resetprop ro.build.version.security_patch "$patchlevel"
39-
sed -i "s/ro.build.version.security_patch=.*/ro.build.version.security_patch="$patchlevel"/g" /prop.default ;
105+
sed -i "s/ro.build.version.security_patch=.*/ro.build.version.security_patch="$patchlevel"/g" "/$DEFAULTPROP" ;
106+
log_info "New security patch level: $patchlevel"
40107
fi
41108
# Set additional props from build.prop
42-
device=$(grep -i 'ro.product.device' /s/system/build.prop | cut -f2 -d'=' -s)
43-
fingerprint=$(grep -i 'ro.build.fingerprint' /s/system/build.prop | cut -f2 -d'=' -s)
44-
product=$(grep -i 'ro.build.product' /s/system/build.prop | cut -f2 -d'=' -s)
45-
if [ ! -z "$device" ]; then
109+
# Only needed for some devices, so this section can be removed if your device isn't one of them
110+
log_info "Current device: $device"
111+
device=$(grep -i 'ro.product.device' "$TEMPSYS/$BUILDPROP" | cut -f2 -d'=' -s)
112+
if [ -n "$device" ]; then
46113
resetprop ro.product.device "$device"
47-
sed -i "s/ro.product.device=.*/ro.product.device="$device"/g" /prop.default ;
114+
sed -i "s/ro.product.device=.*/ro.product.device="$device"/g" "/$DEFAULTPROP" ;
115+
log_info "New device: $device"
48116
fi
49-
if [ ! -z "$fingerprint" ]; then
117+
log_info "Current fingerprint: $fingerprint"
118+
fingerprint=$(grep -i 'ro.build.fingerprint' "$TEMPSYS/$BUILDPROP" | cut -f2 -d'=' -s)
119+
if [ -n "$fingerprint" ]; then
50120
resetprop ro.build.fingerprint "$fingerprint"
51-
sed -i "s/ro.build.fingerprint=.*/ro.build.fingerprint="$osver"/g" /prop.default ;
121+
sed -i "s/ro.build.fingerprint=.*/ro.build.fingerprint="$fingerprint"/g" "/$DEFAULTPROP" ;
122+
log_info "New fingerprint: $fingerprint"
52123
fi
53-
if [ ! -z "$product" ]; then
124+
log_info "Current product: $product"
125+
product=$(grep -i 'ro.build.product' "$TEMPSYS/$BUILDPROP" | cut -f2 -d'=' -s)
126+
if [ -n "$product" ]; then
54127
resetprop ro.build.product "$product"
55-
sed -i "s/ro.build.product=.*/ro.build.product="$product"/g" /prop.default ;
128+
sed -i "s/ro.build.product=.*/ro.build.product="$product"/g" "/$DEFAULTPROP" ;
129+
log_info "New product: $product"
56130
fi
57131
# Load Tuxera exfat module
58-
if [ -f /v/lib/modules/texfat.ko ]; then
59-
insmod /v/lib/modules/texfat.ko
132+
if [ -f "$TEMPVEN/lib/modules/texfat.ko" ]; then
133+
echo "I:TexFAT:Loading Tuxera exFAT module from vendor..." >> "$LOGFILE"
134+
insmod "$TEMPVEN/lib/modules/texfat.ko"
60135
fi
61136
finish
62137
else
63138
# Be sure to increase the PLATFORM_VERSION in build/core/version_defaults.mk to override Google's anti-rollback features to something rather insane
64-
if [ ! -z "$osver" ]; then
139+
if [ -n "$osver_orig" ]; then
140+
log_info "Original OS version: $osver_orig"
141+
log_info "Current OS version: $osver"
142+
log_info "Setting OS Version to $osver_orig"
143+
osver=$osver_orig
65144
resetprop ro.build.version.release "$osver"
66-
sed -i "s/ro.build.version.release=.*/ro.build.version.release="$osver"/g" /prop.default ;
145+
sed -i "s/ro.build.version.release=.*/ro.build.version.release="$osver"/g" "/$DEFAULTPROP" ;
146+
else
147+
log_info "No Original OS Version found. Proceeding with existing value."
148+
log_info "Current OS version: $osver"
67149
fi
68-
if [ ! -z "$patchlevel" ]; then
150+
if [ -n "$patchlevel_orig" ]; then
151+
log_info "Original security patch level: $patchlevel_orig"
152+
log_info "Current security patch level: $patchlevel"
153+
log_info "Setting security patch level to $patchlevel_orig"
154+
patchlevel=$patchlevel_orig
69155
resetprop ro.build.version.security_patch "$patchlevel"
70-
sed -i "s/ro.build.version.security_patch=.*/ro.build.version.security_patch="$patchlevel"/g" /prop.default ;
156+
sed -i "s/ro.build.version.security_patch=.*/ro.build.version.security_patch="$patchlevel"/g" "/$DEFAULTPROP" ;
157+
else
158+
log_info "No Original security patch level found. Proceeding with existing value."
159+
log_info "Current security patch level: $patchlevel"
71160
fi
72161
# Load Tuxera exfat module
73-
if [ -f /v/lib/modules/texfat.ko ]; then
74-
insmod /v/lib/modules/texfat.ko
162+
if [ -f "$TEMPVEN/lib/modules/texfat.ko" ]; then
163+
echo "I:TexFAT:Loading Tuxera exFAT module from vendor..." >> "$LOGFILE"
164+
insmod "$TEMPVEN/lib/modules/texfat.ko"
75165
fi
76166
finish
77167
fi

recovery/root/sbin/runatboot.sh

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#!/sbin/sh
2+
3+
# The below variables shouldn't need to be changed
4+
# unless you want to call the script something else
5+
SCRIPTNAME="VendorInit"
6+
LOGFILE=/tmp/recovery.log
7+
8+
# Functions for logging to the recovery log
9+
log_info()
10+
{
11+
echo "I:$SCRIPTNAME:$1" >> "$LOGFILE"
12+
}
13+
14+
log_error()
15+
{
16+
echo "E:$SCRIPTNAME:$1" >> "$LOGFILE"
17+
}
18+
19+
# Functions to update props using resetprop
20+
update_product_device()
21+
{
22+
log_info "Current product: $product"
23+
resetprop "ro.build.product" "$1"
24+
product=$(getprop ro.build.product)
25+
log_info "New product: $product"
26+
log_info "Current device: $device"
27+
resetprop "ro.product.device" "$1"
28+
device=$(getprop ro.product.device)
29+
log_info "New device: $device"
30+
}
31+
32+
update_model()
33+
{
34+
log_info "Current model: $model"
35+
resetprop "ro.product.model" "$1"
36+
model=$(getprop ro.product.model)
37+
log_info "New model: $model"
38+
}
39+
40+
# These variables will pull directly from getprop output
41+
bootmid=$(getprop ro.boot.mid)
42+
bootcid=$(getprop ro.boot.cid)
43+
device=$(getprop ro.product.device)
44+
model=$(getprop ro.product.model)
45+
product=$(getprop ro.build.product)
46+
hardware=$(getprop ro.hardware)
47+
48+
# Here's where the fun begins...
49+
# To adapt this for other devices, only the MID strings in the case statement
50+
# need to be updated, and the value of the props to be set based on them.
51+
# I tried to make the syntax as straightforward as possible so it's easy
52+
# to update for future devices.
53+
log_info "Updating device properties based on MID and CID..."
54+
log_info "MID Found: $bootmid"
55+
log_info "CID Found: $bootcid"
56+
57+
case $bootmid in
58+
"2Q5510000")
59+
## EMEA/Aisa TW/RUS/SEA India Dual-SIM ##
60+
if [ $hardware == 'htc_exo' ]; then
61+
update_product_device "htc_exodugl";
62+
update_model "EXODUS 1";
63+
else
64+
update_product_device "htc_imedugl";
65+
log_info "Current model: $model";
66+
fi
67+
;;
68+
"2Q5520000")
69+
## EMEA/US Unlocked, Single-SIM ##
70+
if [ $hardware == 'htc_exo' ]; then
71+
update_product_device "htc_exouhl";
72+
update_model "EXODUS 1";
73+
else
74+
update_product_device "htc_imeuhl";
75+
log_info "Current model: $model";
76+
fi
77+
;;
78+
"2Q5530000")
79+
## CHINA, Dual-SIM ##
80+
if [ $hardware == 'htc_exo' ]; then
81+
update_product_device "htc_exodtwl";
82+
update_model "EXODUS 1";
83+
else
84+
update_product_device "htc_imedtwl";
85+
update_model "HTC 2Q55300";
86+
fi
87+
;;
88+
*)
89+
log_error "MID device parameters unknown. Setting default values."
90+
if [ $hardware == 'htc_exo' ]; then
91+
update_product_device "htc_exodugl";
92+
update_model "EXODUS 1";
93+
else
94+
update_product_device "htc_imedugl";
95+
log_info "Current model: $model";
96+
fi
97+
;;
98+
esac
99+
100+
exit 0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/sbin/tzdata

0 commit comments

Comments
 (0)