• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }