1cc290419Sopenharmony_ci/* 2cc290419Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3cc290419Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4cc290419Sopenharmony_ci * you may not use this file except in compliance with the License. 5cc290419Sopenharmony_ci * You may obtain a copy of the License at 6cc290419Sopenharmony_ci * 7cc290419Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8cc290419Sopenharmony_ci * 9cc290419Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10cc290419Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11cc290419Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cc290419Sopenharmony_ci * See the License for the specific language governing permissions and 13cc290419Sopenharmony_ci * limitations under the License. 14cc290419Sopenharmony_ci */ 15cc290419Sopenharmony_ci 16cc290419Sopenharmony_ci#include "DaemonUsbRead_fuzzer.h" 17cc290419Sopenharmony_ci#include "daemon_usb.h" 18cc290419Sopenharmony_ci#include <uv.h> 19cc290419Sopenharmony_ci 20cc290419Sopenharmony_cinamespace Hdc { 21cc290419Sopenharmony_ciclass HdcDaemonUsbFuzzer : public HdcDaemonUSB { 22cc290419Sopenharmony_cipublic: 23cc290419Sopenharmony_ci explicit HdcDaemonUsbFuzzer(void *ptrbase) : HdcDaemonUSB(false, ptrbase) {} 24cc290419Sopenharmony_ci 25cc290419Sopenharmony_ci static std::unique_ptr<HdcDaemonUsbFuzzer> Instance(void *ptrbase) 26cc290419Sopenharmony_ci { 27cc290419Sopenharmony_ci std::unique_ptr<HdcDaemonUsbFuzzer> daemonusb = std::make_unique<HdcDaemonUsbFuzzer>(ptrbase); 28cc290419Sopenharmony_ci return daemonusb; 29cc290419Sopenharmony_ci } 30cc290419Sopenharmony_ci}; 31cc290419Sopenharmony_ci 32cc290419Sopenharmony_cibool FuzzDaemonUsbRead(const uint8_t *data, size_t size) 33cc290419Sopenharmony_ci{ 34cc290419Sopenharmony_ci auto daemonusb = HdcDaemonUsbFuzzer::Instance(nullptr); 35cc290419Sopenharmony_ci if (daemonusb == nullptr) { 36cc290419Sopenharmony_ci WRITE_LOG(LOG_FATAL, "FuzzDaemonUsbRead daemonusb is null"); 37cc290419Sopenharmony_ci return false; 38cc290419Sopenharmony_ci } 39cc290419Sopenharmony_ci HdcUSB hUSB = {}; 40cc290419Sopenharmony_ci hUSB.wMaxPacketSizeSend = MAX_PACKET_SIZE_HISPEED; 41cc290419Sopenharmony_ci HdcDaemonUSB::CtxUvFileCommonIo ctxRecv = {}; 42cc290419Sopenharmony_ci ctxRecv.thisClass = &daemonusb; 43cc290419Sopenharmony_ci ctxRecv.data = &hUSB; 44cc290419Sopenharmony_ci ctxRecv.bufSizeMax = Base::GetUsbffsBulkSize(); 45cc290419Sopenharmony_ci ctxRecv.buf = const_cast<uint8_t *>(data); 46cc290419Sopenharmony_ci ctxRecv.req = {}; 47cc290419Sopenharmony_ci uv_fs_t *req = &ctxRecv.req; 48cc290419Sopenharmony_ci req->result = size; 49cc290419Sopenharmony_ci req->data = &ctxRecv; 50cc290419Sopenharmony_ci daemonusb->OnUSBRead(req); 51cc290419Sopenharmony_ci return true; 52cc290419Sopenharmony_ci} 53cc290419Sopenharmony_ci} // namespace Hdc 54cc290419Sopenharmony_ci 55cc290419Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 56cc290419Sopenharmony_ci{ 57cc290419Sopenharmony_ci Hdc::FuzzDaemonUsbRead(data, size); 58cc290419Sopenharmony_ci return 0; 59cc290419Sopenharmony_ci} 60