• 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 
16 #include <iostream>
17 #include <cstddef>
18 #include <cstdint>
19 #include <cstring>
20 #include "audio_server.h"
21 #include "../fuzz_utils.h"
22 
23 namespace OHOS {
24 namespace AudioStandard {
25 using namespace std;
26 
27 FuzzUtils &g_fuzzUtils = FuzzUtils::GetInstance();
28 const size_t FUZZ_INPUT_SIZE_THRESHOLD = 10;
29 const int32_t SYSTEM_ABILITY_ID = 3001;
30 const bool RUN_ON_CREATE = false;
31 
32 typedef void (*TestFuncs)();
33 
34 vector<IStandardAudioServiceIpcCode> IStandardAudioServiceIpcCodeVec = {
35     IStandardAudioServiceIpcCode::COMMAND_GET_AUDIO_PARAMETER,
36     IStandardAudioServiceIpcCode::COMMAND_SET_AUDIO_PARAMETER,
37     IStandardAudioServiceIpcCode::COMMAND_GET_EXTRA_PARAMETERS,
38     IStandardAudioServiceIpcCode::COMMAND_SET_EXTRA_PARAMETERS,
39     IStandardAudioServiceIpcCode::COMMAND_SET_MICROPHONE_MUTE,
40     IStandardAudioServiceIpcCode::COMMAND_SET_AUDIO_SCENE,
41     IStandardAudioServiceIpcCode::COMMAND_UPDATE_ACTIVE_DEVICE_ROUTE,
42     IStandardAudioServiceIpcCode::COMMAND_UPDATE_ACTIVE_DEVICES_ROUTE,
43     IStandardAudioServiceIpcCode::COMMAND_UPDATE_DUAL_TONE_STATE,
44     IStandardAudioServiceIpcCode::COMMAND_GET_TRANSACTION_ID,
45     IStandardAudioServiceIpcCode::COMMAND_SET_PARAMETER_CALLBACK,
46     IStandardAudioServiceIpcCode::COMMAND_GET_AUDIO_PARAMETER_IN_STRING_IN_INT_IN_STRING_OUT_STRING,
47     IStandardAudioServiceIpcCode::COMMAND_SET_AUDIO_PARAMETER_IN_STRING_IN_INT_IN_STRING_IN_STRING,
48     IStandardAudioServiceIpcCode::COMMAND_NOTIFY_DEVICE_INFO,
49     IStandardAudioServiceIpcCode::COMMAND_CHECK_REMOTE_DEVICE_STATE,
50     IStandardAudioServiceIpcCode::COMMAND_SET_VOICE_VOLUME,
51     IStandardAudioServiceIpcCode::COMMAND_SET_AUDIO_MONO_STATE,
52     IStandardAudioServiceIpcCode::COMMAND_SET_AUDIO_BALANCE_VALUE,
53     IStandardAudioServiceIpcCode::COMMAND_CREATE_AUDIO_PROCESS,
54     IStandardAudioServiceIpcCode::COMMAND_LOAD_AUDIO_EFFECT_LIBRARIES,
55     IStandardAudioServiceIpcCode::COMMAND_CREATE_EFFECT_CHAIN_MANAGER,
56     IStandardAudioServiceIpcCode::COMMAND_SET_OUTPUT_DEVICE_SINK,
57     IStandardAudioServiceIpcCode::COMMAND_SET_ACTIVE_OUTPUT_DEVICE,
58     IStandardAudioServiceIpcCode::COMMAND_CREATE_PLAYBACK_CAPTURER_MANAGER,
59     IStandardAudioServiceIpcCode::COMMAND_REGIEST_POLICY_PROVIDER,
60     IStandardAudioServiceIpcCode::COMMAND_REGIST_CORE_SERVICE_PROVIDER,
61     IStandardAudioServiceIpcCode::COMMAND_SET_WAKEUP_SOURCE_CALLBACK,
62     IStandardAudioServiceIpcCode::COMMAND_UPDATE_SPATIALIZATION_STATE,
63     IStandardAudioServiceIpcCode::COMMAND_UPDATE_SPATIAL_DEVICE_TYPE,
64     IStandardAudioServiceIpcCode::COMMAND_OFFLOAD_SET_VOLUME,
65     IStandardAudioServiceIpcCode::COMMAND_NOTIFY_STREAM_VOLUME_CHANGED,
66     IStandardAudioServiceIpcCode::COMMAND_SET_SPATIALIZATION_SCENE_TYPE,
67     IStandardAudioServiceIpcCode::COMMAND_GET_MAX_AMPLITUDE,
68     IStandardAudioServiceIpcCode::COMMAND_RESET_AUDIO_ENDPOINT,
69     IStandardAudioServiceIpcCode::COMMAND_RESET_ROUTE_FOR_DISCONNECT,
70     IStandardAudioServiceIpcCode::COMMAND_GET_EFFECT_LATENCY,
71     IStandardAudioServiceIpcCode::COMMAND_UPDATE_LATENCY_TIMESTAMP,
72     IStandardAudioServiceIpcCode::COMMAND_SET_ASR_AEC_MODE,
73     IStandardAudioServiceIpcCode::COMMAND_GET_ASR_AEC_MODE,
74     IStandardAudioServiceIpcCode::COMMAND_SET_ASR_NOISE_SUPPRESSION_MODE,
75     IStandardAudioServiceIpcCode::COMMAND_SET_OFFLOAD_MODE,
76     IStandardAudioServiceIpcCode::COMMAND_UNSET_OFFLOAD_MODE,
77     IStandardAudioServiceIpcCode::COMMAND_CHECK_HIBERNATE_STATE,
78     IStandardAudioServiceIpcCode::COMMAND_GET_ASR_NOISE_SUPPRESSION_MODE,
79     IStandardAudioServiceIpcCode::COMMAND_SET_ASR_WHISPER_DETECTION_MODE,
80     IStandardAudioServiceIpcCode::COMMAND_GET_ASR_WHISPER_DETECTION_MODE,
81     IStandardAudioServiceIpcCode::COMMAND_SET_ASR_VOICE_CONTROL_MODE,
82     IStandardAudioServiceIpcCode::COMMAND_SET_ASR_VOICE_MUTE_MODE,
83     IStandardAudioServiceIpcCode::COMMAND_IS_WHISPERING,
84     IStandardAudioServiceIpcCode::COMMAND_GET_EFFECT_OFFLOAD_ENABLED,
85     IStandardAudioServiceIpcCode::COMMAND_GET_AUDIO_EFFECT_PROPERTY,
86     IStandardAudioServiceIpcCode::COMMAND_SET_AUDIO_EFFECT_PROPERTY,
87     IStandardAudioServiceIpcCode::COMMAND_GET_AUDIO_ENHANCE_PROPERTY,
88     IStandardAudioServiceIpcCode::COMMAND_GET_AUDIO_EFFECT_PROPERTY_OUT_AUDIOEFFECTPROPERTYARRAY,
89     IStandardAudioServiceIpcCode::COMMAND_SET_AUDIO_ENHANCE_PROPERTY,
90     IStandardAudioServiceIpcCode::COMMAND_SET_AUDIO_EFFECT_PROPERTY_IN_AUDIOEFFECTPROPERTYARRAY,
91     IStandardAudioServiceIpcCode::COMMAND_SUSPEND_RENDER_SINK,
92     IStandardAudioServiceIpcCode::COMMAND_RESTORE_RENDER_SINK,
93     IStandardAudioServiceIpcCode::COMMAND_LOAD_HDI_EFFECT_MODEL,
94     IStandardAudioServiceIpcCode::COMMAND_UPDATE_EFFECT_BT_OFFLOAD_SUPPORTED,
95     IStandardAudioServiceIpcCode::COMMAND_SET_SINK_MUTE_FOR_SWITCH_DEVICE,
96     IStandardAudioServiceIpcCode::COMMAND_SET_ROTATION_TO_EFFECT,
97     IStandardAudioServiceIpcCode::COMMAND_UPDATE_SESSION_CONNECTION_STATE,
98     IStandardAudioServiceIpcCode::COMMAND_SET_NON_INTERRUPT_MUTE,
99     IStandardAudioServiceIpcCode::COMMAND_RESTORE_SESSION,
100     IStandardAudioServiceIpcCode::COMMAND_CREATE_IPC_OFFLINE_STREAM,
101     IStandardAudioServiceIpcCode::COMMAND_GET_OFFLINE_AUDIO_EFFECT_CHAINS,
102     IStandardAudioServiceIpcCode::COMMAND_GET_STANDBY_STATUS,
103     IStandardAudioServiceIpcCode::COMMAND_GENERATE_SESSION_ID,
104     IStandardAudioServiceIpcCode::COMMAND_GET_ALL_SINK_INPUTS,
105     IStandardAudioServiceIpcCode::COMMAND_SET_DEFAULT_ADAPTER_ENABLE,
106     IStandardAudioServiceIpcCode::COMMAND_NOTIFY_ACCOUNTS_CHANGED,
107     IStandardAudioServiceIpcCode::COMMAND_NOTIFY_AUDIO_POLICY_READY,
108     IStandardAudioServiceIpcCode::COMMAND_SET_INNER_CAP_LIMIT,
109     IStandardAudioServiceIpcCode::COMMAND_LOAD_HDI_ADAPTER,
110     IStandardAudioServiceIpcCode::COMMAND_UNLOAD_HDI_ADAPTER,
111     IStandardAudioServiceIpcCode::COMMAND_CHECK_CAPTURE_LIMIT,
112     IStandardAudioServiceIpcCode::COMMAND_RELEASE_CAPTURE_LIMIT,
113     IStandardAudioServiceIpcCode::COMMAND_CREATE_HDI_SINK_PORT,
114     IStandardAudioServiceIpcCode::COMMAND_CREATE_SINK_PORT,
115     IStandardAudioServiceIpcCode::COMMAND_CREATE_HDI_SOURCE_PORT,
116     IStandardAudioServiceIpcCode::COMMAND_CREATE_SOURCE_PORT,
117     IStandardAudioServiceIpcCode::COMMAND_DESTROY_HDI_PORT,
118     IStandardAudioServiceIpcCode::COMMAND_SET_DEVICE_CONNECTED_FLAG,
119     IStandardAudioServiceIpcCode::COMMAND_SET_DM_DEVICE_TYPE,
120     IStandardAudioServiceIpcCode::COMMAND_REGISTER_DATA_TRANSFER_MONITOR_PARAM,
121     IStandardAudioServiceIpcCode::COMMAND_UNREGISTER_DATA_TRANSFER_MONITOR_PARAM,
122     IStandardAudioServiceIpcCode::COMMAND_REGISTER_DATA_TRANSFER_CALLBACK,
123     IStandardAudioServiceIpcCode::COMMAND_NOTIFY_SETTINGS_DATA_READY,
124     IStandardAudioServiceIpcCode::COMMAND_IS_ACOUSTIC_ECHO_CANCELER_SUPPORTED,
125     IStandardAudioServiceIpcCode::COMMAND_SET_SESSION_MUTE_STATE,
126     IStandardAudioServiceIpcCode::COMMAND_SET_LATEST_MUTE_STATE,
127     IStandardAudioServiceIpcCode::COMMAND_FORCE_STOP_AUDIO_STREAM,
128     IStandardAudioServiceIpcCode::COMMAND_CREATE_AUDIO_WORKGROUP,
129     IStandardAudioServiceIpcCode::COMMAND_RELEASE_AUDIO_WORKGROUP,
130     IStandardAudioServiceIpcCode::COMMAND_ADD_THREAD_TO_GROUP,
131     IStandardAudioServiceIpcCode::COMMAND_REMOVE_THREAD_FROM_GROUP,
132     IStandardAudioServiceIpcCode::COMMAND_START_GROUP,
133     IStandardAudioServiceIpcCode::COMMAND_STOP_GROUP,
134     IStandardAudioServiceIpcCode::COMMAND_SET_BT_HDI_INVALID_STATE,
135     IStandardAudioServiceIpcCode::COMMAND_SET_KARAOKE_PARAMETERS,
136     IStandardAudioServiceIpcCode::COMMAND_IS_AUDIO_LOOPBACK_SUPPORTED,
137     IStandardAudioServiceIpcCode::COMMAND_IMPROVE_AUDIO_WORKGROUP_PRIO,
138     IStandardAudioServiceIpcCode::COMMAND_RESTORE_AUDIO_WORKGROUP_PRIO,
139     IStandardAudioServiceIpcCode::COMMAND_SET_RENDER_WHITELIST,
140     IStandardAudioServiceIpcCode::COMMAND_SET_FOREGROUND_LIST,
141     IStandardAudioServiceIpcCode::COMMAND_GET_VOLUME_DATA_COUNT,
142 };
143 
OnRemoteRequestFuzzTest()144 void OnRemoteRequestFuzzTest()
145 {
146     std::shared_ptr<AudioServer> audioServer = std::make_shared<AudioServer>(SYSTEM_ABILITY_ID, RUN_ON_CREATE);
147     if (audioServer == nullptr) {
148         return;
149     }
150     MessageParcel data;
151     data.WriteInterfaceToken(StandardAudioServiceStub::GetDescriptor());
152     MessageParcel reply;
153     MessageOption option;
154     audioServer->SetAsrNoiseSuppressionMode(0);
155     if (!IStandardAudioServiceIpcCodeVec.empty()) {
156         for (size_t i = 0; i < IStandardAudioServiceIpcCodeVec.size(); i++) {
157             IStandardAudioServiceIpcCode audioServerInterfaceCode = IStandardAudioServiceIpcCodeVec[i];
158             uint32_t code = static_cast<uint32_t>(audioServerInterfaceCode);
159             audioServer->OnRemoteRequest(code, data, reply, option);
160         }
161     }
162 }
163 
164 vector<TestFuncs> g_testFuncs = {
165     OnRemoteRequestFuzzTest
166 };
167 
168 } // namespace AudioStandard
169 } // namesapce OHOS
170 
171 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)172 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
173 {
174     if (size < OHOS::AudioStandard::FUZZ_INPUT_SIZE_THRESHOLD) {
175         return 0;
176     }
177 
178     OHOS::AudioStandard::g_fuzzUtils.fuzzTest(data, size, OHOS::AudioStandard::g_testFuncs);
179     return 0;
180 }
181