1 /*
2 * Copyright (c) 2023-2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <cstddef>
16 #include <cstdint>
17 #define private public
18 #include "concurrent_task_client.h"
19 #include "concurrent_task_service_ability.h"
20 #include "concurrent_task_controller_interface.h"
21 #undef private
22 #include "concurrent_task_service.h"
23 #include "securec.h"
24 #include "qos.h"
25 #include "qos_interface.h"
26 #include "qos_policy.h"
27 #include "system_ability_definition.h"
28 #include <fuzzer/FuzzedDataProvider.h>
29
30 using namespace OHOS::ConcurrentTask;
31 using namespace OHOS::QOS;
32
33 namespace OHOS {
34 const int START_TIME = 20;
35 const int END_TIME = 40;
36 #define QUADRUPLE 4
37 #define LEN 4
38
39 namespace {
40 constexpr int TEST_DATA_FIRST = 1;
41 constexpr int TEST_DATA_SECOND = 2;
42 constexpr int TEST_DATA_THIRD = 3;
43 constexpr int TEST_DATA_FOURTH = 4;
44 constexpr int TEST_DATA_FIFTH = 5;
45 constexpr int TEST_DATA_SIXTH = 6;
46 constexpr int TEST_DATA_SEVENTH = 7;
47 constexpr int TEST_DATA_EIGHTH = 8;
48 constexpr int TEST_DATA_TENTH = 10;
49 }
50
FuzzConcurrentTaskServiceReportData(const uint8_t * data,size_t size)51 bool FuzzConcurrentTaskServiceReportData(const uint8_t* data, size_t size)
52 {
53 FuzzedDataProvider fdp(data, size);
54 if (size > sizeof(int) + sizeof(int)) {
55 MessageParcel data1;
56 Parcel parcel;
57 sptr<IRemoteObject> iremoteobject = IRemoteObject::Unmarshalling(parcel);
58 int intdata = fdp.ConsumeIntegral<int>();
59 void *voiddata = &intdata;
60 size_t size1 = sizeof(int);
61 data1.WriteRemoteObject(iremoteobject);
62 data1.WriteRawData(voiddata, size1);
63 data1.ReadRawData(size1);
64 MessageParcel reply;
65 MessageOption option;
66 uint32_t code = static_cast<uint32_t>(IConcurrentTaskServiceIpcCode::COMMAND_REPORT_DATA);
67 ConcurrentTaskService s = ConcurrentTaskService();
68 s.OnRemoteRequest(code, data1, reply, option);
69 }
70 return true;
71 }
72
FuzzConcurrentTaskServiceReportSceneInfo(const uint8_t * data,size_t size)73 bool FuzzConcurrentTaskServiceReportSceneInfo(const uint8_t* data, size_t size)
74 {
75 FuzzedDataProvider fdp(data, size);
76 if (size > sizeof(int) + sizeof(int)) {
77 MessageParcel data1;
78 Parcel parcel;
79 sptr<IRemoteObject> iremoteobject = IRemoteObject::Unmarshalling(parcel);
80 int intdata = fdp.ConsumeIntegral<int>();
81 void *voiddata = &intdata;
82 size_t size1 = sizeof(int);
83 data1.WriteRemoteObject(iremoteobject);
84 data1.WriteRawData(voiddata, size1);
85 data1.ReadRawData(size1);
86 MessageParcel reply;
87 MessageOption option;
88 uint32_t code = static_cast<uint32_t>(IConcurrentTaskServiceIpcCode::COMMAND_REPORT_SCENE_INFO);
89 ConcurrentTaskService s = ConcurrentTaskService();
90 s.OnRemoteRequest(code, data1, reply, option);
91 }
92 return true;
93 }
94
FuzzConcurrentTaskServiceQueryInterval(const uint8_t * data,size_t size)95 bool FuzzConcurrentTaskServiceQueryInterval(const uint8_t* data, size_t size)
96 {
97 FuzzedDataProvider fdp(data, size);
98 if (size > sizeof(int) + sizeof(int)) {
99 MessageParcel data1;
100 Parcel parcel;
101 sptr<IRemoteObject> iremoteobject = IRemoteObject::Unmarshalling(parcel);
102 int intdata = fdp.ConsumeIntegral<int>();
103 void *voiddata = &intdata;
104 size_t size1 = sizeof(int);
105 data1.WriteRemoteObject(iremoteobject);
106 data1.WriteRawData(voiddata, size1);
107 data1.ReadRawData(size1);
108 MessageParcel reply;
109 MessageOption option;
110 uint32_t code = static_cast<uint32_t>(IConcurrentTaskServiceIpcCode::COMMAND_QUERY_INTERVAL);
111 ConcurrentTaskService s = ConcurrentTaskService();
112 s.OnRemoteRequest(code, data1, reply, option);
113 }
114 return true;
115 }
116
FuzzConcurrentTaskServiceQueryDeadline(const uint8_t * data,size_t size)117 bool FuzzConcurrentTaskServiceQueryDeadline(const uint8_t* data, size_t size)
118 {
119 FuzzedDataProvider fdp(data, size);
120 if (size > sizeof(int) + sizeof(int)) {
121 MessageParcel data1;
122 Parcel parcel;
123 sptr<IRemoteObject> iremoteobject = IRemoteObject::Unmarshalling(parcel);
124 int intdata = fdp.ConsumeIntegral<int>();
125 void *voiddata = &intdata;
126 size_t size1 = sizeof(int);
127 data1.WriteRemoteObject(iremoteobject);
128 data1.WriteRawData(voiddata, size1);
129 data1.ReadRawData(size1);
130 MessageParcel reply;
131 MessageOption option;
132 uint32_t code = static_cast<uint32_t>(IConcurrentTaskServiceIpcCode::COMMAND_QUERY_DEADLINE);
133 ConcurrentTaskService s = ConcurrentTaskService();
134 s.OnRemoteRequest(code, data1, reply, option);
135 }
136 return true;
137 }
138
FuzzConcurrentTaskServiceSetAudioDeadline(const uint8_t * data,size_t size)139 bool FuzzConcurrentTaskServiceSetAudioDeadline(const uint8_t* data, size_t size)
140 {
141 FuzzedDataProvider fdp(data, size);
142 if (size > sizeof(int) + sizeof(int)) {
143 MessageParcel data1;
144 Parcel parcel;
145 sptr<IRemoteObject> iremoteobject = IRemoteObject::Unmarshalling(parcel);
146 int intdata = fdp.ConsumeIntegral<int>();
147 void *voiddata = &intdata;
148 size_t size1 = sizeof(int);
149 data1.WriteRemoteObject(iremoteobject);
150 data1.WriteRawData(voiddata, size1);
151 data1.ReadRawData(size1);
152 MessageParcel reply;
153 MessageOption option;
154 uint32_t code = static_cast<uint32_t>(IConcurrentTaskServiceIpcCode::COMMAND_SET_AUDIO_DEADLINE);
155 ConcurrentTaskService s = ConcurrentTaskService();
156 s.OnRemoteRequest(code, data1, reply, option);
157 }
158 return true;
159 }
160
FuzzConcurrentTaskServiceRequestAuth(const uint8_t * data,size_t size)161 bool FuzzConcurrentTaskServiceRequestAuth(const uint8_t* data, size_t size)
162 {
163 FuzzedDataProvider fdp(data, size);
164 if (size > sizeof(int) + sizeof(int)) {
165 MessageParcel data1;
166 Parcel parcel;
167 sptr<IRemoteObject> iremoteobject = IRemoteObject::Unmarshalling(parcel);
168 int intdata = fdp.ConsumeIntegral<int>();
169 void *voiddata = &intdata;
170 size_t size1 = sizeof(int);
171 data1.WriteRemoteObject(iremoteobject);
172 data1.WriteRawData(voiddata, size1);
173 data1.ReadRawData(size1);
174 MessageParcel reply;
175 MessageOption option;
176 uint32_t code = static_cast<uint32_t>(IConcurrentTaskServiceIpcCode::COMMAND_REQUEST_AUTH);
177 ConcurrentTaskService s = ConcurrentTaskService();
178 s.OnRemoteRequest(code, data1, reply, option);
179 }
180 return true;
181 }
182
FuzzConcurrentTaskServiceSetThreadQos(const uint8_t * data,size_t size)183 bool FuzzConcurrentTaskServiceSetThreadQos(const uint8_t* data, size_t size)
184 {
185 FuzzedDataProvider fdp(data, size);
186 if (size > sizeof(int) + sizeof(int)) {
187 int level = fdp.ConsumeIntegral<int>();
188 level = level % TEST_DATA_TENTH;
189 if (level == TEST_DATA_FIFTH || level == TEST_DATA_SECOND) {
190 QOS::SetThreadQos(QOS::QosLevel::QOS_BACKGROUND);
191 } else if (level == TEST_DATA_THIRD || level == TEST_DATA_FOURTH) {
192 QOS::SetThreadQos(QOS::QosLevel::QOS_UTILITY);
193 } else if (level == TEST_DATA_FIFTH || level == TEST_DATA_SIXTH) {
194 QOS::SetThreadQos(QOS::QosLevel::QOS_DEFAULT);
195 } else if (level == TEST_DATA_SEVENTH || level == TEST_DATA_EIGHTH) {
196 QOS::SetThreadQos(QOS::QosLevel::QOS_USER_INITIATED);
197 }
198 }
199 return true;
200 }
201
FuzzConcurrentTaskServiceSetQosForOtherThread(const uint8_t * data,size_t size)202 bool FuzzConcurrentTaskServiceSetQosForOtherThread(const uint8_t* data, size_t size)
203 {
204 FuzzedDataProvider fdp(data, size);
205 if (size > sizeof(int) + sizeof(int)) {
206 int level = fdp.ConsumeIntegral<int>();
207 int tid = fdp.ConsumeIntegral<int>();
208 level = level % TEST_DATA_TENTH;
209 if (level == TEST_DATA_FIRST || level == TEST_DATA_SECOND) {
210 QOS::SetQosForOtherThread(QOS::QosLevel::QOS_BACKGROUND, tid);
211 } else if (level == TEST_DATA_THIRD || level == TEST_DATA_FOURTH) {
212 QOS::SetQosForOtherThread(QOS::QosLevel::QOS_UTILITY, tid);
213 } else if (level == TEST_DATA_FIFTH || level == TEST_DATA_SIXTH) {
214 QOS::SetQosForOtherThread(QOS::QosLevel::QOS_DEFAULT, tid);
215 } else if (level == TEST_DATA_SEVENTH || level == TEST_DATA_EIGHTH) {
216 QOS::SetQosForOtherThread(QOS::QosLevel::QOS_USER_INITIATED, tid);
217 }
218 }
219 return true;
220 }
221
FuzzConcurrentTaskServiceResetThreadQos(const uint8_t * data,size_t size)222 bool FuzzConcurrentTaskServiceResetThreadQos(const uint8_t* data, size_t size)
223 {
224 FuzzedDataProvider fdp(data, size);
225 if (size > sizeof(int) + sizeof(int)) {
226 int level = fdp.ConsumeIntegral<int>();
227 level = level % TEST_DATA_TENTH;
228 if (level == TEST_DATA_FIFTH || level == TEST_DATA_SECOND) {
229 QOS::SetThreadQos(QOS::QosLevel::QOS_BACKGROUND);
230 } else if (level == TEST_DATA_THIRD || level == TEST_DATA_FOURTH) {
231 QOS::SetThreadQos(QOS::QosLevel::QOS_UTILITY);
232 } else if (level == TEST_DATA_FIFTH || level == TEST_DATA_SIXTH) {
233 QOS::SetThreadQos(QOS::QosLevel::QOS_DEFAULT);
234 } else if (level == TEST_DATA_SEVENTH || level == TEST_DATA_EIGHTH) {
235 QOS::SetThreadQos(QOS::QosLevel::QOS_USER_INITIATED);
236 }
237 QOS::ResetThreadQos();
238 }
239 return true;
240 }
241
FuzzConcurrentTaskServiceResetQosForOtherThread(const uint8_t * data,size_t size)242 bool FuzzConcurrentTaskServiceResetQosForOtherThread(const uint8_t* data, size_t size)
243 {
244 FuzzedDataProvider fdp(data, size);
245 if (size > sizeof(int) + sizeof(int)) {
246 int tid = fdp.ConsumeIntegral<int>();
247 QOS::ResetQosForOtherThread(tid);
248 }
249 return true;
250 }
251
FuzzQosPolicyInit(const uint8_t * data,size_t size)252 void FuzzQosPolicyInit(const uint8_t* data, size_t size)
253 {
254 FuzzedDataProvider fdp(data, size);
255 if (size > sizeof(int)) {
256 QosPolicy qosPolicy;
257 qosPolicy.Init();
258 }
259 return;
260 }
261
FuzzQosInterfaceEnableRtg(const uint8_t * data,size_t size)262 bool FuzzQosInterfaceEnableRtg(const uint8_t* data, size_t size)
263 {
264 FuzzedDataProvider fdp(data, size);
265 if (size > sizeof(int) + sizeof(int)) {
266 bool flag = fdp.ConsumeIntegral<bool>();
267 EnableRtg(flag);
268 }
269 return true;
270 }
271
FuzzQosInterfaceQosLeave(const uint8_t * data,size_t size)272 bool FuzzQosInterfaceQosLeave(const uint8_t* data, size_t size)
273 {
274 FuzzedDataProvider fdp(data, size);
275 if (size > sizeof(int) + sizeof(int)) {
276 int level = fdp.ConsumeIntegral<int>();
277 level = level % TEST_DATA_TENTH;
278 if (level == TEST_DATA_FIFTH || level == TEST_DATA_SECOND) {
279 QOS::SetThreadQos(QOS::QosLevel::QOS_BACKGROUND);
280 } else if (level == TEST_DATA_THIRD || level == TEST_DATA_FOURTH) {
281 QOS::SetThreadQos(QOS::QosLevel::QOS_UTILITY);
282 } else if (level == TEST_DATA_FIFTH || level == TEST_DATA_SIXTH) {
283 QOS::SetThreadQos(QOS::QosLevel::QOS_DEFAULT);
284 } else if (level == TEST_DATA_SEVENTH || level == TEST_DATA_EIGHTH) {
285 QOS::SetThreadQos(QOS::QosLevel::QOS_USER_INITIATED);
286 }
287 QosLeave();
288 }
289 return true;
290 }
291
FuzzConcurrentTaskServiceAbilityOnStart(const uint8_t * data,size_t size)292 bool FuzzConcurrentTaskServiceAbilityOnStart(const uint8_t* data, size_t size)
293 {
294 FuzzedDataProvider fdp(data, size);
295 if (size > sizeof(int32_t) + sizeof(int32_t)) {
296 int32_t sysAbilityId = fdp.ConsumeIntegral<int32_t>();
297 if ((sysAbilityId > ASSET_SERVICE_ID) && (sysAbilityId < VENDOR_SYS_ABILITY_ID_BEGIN)) {
298 bool runOnCreate = true;
299 ConcurrentTaskServiceAbility concurrenttaskserviceability =
300 ConcurrentTaskServiceAbility(sysAbilityId, runOnCreate);
301 concurrenttaskserviceability.OnStart();
302 }
303 }
304 return true;
305 }
306
FuzzConcurrentTaskServiceAbilityOnAddSystemAbility(const uint8_t * data,size_t size)307 bool FuzzConcurrentTaskServiceAbilityOnAddSystemAbility(const uint8_t* data, size_t size)
308 {
309 FuzzedDataProvider fdp(data, size);
310 if (size > sizeof(int32_t) + sizeof(int32_t) + sizeof(int32_t)) {
311 int32_t sysAbilityId = fdp.ConsumeIntegral<int32_t>();
312 int32_t taskServiceId = fdp.ConsumeIntegral<int32_t>();
313 std::string deviceId = std::to_string(fdp.ConsumeIntegral<int32_t>());
314 if ((sysAbilityId > ASSET_SERVICE_ID && sysAbilityId < VENDOR_SYS_ABILITY_ID_BEGIN) &&
315 (taskServiceId > ASSET_SERVICE_ID && taskServiceId < VENDOR_SYS_ABILITY_ID_BEGIN)) {
316 bool runOnCreate = true;
317 ConcurrentTaskServiceAbility concurrenttaskserviceability =
318 ConcurrentTaskServiceAbility(taskServiceId, runOnCreate);
319 concurrenttaskserviceability.OnAddSystemAbility(sysAbilityId, deviceId);
320 }
321 }
322 return true;
323 }
324
FuzzConcurrentTaskServiceAbilityOnRemoveSystemAbility(const uint8_t * data,size_t size)325 bool FuzzConcurrentTaskServiceAbilityOnRemoveSystemAbility(const uint8_t* data, size_t size)
326 {
327 FuzzedDataProvider fdp(data, size);
328 if (size > sizeof(int32_t) + sizeof(int32_t) + sizeof(int32_t)) {
329 int32_t sysAbilityId = fdp.ConsumeIntegral<int32_t>();
330 int32_t taskServiceId = fdp.ConsumeIntegral<int32_t>();
331 std::string deviceId = std::to_string(fdp.ConsumeIntegral<int32_t>());
332 if ((sysAbilityId > ASSET_SERVICE_ID && sysAbilityId < VENDOR_SYS_ABILITY_ID_BEGIN) &&
333 (taskServiceId > ASSET_SERVICE_ID && taskServiceId < VENDOR_SYS_ABILITY_ID_BEGIN)) {
334 bool runOnCreate = true;
335 ConcurrentTaskServiceAbility concurrenttaskserviceability =
336 ConcurrentTaskServiceAbility(taskServiceId, runOnCreate);
337 concurrenttaskserviceability.OnRemoveSystemAbility(sysAbilityId, deviceId);
338 }
339 }
340 return true;
341 }
342
FuzzConcurrentTaskClientReportData(const uint8_t * data,size_t size)343 bool FuzzConcurrentTaskClientReportData(const uint8_t* data, size_t size)
344 {
345 FuzzedDataProvider fdp(data, size);
346 if (size > sizeof(int) + sizeof(pid_t) + sizeof(uint32_t)) {
347 uint32_t resType = fdp.ConsumeIntegral<uint32_t>();
348 int64_t value = fdp.ConsumeIntegral<int64_t>();
349 std::unordered_map<std::string, std::string> mapPayload;
350 mapPayload["218211"] = std::to_string(fdp.ConsumeIntegral<int32_t>());
351 ConcurrentTaskClient::GetInstance().ReportData(resType, value, mapPayload);
352 }
353 return true;
354 }
355
FuzzConcurrentTaskClientReportSceneInfo(const uint8_t * data,size_t size)356 bool FuzzConcurrentTaskClientReportSceneInfo(const uint8_t* data, size_t size)
357 {
358 FuzzedDataProvider fdp(data, size);
359 if (size > sizeof(int) + sizeof(pid_t) + sizeof(uint32_t)) {
360 uint32_t type = fdp.ConsumeIntegral<uint32_t>();
361 std::unordered_map<std::string, std::string> mapPayload;
362 mapPayload["218222"] = std::to_string(fdp.ConsumeIntegral<int32_t>());
363 ConcurrentTaskClient::GetInstance().ReportSceneInfo(type, mapPayload);
364 }
365 return true;
366 }
367
FuzzConcurrentTaskClientQueryInterval(const uint8_t * data,size_t size)368 bool FuzzConcurrentTaskClientQueryInterval(const uint8_t* data, size_t size)
369 {
370 FuzzedDataProvider fdp(data, size);
371 if (size > sizeof(int) + sizeof(int)) {
372 int queryItem = fdp.ConsumeIntegral<int>();
373 queryItem = queryItem % (QURRY_TYPE_MAX + 1);
374 IntervalReply queryRs;
375 ConcurrentTaskClient::GetInstance().QueryInterval(queryItem, queryRs);
376 }
377 return true;
378 }
379
FuzzConcurrentTaskClientQueryDeadline(const uint8_t * data,size_t size)380 bool FuzzConcurrentTaskClientQueryDeadline(const uint8_t* data, size_t size)
381 {
382 FuzzedDataProvider fdp(data, size);
383 if (size > sizeof(int) + sizeof(pid_t) + sizeof(uint32_t)) {
384 int queryItem = fdp.ConsumeIntegral<int>();
385 queryItem = queryItem % (QURRY_TYPE_MAX + 1);
386 DeadlineReply ddlReply;
387 pid_t pid = fdp.ConsumeIntegral<pid_t>();
388 uint32_t qos = fdp.ConsumeIntegral<uint32_t>();
389 std::unordered_map<pid_t, uint32_t> mapPayload;
390 mapPayload.insert(std::pair<pid_t, uint32_t>(pid, qos));
391 ConcurrentTaskClient::GetInstance().QueryDeadline(queryItem, ddlReply, mapPayload);
392 }
393 return true;
394 }
395
FuzzConcurrentTaskClientSetAudioDeadline(const uint8_t * data,size_t size)396 bool FuzzConcurrentTaskClientSetAudioDeadline(const uint8_t* data, size_t size)
397 {
398 FuzzedDataProvider fdp(data, size);
399 if (size > sizeof(int) + sizeof(int)) {
400 int queryItem = fdp.ConsumeIntegral<int>();
401 queryItem = queryItem % (AUDIO_DDL_REMOVE_THREAD + 1);
402 IntervalReply queryRs;
403 ConcurrentTaskClient::GetInstance().SetAudioDeadline(queryItem, START_TIME, END_TIME, queryRs);
404 }
405 return true;
406 }
407
FuzzConcurrentTaskClinetRequestAuth(const uint8_t * data,size_t size)408 bool FuzzConcurrentTaskClinetRequestAuth(const uint8_t* data, size_t size)
409 {
410 FuzzedDataProvider fdp(data, size);
411 if (size > sizeof(int32_t)) {
412 MessageParcel data1;
413 std::unordered_map<std::string, std::string> mapPayload;
414 mapPayload["2182"] = std::to_string(fdp.ConsumeIntegral<int32_t>());
415 ConcurrentTaskClient::GetInstance().RequestAuth(mapPayload);
416 }
417 return true;
418 }
419
FuzzConcurrentTaskClientStopRemoteObject(const uint8_t * data,size_t size)420 bool FuzzConcurrentTaskClientStopRemoteObject(const uint8_t* data, size_t size)
421 {
422 FuzzedDataProvider fdp(data, size);
423 if (size > sizeof(int)) {
424 ConcurrentTaskClient::GetInstance().StopRemoteObject();
425 }
426 return true;
427 }
428
FuzzConcurrentTaskControllerInterfaceReportData(const uint8_t * data,size_t size)429 bool FuzzConcurrentTaskControllerInterfaceReportData(const uint8_t* data, size_t size)
430 {
431 FuzzedDataProvider fdp(data, size);
432 if (size > sizeof(uint32_t) + sizeof(int64_t) + sizeof(uint32_t) + sizeof(uint32_t)) {
433 uint32_t resType = fdp.ConsumeIntegral<uint32_t>();
434 int64_t value = fdp.ConsumeIntegral<int64_t>();
435 std::unordered_map<std::string, std::string> payload;
436 payload["1111"] = std::to_string(fdp.ConsumeIntegral<uint32_t>());
437 payload["2222"] = std::to_string(fdp.ConsumeIntegral<uint32_t>());
438 TaskControllerInterface::GetInstance().ReportData(resType, value, payload);
439 }
440 return true;
441 }
442
FuzzConcurrentTaskControllerInterfaceReportSceneInfo(const uint8_t * data,size_t size)443 bool FuzzConcurrentTaskControllerInterfaceReportSceneInfo(const uint8_t* data, size_t size)
444 {
445 FuzzedDataProvider fdp(data, size);
446 if (size > sizeof(uint32_t) + sizeof(uint32_t) + sizeof(uint32_t)) {
447 uint32_t resType = fdp.ConsumeIntegral<uint32_t>();
448 std::unordered_map<std::string, std::string> payload;
449 payload["1111"] = std::to_string(fdp.ConsumeIntegral<uint32_t>());
450 payload["2222"] = std::to_string(fdp.ConsumeIntegral<uint32_t>());
451 TaskControllerInterface::GetInstance().ReportSceneInfo(resType, payload);
452 }
453 return true;
454 }
455
FuzzConcurrentTaskControllerInterfaceQueryInterval(const uint8_t * data,size_t size)456 bool FuzzConcurrentTaskControllerInterfaceQueryInterval(const uint8_t* data, size_t size)
457 {
458 FuzzedDataProvider fdp(data, size);
459 if (size > sizeof(int) + sizeof(int)) {
460 ConcurrentTaskService s = ConcurrentTaskService();
461 int queryItem = fdp.ConsumeIntegral<int>();
462 queryItem = queryItem % (QURRY_TYPE_MAX + 1);
463 IntervalReply queryRs;
464 TaskControllerInterface::GetInstance().QueryInterval(queryItem, queryRs);
465 }
466 return true;
467 }
468
FuzzConcurrentTaskControllerInterfaceQueryDeadline(const uint8_t * data,size_t size)469 bool FuzzConcurrentTaskControllerInterfaceQueryDeadline(const uint8_t* data, size_t size)
470 {
471 FuzzedDataProvider fdp(data, size);
472 if (size > sizeof(int) + sizeof(int) + sizeof(int)) {
473 int deadlineType = fdp.ConsumeIntegral<int>();
474 deadlineType = deadlineType % (MSG_GAME + 1);
475 DeadlineReply queryRs;
476 std::unordered_map<std::string, std::string> payload;
477 payload["2123"] = std::to_string(fdp.ConsumeIntegral<int>());
478 payload["2333"] = std::to_string(fdp.ConsumeIntegral<int>());
479 ConcurrentTaskService s = ConcurrentTaskService();
480 TaskControllerInterface::GetInstance().QueryDeadline(deadlineType, queryRs, payload);
481 }
482 return true;
483 }
484
FuzzConcurrentTaskControllerInterfaceSetAudioDeadline(const uint8_t * data,size_t size)485 bool FuzzConcurrentTaskControllerInterfaceSetAudioDeadline(const uint8_t* data, size_t size)
486 {
487 FuzzedDataProvider fdp(data, size);
488 if (size > sizeof(int) + sizeof(int)) {
489 ConcurrentTaskService s = ConcurrentTaskService();
490 int queryItem = fdp.ConsumeIntegral<int>();
491 queryItem = queryItem % (AUDIO_DDL_REMOVE_THREAD + 1);
492 IntervalReply queryRs;
493 TaskControllerInterface::GetInstance().SetAudioDeadline(queryItem, START_TIME, END_TIME, queryRs);
494 }
495 return true;
496 }
497
FuzzConcurrentTaskControllerInterfaceRequestAuth(const uint8_t * data,size_t size)498 bool FuzzConcurrentTaskControllerInterfaceRequestAuth(const uint8_t* data, size_t size)
499 {
500 FuzzedDataProvider fdp(data, size);
501 if (size > sizeof(int) + sizeof(int)) {
502 std::unordered_map<std::string, std::string> payload;
503 payload["2187"] = std::to_string(fdp.ConsumeIntegral<int>());
504 payload["2376"] = std::to_string(fdp.ConsumeIntegral<int>());
505 ConcurrentTaskService s = ConcurrentTaskService();
506 TaskControllerInterface::GetInstance().RequestAuth(payload);
507 }
508 return true;
509 }
510
FuzzConcurrentTaskControllerInterfaceInit(const uint8_t * data,size_t size)511 bool FuzzConcurrentTaskControllerInterfaceInit(const uint8_t* data, size_t size)
512 {
513 TaskControllerInterface::GetInstance().Init();
514 return true;
515 }
516
FuzzConcurrentTaskControllerInterfaceRelease(const uint8_t * data,size_t size)517 bool FuzzConcurrentTaskControllerInterfaceRelease(const uint8_t* data, size_t size)
518 {
519 TaskControllerInterface::GetInstance().Release();
520 return true;
521 }
522
FuzzQosControllerGetThreadQosForOtherThread(const uint8_t * data,size_t size)523 bool FuzzQosControllerGetThreadQosForOtherThread(const uint8_t* data, size_t size)
524 {
525 FuzzedDataProvider fdp(data, size);
526 if (size > sizeof(int)) {
527 enum QosLevel level;
528 int tid = fdp.ConsumeIntegral<int>();
529 QosController::GetInstance().GetThreadQosForOtherThread(level, tid);
530 }
531 return true;
532 }
533 } // namespace OHOS
534
TaskControllerFuzzTestSuit(const uint8_t * data,size_t size)535 static void TaskControllerFuzzTestSuit(const uint8_t *data, size_t size)
536 {
537 OHOS::FuzzQosControllerGetThreadQosForOtherThread(data, size);
538 }
539
540 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)541 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
542 {
543 /* Run your code on data */
544 OHOS::FuzzConcurrentTaskServiceReportData(data, size);
545 OHOS::FuzzConcurrentTaskServiceReportSceneInfo(data, size);
546 OHOS::FuzzConcurrentTaskServiceQueryDeadline(data, size);
547 OHOS::FuzzConcurrentTaskServiceQueryInterval(data, size);
548 OHOS::FuzzConcurrentTaskServiceSetAudioDeadline(data, size);
549 OHOS::FuzzConcurrentTaskServiceRequestAuth(data, size);
550
551 OHOS::FuzzConcurrentTaskServiceSetThreadQos(data, size);
552 OHOS::FuzzConcurrentTaskServiceSetQosForOtherThread(data, size);
553 OHOS::FuzzConcurrentTaskServiceResetThreadQos(data, size);
554 OHOS::FuzzConcurrentTaskServiceResetQosForOtherThread(data, size);
555
556 OHOS::FuzzQosPolicyInit(data, size);
557 OHOS::FuzzQosInterfaceEnableRtg(data, size);
558 OHOS::FuzzQosInterfaceQosLeave(data, size);
559
560 OHOS::FuzzConcurrentTaskServiceAbilityOnStart(data, size);
561 OHOS::FuzzConcurrentTaskServiceAbilityOnAddSystemAbility(data, size);
562 OHOS::FuzzConcurrentTaskServiceAbilityOnRemoveSystemAbility(data, size);
563
564 OHOS::FuzzConcurrentTaskClientReportData(data, size);
565 OHOS::FuzzConcurrentTaskClientReportSceneInfo(data, size);
566 OHOS::FuzzConcurrentTaskClientQueryDeadline(data, size);
567 OHOS::FuzzConcurrentTaskClientQueryInterval(data, size);
568 OHOS::FuzzConcurrentTaskClientSetAudioDeadline(data, size);
569 OHOS::FuzzConcurrentTaskClinetRequestAuth(data, size);
570 OHOS::FuzzConcurrentTaskClientStopRemoteObject(data, size);
571
572 TaskControllerFuzzTestSuit(data, size);
573 return 0;
574 }
575