1*ec779b8eSAndroid Build Coastguard Worker# Fuzzer for libresourcemanagerservice 2*ec779b8eSAndroid Build Coastguard Worker 3*ec779b8eSAndroid Build Coastguard Worker## Plugin Design Considerations 4*ec779b8eSAndroid Build Coastguard WorkerThe fuzzer plugin for libresourcemanagerservice is designed based on the 5*ec779b8eSAndroid Build Coastguard Workerunderstanding of the service and tries to achieve the following: 6*ec779b8eSAndroid Build Coastguard Worker 7*ec779b8eSAndroid Build Coastguard Worker##### Maximize code coverage 8*ec779b8eSAndroid Build Coastguard WorkerThe configuration parameters are not hardcoded, but instead selected based on 9*ec779b8eSAndroid Build Coastguard Workerincoming data. This ensures more code paths are reached by the fuzzer. 10*ec779b8eSAndroid Build Coastguard Worker 11*ec779b8eSAndroid Build Coastguard WorkerMedia Resource Manager supports the following parameters: 12*ec779b8eSAndroid Build Coastguard Worker1. Media Resource Type (parameter name: `mediaResourceType`) 13*ec779b8eSAndroid Build Coastguard Worker2. Media Resource SubType (parameter name: `mediaResourceSubType`) 14*ec779b8eSAndroid Build Coastguard Worker 15*ec779b8eSAndroid Build Coastguard Worker| Parameter| Valid Values| Configured Value| 16*ec779b8eSAndroid Build Coastguard Worker|------------- |-------------| ----- | 17*ec779b8eSAndroid Build Coastguard Worker| `mediaResourceType` | 0.`MediaResource::kSecureCodec` 1.`MediaResource::kNonSecureCodecC` 2.`MediaResource::kGraphicMemory` 3.`MediaResource::kCpuBoost` 4.`MediaResource::kBattery` 5.`MediaResource::kDrmSession`| Value obtained from FuzzedDataProvider | 18*ec779b8eSAndroid Build Coastguard Worker| `mediaResourceSubType` | 0.`MediaResource::kAudioCodec` 1.`MediaResource::kVideoCodec` 2.`MediaResource::kUnspecifiedSubType` | Value obtained from FuzzedDataProvider | 19*ec779b8eSAndroid Build Coastguard Worker 20*ec779b8eSAndroid Build Coastguard WorkerThis also ensures that the plugin is always deterministic for any given input. 21*ec779b8eSAndroid Build Coastguard Worker 22*ec779b8eSAndroid Build Coastguard Worker## Build 23*ec779b8eSAndroid Build Coastguard Worker 24*ec779b8eSAndroid Build Coastguard WorkerThis describes steps to build mediaresourcemanager_fuzzer binary. 25*ec779b8eSAndroid Build Coastguard Worker 26*ec779b8eSAndroid Build Coastguard Worker### Android 27*ec779b8eSAndroid Build Coastguard Worker 28*ec779b8eSAndroid Build Coastguard Worker#### Steps to build 29*ec779b8eSAndroid Build Coastguard WorkerBuild the fuzzer 30*ec779b8eSAndroid Build Coastguard Worker``` 31*ec779b8eSAndroid Build Coastguard Worker $ mm -j$(nproc) mediaresourcemanager_fuzzer 32*ec779b8eSAndroid Build Coastguard Worker``` 33*ec779b8eSAndroid Build Coastguard Worker 34*ec779b8eSAndroid Build Coastguard Worker#### Steps to run 35*ec779b8eSAndroid Build Coastguard WorkerCreate a directory CORPUS_DIR and copy some files to that folder 36*ec779b8eSAndroid Build Coastguard WorkerPush this directory to device. 37*ec779b8eSAndroid Build Coastguard Worker 38*ec779b8eSAndroid Build Coastguard WorkerTo run on device 39*ec779b8eSAndroid Build Coastguard Worker``` 40*ec779b8eSAndroid Build Coastguard Worker $ adb sync data 41*ec779b8eSAndroid Build Coastguard Worker $ adb shell /data/fuzz/arm64/mediaresourcemanager_fuzzer/mediaresourcemanager_fuzzer CORPUS_DIR 42*ec779b8eSAndroid Build Coastguard Worker``` 43*ec779b8eSAndroid Build Coastguard Worker 44*ec779b8eSAndroid Build Coastguard Worker## References: 45*ec779b8eSAndroid Build Coastguard Worker * http://llvm.org/docs/LibFuzzer.html 46*ec779b8eSAndroid Build Coastguard Worker * https://github.com/google/oss-fuzz 47