作者 |給你小魚干小編 | 吃不飽 提到Harmony OS,想必大家并不陌生。其底座OpenHarmony是由華為捐出的OpenHarmony系統,并且由開放原子開源基金會孵化及運營, 目標是面向全場景、全連接、全智能時代, 搭建一個智能終端設備操作系統的框架和平臺, 促進萬物互聯產業的繁榮發展[ 出自《OpenHarmony - 應用開發入門指南》。]。數月前,華為再度突破新的領域——與國航簽約,華為將助力國航在以OpenHarmony為底座的HarmonyOS框架上構建應用/服務。作為汽車行業的新勢力,華為在汽車領域擁有卓越的表現,市面上很多汽車已將Harmony OS作為其車機系統。
然而,OpenHarmony并不是專為汽車行業而研發。由于汽車行業的特殊性,車載軟件對代碼安全性的要求非常嚴格,在之前的文章中,我們使用了汽車行業主流的靜態測試工具QAC驗證OpenHarmony的安全性,過了這么久,OpenHarmony代碼對汽車行業編碼規范的合規性是否有所提升呢?接下來本文將使用汽車行業的另一款權威靜態測試工具Klocwork,基于汽車行業內的常用編碼規范MISRA C 2012(符合汽車功能安全要求,了解更多請見《帶你走近MISRA C 2012》)和CERT(符合網絡信息安全要求),對Harmony代碼的合規情況進行測試。
本文對OpenHarmony主干源碼1348版本的wifiiot_hispark_pegasus工程進行靜態測試。
01編譯OpenHarmony
當前階段,大部分的開發板源碼還不支持在Windows環境下進行編譯,如Hi3861、Hi3516系列開發板,因此需使用Ubuntu的編譯環境對源碼進行編譯。
而在虛擬機中搭建Hi3861開發板環境步驟極為復雜,所以本文選擇在OpenHarmony為開發者提供的Docker環境下進行編譯,該方案在很大程度上簡化了編譯前的環境配置。伴隨著越來越多的開發者使用Docker作為其開發環境,Klocwork也提供了Docker環境下靜態分析方案支持。
搭建Docker環境
在使用Docker環境前需要先完成以下操作:1、安裝Docker。2、獲取OpenHarmony源碼。具體操作請見官方文檔(閱讀原文查看)。
編譯源碼
完成Docker環境搭建并獲取源碼后,我們就可以對源碼的wifiiot_hispark_pegasus工程進行編譯了。具體步驟如下:
進入源碼根目錄,執行hb set,根據提示選擇wifiiot_hispark_pegasus工程。
執行hb build -f編譯wifiiot_hispark_pegasus工程。顯示build success說明編譯成功。
編譯的成功證明環境搭建成功,進而可以順利進行Klocwork靜態分析。02Klocwork靜態分析
Klocwork是一款針對開發人員生產力、SAST和DevOps/DevSecOps的最佳靜態代碼分析工具,支持C、C++、C#、Java、JavaScript、Python和Kotlin,可以與CI/CD工具、容器、云服務和機器配置集成,使自動化安全測試變得容易。下面是Klocwork測試OpenHarmony代碼的步驟。
執行如下命令創建Klocwork工程openharmony_test:
kwadmin --url http://192.168.9.116:8089/ create-project openharmony_test
Klocwork Validate平臺是一個集中存儲分析數據、趨勢、度量和整個組織代碼庫配置的平臺,可通過web瀏覽器訪問。我們來到web端Validate中就可以看到剛才所創建的工程openharmony_test。
執行下面同步命令,將wifiiot_hispark_pegasus工程源碼同步到Klocwork的openharmony_test工程中來。
kwinject hb build -f
分析工程
執行分析前可在Validate中進行分析配置,勾選分析過程所需的規則。
配置完成后執行下面命令開始分析:
kwbuildproject --url http://192.168.9.116:8089/openharmony_test ./kwinject.out --tables-directory ./Openharmony/my_tables
顯示下面結果表示分析成功。
將分析結果上傳到Validate
kwadmin --url http://192.168.110.110:8089/ load openharmony_test my_tables/
下面結果表示上傳成功:03分析結果
來到Validate查看Klocwork分析結果。工程配置的詳細信息如下:
wifiiot_hispark_pegasus工程工1652個文件,共分析了1557個.c文件、95個系統頭文件,源碼共180720行,注釋共138844行。分析模塊類別為:C和C++分析、CERT分析以及MISRA分析。
MISRA規則分析結果
Category Details列舉了wifiiot_hispark_pegasus工程對MISRA規則違規情況的匯總:違反Mandatory Rules規則數量排名前十的文件匯總:
CERT規則分析結果
列舉了wifiiot_hispark_pegasus工程對每條CERT規則違規情況的匯總:違反每條CERT規則數量排名前十的文件匯總:
Validate合規報告
Validate可生成定制化合規報告。這里我選擇生成pdf形式的Generic合規報告,列舉出了違規情況詳情、規則的分類與其對應的檢查器、違反規則源碼所在文件及行數。
下面我們選出部分違反的MISRA C 2012 with Amendment 2 (C11) certified與CERT規則進行簡單介紹:
MISRA C 2012規則分為三種不同類別:Mandatory(強制)、Required(要求)和Advisory(建議)。
Mandatory Rules
FUNCRET.GEN: Non-void function does not return value.
規則說明:
FUNCRET.GEN檢查器用于查找沒有return語句的非void函數。
違規源碼:
int32_t OH_HashMapCreate函數是非空函數,但返回空值,所以此處違規。
UNINIT.STACK.MUST: Uninitialized Variable.
規則說明:
UNINIT.STACK.MUST檢查器查找變量未初始化的行為。
違規源碼:
第28行的變量vargs未初始化,所以此處違規。
Required Rules
MISRA.LOGIC.SIDEEFF: Right operand in a logical 'and' or 'or' expression contains side effects.
規則說明:&&和||運算符的右側操作數的求值取決于左側操作數的值。如果右邊的操作數包含副作用,那么這些副作用可能會發生,也可能不會發生,這可能與程序員的預期相反。如果程序員依賴于發生的副作用,則對其中一個邏輯運算符的右手操作數的條件求值很容易導致問題。
違規源碼:在162行中,將第118行的FOR_EACH_HC_VECTOR函數定義為一個for循環,而在表達式index < (vec).size(&(vec)) && \ (iter = (vec).getp(&(vec), index))中,&&操作符的右操作數中發生了賦值運算,導致該表達式具有副作用,所以此處違規。Advisory Rules
MISRA.GOTO: Goto statement is used
規則說明:
不得使用goto語句,因為無限制地使用goto語句會導致程序的非結構化和極難理解。
違規源碼:
第669行使用了goto語句,所以此處違規。
CERT C Recommendations: CERT MSC13-C: Detect and remove unused values
VA_UNUSED.GEN: Value is Never Used after Assignment.
規則說明:
VA_UNUSED.GEN檢查器查找分配給局部變量的值,這些值在下一次賦值或函數結束之前從未使用過。
違規源碼:
第141行對變量sessionKey賦值,但后面未使用該變量,所以此處違規。
CERT C Recommendations: CERT EXP00-C: Use parentheses for precedence of operation
CERT.EXPR.PARENS: The precedence of operators within expressions should be made explicit.
規則說明:運算符在表達式中的優先級應該是顯式的。違規代碼:第395行的表達式if (altGroup != NULL && AddStringToJson(reqParam, FIELD_ALTERNATIVE, altGroup) != HC_SUCCESS)優先級不明確,所以此處違規。04總結
本文使用Klocwork對OpenHarmony部分代碼進行靜態測試,我們了解了OpenHarmony對于汽車行業常用編碼規范的合規情況,同時也對MISRA與CERT編碼規范有了初步的認識。通過此次分析我們不難看出,與過去的版本相比,OpenHarmony的代碼質量在不斷提升。但對于想將OpenHarmony應用于汽車行業的開發者來說,還需要根據汽車行業的要求,對OpenHarmony代碼進行調整,以符合汽車功能安全與信息安全編碼規范。
-
OpenHarmony
+關注
關注
25文章
3713瀏覽量
16256 -
Harmony
+關注
關注
0文章
52瀏覽量
2601
發布評論請先 登錄
相關推薦
評論