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