[Feature][ZXW-136]merge P50U04 version
Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No
Change-Id: I7b6a8e22777591bc7a9ede91d6695d9415116f81
diff --git a/ap/lib/libatext/ext_amt_func.c b/ap/lib/libatext/ext_amt_func.c
index 4460b51..431819f 100755
--- a/ap/lib/libatext/ext_amt_func.c
+++ b/ap/lib/libatext/ext_amt_func.c
@@ -2015,6 +2015,7 @@
cmdline_fd = open("/proc/cmdline", O_RDONLY);
if (cmdline_fd < 0) {
at_print(AT_ERR,"open %s fail.\n","/proc/cmdline");
+ free(cmdline_buf);
return -1;
}
ret_size = read(cmdline_fd, cmdline_buf, CMDLINE_MAX_SIZE);
@@ -2022,6 +2023,7 @@
{
at_print(AT_ERR,"read /proc/cmdline fail.\n");
close(cmdline_fd);
+ free(cmdline_buf);
return -1;
}
close(cmdline_fd);
@@ -2029,25 +2031,30 @@
if(temp == NULL)
{
at_print(AT_ERR,"can not find EnhancedSecurity=\n");
+ free(cmdline_buf);
return -1;
}
temp = temp + strlen("EnhancedSecurity=");
if(temp == NULL)
{
at_print(AT_ERR,"temp = NULL\n");
+ free(cmdline_buf);
return -1;
}
if(*temp == '0')
{
+ free(cmdline_buf);
return 0;
}
else if(*temp == '1')
{
at_print(AT_ERR,"EnhancedSecurity=1\n");
+ free(cmdline_buf);
return 1;
}
else
{
+ free(cmdline_buf);
return -1;
}
}
@@ -2137,7 +2144,7 @@
// ´òÓ¡¹«Ô¿
- #if 1
+ #if 0
strLog[0] = '\0';
for (i = 0; i < 16; i++)
{
@@ -2195,10 +2202,9 @@
strcat(strLog, strValue);
}
- at_print(AT_ERR, "Public key hash: %s\n", strLog);
+ at_print(AT_ERR, "efuse Public key hash: %s\n", strLog);
/*************************½«°²È«ÐÅϢдÈëefuse**************************/
- #if 1
if (memcmp(efuseInfo.pubKeyHash, pubKeyHash, sizeof(pubKeyHash)) != 0)
{
// ¹«Ô¿hashֵдÈëefuse
@@ -2217,7 +2223,7 @@
}
else
{
- at_print(AT_ERR, "Public key's hash value already exists!\n");
+ at_print(AT_ERR, "efuse Public key's hash value already exists!\n");
}
/*************************ÅжÏдÈëµÄ¹«Ô¿hashÖµÊÇ·ñÕýÈ·**************************/
@@ -2233,69 +2239,12 @@
}
if (memcmp(efuseInfo.pubKeyHash, pubKeyHash, sizeof(pubKeyHash)) != 0)
{
- at_print(AT_ERR, "Public key hash is not consistent!\n");
+ at_print(AT_ERR, "efuse Public key hash is not consistent!\n");
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen(*res_msg);
close(efuse_fd);
return AT_END;
}
- #endif
-
- #if 1
-
- /*efuseInfo.secureFlagÇ°Ãæ3¸ö×Ö½ÚÊÇchip flag,×îºóÒ»¸ö×Ö½ÚÊǰ²È«Ê¹ÄܱêÖ¾*/
-
- if ((efuseInfo.secureFlag&0xff) != secureFlag)
- {
- // ʹÄܱêʶλдÈëefuse
- if (ioctl(efuse_fd , EFUSE_SET_SECURE_EN, &secureFlag) != 0)
- {
- at_print(AT_ERR, "Write security flag to efuse fail!\r");
- *res_msg = at_err_build(ATERR_PROC_FAILED);
- *res_msglen = strlen(*res_msg);
- close(efuse_fd);
- return AT_END;
- }
- else
- {
- at_print(AT_NORMAL, "Write security flag to efuse success!\r");
- }
- }
-
- else
- {
- at_print(AT_NORMAL, "Secure flag already exists!\r");
- }
-
- /*************************ÅжÏдÈëµÄÐÅÏ¢ÊÇ·ñÕýÈ·**************************/
- // ´Óefuse¶ÁÈ¡
- memset(&efuseInfo, 0, sizeof(efuseInfo));
- if(ioctl(efuse_fd , EFUSE_GET_DATA, &efuseInfo)!= 0)
- {
- at_print(AT_ERR,"ioctl: EFUSE_GET_DATA fail.\n");
- *res_msg = at_err_build(ATERR_PROC_FAILED);
- *res_msglen = strlen(*res_msg);
- close(efuse_fd);
- return AT_END;
- }
-
- if ((efuseInfo.secureFlag&0xff) != secureFlag)
- {
- at_print(AT_ERR, "Security flag(%#08X) is not consistent!\r", efuseInfo.secureFlag);
- *res_msg = at_err_build(ATERR_PROC_FAILED);
- *res_msglen = strlen(*res_msg);
- close(efuse_fd);
- return AT_END;
- }
- #endif
- close(efuse_fd);
-
- if(is_Enhanced_Security == 0)
- {
- *res_msg = at_query_result_build("write security infomation", NULL);
- *res_msglen = strlen(*res_msg);
- return AT_END;
- }
if(is_Enhanced_Security == 1)
{
@@ -2322,7 +2271,7 @@
at_print(AT_ERR, "security flag in otp: %08X\n", otpInfo.secureFlag);
// ´òÓ¡¹«Ô¿
- #if 1
+ #if 0
strLog[0] = '\0';
for (i = 0; i < 16; i++)
{
@@ -2389,8 +2338,6 @@
at_print(AT_ERR, "OTP Public key hash: %s\n", strLog);
- #if 1
-
/*************************½«°²È«ÐÅϢдÈëotp**************************/
if (memcmp(otpInfo.pubKeyHash, pubKeyHash_otp, sizeof(pubKeyHash_otp)) != 0)
@@ -2406,12 +2353,12 @@
}
else
{
- at_print(AT_NORMAL, "Write public key hash to otp success!\n");
+ at_print(AT_ERR, "Write public key hash to otp success!\n");
}
}
else
{
- at_print(AT_NORMAL, "Public key's hash value in otp already exists!\n");
+ at_print(AT_ERR, "Public key's hash value in otp already exists!\n");
}
/*************************ÅжÏдÈëµÄ¹«Ô¿hashÖµÊÇ·ñÕýÈ·**************************/
@@ -2434,11 +2381,8 @@
close(otp_fd);
return AT_END;
}
- #endif
-
- #if 1
- /*efuseInfo.secureFlagÇ°Ãæ3¸ö×Ö½ÚÊÇchip flag,×îºóÒ»¸ö×Ö½ÚÊǰ²È«Ê¹ÄܱêÖ¾*/
+ /*otpInfo.secureFlag×îºóÒ»¸ö×Ö½ÚÊǰ²È«Ê¹ÄܱêÖ¾*/
if ((otpInfo.secureFlag&0xff) != secureFlag_otp)
{
@@ -2453,12 +2397,12 @@
}
else
{
- at_print(AT_NORMAL, "Write security flag to otp success!\n");
+ at_print(AT_ERR, "Write security flag to otp success!\n");
}
}
else
{
- at_print(AT_NORMAL, "Secure flag already exists!\n");
+ at_print(AT_ERR, "Secure flag in otp already exists!\n");
}
/*************************ÅжÏдÈëµÄsecure flagÊÇ·ñÕýÈ·**************************/
@@ -2473,23 +2417,66 @@
return AT_END;
}
- if ((otpInfo.secureFlag&0xff) != secureFlag_otp)
+ close(otp_fd);
+
+ if ((otpInfo.secureFlag&0xff) != secureFlag_otp)
{
- at_print(AT_ERR, "Security flag(%#08X) is not consistent!\n", otpInfo.secureFlag);
+ at_print(AT_ERR, "Security flag(%#08X) in otp is not consistent!\n", otpInfo.secureFlag);
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen(*res_msg);
- close(otp_fd);
- return AT_END;
+ return AT_END;
}
-
- #endif
-
- *res_msg = at_query_result_build("write security infomation", NULL);
- *res_msglen = strlen(*res_msg);
- close(otp_fd);
- return AT_END;
-
}
+
+ //×îºóдefuse°²È«flag
+ /*efuseInfo.secureFlagÇ°Ãæ3¸ö×Ö½ÚÊÇchip flag,×îºóÒ»¸ö×Ö½ÚÊǰ²È«Ê¹ÄܱêÖ¾*/
+
+ if ((efuseInfo.secureFlag&0xff) != secureFlag)
+ {
+ // ʹÄܱêʶλдÈëefuse
+ if (ioctl(efuse_fd , EFUSE_SET_SECURE_EN, &secureFlag) != 0)
+ {
+ at_print(AT_ERR, "Write security flag to efuse fail!\n");
+ *res_msg = at_err_build(ATERR_PROC_FAILED);
+ *res_msglen = strlen(*res_msg);
+ close(efuse_fd);
+ return AT_END;
+ }
+ else
+ {
+ at_print(AT_ERR, "Write security flag to efuse success!\n");
+ }
+ }
+ else
+ {
+ at_print(AT_ERR, "Secure flag in efuse already exists!\n");
+ }
+
+ /*************************ÅжÏдÈëµÄÐÅÏ¢ÊÇ·ñÕýÈ·**************************/
+ // ´Óefuse¶ÁÈ¡
+ memset(&efuseInfo, 0, sizeof(efuseInfo));
+ if(ioctl(efuse_fd , EFUSE_GET_DATA, &efuseInfo)!= 0)
+ {
+ at_print(AT_ERR,"ioctl: EFUSE_GET_DATA fail.\n");
+ *res_msg = at_err_build(ATERR_PROC_FAILED);
+ *res_msglen = strlen(*res_msg);
+ close(efuse_fd);
+ return AT_END;
+ }
+
+ close(efuse_fd);
+
+ if ((efuseInfo.secureFlag&0xff) != secureFlag)
+ {
+ at_print(AT_ERR, "Security flag(%#08X) in efuse is not consistent!\n", efuseInfo.secureFlag);
+ *res_msg = at_err_build(ATERR_PROC_FAILED);
+ *res_msglen = strlen(*res_msg);
+ return AT_END;
+ }
+
+ *res_msg = at_query_result_build("write security infomation", NULL);
+ *res_msglen = strlen(*res_msg);
+ return AT_END;
}
int read_security_info(int at_fd, char *at_paras, void **res_msg, int *res_msglen)
@@ -2556,9 +2543,7 @@
}
}
- #if 1
-
- if(is_Enhanced_Security == 1)
+ if(is_Enhanced_Security == 1)
{
otp_fd = open("/dev/otp", O_RDWR);
if (otp_fd < 0)
@@ -2597,10 +2582,32 @@
return AT_END;
}
}
- #endif
}
+#ifdef USE_NVRO_BACKUP
+int backup_nvro_func(int at_fd, char *at_paras, void **res_msg, int *res_msglen)
+{
+ unsigned int ret = CPNV_ERROR;
+
+ ret = cpnv_NvroBackup();
+ if (CPNV_ERROR== ret)
+ {
+ at_print(AT_ERR,"nvro backup failed\n");
+ *res_msg = at_err_build(ATERR_PROC_FAILED);
+ }
+ else
+ {
+ at_print(AT_ERR, "nvro backup success\n");
+ *res_msg = at_ok_build();
+ }
+
+ *res_msglen = strlen(*res_msg);
+ return AT_END;
+}
+#endif
+
+
/*
int auth_device_key(int at_fd, char *at_paras,void ** res_msg, int *res_msglen)
@@ -2676,5 +2683,9 @@
//register_serv_func2("ZAUTH=",0,0,0,auth_device_key,NULL);
register_serv_func2("RSCYINFO",0,0,0,read_security_info,NULL);
+ #ifdef USE_NVRO_BACKUP
+ register_serv_func2("NVROBACKUP",0,0,0,backup_nvro_func,NULL);
+ #endif
+
return 0;
}