1 /* 2 * Copyright (c) 2024 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 16 #include "bgtasksetbgtaskconfig_fuzzer.h" 17 #include "securec.h" 18 19 #include "background_task_mgr_service.h" 20 #include "ibackground_task_mgr_ipc_interface_code.h" 21 22 namespace OHOS { 23 namespace BackgroundTaskMgr { 24 const std::string BGTASK_SERVICE_NAME = "BgtaskMgrService"; 25 constexpr int32_t U32_AT_SIZE = 4; 26 bool g_isOnstarted = false; 27 const std::u16string BACKGROUND_TASK_MGR_STUB_TOKEN = u"ohos.resourceschedule.IBackgroundTaskMgr"; 28 DoSomethingInterestingWithMyAPI(const char * data,size_t size)29 bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) 30 { 31 MessageParcel datas; 32 datas.WriteInterfaceToken(BACKGROUND_TASK_MGR_STUB_TOKEN); 33 datas.WriteBuffer(data, size); 34 datas.RewindRead(0); 35 MessageParcel reply; 36 MessageOption option; 37 if (!g_isOnstarted) { 38 std::shared_ptr<AppExecFwk::EventRunner> runner_ {nullptr}; 39 runner_ = AppExecFwk::EventRunner::Create(BGTASK_SERVICE_NAME); 40 DelayedSingleton<BgTransientTaskMgr>::GetInstance()->Init(runner_); 41 g_isOnstarted = true; 42 } 43 uint32_t code = static_cast<uint32_t>(BackgroundTaskMgrStubInterfaceCode::SET_BGTASK_CONFIG); 44 DelayedSingleton<BackgroundTaskMgrService>::GetInstance()->OnRemoteRequest( 45 code, datas, reply, option); 46 return true; 47 } 48 } // BackgroundTaskMgr 49 } // OHOS 50 51 /* Fuzzer entry point */ LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)52 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 53 { 54 /* Run your code on data */ 55 if (data == nullptr) { 56 return 0; 57 } 58 59 if (size < OHOS::BackgroundTaskMgr::U32_AT_SIZE) { 60 return 0; 61 } 62 63 char* ch = static_cast<char *>(malloc(size + 1)); 64 if (ch == nullptr) { 65 return 0; 66 } 67 68 (void)memset_s(ch, size + 1, 0x00, size + 1); 69 if (memcpy_s(ch, size + 1, data, size) != EOK) { 70 free(ch); 71 ch = nullptr; 72 return 0; 73 } 74 75 OHOS::BackgroundTaskMgr::DoSomethingInterestingWithMyAPI(ch, size); 76 free(ch); 77 ch = nullptr; 78 return 0; 79 }