diff options
-rw-r--r-- | Android.bp | 1 | ||||
-rw-r--r-- | minadbd/Android.bp | 2 | ||||
-rw-r--r-- | recovery_ui/Android.bp | 3 | ||||
-rw-r--r-- | recovery_ui/default_ethernet_device.cpp | 23 | ||||
-rw-r--r-- | recovery_ui/ethernet_device.cpp | 21 | ||||
-rw-r--r-- | recovery_ui/include/recovery_ui/ethernet_device.h | 42 | ||||
-rw-r--r-- | tests/Android.bp | 20 | ||||
-rw-r--r-- | tests/AndroidTest.xml | 28 | ||||
-rw-r--r-- | tests/fuzz/verify_package_fuzzer.cpp | 37 |
9 files changed, 154 insertions, 23 deletions
diff --git a/Android.bp b/Android.bp index 5dfbdbff3..bd2d0b0b2 100644 --- a/Android.bp +++ b/Android.bp @@ -78,7 +78,6 @@ cc_defaults { "libminui", "librecovery_utils", "libotautil", - "libsnapshot_cow", "libsnapshot_nobinder", "update_metadata-protos", ], diff --git a/minadbd/Android.bp b/minadbd/Android.bp index b6ca59efa..fb51a799a 100644 --- a/minadbd/Android.bp +++ b/minadbd/Android.bp @@ -24,7 +24,7 @@ cc_defaults { cpp_std: "experimental", include_dirs: [ - "system/core/adb", + "packages/modules/adb", ], header_libs: [ diff --git a/recovery_ui/Android.bp b/recovery_ui/Android.bp index 9dfee5fd5..c9616ec15 100644 --- a/recovery_ui/Android.bp +++ b/recovery_ui/Android.bp @@ -22,6 +22,7 @@ cc_library { srcs: [ "device.cpp", + "ethernet_device.cpp", "ethernet_ui.cpp", "screen_ui.cpp", "stub_ui.cpp", @@ -102,7 +103,7 @@ cc_library_static { ], srcs: [ - "ethernet_device.cpp", + "default_ethernet_device.cpp", ], shared_libs: [ diff --git a/recovery_ui/default_ethernet_device.cpp b/recovery_ui/default_ethernet_device.cpp new file mode 100644 index 000000000..1fdff0d86 --- /dev/null +++ b/recovery_ui/default_ethernet_device.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "recovery_ui/device.h" +#include "recovery_ui/ethernet_device.h" +#include "recovery_ui/ethernet_ui.h" + +Device* make_device() { + return new EthernetDevice(new EthernetRecoveryUI); +} diff --git a/recovery_ui/ethernet_device.cpp b/recovery_ui/ethernet_device.cpp index 39ec65dc4..d79f41dec 100644 --- a/recovery_ui/ethernet_device.cpp +++ b/recovery_ui/ethernet_device.cpp @@ -27,23 +27,9 @@ #include <sys/types.h> #include "recovery_ui/device.h" +#include "recovery_ui/ethernet_device.h" #include "recovery_ui/ethernet_ui.h" -class EthernetDevice : public Device { - public: - explicit EthernetDevice(EthernetRecoveryUI* ui); - - void PreRecovery() override; - void PreFastboot() override; - - private: - int SetInterfaceFlags(const unsigned set, const unsigned clr); - void SetTitleIPv6LinkLocalAddress(const bool interface_up); - - android::base::unique_fd ctl_sock_; - static const std::string interface; -}; - const std::string EthernetDevice::interface = "eth0"; EthernetDevice::EthernetDevice(EthernetRecoveryUI* ui) @@ -129,8 +115,3 @@ void EthernetDevice::SetTitleIPv6LinkLocalAddress(const bool interface_up) { recovery_ui->SetIPv6LinkLocalAddress(); } - -// ----------------------------------------------------------------------------------------- -Device* make_device() { - return new EthernetDevice(new EthernetRecoveryUI); -} diff --git a/recovery_ui/include/recovery_ui/ethernet_device.h b/recovery_ui/include/recovery_ui/ethernet_device.h new file mode 100644 index 000000000..ea710ab93 --- /dev/null +++ b/recovery_ui/include/recovery_ui/ethernet_device.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ETHERNET_RECOVERY_DEVICE_H +#define _ETHERNET_RECOVERY_DEVICE_H + +#include "device.h" + +#include <android-base/unique_fd.h> + +// Forward declaration to avoid including "ethernet_ui.h". +class EthernetRecoveryUI; + +class EthernetDevice : public Device { + public: + explicit EthernetDevice(EthernetRecoveryUI* ui); + + void PreRecovery() override; + void PreFastboot() override; + + private: + int SetInterfaceFlags(const unsigned set, const unsigned clr); + void SetTitleIPv6LinkLocalAddress(const bool interface_up); + + android::base::unique_fd ctl_sock_; + static const std::string interface; +}; + +#endif // _ETHERNET_RECOVERY_DEVICE_H diff --git a/tests/Android.bp b/tests/Android.bp index a9a088a32..19f2a6c64 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -201,3 +201,23 @@ cc_test_host { }, }, } + +cc_fuzz { + name: "libinstall_verify_package_fuzzer", + defaults: [ + "recovery_test_defaults", + ], + + srcs: ["fuzz/verify_package_fuzzer.cpp"], + + corpus: [ + "testdata/otasigned*.zip", + ], + + static_libs: [ + "libotautil", + "libinstall", + "librecovery_ui", + "libminui", + ], +} diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml new file mode 100644 index 000000000..0ac75e4ea --- /dev/null +++ b/tests/AndroidTest.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2020 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration description="Runs recovery_host_test."> + <option name="null-device" value="true" /> + + <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"> + <option name="force-root" value="false" /> + </target_preparer> + <option name="not-shardable" value="true" /> + + <test class="com.android.tradefed.testtype.HostGTest" > + <option name="module-name" value="recovery_host_test" /> + <option name="native-test-timeout" value="5m"/> + </test> +</configuration> diff --git a/tests/fuzz/verify_package_fuzzer.cpp b/tests/fuzz/verify_package_fuzzer.cpp new file mode 100644 index 000000000..baa44e070 --- /dev/null +++ b/tests/fuzz/verify_package_fuzzer.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "fuzzer/FuzzedDataProvider.h" + +#include "install/install.h" +#include "install/package.h" +#include "recovery_ui/stub_ui.h" + +std::unique_ptr<Package> CreatePackage(std::vector<uint8_t>& content) { + return Package::CreateMemoryPackage(content, [](float) -> void {}); +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + FuzzedDataProvider data_provider(data, size); + auto package_contents = data_provider.ConsumeRemainingBytes<uint8_t>(); + if (package_contents.size() == 0) { + return 0; + } + auto package = CreatePackage(package_contents); + StubRecoveryUI ui; + verify_package(package.get(), &ui); + return 0; +} |