@@ -336,6 +336,29 @@ static void extra_append(char *kimg, const void *data, int len, int *offset)
336336 * offset += len ;
337337}
338338
339+ static void disable_pi_map (char * img , int32_t imglen )
340+ {
341+
342+ const unsigned char pattern [] = {
343+ 0xE6 , 0x03 , 0x16 , 0xAA ,
344+ 0xE7 , 0x03 , 0x1F , 0x2A ,
345+ 0x34 , 0x11 , 0x88 , 0x9A
346+ };
347+ const size_t pattern_len = sizeof (pattern );
348+
349+ const unsigned char replace [] = {
350+ 0xE6 , 0x03 , 0x16 , 0xAA ,
351+ 0xE7 , 0x03 , 0x1F , 0x2A ,
352+ 0xF4 , 0x03 , 0x09 , 0xAA
353+ };
354+
355+ unsigned char * p = memmem (img , imglen , pattern , pattern_len );
356+ if (p ) {
357+ memcpy (p , replace , pattern_len );
358+ }
359+
360+ }
361+
339362int patch_update_img (const char * kimg_path , const char * kpimg_path , const char * out_path , const char * superkey ,
340363 bool root_key , const char * * additional , extra_config_t * extra_configs , int extra_config_num )
341364{
@@ -362,6 +385,9 @@ int patch_update_img(const char *kimg_path, const char *kpimg_path, const char *
362385 char * kallsym_kimg = (char * )malloc (pimg .ori_kimg_len );
363386 memcpy (kallsym_kimg , pimg .kimg , pimg .ori_kimg_len );
364387 kallsym_t kallsym = { 0 };
388+
389+ if (kernel_if_need_patch (& kallsym , kallsym_kimg ,pimg .ori_kimg_len ))disable_pi_map (kernel_file .kimg , kernel_file .kimg_len );
390+
365391 if (analyze_kallsym_info (& kallsym , kallsym_kimg , pimg .ori_kimg_len , ARM64 , 1 )) {
366392 tools_loge_exit ("analyze_kallsym_info error\n" );
367393 }
0 commit comments