1From 3ebaf5f8d6d98cbdfe009fc94a378184a77f07fe Mon Sep 17 00:00:00 2001
2From: chengfeng27 <chengfeng27@huawei.com>
3Date: Tue, 3 Sep 2024 21:46:41 +0800
4Subject: [PATCH] add compile option SP, extensions white list
5
6---
7 mindspore/lite/BUILD.gn                       |  9 +++++++-
8 mindspore/lite/mindir/BUILD.gn                | 22 +++++++++++++++++--
9 mindspore/lite/src/litert/c_api/context_c.cc  | 10 +++++++++
10 .../delegate/nnrt/extension_options_parser.cc |  4 ++--
11 .../src/litert/delegate/nnrt/nnrt_delegate.cc |  2 +-
12 mindspore/lite/src/litert/js_api/BUILD.gn     |  6 +++++
13 6 files changed, 47 insertions(+), 6 deletions(-)
14
15diff --git a/mindspore/lite/BUILD.gn b/mindspore/lite/BUILD.gn
16index c7c51620..6deff934 100644
17--- a/mindspore/lite/BUILD.gn
18+++ b/mindspore/lite/BUILD.gn
19@@ -352,6 +352,7 @@ if ((target_cpu == "arm" || target_cpu == "arm64") && !is_emulator) {
20 }
21 
22 ohos_shared_library("mindspore_lib") {
23+  branch_protector_ret = "pac_ret"
24   deps = [
25     "../ccsrc/plugin/device/cpu/kernel/nnacl/:nnacl_obj",
26     "../core/mindrt/:mindrt_obj",
27@@ -486,6 +487,7 @@ ohos_shared_library("mindspore_lib") {
28 
29 # NDK lib
30 ohos_shared_library("mindspore_ndk") {
31+  branch_protector_ret = "pac_ret"
32   deps = [
33     ":mindspore_lib",
34     ":mindspore_train_lib",
35@@ -664,6 +666,7 @@ not_needed(fp16_train_kernel_sources)
36 all_train_sources += fp32_train_kernel_sources
37 
38 ohos_shared_library("mindspore_train_lib") {
39+  branch_protector_ret = "pac_ret"
40   deps = [
41     ":mindspore_lib",
42   ]
43@@ -716,6 +719,7 @@ ohos_shared_library("mindspore_train_lib") {
44     ":mindspore_api",
45     ":disable_android",
46     ":train_kernel_option",
47+    ":secure_option",
48   ]
49 
50   remove_configs = [ "//build/config/compiler:no_rtti" ]
51@@ -766,7 +770,10 @@ config("disable_android") {
52 }
53 
54 config("secure_option") {
55-  cflags = [ "-fstack-protector-all" ]
56+  cflags = [
57+    "-fstack-protector-all",
58+    "-D_FORTIFY_SOURCE=2",
59+  ]
60 }
61 
62 config("train_kernel_option") {
63diff --git a/mindspore/lite/mindir/BUILD.gn b/mindspore/lite/mindir/BUILD.gn
64index 975d201f..a134ddb2 100644
65--- a/mindspore/lite/mindir/BUILD.gn
66+++ b/mindspore/lite/mindir/BUILD.gn
67@@ -26,7 +26,26 @@ config("mindir_config") {
68   ]
69 }
70 
71+config("mindir_secure_disable_android") {
72+  cflags = [
73+    "-UANDROID",
74+    "-U__ANDROID__",
75+    "-U__ANDROID_API__",
76+    "-fstack-protector-all",
77+    "-D_FORTIFY_SOURCE=2",
78+  ]
79+  cflags_cc = [
80+    "-UANDROID",
81+    "-U__ANDROID__",
82+    "-U__ANDROID_API__",
83+  ]
84+  ldflags = [
85+    "-Wl,--no-as-needed",
86+  ]
87+}
88+
89 ohos_shared_library("mindir_lib") {
90+  branch_protector_ret = "pac_ret"
91   include_dirs = [
92     "../",
93     "../../core",
94@@ -58,8 +77,7 @@ ohos_shared_library("mindir_lib") {
95     "flatbuffers:libflatbuffers_static",
96   ]
97   configs = [
98-    "../:disable_android",
99-    "../:secure_option",
100+    ":mindir_secure_disable_android",
101   ]
102   public_configs = [ ":mindir_config" ]
103   defines = [ "MS_COMPILE_OHOS" ]
104diff --git a/mindspore/lite/src/litert/c_api/context_c.cc b/mindspore/lite/src/litert/c_api/context_c.cc
105index ef7d4b6a..88fdc4d0 100644
106--- a/mindspore/lite/src/litert/c_api/context_c.cc
107+++ b/mindspore/lite/src/litert/c_api/context_c.cc
108@@ -525,6 +525,16 @@ OH_AI_API OH_AI_Status OH_AI_DeviceInfoAddExtension(OH_AI_DeviceInfoHandle devic
109     MS_LOG(ERROR) << "Add extension to non-NNRT device is not allowable, ignored";
110     return OH_AI_STATUS_LITE_ERROR;
111   }
112+  static std::vector<std::string> extension_keys = {"CachePath", "CacheVersion", "ModelName", "QuantBuffer",
113+                                                     "isProfiling", "opLayout", "InputDims", "DynamicDims", "BandMode",
114+                                                     "NPU_FM_SHARED"};
115+  auto it = std::find(extension_keys.begin(), extension_keys.end(), std::string(name));
116+  if (it == extension_keys.end()) {
117+    MS_LOG(ERROR) << "The name of the extension is not allowable, only can be one of {CachePath, CacheVersion,"
118+                    << " ModelName, QuantBuffer, isProfiling, opLayout, InputDims, DynamicDims, BandMode,"
119+                    << "NPU_FM_SHARED}.";
120+    return OH_AI_STATUS_LITE_ERROR;
121+  }
122   auto impl = reinterpret_cast<mindspore::NNRTDeviceInfo *>(device_info);
123   mindspore::Extension extension;
124   extension.name = std::string(name);
125diff --git a/mindspore/lite/src/litert/delegate/nnrt/extension_options_parser.cc b/mindspore/lite/src/litert/delegate/nnrt/extension_options_parser.cc
126index a66cd5ea..6e4c57a4 100644
127--- a/mindspore/lite/src/litert/delegate/nnrt/extension_options_parser.cc
128+++ b/mindspore/lite/src/litert/delegate/nnrt/extension_options_parser.cc
129@@ -29,7 +29,7 @@ const std::map<std::string, mindspore::lite::HiAI_BandMode> kBandModeMap = {
130 const std::string kCachePath = "CachePath";
131 const std::string kCacheVersion = "CacheVersion";
132 const std::string kBandMode = "BandMode";
133-const std::string kQuantConfigData = "QuantConfigData";
134+const std::string kQuantBuffer = "QuantBuffer";
135 const std::string kModelName = "ModelName";
136 }  // namespace
137 
138@@ -83,7 +83,7 @@ void ExtensionOptionsParser::DoParseQuantConfig(const std::vector<Extension> &ex
139   MS_CHECK_TRUE_RET_VOID(quant_config != nullptr);
140   MS_CHECK_TRUE_RET_VOID(num != nullptr);
141   auto iter_config = std::find_if(extensions.begin(), extensions.end(), [](const Extension &extension) {
142-    return extension.name == kQuantConfigData;
143+    return extension.name == kQuantBuffer;
144   });
145   if (iter_config != extensions.end()) {
146     *quant_config = static_cast<void *>(const_cast<uint8_t *>(iter_config->value.data()));
147diff --git a/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc b/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc
148index a49e7449..ba921da5 100644
149--- a/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc
150+++ b/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc
151@@ -546,7 +546,7 @@ Status NNRTDelegate::InitNNCompilation(OH_NNCompilation *nn_compilation) const {
152   }
153 
154 #ifdef SUPPORT_NNRT_METAGRAPH
155-  if (hiai_handle_ != nullptr) {
156+  if (hiai_handle_ != nullptr && IsKirinNPUWithOfflineInference()) {
157     if (extension_options_.band_mode != mindspore::lite::HIAI_BANDMODE_UNSET) {
158       ret_code = mindspore::lite::HMS_HiAIOptions_SetBandMode(nn_compilation, extension_options_.band_mode);
159       if ((ret_code != OH_NN_SUCCESS) && (ret_code != OH_NN_OPERATION_FORBIDDEN)) {
160diff --git a/mindspore/lite/src/litert/js_api/BUILD.gn b/mindspore/lite/src/litert/js_api/BUILD.gn
161index f12e4db4..4004cc47 100644
162--- a/mindspore/lite/src/litert/js_api/BUILD.gn
163+++ b/mindspore/lite/src/litert/js_api/BUILD.gn
164@@ -15,6 +15,7 @@ import("//build/ohos.gni")
165 import("//build/ohos/ace/ace.gni")
166 
167 ohos_shared_library("mindsporelite_napi") {
168+  branch_protector_ret = "pac_ret"
169   include_dirs = [
170     "//third_party/mindspore/mindspore-src/source/",
171     "//third_party/mindspore/mindspore-src/source/include/api",
172@@ -37,6 +38,11 @@ ohos_shared_library("mindsporelite_napi") {
173     "nnrt_device_desc.cc"
174   ]
175 
176+  configs = [
177+    "../../../:disable_android",
178+    "../../../:secure_option",
179+  ]
180+
181   deps = [
182     "../../../:mindspore_lib",
183     "../../../:mindspore_ndk"
184-- 
1852.17.1
186
187