1 /*
2 * Copyright (c) 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 "storagemanagerprovider_fuzzer.h"
16
17 #include <cstddef>
18 #include <cstdint>
19 #include <cstring>
20 #include <system_ability_definition.h>
21
22 #include "accesstoken_kit.h"
23 #include "ipc/storage_manager.h"
24 #include "ipc/storage_manager_provider.h"
25 #include "ipc_skeleton.h"
26 #include "message_parcel.h"
27 #include "securec.h"
28 #include "storage_manager_stub.h"
29
30 using namespace OHOS::StorageManager;
31
32 namespace OHOS::Security::AccessToken {
GetTokenTypeFlag(AccessTokenID tokenID)33 ATokenTypeEnum AccessTokenKit::GetTokenTypeFlag(AccessTokenID tokenID)
34 {
35 return Security::AccessToken::TOKEN_NATIVE;
36 }
37
VerifyAccessToken(AccessTokenID tokenID,const std::string & permissionName)38 int AccessTokenKit::VerifyAccessToken(AccessTokenID tokenID, const std::string &permissionName)
39 {
40 return Security::AccessToken::PermissionState::PERMISSION_GRANTED;
41 }
42
GetNativeTokenInfo(AccessTokenID tokenID,NativeTokenInfo & nativeTokenInfoRes)43 int AccessTokenKit::GetNativeTokenInfo(AccessTokenID tokenID, NativeTokenInfo &nativeTokenInfoRes)
44 {
45 nativeTokenInfoRes.processName = "foundation";
46 return 0;
47 }
48 } // namespace OHOS::Security::AccessToken
49
50 namespace OHOS {
51 #ifdef CONFIG_IPC_SINGLE
52 using namespace IPC_SINGLE;
53 #endif
GetCallingUid()54 pid_t IPCSkeleton::GetCallingUid()
55 {
56 pid_t callingUid = 5523;
57 return callingUid;
58 }
59
GetCallingTokenID()60 uint32_t IPCSkeleton::GetCallingTokenID()
61 {
62 uint32_t callingTokenID = 100;
63 return callingTokenID;
64 }
65 } // namespace OHOS
66
67 namespace OHOS::StorageManager {
68 constexpr uint8_t MAX_CALL_TRANSACTION = 64;
69 constexpr size_t U32_AT_SIZE = 4;
70
71 std::shared_ptr<StorageManagerProvider> storageManagerProvider =
72 std::make_shared<StorageManagerProvider>(STORAGE_MANAGER_MANAGER_ID);
73
GetU32Data(const char * ptr)74 uint32_t GetU32Data(const char *ptr)
75 {
76 // 将第0个数字左移24位,将第1个数字左移16位,将第2个数字左移8位,第3个数字不左移
77 return (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | (ptr[3]);
78 }
79
g_storageManagerProviderFTest(std::unique_ptr<char[]> data,size_t size)80 bool g_storageManagerProviderFTest(std::unique_ptr<char[]> data, size_t size)
81 {
82 uint32_t code = GetU32Data(data.get());
83 if (code == 0) {
84 return true;
85 }
86 MessageParcel datas;
87 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
88 datas.WriteBuffer(data.get(), size);
89 datas.RewindRead(0);
90 MessageParcel reply;
91 MessageOption option;
92 storageManagerProvider->OnRemoteRequest(code % MAX_CALL_TRANSACTION, datas, reply, option);
93
94 return true;
95 }
96
PrepareAddUserFuzzTest(const uint8_t * data,size_t size)97 bool PrepareAddUserFuzzTest(const uint8_t *data, size_t size)
98 {
99 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_PREPARE_ADD_USER);
100 MessageParcel datas;
101 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
102 datas.WriteBuffer(data, size);
103 datas.RewindRead(0);
104 MessageParcel reply;
105 MessageOption option;
106
107 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
108 return true;
109 }
110
RemoveUserFuzzTest(const uint8_t * data,size_t size)111 bool RemoveUserFuzzTest(const uint8_t *data, size_t size)
112 {
113 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_REMOVE_USER);
114 MessageParcel datas;
115 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
116 datas.WriteBuffer(data, size);
117 datas.RewindRead(0);
118 MessageParcel reply;
119 MessageOption option;
120
121 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
122 return true;
123 }
124
PrepareStartUserFuzzTest(const uint8_t * data,size_t size)125 bool PrepareStartUserFuzzTest(const uint8_t *data, size_t size)
126 {
127 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_PREPARE_START_USER);
128 MessageParcel datas;
129 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
130 datas.WriteBuffer(data, size);
131 datas.RewindRead(0);
132 MessageParcel reply;
133 MessageOption option;
134
135 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
136 return true;
137 }
138
StopUserFuzzTest(const uint8_t * data,size_t size)139 bool StopUserFuzzTest(const uint8_t *data, size_t size)
140 {
141 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_STOP_USER);
142 MessageParcel datas;
143 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
144 datas.WriteBuffer(data, size);
145 datas.RewindRead(0);
146 MessageParcel reply;
147 MessageOption option;
148
149 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
150 return true;
151 }
152
GetCurrentBundleStatsFuzzTest(const uint8_t * data,size_t size)153 bool GetCurrentBundleStatsFuzzTest(const uint8_t *data, size_t size)
154 {
155 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_CURRENT_BUNDLE_STATS);
156 MessageParcel datas;
157 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
158 datas.WriteBuffer(data, size);
159 datas.RewindRead(0);
160 MessageParcel reply;
161 MessageOption option;
162
163 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
164 return true;
165 }
166
MountFuzzTest(const uint8_t * data,size_t size)167 bool MountFuzzTest(const uint8_t *data, size_t size)
168 {
169 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_MOUNT);
170 MessageParcel datas;
171 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
172 datas.WriteBuffer(data, size);
173 datas.RewindRead(0);
174 MessageParcel reply;
175 MessageOption option;
176
177 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
178 return true;
179 }
180
UnmountFuzzTest(const uint8_t * data,size_t size)181 bool UnmountFuzzTest(const uint8_t *data, size_t size)
182 {
183 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_UNMOUNT);
184 MessageParcel datas;
185 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
186 datas.WriteBuffer(data, size);
187 datas.RewindRead(0);
188 MessageParcel reply;
189 MessageOption option;
190
191 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
192 return true;
193 }
194
PartitionFuzzTest(const uint8_t * data,size_t size)195 bool PartitionFuzzTest(const uint8_t *data, size_t size)
196 {
197 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_PARTITION);
198 MessageParcel datas;
199 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
200 datas.WriteBuffer(data, size);
201 datas.RewindRead(0);
202 MessageParcel reply;
203 MessageOption option;
204
205 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
206 return true;
207 }
208
FormatFuzzTest(const uint8_t * data,size_t size)209 bool FormatFuzzTest(const uint8_t *data, size_t size)
210 {
211 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_FORMAT);
212 MessageParcel datas;
213 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
214 datas.WriteBuffer(data, size);
215 datas.RewindRead(0);
216 MessageParcel reply;
217 MessageOption option;
218
219 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
220 return true;
221 }
222
GenerateUserKeysFuzzTest(const uint8_t * data,size_t size)223 bool GenerateUserKeysFuzzTest(const uint8_t *data, size_t size)
224 {
225 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GENERATE_USER_KEYS);
226 MessageParcel datas;
227 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
228 datas.WriteBuffer(data, size);
229 datas.RewindRead(0);
230 MessageParcel reply;
231 MessageOption option;
232
233 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
234 return true;
235 }
236
DeleteUserKeysFuzzTest(const uint8_t * data,size_t size)237 bool DeleteUserKeysFuzzTest(const uint8_t *data, size_t size)
238 {
239 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_DELETE_USER_KEYS);
240 MessageParcel datas;
241 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
242 datas.WriteBuffer(data, size);
243 datas.RewindRead(0);
244 MessageParcel reply;
245 MessageOption option;
246
247 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
248 return true;
249 }
250
UpdateUserAuthFuzzTest(const uint8_t * data,size_t size)251 bool UpdateUserAuthFuzzTest(const uint8_t *data, size_t size)
252 {
253 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_UPDATE_USER_AUTH);
254 MessageParcel datas;
255 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
256 datas.WriteBuffer(data, size);
257 datas.RewindRead(0);
258 MessageParcel reply;
259 MessageOption option;
260
261 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
262 return true;
263 }
264
ActiveUserKeyFuzzTest(const uint8_t * data,size_t size)265 bool ActiveUserKeyFuzzTest(const uint8_t *data, size_t size)
266 {
267 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_ACTIVE_USER_KEY);
268 MessageParcel datas;
269 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
270 datas.WriteBuffer(data, size);
271 datas.RewindRead(0);
272 MessageParcel reply;
273 MessageOption option;
274
275 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
276 return true;
277 }
278
InactiveUserKeyFuzzTest(const uint8_t * data,size_t size)279 bool InactiveUserKeyFuzzTest(const uint8_t *data, size_t size)
280 {
281 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_INACTIVE_USER_KEY);
282 MessageParcel datas;
283 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
284 datas.WriteBuffer(data, size);
285 datas.RewindRead(0);
286 MessageParcel reply;
287 MessageOption option;
288
289 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
290 return true;
291 }
292
LockUserScreenFuzzTest(const uint8_t * data,size_t size)293 bool LockUserScreenFuzzTest(const uint8_t *data, size_t size)
294 {
295 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_LOCK_USER_SCREEN);
296 MessageParcel datas;
297 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
298 datas.WriteBuffer(data, size);
299 datas.RewindRead(0);
300 MessageParcel reply;
301 MessageOption option;
302
303 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
304 return true;
305 }
306
UnlockUserScreenFuzzTest(const uint8_t * data,size_t size)307 bool UnlockUserScreenFuzzTest(const uint8_t *data, size_t size)
308 {
309 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_UNLOCK_USER_SCREEN);
310 MessageParcel datas;
311 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
312 datas.WriteBuffer(data, size);
313 datas.RewindRead(0);
314 MessageParcel reply;
315 MessageOption option;
316
317 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
318 return true;
319 }
320
UpdateKeyContextFuzzTest(const uint8_t * data,size_t size)321 bool UpdateKeyContextFuzzTest(const uint8_t *data, size_t size)
322 {
323 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_UPDATE_KEY_CONTEXT);
324 MessageParcel datas;
325 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
326 datas.WriteBuffer(data, size);
327 datas.RewindRead(0);
328 MessageParcel reply;
329 MessageOption option;
330
331 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
332 return true;
333 }
334
CreateShareFileFuzzTest(const uint8_t * data,size_t size)335 bool CreateShareFileFuzzTest(const uint8_t *data, size_t size)
336 {
337 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_CREATE_SHARE_FILE);
338 MessageParcel datas;
339 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
340 datas.WriteBuffer(data, size);
341 datas.RewindRead(0);
342 MessageParcel reply;
343 MessageOption option;
344
345 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
346 return true;
347 }
348
DeleteShareFileFuzzTest(const uint8_t * data,size_t size)349 bool DeleteShareFileFuzzTest(const uint8_t *data, size_t size)
350 {
351 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_DELETE_SHARE_FILE);
352 MessageParcel datas;
353 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
354 datas.WriteBuffer(data, size);
355 datas.RewindRead(0);
356 MessageParcel reply;
357 MessageOption option;
358
359 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
360 return true;
361 }
362
SetBundleQuotaFuzzTest(const uint8_t * data,size_t size)363 bool SetBundleQuotaFuzzTest(const uint8_t *data, size_t size)
364 {
365 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_SET_BUNDLE_QUOTA);
366 MessageParcel datas;
367 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
368 datas.WriteBuffer(data, size);
369 datas.RewindRead(0);
370 MessageParcel reply;
371 MessageOption option;
372
373 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
374 return true;
375 }
376
UpdateMemoryParaFuzzTest(const uint8_t * data,size_t size)377 bool UpdateMemoryParaFuzzTest(const uint8_t *data, size_t size)
378 {
379 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_UPDATE_MEMORY_PARA);
380 MessageParcel datas;
381 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
382 datas.WriteBuffer(data, size);
383 datas.RewindRead(0);
384 MessageParcel reply;
385 MessageOption option;
386
387 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
388 return true;
389 }
390
DeleteAppkeyFuzzTest(const uint8_t * data,size_t size)391 bool DeleteAppkeyFuzzTest(const uint8_t *data, size_t size)
392 {
393 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_DELETE_APPKEY);
394 MessageParcel datas;
395 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
396 datas.WriteBuffer(data, size);
397 datas.RewindRead(0);
398 MessageParcel reply;
399 MessageOption option;
400
401 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
402 return true;
403 }
404
CompleteAddUserFuzzTest(const uint8_t * data,size_t size)405 bool CompleteAddUserFuzzTest(const uint8_t *data, size_t size)
406 {
407 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_COMPLETE_ADD_USER);
408 MessageParcel datas;
409 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
410 datas.WriteBuffer(data, size);
411 datas.RewindRead(0);
412 MessageParcel reply;
413 MessageOption option;
414
415 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
416 return true;
417 }
418
GetTotalSizeOfVolumeFuzzTest(const uint8_t * data,size_t size)419 bool GetTotalSizeOfVolumeFuzzTest(const uint8_t *data, size_t size)
420 {
421 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_TOTAL_SIZE_OF_VOLUME);
422 MessageParcel datas;
423 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
424 datas.WriteBuffer(data, size);
425 datas.RewindRead(0);
426 MessageParcel reply;
427 MessageOption option;
428
429 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
430 return true;
431 }
432
GetFreeSizeOfVolumeFuzzTest(const uint8_t * data,size_t size)433 bool GetFreeSizeOfVolumeFuzzTest(const uint8_t *data, size_t size)
434 {
435 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_FREE_SIZE_OF_VOLUME);
436 MessageParcel datas;
437 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
438 datas.WriteBuffer(data, size);
439 datas.RewindRead(0);
440 MessageParcel reply;
441 MessageOption option;
442
443 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
444 return true;
445 }
446
GetBundleStatsFuzzTest(const uint8_t * data,size_t size)447 bool GetBundleStatsFuzzTest(const uint8_t *data, size_t size)
448 {
449 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_BUNDLE_STATS);
450 MessageParcel datas;
451 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
452 datas.WriteBuffer(data, size);
453 datas.RewindRead(0);
454 MessageParcel reply;
455 MessageOption option;
456
457 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
458 return true;
459 }
460
GetSystemSizeFuzzTest(const uint8_t * data,size_t size)461 bool GetSystemSizeFuzzTest(const uint8_t *data, size_t size)
462 {
463 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_SYSTEM_SIZE);
464 MessageParcel datas;
465 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
466 datas.WriteBuffer(data, size);
467 datas.RewindRead(0);
468 MessageParcel reply;
469 MessageOption option;
470
471 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
472 return true;
473 }
474
GetTotalSizeFuzzTest(const uint8_t * data,size_t size)475 bool GetTotalSizeFuzzTest(const uint8_t *data, size_t size)
476 {
477 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_TOTAL_SIZE);
478 MessageParcel datas;
479 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
480 datas.WriteBuffer(data, size);
481 datas.RewindRead(0);
482 MessageParcel reply;
483 MessageOption option;
484
485 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
486 return true;
487 }
488
GetFreeSizeFuzzTest(const uint8_t * data,size_t size)489 bool GetFreeSizeFuzzTest(const uint8_t *data, size_t size)
490 {
491 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_FREE_SIZE);
492 MessageParcel datas;
493 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
494 datas.WriteBuffer(data, size);
495 datas.RewindRead(0);
496 MessageParcel reply;
497 MessageOption option;
498
499 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
500 return true;
501 }
502
GetUserStorageStatsFuzzTest(const uint8_t * data,size_t size)503 bool GetUserStorageStatsFuzzTest(const uint8_t *data, size_t size)
504 {
505 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_USER_STORAGE_STATS);
506 MessageParcel datas;
507 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
508 datas.WriteBuffer(data, size);
509 datas.RewindRead(0);
510 MessageParcel reply;
511 MessageOption option;
512
513 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
514 return true;
515 }
516
GetUserStorageStatsIpcFuzzTest(const uint8_t * data,size_t size)517 bool GetUserStorageStatsIpcFuzzTest(const uint8_t *data, size_t size)
518 {
519 uint32_t code =
520 static_cast<int32_t>(IStorageManagerIpcCode::COMMAND_GET_USER_STORAGE_STATS_IN_INT_OUT_STORAGESTATS);
521 MessageParcel datas;
522 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
523 datas.WriteBuffer(data, size);
524 datas.RewindRead(0);
525 MessageParcel reply;
526 MessageOption option;
527
528 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
529 return true;
530 }
531
GetAllVolumesFuzzTest(const uint8_t * data,size_t size)532 bool GetAllVolumesFuzzTest(const uint8_t *data, size_t size)
533 {
534 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_ALL_VOLUMES);
535 MessageParcel datas;
536 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
537 datas.WriteBuffer(data, size);
538 datas.RewindRead(0);
539 MessageParcel reply;
540 MessageOption option;
541
542 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
543 return true;
544 }
545
NotifyVolumeCreatedFuzzTest(const uint8_t * data,size_t size)546 bool NotifyVolumeCreatedFuzzTest(const uint8_t *data, size_t size)
547 {
548 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_NOTIFY_VOLUME_CREATED);
549 MessageParcel datas;
550 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
551 datas.WriteBuffer(data, size);
552 datas.RewindRead(0);
553 MessageParcel reply;
554 MessageOption option;
555
556 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
557 return true;
558 }
559
NotifyVolumeMountedFuzzTest(const uint8_t * data,size_t size)560 bool NotifyVolumeMountedFuzzTest(const uint8_t *data, size_t size)
561 {
562 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_NOTIFY_VOLUME_MOUNTED);
563 MessageParcel datas;
564 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
565 datas.WriteBuffer(data, size);
566 datas.RewindRead(0);
567 MessageParcel reply;
568 MessageOption option;
569
570 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
571 return true;
572 }
573
NotifyVolumeStateChangedFuzzTest(const uint8_t * data,size_t size)574 bool NotifyVolumeStateChangedFuzzTest(const uint8_t *data, size_t size)
575 {
576 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_NOTIFY_VOLUME_STATE_CHANGED);
577 MessageParcel datas;
578 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
579 datas.WriteBuffer(data, size);
580 datas.RewindRead(0);
581 MessageParcel reply;
582 MessageOption option;
583
584 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
585 return true;
586 }
587
NotifyDiskCreatedFuzzTest(const uint8_t * data,size_t size)588 bool NotifyDiskCreatedFuzzTest(const uint8_t *data, size_t size)
589 {
590 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_NOTIFY_DISK_CREATED);
591 MessageParcel datas;
592 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
593 datas.WriteBuffer(data, size);
594 datas.RewindRead(0);
595 MessageParcel reply;
596 MessageOption option;
597
598 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
599 return true;
600 }
601
GetAllDisksFuzzTest(const uint8_t * data,size_t size)602 bool GetAllDisksFuzzTest(const uint8_t *data, size_t size)
603 {
604 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_ALL_DISKS);
605 MessageParcel datas;
606 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
607 datas.WriteBuffer(data, size);
608 datas.RewindRead(0);
609 MessageParcel reply;
610 MessageOption option;
611
612 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
613 return true;
614 }
615
GetVolumeByUuidFuzzTest(const uint8_t * data,size_t size)616 bool GetVolumeByUuidFuzzTest(const uint8_t *data, size_t size)
617 {
618 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_VOLUME_BY_UUID);
619 MessageParcel datas;
620 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
621 datas.WriteBuffer(data, size);
622 datas.RewindRead(0);
623 MessageParcel reply;
624 MessageOption option;
625
626 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
627 return true;
628 }
629
GetVolumeByIdFuzzTest(const uint8_t * data,size_t size)630 bool GetVolumeByIdFuzzTest(const uint8_t *data, size_t size)
631 {
632 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_VOLUME_BY_ID);
633 MessageParcel datas;
634 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
635 datas.WriteBuffer(data, size);
636 datas.RewindRead(0);
637 MessageParcel reply;
638 MessageOption option;
639
640 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
641 return true;
642 }
643
SetVolumeDescriptionFuzzTest(const uint8_t * data,size_t size)644 bool SetVolumeDescriptionFuzzTest(const uint8_t *data, size_t size)
645 {
646 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_SET_VOLUME_DESCRIPTION);
647 MessageParcel datas;
648 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
649 datas.WriteBuffer(data, size);
650 datas.RewindRead(0);
651 MessageParcel reply;
652 MessageOption option;
653
654 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
655 return true;
656 }
657
QueryUsbIsInUseFuzzTest(const uint8_t * data,size_t size)658 bool QueryUsbIsInUseFuzzTest(const uint8_t *data, size_t size)
659 {
660 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_QUERY_USB_IS_IN_USE);
661 MessageParcel datas;
662 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
663 datas.WriteBuffer(data, size);
664 datas.RewindRead(0);
665 MessageParcel reply;
666 MessageOption option;
667
668 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
669 return true;
670 }
671
GetDiskByIdFuzzTest(const uint8_t * data,size_t size)672 bool GetDiskByIdFuzzTest(const uint8_t *data, size_t size)
673 {
674 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_DISK_BY_ID);
675 MessageParcel datas;
676 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
677 datas.WriteBuffer(data, size);
678 datas.RewindRead(0);
679 MessageParcel reply;
680 MessageOption option;
681
682 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
683 return true;
684 }
685
UpdateUseAuthWithRecoveryKeyFuzzTest(const uint8_t * data,size_t size)686 bool UpdateUseAuthWithRecoveryKeyFuzzTest(const uint8_t *data, size_t size)
687 {
688 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_UPDATE_USE_AUTH_WITH_RECOVERY_KEY);
689 MessageParcel datas;
690 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
691 datas.WriteBuffer(data, size);
692 datas.RewindRead(0);
693 MessageParcel reply;
694 MessageOption option;
695
696 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
697 return true;
698 }
699
GetFileEncryptStatusFuzzTest(const uint8_t * data,size_t size)700 bool GetFileEncryptStatusFuzzTest(const uint8_t *data, size_t size)
701 {
702 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_FILE_ENCRYPT_STATUS);
703 MessageParcel datas;
704 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
705 datas.WriteBuffer(data, size);
706 datas.RewindRead(0);
707 MessageParcel reply;
708 MessageOption option;
709
710 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
711 return true;
712 }
713
GetLockScreenStatusFuzzTest(const uint8_t * data,size_t size)714 bool GetLockScreenStatusFuzzTest(const uint8_t *data, size_t size)
715 {
716 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_LOCK_SCREEN_STATUS);
717 MessageParcel datas;
718 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
719 datas.WriteBuffer(data, size);
720 datas.RewindRead(0);
721 MessageParcel reply;
722 MessageOption option;
723
724 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
725 return true;
726 }
727
GenerateAppkeyFuzzTest(const uint8_t * data,size_t size)728 bool GenerateAppkeyFuzzTest(const uint8_t *data, size_t size)
729 {
730 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GENERATE_APPKEY);
731 MessageParcel datas;
732 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
733 datas.WriteBuffer(data, size);
734 datas.RewindRead(0);
735 MessageParcel reply;
736 MessageOption option;
737
738 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
739 return true;
740 }
741
CreateRecoverKeyFuzzTest(const uint8_t * data,size_t size)742 bool CreateRecoverKeyFuzzTest(const uint8_t *data, size_t size)
743 {
744 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_CREATE_RECOVER_KEY);
745 MessageParcel datas;
746 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
747 datas.WriteBuffer(data, size);
748 datas.RewindRead(0);
749 MessageParcel reply;
750 MessageOption option;
751
752 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
753 return true;
754 }
755
SetRecoverKeyFuzzTest(const uint8_t * data,size_t size)756 bool SetRecoverKeyFuzzTest(const uint8_t *data, size_t size)
757 {
758 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_SET_RECOVER_KEY);
759 MessageParcel datas;
760 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
761 datas.WriteBuffer(data, size);
762 datas.RewindRead(0);
763 MessageParcel reply;
764 MessageOption option;
765
766 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
767 return true;
768 }
769
ResetSecretWithRecoveryKeyFuzzTest(const uint8_t * data,size_t size)770 bool ResetSecretWithRecoveryKeyFuzzTest(const uint8_t *data, size_t size)
771 {
772 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_RESET_SECRET_WITH_RECOVERY_KEY);
773 MessageParcel datas;
774 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
775 datas.WriteBuffer(data, size);
776 datas.RewindRead(0);
777 MessageParcel reply;
778 MessageOption option;
779
780 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
781 return true;
782 }
783
GetUserStorageStatsByTypeFuzzTest(const uint8_t * data,size_t size)784 bool GetUserStorageStatsByTypeFuzzTest(const uint8_t *data, size_t size)
785 {
786 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_GET_USER_STORAGE_STATS_BY_TYPE);
787 MessageParcel datas;
788 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
789 datas.WriteBuffer(data, size);
790 datas.RewindRead(0);
791 MessageParcel reply;
792 MessageOption option;
793
794 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
795 return true;
796 }
797
MountDfsDocsFuzzTest(const uint8_t * data,size_t size)798 bool MountDfsDocsFuzzTest(const uint8_t *data, size_t size)
799 {
800 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_MOUNT_DFS_DOCS);
801 MessageParcel datas;
802 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
803 datas.WriteBuffer(data, size);
804 datas.RewindRead(0);
805 MessageParcel reply;
806 MessageOption option;
807
808 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
809 return true;
810 }
811
UMountDfsDocsFuzzTest(const uint8_t * data,size_t size)812 bool UMountDfsDocsFuzzTest(const uint8_t *data, size_t size)
813 {
814 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_UMOUNT_DFS_DOCS);
815 MessageParcel datas;
816 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
817 datas.WriteBuffer(data, size);
818 datas.RewindRead(0);
819 MessageParcel reply;
820 MessageOption option;
821
822 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
823 return true;
824 }
825
NotifyMtpMountFuzzTest(const uint8_t * data,size_t size)826 bool NotifyMtpMountFuzzTest(const uint8_t *data, size_t size)
827 {
828 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_NOTIFY_MTP_MOUNTED);
829 MessageParcel datas;
830 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
831 datas.WriteBuffer(data, size);
832 datas.RewindRead(0);
833 MessageParcel reply;
834 MessageOption option;
835
836 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
837 return true;
838 }
839
NotifyMtpUnmountFuzzTest(const uint8_t * data,size_t size)840 bool NotifyMtpUnmountFuzzTest(const uint8_t *data, size_t size)
841 {
842 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_NOTIFY_MTP_UNMOUNTED);
843 MessageParcel datas;
844 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
845 datas.WriteBuffer(data, size);
846 datas.RewindRead(0);
847 MessageParcel reply;
848 MessageOption option;
849
850 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
851 return true;
852 }
853
NotifyDiskDestroyedFuzzTest(const uint8_t * data,size_t size)854 bool NotifyDiskDestroyedFuzzTest(const uint8_t *data, size_t size)
855 {
856 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_NOTIFY_DISK_DESTROYED);
857 MessageParcel datas;
858 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
859 datas.WriteBuffer(data, size);
860 datas.RewindRead(0);
861 MessageParcel reply;
862 MessageOption option;
863
864 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
865 return true;
866 }
867
MountMediaFuseFuzzTest(const uint8_t * data,size_t size)868 bool MountMediaFuseFuzzTest(const uint8_t *data, size_t size)
869 {
870 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_MOUNT_MEDIA_FUSE);
871 MessageParcel datas;
872 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
873 datas.WriteBuffer(data, size);
874 datas.RewindRead(0);
875 MessageParcel reply;
876 MessageOption option;
877
878 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
879 return true;
880 }
881
UMountMediaFuseFuzzTest(const uint8_t * data,size_t size)882 bool UMountMediaFuseFuzzTest(const uint8_t *data, size_t size)
883 {
884 uint32_t code = static_cast<uint32_t>(IStorageManagerIpcCode::COMMAND_UMOUNT_MEDIA_FUSE);
885 MessageParcel datas;
886 datas.WriteInterfaceToken(StorageManagerStub::GetDescriptor());
887 datas.WriteBuffer(data, size);
888 datas.RewindRead(0);
889 MessageParcel reply;
890 MessageOption option;
891
892 storageManagerProvider->OnRemoteRequest(code, datas, reply, option);
893 return true;
894 }
895 } // namespace OHOS::StorageManager
896
FuzzerTest1(const uint8_t * data,size_t size)897 void FuzzerTest1(const uint8_t *data, size_t size)
898 {
899 OHOS::StorageManager::PrepareAddUserFuzzTest(data, size);
900 OHOS::StorageManager::RemoveUserFuzzTest(data, size);
901 OHOS::StorageManager::PrepareStartUserFuzzTest(data, size);
902 OHOS::StorageManager::StopUserFuzzTest(data, size);
903 OHOS::StorageManager::GetCurrentBundleStatsFuzzTest(data, size);
904 OHOS::StorageManager::MountFuzzTest(data, size);
905 OHOS::StorageManager::UnmountFuzzTest(data, size);
906 OHOS::StorageManager::PartitionFuzzTest(data, size);
907 OHOS::StorageManager::FormatFuzzTest(data, size);
908 OHOS::StorageManager::GenerateUserKeysFuzzTest(data, size);
909 OHOS::StorageManager::DeleteUserKeysFuzzTest(data, size);
910 OHOS::StorageManager::UpdateUserAuthFuzzTest(data, size);
911 OHOS::StorageManager::ActiveUserKeyFuzzTest(data, size);
912 OHOS::StorageManager::InactiveUserKeyFuzzTest(data, size);
913 OHOS::StorageManager::LockUserScreenFuzzTest(data, size);
914 OHOS::StorageManager::UnlockUserScreenFuzzTest(data, size);
915 OHOS::StorageManager::UpdateKeyContextFuzzTest(data, size);
916 OHOS::StorageManager::CreateShareFileFuzzTest(data, size);
917 OHOS::StorageManager::DeleteShareFileFuzzTest(data, size);
918 OHOS::StorageManager::SetBundleQuotaFuzzTest(data, size);
919 OHOS::StorageManager::UpdateMemoryParaFuzzTest(data, size);
920 OHOS::StorageManager::DeleteAppkeyFuzzTest(data, size);
921 OHOS::StorageManager::CompleteAddUserFuzzTest(data, size);
922 OHOS::StorageManager::GetTotalSizeOfVolumeFuzzTest(data, size);
923 OHOS::StorageManager::GetFreeSizeOfVolumeFuzzTest(data, size);
924 OHOS::StorageManager::GetBundleStatsFuzzTest(data, size);
925 OHOS::StorageManager::GetSystemSizeFuzzTest(data, size);
926 OHOS::StorageManager::GetTotalSizeFuzzTest(data, size);
927 OHOS::StorageManager::GetFreeSizeFuzzTest(data, size);
928 OHOS::StorageManager::GetUserStorageStatsFuzzTest(data, size);
929 OHOS::StorageManager::GetUserStorageStatsIpcFuzzTest(data, size);
930 OHOS::StorageManager::GetAllVolumesFuzzTest(data, size);
931 OHOS::StorageManager::NotifyVolumeCreatedFuzzTest(data, size);
932 OHOS::StorageManager::NotifyVolumeMountedFuzzTest(data, size);
933 OHOS::StorageManager::NotifyVolumeStateChangedFuzzTest(data, size);
934 }
935
FuzzerTest2(const uint8_t * data,size_t size)936 void FuzzerTest2(const uint8_t *data, size_t size)
937 {
938 OHOS::StorageManager::NotifyDiskCreatedFuzzTest(data, size);
939 OHOS::StorageManager::GetAllDisksFuzzTest(data, size);
940 OHOS::StorageManager::GetVolumeByUuidFuzzTest(data, size);
941 OHOS::StorageManager::GetVolumeByIdFuzzTest(data, size);
942 OHOS::StorageManager::SetVolumeDescriptionFuzzTest(data, size);
943 OHOS::StorageManager::QueryUsbIsInUseFuzzTest(data, size);
944 OHOS::StorageManager::GetDiskByIdFuzzTest(data, size);
945 OHOS::StorageManager::UpdateUseAuthWithRecoveryKeyFuzzTest(data, size);
946 OHOS::StorageManager::GetFileEncryptStatusFuzzTest(data, size);
947 OHOS::StorageManager::GetLockScreenStatusFuzzTest(data, size);
948 OHOS::StorageManager::GenerateAppkeyFuzzTest(data, size);
949 OHOS::StorageManager::CreateRecoverKeyFuzzTest(data, size);
950 OHOS::StorageManager::SetRecoverKeyFuzzTest(data, size);
951 OHOS::StorageManager::ResetSecretWithRecoveryKeyFuzzTest(data, size);
952 OHOS::StorageManager::GetUserStorageStatsByTypeFuzzTest(data, size);
953 OHOS::StorageManager::MountDfsDocsFuzzTest(data, size);
954 OHOS::StorageManager::UMountDfsDocsFuzzTest(data, size);
955 OHOS::StorageManager::NotifyMtpMountFuzzTest(data, size);
956 OHOS::StorageManager::NotifyMtpUnmountFuzzTest(data, size);
957 OHOS::StorageManager::NotifyDiskDestroyedFuzzTest(data, size);
958 OHOS::StorageManager::MountMediaFuseFuzzTest(data, size);
959 OHOS::StorageManager::UMountMediaFuseFuzzTest(data, size);
960 }
961
962 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)963 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
964 {
965 /* Run your code on data */
966 if (data == nullptr) {
967 return 0;
968 }
969
970 /* Validate the length of size */
971 if (size < OHOS::StorageManager::U32_AT_SIZE) {
972 return 0;
973 }
974
975 auto str = std::make_unique<char[]>(size + 1);
976 (void)memset_s(str.get(), size + 1, 0x00, size + 1);
977 if (memcpy_s(str.get(), size, data, size) != EOK) {
978 return 0;
979 }
980
981 OHOS::StorageManager::g_storageManagerProviderFTest(move(str), size);
982 FuzzerTest1(data, size);
983 FuzzerTest2(data, size);
984 return 0;
985 }