summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--Android.mk20
-rw-r--r--alarm/alarm_blacklist.txt8
-rw-r--r--alarm/alarm_whitelist.txt5
-rw-r--r--android.software.google_atv.xml11
-rw-r--r--android.software.input_methods.xml4
-rw-r--r--android.software.leanback.xml18
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/anim/atv_fade_in_bottom.xml25
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/anim/atv_fade_in_top.xml25
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/anim/atv_fade_out_bottom.xml25
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/anim/atv_fade_out_top.xml25
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/anim/atv_wallpaper_enter.xml24
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/anim/atv_wallpaper_exit.xml24
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png3
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/drawable/progress_volume.xml41
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/layout/volume_adjust.xml49
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/layout/volume_adjust_item.xml44
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/values-sw600dp/dimens.xml22
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/values/config.xml65
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/values/dimens.xml31
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/values/styles.xml54
-rw-r--r--aosp_gms_overlay/frameworks/base/core/res/res/xml/global_keys.xml36
-rw-r--r--aosp_gms_overlay/frameworks/base/packages/SettingsLib/res/layout-television/settings_with_drawer.xml46
-rw-r--r--aosp_gms_overlay/packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml36
-rw-r--r--aosp_gms_overlay/packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml26
-rw-r--r--aosp_gms_overlay/packages/apps/Provision/AndroidManifest.xml39
-rw-r--r--aosp_gms_overlay/vendor/amlogic/apps/MboxLauncher2/AndroidManifest.xml40
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/anim/atv_fade_in_bottom.xml25
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/anim/atv_fade_in_top.xml25
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/anim/atv_fade_out_bottom.xml25
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/anim/atv_fade_out_top.xml25
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/anim/atv_wallpaper_enter.xml24
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/anim/atv_wallpaper_exit.xml24
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png4
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/drawable/progress_volume.xml41
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/layout/volume_adjust.xml49
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/layout/volume_adjust_item.xml44
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/values-sw600dp/dimens.xml22
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/values-television/config.xml27
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/values-television/dimens.xml24
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/values-television/themes.xml30
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/values/config.xml105
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/values/dimens.xml31
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/values/styles.xml54
-rw-r--r--atv_gms_overlay/frameworks/base/core/res/res/xml/global_keys.xml36
-rw-r--r--atv_gms_overlay/frameworks/base/packages/SettingsLib/res/layout-television/settings_with_drawer.xml46
-rw-r--r--atv_gms_overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml34
-rw-r--r--atv_gms_overlay/frameworks/base/packages/SystemUI/res/drawable-hdpi/recents_tv_bg_default.png6015
-rw-r--r--atv_gms_overlay/frameworks/base/packages/SystemUI/res/drawable-mdpi/recents_tv_bg_default.png2462
-rw-r--r--atv_gms_overlay/frameworks/base/packages/SystemUI/res/drawable-xhdpi/recents_tv_bg_default.png8975
-rw-r--r--atv_gms_overlay/frameworks/base/packages/SystemUI/res/values/config.xml31
-rw-r--r--atv_gms_overlay/packages/apps/Bluetooth/res/values/config.xml17
-rw-r--r--atv_gms_overlay/packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml36
-rw-r--r--atv_gms_overlay/packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml26
-rw-r--r--atv_gms_overlay/packages/apps/Provision/AndroidManifest.xml38
-rw-r--r--atv_gms_overlay/packages/providers/ContactsProvider/res/values/config.xml21
-rw-r--r--atv_gms_overlay/vendor/amlogic/apps/MboxLauncher2/AndroidManifest.xml40
-rw-r--r--audio.mk123
-rw-r--r--audio/a2dp_audio_policy_configuration.xml48
-rw-r--r--audio/audio_data.ko243
-rw-r--r--audio/audio_policy_configuration.xml184
-rw-r--r--audio/audio_policy_volumes.xml179
-rw-r--r--audio/default_volume_tables.xml70
-rw-r--r--audio/dia_remote_audio_policy_configuration.xml37
-rw-r--r--audio/r_submix_audio_policy_configuration.xml44
-rw-r--r--audio/usb_audio_policy_configuration.xml43
-rw-r--r--bluetooth.mk477
-rw-r--r--config/lowmemorykiller.txt3
-rw-r--r--config/lowmemorykiller_2G.txt3
-rw-r--r--config/lowmemorykiller_512M.txt3
-rw-r--r--core_amlogic.mk485
-rw-r--r--ddr/ddr_window_64.ko263
-rw-r--r--ddrtest.sh7
-rw-r--r--droidlogic.software.netflix.xml5
-rw-r--r--dumpstate/Android.mk39
-rw-r--r--dumpstate/DumpstateDevice.cpp76
-rw-r--r--dumpstate/DumpstateDevice.h50
-rw-r--r--dumpstate/NOTICE190
-rw-r--r--dumpstate/android.hardware.dumpstate@1.0-service.droidlogic.rc4
-rw-r--r--dumpstate/service.cpp41
-rw-r--r--dynamic_zygote_seondary/dynamic_zygote_64_bit.mk41
-rw-r--r--dynamic_zygote_seondary/init.zygote32_64.rc26
-rw-r--r--dynamic_zygote_seondary/init.zygote64_32.rc26
-rw-r--r--factory.mk306
-rw-r--r--gpu.mk17
-rw-r--r--gpu/mali450-kernel.mk17
-rw-r--r--gpu/mali450-user-arm.mk25
-rw-r--r--gpu/mali450-user-arm64.mk24
-rw-r--r--gpu/t82x-kernel.mk18
-rw-r--r--gpu/t82x-user-arm.mk26
-rw-r--r--gpu/t82x-user-arm64.mk26
-rw-r--r--gpu/t83x-kernel.mk18
-rw-r--r--gpu/t83x-user-arm.mk26
-rw-r--r--gpu/t83x-user-arm64.mk26
-rw-r--r--hdcp_rx22/arm_tools/aictool4274
-rw-r--r--hdcp_rx22/arm_tools/esm_swap3512
-rw-r--r--hdcp_rx22/arm_tools/hdcprxkeys4183
-rw-r--r--hdcp_rx22/firmware/esm_config.i1
-rw-r--r--hdcp_rx22/firmware/firmware.aic22
-rw-r--r--hdcp_rx22/firmware/firmware.le464
-rw-r--r--hdcp_rx22/firmware/firmware.rom0
-rw-r--r--hdcp_rx22/hdcp_rx22104
-rw-r--r--hdcp_tx22/hdcp_tx22209
-rw-r--r--hdcp_tx22/hdcp_tx22.contenttype1165
-rw-r--r--init.amlogic.media.rc29
-rw-r--r--init.amlogic.wifi.rc42
-rw-r--r--init.amlogic.wifi_bcm.rc21
-rw-r--r--init.amlogic.wifi_rtk.rc16
-rw-r--r--kernel_build_check.sh240
-rw-r--r--keyboards/Vendor_0484_Product_5738.kl441
-rw-r--r--keyboards/Vendor_0c45_Product_1109.kl36
-rw-r--r--keyboards/Vendor_7045_Product_1820.kl34
-rw-r--r--media.mk274
-rw-r--r--media_modules.mk23
-rw-r--r--mobile.mk14
-rw-r--r--optimization/config1
-rw-r--r--optimization/liboptimization_32.so66
-rw-r--r--optimization/liboptimization_64.so57
-rw-r--r--patch/Readme.txt12
-rw-r--r--patch/frameworks#base#0001.patch41
-rw-r--r--products/dongle/product_dongle.mk1
-rw-r--r--products/dvb/product_dvb.mk1
-rw-r--r--products/iptv/product_iptv.mk1
-rw-r--r--products/mbox/bootanimation.zip21947
-rw-r--r--products/mbox/default_wallpaper.png1406
-rw-r--r--products/mbox/init.amlogic.rc426
-rw-r--r--products/mbox/mbox.mp49032
-rw-r--r--products/mbox/product_mbox.mk97
-rw-r--r--products/mbox/ueventd.amlogic.rc106
-rw-r--r--products/mbox/upgrade_3.14/aml_emmc_logic_table.xml14
-rw-r--r--products/mbox/upgrade_3.14/aml_upgrade_package.conf25
-rw-r--r--products/mbox/upgrade_3.14/aml_upgrade_package_AB.conf24
-rw-r--r--products/mbox/upgrade_3.14/aml_upgrade_package_AB_enc.conf28
-rw-r--r--products/mbox/upgrade_3.14/aml_upgrade_package_enc.conf29
-rw-r--r--products/mbox/upgrade_4.9/aml_upgrade_package.conf27
-rw-r--r--products/mbox/upgrade_4.9/aml_upgrade_package_AB.conf26
-rw-r--r--products/mbox/upgrade_4.9/aml_upgrade_package_AB_enc.conf31
-rw-r--r--products/mbox/upgrade_4.9/aml_upgrade_package_enc.conf31
-rw-r--r--products/tablet/init.amlogic.rc366
-rw-r--r--products/tablet/product_tablet.mk48
-rw-r--r--products/tablet/ueventd.amlogic.rc76
-rw-r--r--products/tv/bootanimation.zip25778
-rw-r--r--products/tv/default_wallpaper.png1406
-rw-r--r--products/tv/init.amlogic.rc438
-rw-r--r--products/tv/product_tv.mk137
-rw-r--r--products/tv/tv.mp465398
-rw-r--r--products/tv/ueventd.amlogic.rc106
-rw-r--r--products/tv/upgrade_3.14/aml_emmc_logic_table.xml15
-rw-r--r--products/tv/upgrade_3.14/aml_upgrade_package.conf25
-rw-r--r--products/tv/upgrade_3.14/aml_upgrade_package_AB.conf24
-rw-r--r--products/tv/upgrade_3.14/aml_upgrade_package_AB_enc.conf28
-rw-r--r--products/tv/upgrade_3.14/aml_upgrade_package_enc.conf29
-rw-r--r--products/tv/upgrade_4.9/aml_upgrade_package.conf27
-rw-r--r--products/tv/upgrade_4.9/aml_upgrade_package_AB.conf26
-rw-r--r--products/tv/upgrade_4.9/aml_upgrade_package_AB_enc.conf31
-rw-r--r--products/tv/upgrade_4.9/aml_upgrade_package_enc.conf31
-rw-r--r--quick_build_kernel.sh58
-rw-r--r--recovery/Android.mk8
-rw-r--r--recovery/check/Android.mk25
-rw-r--r--recovery/check/dtbcheck.cpp860
-rw-r--r--recovery/check/dtbcheck.h15
-rw-r--r--recovery/check/security.cpp578
-rw-r--r--recovery/check/security.h158
-rw-r--r--recovery/fdt/Android.mk18
-rw-r--r--recovery/fdt/Makefile.libfdt10
-rw-r--r--recovery/fdt/fdt.c222
-rw-r--r--recovery/fdt/fdt.h60
-rw-r--r--recovery/fdt/fdt_empty_tree.c84
-rw-r--r--recovery/fdt/fdt_ro.c574
-rw-r--r--recovery/fdt/fdt_rw.c492
-rw-r--r--recovery/fdt/fdt_strerror.c96
-rw-r--r--recovery/fdt/fdt_sw.c256
-rw-r--r--recovery/fdt/fdt_wip.c118
-rw-r--r--recovery/fdt/libfdt.h1478
-rw-r--r--recovery/fdt/libfdt_env.h29
-rw-r--r--recovery/fdt/libfdt_internal.h95
-rw-r--r--recovery/init.rc112
-rw-r--r--recovery/recovery_extra/Android.mk29
-rw-r--r--recovery/recovery_extra/recovery_amlogic.cpp392
-rw-r--r--recovery/recovery_extra/recovery_amlogic.h25
-rw-r--r--recovery/ubootenv/Android.mk17
-rw-r--r--recovery/ubootenv/set_display_mode.cpp24
-rw-r--r--recovery/ubootenv/set_display_mode.h4
-rw-r--r--recovery/ubootenv/uboot_env.cpp107
-rw-r--r--recovery/ubootenv/uboot_env.h24
-rw-r--r--recovery/ui/Android.mk30
-rw-r--r--recovery/ui/amlogic_ui.cpp205
-rw-r--r--recovery/ui/amlogic_ui.h25
-rwxr-xr-xrecovery/updater-script10
-rw-r--r--recovery/updater_extra/Android.mk22
-rw-r--r--recovery/updater_extra/install_amlogic.cpp751
-rw-r--r--recovery/updater_extra/install_amlogic.h20
-rwxr-xr-xreleasetools.py230
-rw-r--r--rtk_bt_driver.mk11
-rw-r--r--scripts/check_patch.py268
-rwxr-xr-xscripts/checkpatch.pl45
-rw-r--r--seccomp/mediacodec.policy11
-rw-r--r--seccomp/mediaextractor.policy7
-rw-r--r--security/Android.mk13
-rw-r--r--security/verity.pk84
-rw-r--r--security/verity.x509.der9
-rw-r--r--security/verity.x509.pem24
-rw-r--r--security/verity_key2
-rw-r--r--sepolicy.mk3
-rw-r--r--sepolicy/adbd.te1
-rw-r--r--sepolicy/app.te80
-rw-r--r--sepolicy/audioserver.te7
-rw-r--r--sepolicy/bcmdl.te12
-rw-r--r--sepolicy/blkid_untrusted.te4
-rw-r--r--sepolicy/bootanim.te1
-rw-r--r--sepolicy/bootvideo.te36
-rw-r--r--sepolicy/charger.te2
-rw-r--r--sepolicy/device.te33
-rw-r--r--sepolicy/drmserver.te14
-rw-r--r--sepolicy/droidvold.te97
-rw-r--r--sepolicy/file.te42
-rw-r--r--sepolicy/file_contexts131
-rw-r--r--sepolicy/firmload.te10
-rw-r--r--sepolicy/fsck.te12
-rw-r--r--sepolicy/fsck_untrusted.te3
-rwxr-xr-xsepolicy/genfs_contexts9
-rw-r--r--sepolicy/hal_audio_default.te15
-rw-r--r--sepolicy/hal_bootctl_default.te7
-rw-r--r--sepolicy/hal_camera_default.te3
-rw-r--r--sepolicy/hal_drm_default.te4
-rw-r--r--sepolicy/hal_dumpstate_impl.te9
-rw-r--r--sepolicy/hal_graphics_allocator_default.te2
-rw-r--r--sepolicy/hal_graphics_composer_default.te13
-rw-r--r--sepolicy/hal_keymaster_default.te1
-rw-r--r--sepolicy/hal_memtrack_default.te39
-rw-r--r--sepolicy/hal_power_default.te2
-rw-r--r--sepolicy/hal_tv_cec_default.te2
-rw-r--r--sepolicy/hal_wifi_default.te18
-rw-r--r--sepolicy/hal_wifi_supplicant_default.te1
-rw-r--r--sepolicy/hdcp_rx22.te14
-rw-r--r--sepolicy/hdcp_tx22.te9
-rw-r--r--sepolicy/hdmicecd.te15
-rw-r--r--sepolicy/healthd.te3
-rw-r--r--sepolicy/hidraw_device.te1
-rw-r--r--sepolicy/hwservice.te3
-rw-r--r--sepolicy/hwservice_contexts3
-rw-r--r--sepolicy/hwservicemanager.te14
-rw-r--r--sepolicy/imageserver.te44
-rw-r--r--sepolicy/init.te111
-rw-r--r--sepolicy/kernel.te6
-rw-r--r--sepolicy/mediacodec.te18
-rw-r--r--sepolicy/mediadrmserver.te5
-rw-r--r--sepolicy/mediaextractor.te12
-rw-r--r--sepolicy/mediaserver.te34
-rw-r--r--sepolicy/netd.te10
-rw-r--r--sepolicy/ntfs-3g.te24
-rw-r--r--sepolicy/platform_app.te42
-rw-r--r--sepolicy/pppoe_wrapper.te31
-rw-r--r--sepolicy/priv_app.te16
-rw-r--r--sepolicy/property.te7
-rw-r--r--sepolicy/property_contexts9
-rw-r--r--sepolicy/recovery.te39
-rw-r--r--sepolicy/remotecfg.te7
-rw-r--r--sepolicy/sdcardd.te8
-rw-r--r--sepolicy/service.te10
-rw-r--r--sepolicy/service_contexts10
-rw-r--r--sepolicy/servicemanager.te1
-rw-r--r--sepolicy/sgdisk.te4
-rw-r--r--sepolicy/shell.te6
-rw-r--r--sepolicy/surfaceflinger.te6
-rw-r--r--sepolicy/system_app.te84
-rw-r--r--sepolicy/system_control.te105
-rw-r--r--sepolicy/system_server.te49
-rw-r--r--sepolicy/tee.te11
-rw-r--r--sepolicy/toolbox.te1
-rw-r--r--sepolicy/ueventd.te2
-rw-r--r--sepolicy/update_engine.te9
-rw-r--r--sepolicy/update_verifier.te5
-rw-r--r--sepolicy/vold.te35
-rw-r--r--sepolicy/webview_zygote.te1
-rw-r--r--sepolicy/wificond.te3
-rw-r--r--sepolicy/zygote.te13
-rw-r--r--software.mk75
-rw-r--r--t83x-armv8.mk26
-rw-r--r--t83x.mk17
-rw-r--r--tb_detect.mk28
-rw-r--r--tb_detect/tb_detect.ko266
-rw-r--r--tutorial-library-google.zip2457
-rw-r--r--vndk/Android.mk57
-rw-r--r--wifi.mk1690
-rw-r--r--wifi/config.txt3
-rw-r--r--wifi_driver.mk203
-rw-r--r--wifi_modules.mk5
287 files changed, 177798 insertions, 0 deletions
diff --git a/recovery/check/security.cpp b/recovery/check/security.cpp
new file mode 100644
index 0000000..8c48cdf
--- a/dev/null
+++ b/recovery/check/security.cpp
@@ -0,0 +1,578 @@
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/mount.h>
+#include <string.h>
+
+#include <ziparchive/zip_archive.h>
+#include <android-base/logging.h>
+
+#include "common.h"
+#include "cutils/properties.h"
+#include "security.h"
+
+T_KernelVersion kernel_ver = KernelV_3_10;
+/**
+ * --- judge platform whether match with zip image or not
+ *
+ * @platformEncryptStatus: 0: platform unencrypted, 1: platform encrypted
+ * @imageEncryptStatus: 0: image unencrypted, 1: image encrypted
+ * @imageName: image name
+ * @imageBuffer: image data address
+ * @imageSize: image data size
+ *
+ * return value:
+ * <0: failed
+ * =0: not match
+ * >0: match
+ */
+static int IsPlatformMachWithZipArchiveImage(
+ const int platformEncryptStatus,
+ const int imageEncryptStatus,
+ const char *imageName,
+ const unsigned char *imageBuffer,
+ const int imageSize)
+{
+ int fd = -1, ret = -1;
+ ssize_t result = -1;
+
+ if (strcmp(imageName, BOOT_IMG) &&
+ strcmp(imageName, RECOVERY_IMG) &&
+ strcmp(imageName, BOOTLOADER_IMG)) {
+ printf("can't support %s at present\n",
+ imageName);
+ return -1;
+ }
+
+ if (imageBuffer == NULL) {
+ printf("havn't malloc space for %s\n",
+ imageName);
+ return -1;
+ }
+
+ if (imageSize <= 0) {
+ printf("%s size is %d\n",
+ imageName, imageSize);
+ return -1;
+ }
+
+ switch (platformEncryptStatus) {
+ case 0: {
+ if (!imageEncryptStatus) {
+ ret = 1;
+ } else {
+ ret = 0;
+ }
+ break;
+ }
+
+ case 1: {
+ if (!imageEncryptStatus) {
+ ret = 0;
+ } else {
+ fd = open(DEFEND_KEY, O_RDWR);
+ if (fd <= 0) {
+ printf("open %s failed (%s)\n",
+ DEFEND_KEY, strerror(errno));
+ return -1;
+ }
+ result = write(fd, imageBuffer, imageSize);// check rsa
+ printf("write %s datas to %s. [imgsize:%d, result:%d, %s]\n",
+ imageName, DEFEND_KEY, imageSize, result,
+ (result == 1) ? "match" :
+ (result == -2) ? "not match" : "failed or not support");
+ if (result == 1) {
+ ret = 1;
+ } else if(result == -2) {
+ ret = 0;
+ } else { // failed or not support
+ ret = -1;
+ }
+ close(fd);
+ fd = -1;
+ }
+ break;
+ }
+ }
+
+ return ret;
+}
+
+/**
+ * --- check bootloader.img whether encrypt or not
+ *
+ * @imageName: bootloader.img
+ * @imageBuffer: bootloader.img data address
+ *
+ * return value:
+ * <0: failed
+ * =0: unencrypted
+ * >0: encrypted
+ */
+static int IsBootloaderImageEncrypted(
+ const char *imageName,
+ const unsigned char *imageBuffer)
+{
+ int step0=1;
+ int step1=1;
+ int index=0;
+ unsigned char result= 0;
+ const unsigned char *pstart = NULL;
+ const unsigned char *pImageAddr = imageBuffer;
+ const unsigned char *pEncryptedBootloaderInfoBufAddr = NULL;
+
+ // Don't modify. unencrypt bootloader info, for kernel version 3.10
+ const int bootloaderEncryptInfoOffset = 0x1b0;
+ const unsigned char unencryptedBootloaderInfoBuf[] =
+ { 0x4D, 0x33, 0x48, 0x48, 0x52, 0x45, 0x56, 0x30 };
+
+ // Don't modify. unencrypt bootloader info, for kernel version 3.14
+ const int newbootloaderEncryptInfoOffset = 0x10;
+ const int newbootloaderEncryptInfoOffset1 = 0x70;
+ const unsigned char newunencryptedBootloaderInfoBuf[] = { 0x40, 0x41, 0x4D, 0x4C};
+
+ if (strcmp(imageName, BOOTLOADER_IMG)) {
+ printf("this image must be %s,but it is %s\n",
+ BOOTLOADER_IMG, imageName);
+ return -1;
+ }
+
+ if (imageBuffer == NULL) {
+ printf("havn't malloc space for %s\n",
+ imageName);
+ return -1;
+ }
+
+ if (kernel_ver == KernelV_3_10) {
+ //check image whether encrypted for kernel 3.10
+ pEncryptedBootloaderInfoBufAddr = pImageAddr + bootloaderEncryptInfoOffset;
+ if (!memcmp(unencryptedBootloaderInfoBuf, pEncryptedBootloaderInfoBufAddr,
+ ARRAY_SIZE(unencryptedBootloaderInfoBuf))) {
+ return 0; // unencrypted
+ } else {
+ return 1;
+ }
+ }
+
+ //check image whether encrypted for kernel 3.14
+ pEncryptedBootloaderInfoBufAddr = pImageAddr + newbootloaderEncryptInfoOffset;
+ if (!memcmp(newunencryptedBootloaderInfoBuf, pEncryptedBootloaderInfoBufAddr,
+ ARRAY_SIZE(newunencryptedBootloaderInfoBuf))) {
+ step0 = 0;
+ }
+
+ pstart = pImageAddr + newbootloaderEncryptInfoOffset1;
+ for (index=0;index<16;index++) {
+ result ^= pstart[index];
+ }
+
+ if (result == 0) {
+ step1 = 0;
+ }
+
+ if ((step0 == 1) && (step0 == 1)) {
+ return 1; // encrypted
+ }
+
+ return 0;//unencrypted
+}
+
+/* return value:
+ * <0: failed
+ * =0: not match
+ * >0: match
+ */
+int DtbImgEncrypted(
+ const char *imageName,
+ const unsigned char *imageBuffer,
+ const int imageSize,
+ const char *flag,
+ unsigned char *encryptedbuf)
+{
+ int len = 0;
+ ssize_t result = -1;
+ ssize_t readlen = -1;
+ int fd = -1, ret = -1;
+
+ if ((imageBuffer == NULL) || (imageName == NULL)) {
+ printf("imageBuffer is null!\n");
+ return -1;
+ }
+
+ if (access(DECRYPT_DTB, F_OK) ||access(DEFEND_KEY, F_OK)) {
+ printf("doesn't support dtb secure check\n");
+ return 2; // kernel doesn't support
+ }
+
+ fd = open(DECRYPT_DTB, O_RDWR);
+ if (fd <= 0) {
+ printf("open %s failed!\n", DECRYPT_DTB);
+ return -1;
+ }
+
+ len = write(fd, flag, 1);
+ if (len != 1) {
+ printf("write %s failed!\n", DECRYPT_DTB);
+ close(fd);
+ fd = -1;
+ return -1;
+ }
+
+ close(fd);
+ fd = -1;
+
+ fd = open(DEFEND_KEY, O_RDWR);
+ if (fd <= 0) {
+ printf("open %s failed (%s)\n",DEFEND_KEY, strerror(errno));
+ return -1;
+ }
+
+ result = write(fd, imageBuffer, imageSize);// check rsa
+ printf("write %s datas to %s. [imgsize:%d, result:%d, %s]\n",
+ imageName, DEFEND_KEY, imageSize, result,
+ (result == 1) ? "match" :
+ (result == -2) ? "not match" : "failed or not support");
+
+ if (!strcmp(flag, "1")) {
+ printf("dtb.img need to encrypted!\n");
+ readlen = read(fd, encryptedbuf, imageSize);
+ if (readlen < 0) {
+ printf("read %s error!\n", DEFEND_KEY);
+ close(fd);
+ return -1;
+ }
+
+ }
+
+ if (result == 1) {
+ ret = 1;
+ } else if(result == -2) {
+ ret = 0;
+ } else { // failed or not support
+ ret = -1;
+ }
+
+ close(fd);
+ fd = -1;
+
+ return ret;
+}
+
+/**
+ * --- check zip archive image whether encrypt or not
+ * image is bootloader.img/boot.img/recovery.img
+ *
+ * @imageName: image name
+ * @imageBuffer: image data address
+ * @imageSize: image data size
+ *
+ * return value:
+ * <0: failed
+ * =0: unencrypted
+ * >0: encrypted
+ */
+static int IsZipArchiveImageEncrypted(
+ const char *imageName,
+ const unsigned char *imageBuffer,
+ const int imageSize)
+{
+ int ret = -1;
+ const unsigned char *pImageAddr = imageBuffer;
+
+ if (strcmp(imageName, BOOT_IMG) &&
+ strcmp(imageName, RECOVERY_IMG) &&
+ strcmp(imageName, BOOTLOADER_IMG)) {
+ printf("can't support %s at present\n",
+ imageName);
+ return -1;
+ }
+
+ if (imageBuffer == NULL) {
+ printf("havn't malloc space for %s\n",
+ imageName);
+ return -1;
+ }
+
+ if (imageSize <= 0) {
+ printf("%s size is %d\n",
+ imageName, imageSize);
+ return -1;
+ }
+
+ if (!strcmp(imageName, BOOTLOADER_IMG)) {
+ return IsBootloaderImageEncrypted(imageName, imageBuffer);
+ }
+
+ if (kernel_ver == KernelV_3_10) {
+ //check image whether encrypted for kernel 3.10
+ const pT_SecureBootImgHdr encryptSecureBootImgHdr =
+ (const pT_SecureBootImgHdr)pImageAddr;
+ const pT_EncryptBootImgInfo encryptBootImgInfo =
+ &encryptSecureBootImgHdr->encryptBootImgInfo;
+
+ secureDbg("magic:%s, version:0x%04x, totalLenAfterEncrypted:0x%0x\n",
+ encryptBootImgInfo->magic, encryptBootImgInfo->version,
+ encryptBootImgInfo->totalLenAfterEncrypted);
+
+ ret = memcmp(encryptBootImgInfo->magic, SECUREBOOT_MAGIC,
+ strlen(SECUREBOOT_MAGIC));
+ if (!ret && encryptBootImgInfo->version != 0x0) {
+ return 1; // encrypted
+ }
+
+ return 0;
+ }
+
+ //check image whether encrypted for kernel 3.14
+ const AmlSecureBootImgHeader encryptSecureBootImgHeader =
+ (const AmlSecureBootImgHeader)pImageAddr;
+ const p_AmlEncryptBootImgInfo encryptBootImgHeader =
+ &encryptSecureBootImgHeader->encrypteImgInfo;
+
+ secureDbg("magic:%s, version:0x%04x\n",
+ encryptBootImgHeader->magic, encryptBootImgHeader->version);
+
+ ret = memcmp(encryptBootImgHeader->magic, SECUREBOOT_MAGIC,
+ strlen(SECUREBOOT_MAGIC));
+ if (!ret && encryptBootImgHeader->version != 0x0) {
+ return 1; // encrypted
+ }
+
+ return 0; // unencrypted
+ }
+
+/**
+ * --- check platform whether encrypt or not
+ *
+ * return value:
+ * <0: failed
+ * =0: unencrypted
+ * >0: encrypted
+ */
+int IsPlatformEncrypted(void)
+{
+ int fd = -1, ret = -1;
+ ssize_t count = 0;
+ char rBuf[128] = {0};
+ char platform[PROPERTY_VALUE_MAX+1] = {0};
+
+ if (!(access(SECURE_CHECK, F_OK) || (access(SECURE_CHECK_BAK, F_OK))) \
+ || access(DEFEND_KEY, F_OK)) {
+ printf("kernel doesn't support secure check\n");
+ return 2; // kernel doesn't support
+ }
+
+ fd = open(SECURE_CHECK, O_RDONLY);
+ if (fd <= 0) {
+ fd = open(SECURE_CHECK_BAK, O_RDONLY);
+ if (fd <= 0) {
+ printf("open %s failed (%s)\n",
+ SECURE_CHECK, strerror(errno));
+ return -1;
+ }
+ kernel_ver = KernelV_3_14;
+ }
+
+ property_get("ro.build.product", platform, "unknow");
+ count = read(fd, rBuf, sizeof(rBuf) - 1);
+ if (count <= 0) {
+ printf("read %s failed (count:%d)\n",
+ SECURE_CHECK, count);
+ close(fd);
+ return -1;
+ }
+ rBuf[count] = '\0';
+
+ if (!strcmp(rBuf, s_pStatus[UNENCRYPT])) {
+ printf("check platform(%s): unencrypted\n", platform);
+ ret = 0;
+ } else if (!strcmp(rBuf, s_pStatus[ENCRYPT])) {
+ printf("check platform(%s): encrypted\n", platform);
+ ret = 1;
+ } else if (!strcmp(rBuf, s_pStatus[FAIL])) {
+ printf("check platform(%s): failed\n", platform);
+ } else {
+ printf("check platform(%s): %s\n", platform, rBuf);
+ }
+
+ if (fd > 0) {
+ close(fd);
+ fd = -1;
+ }
+
+ return ret;
+}
+
+/**
+ * --- get upgrade package image data
+ *
+ * @zipArchive: zip archive object
+ * @imageName: upgrade package image's name
+ * @imageSize: upgrade package image's size
+ *
+ * return value:
+ * <0: failed
+ * =0: can't find image
+ * >0: get image data successful
+ */
+static unsigned char *s_pImageBuffer = NULL;
+static int GetZipArchiveImage(
+ const ZipArchiveHandle za,
+ const char *imageName,
+ int *imageSize)
+{
+ ZipString zip_path(imageName);
+ ZipEntry entry;
+ if (FindEntry(za, zip_path, &entry) != 0) {
+ printf("no %s in package!\n", imageName);
+ return 0;
+ }
+
+ *imageSize = entry.uncompressed_length;
+ if (*imageSize <= 0) {
+ printf("can't get package entry uncomp len(%d) (%s)\n",
+ *imageSize, strerror(errno));
+ return -1;
+ }
+
+ if (s_pImageBuffer != NULL) {
+ free(s_pImageBuffer);
+ s_pImageBuffer = NULL;
+ }
+
+ s_pImageBuffer = (unsigned char *)calloc(*imageSize, sizeof(unsigned char));
+ if (!s_pImageBuffer) {
+ printf("can't malloc %d size space (%s)\n",
+ *imageSize, strerror(errno));
+ return -1;
+ }
+
+ int32_t ret = ExtractToMemory(za, &entry, s_pImageBuffer, entry.uncompressed_length);
+ if (ret != 0) {
+ printf("can't extract package entry to image buffer\n");
+ goto FREE_IMAGE_MEM;
+ }
+
+ return 1;
+
+
+FREE_IMAGE_MEM:
+ if (s_pImageBuffer != NULL) {
+ free(s_pImageBuffer);
+ s_pImageBuffer = NULL;
+ }
+
+ return -1;
+}
+
+/**
+ * --- check platform and upgrade package whether
+ * encrypted,if all encrypted,rsa whether all the same
+ *
+ * @ziparchive: Archive of Zip Package
+ *
+ * return value:
+ * =-1: failed; not allow upgrade
+ * = 0: check not match; not allow upgrade
+ * = 1: check match; allow upgrade
+ * = 2: kernel not support secure check; allow upgrade
+ */
+int RecoverySecureCheck(const ZipArchiveHandle zipArchive)
+{
+ int i = 0, ret = -1, err = -1;
+ int ret_dtb = 0;
+ int imageSize = 0;
+ int platformEncryptStatus = 0, imageEncryptStatus = 0;
+ const char *pImageName[] = {
+ BOOTLOADER_IMG,
+ BOOT_IMG,
+ RECOVERY_IMG };
+
+ platformEncryptStatus = IsPlatformEncrypted();
+ if (platformEncryptStatus == 2) {
+ return 2;// kernel doesn't support
+ }
+
+ if (platformEncryptStatus < 0) {
+ return -1;
+ }
+
+ if (platformEncryptStatus >0 ) {
+ ret = GetZipArchiveImage(zipArchive, DTB_IMG, &imageSize);
+ if (ret > 0) {
+ ret_dtb = DtbImgEncrypted(DTB_IMG, s_pImageBuffer, imageSize, "0", NULL);
+ if (ret_dtb == 2) {
+ printf("dtb secure check not support!\n");
+ } else if (ret_dtb > 0){
+ printf("dtb secure check success!\n");
+
+ } else {
+ printf("dtb secure check error!\n");
+ ret = -1;
+ goto ERR1;
+ }
+ } else if (ret == 0) {
+ printf("check %s: not find,skiping...\n", DTB_IMG);
+ } else {
+ printf("get %s datas failed\n", DTB_IMG);
+ goto ERR1;
+ }
+ }
+
+ for (i = 0; i < ARRAY_SIZE(pImageName); i++) {
+ ret = GetZipArchiveImage(zipArchive, pImageName[i], &imageSize);
+ if (ret < 0) {
+ printf("get %s datas failed\n", pImageName[i]);
+ goto ERR1;
+ } else if (ret == 0) {
+ printf("check %s: not find,skiping...\n", pImageName[i]);
+ continue;
+ } else if (ret > 0) {
+ secureDbg("get %s datas(size:0x%0x, addr:0x%x) successful\n",
+ pImageName[i], imageSize, (int)s_pImageBuffer);
+ imageEncryptStatus = IsZipArchiveImageEncrypted(pImageName[i], s_pImageBuffer, imageSize);
+
+ printf("check %s: %s\n",
+ pImageName[i], (imageEncryptStatus < 0) ? "failed" :
+ !imageEncryptStatus ? "unencrypted" : "encrypted");
+ if (imageEncryptStatus < 0) {
+ ret = -1;
+ goto ERR1;
+ }
+
+ ret = IsPlatformMachWithZipArchiveImage(
+ platformEncryptStatus, imageEncryptStatus, pImageName[i],
+ s_pImageBuffer, imageSize);
+ if (ret < 0) {
+ printf("%s match platform failed\n", pImageName[i]);
+ goto ERR1;
+ } else if (ret == 0) { // if one of image doesn't match with platform,exit
+ printf("%s doesn't match platform\n", pImageName[i]);
+ goto ERR1;
+ } else {
+ secureDbg("%s match platform\n", pImageName[i]);
+ }
+
+ if (s_pImageBuffer != NULL) {
+ free(s_pImageBuffer);
+ s_pImageBuffer = NULL;
+ }
+ }
+ }
+
+ return 1;
+
+
+ERR1:
+ if (s_pImageBuffer != NULL) {
+ free(s_pImageBuffer);
+ s_pImageBuffer = NULL;
+ }
+
+ return ret;
+}