From 04c4a9e1b320c02e9b3c980c6b6102c2af75cb21 Mon Sep 17 00:00:00 2001 From: AndyCGYan Date: Sun, 11 Aug 2019 08:06:43 +0000 Subject: [PATCH] Sync up to v117 --- .../0009-Enable-debug.patch | 25 ++++ ...0-Fix-use-after-free-object-on-stack.patch | 25 ++++ .../0011-Fix-BT-in-call-on-CAF-devices.patch | 127 ++++++++++++++++++ ...-ing-to-bootloader-useless-for-us-me.patch | 44 ++++++ ...n-t-fail-on-FTP-conntracking-failing.patch | 44 ++++++ 5 files changed, 265 insertions(+) create mode 100644 patches/platform_frameworks_av/0009-Enable-debug.patch create mode 100644 patches/platform_frameworks_av/0010-Fix-use-after-free-object-on-stack.patch create mode 100644 patches/platform_frameworks_av/0011-Fix-BT-in-call-on-CAF-devices.patch create mode 100644 patches/platform_system_core/0008-Instead-of-panic-ing-to-bootloader-useless-for-us-me.patch create mode 100644 patches/platform_system_netd/0002-Don-t-fail-on-FTP-conntracking-failing.patch diff --git a/patches/platform_frameworks_av/0009-Enable-debug.patch b/patches/platform_frameworks_av/0009-Enable-debug.patch new file mode 100644 index 0000000..05ea251 --- /dev/null +++ b/patches/platform_frameworks_av/0009-Enable-debug.patch @@ -0,0 +1,25 @@ +From 7e4a00ff86ca1be573a06e2f358d4783bc15d5bc Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 5 Aug 2019 17:27:18 +0200 +Subject: [PATCH 09/11] Enable debug + +--- + .../audiopolicy/common/managerdefinitions/src/Serializer.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +index 380e2f82b..59385fb76 100644 +--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp ++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +@@ -15,7 +15,7 @@ + */ + + #define LOG_TAG "APM::Serializer" +-//#define LOG_NDEBUG 0 ++#define LOG_NDEBUG 0 + + #include "Serializer.h" + #include +-- +2.17.1 + diff --git a/patches/platform_frameworks_av/0010-Fix-use-after-free-object-on-stack.patch b/patches/platform_frameworks_av/0010-Fix-use-after-free-object-on-stack.patch new file mode 100644 index 0000000..ccc5a19 --- /dev/null +++ b/patches/platform_frameworks_av/0010-Fix-use-after-free-object-on-stack.patch @@ -0,0 +1,25 @@ +From ded09326e6e4aa9ca3c6f7a7dfbdd36b22bc4af6 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 5 Aug 2019 17:27:47 +0200 +Subject: [PATCH 10/11] Fix use-after-free (object on stack) + +--- + .../audiopolicy/common/managerdefinitions/src/Serializer.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +index 59385fb76..1c5967141 100644 +--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp ++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +@@ -326,7 +326,7 @@ status_t DevicePortTraits::deserialize(_xmlDoc *doc, const _xmlNode *root, PtrEl + ALOGW("%s: bad type %08x", __FUNCTION__, type); + return BAD_VALUE; + } +- deviceDesc = new Element(type, String8(name.c_str())); ++ deviceDesc = new Element(type, String8(strdup(name.c_str()))); + + string address = getXmlAttribute(root, Attributes::address); + if (!address.empty()) { +-- +2.17.1 + diff --git a/patches/platform_frameworks_av/0011-Fix-BT-in-call-on-CAF-devices.patch b/patches/platform_frameworks_av/0011-Fix-BT-in-call-on-CAF-devices.patch new file mode 100644 index 0000000..44af3fa --- /dev/null +++ b/patches/platform_frameworks_av/0011-Fix-BT-in-call-on-CAF-devices.patch @@ -0,0 +1,127 @@ +From 91ab9729aa4f4ca4d2a017062408795051a24059 Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 5 Aug 2019 18:09:50 +0200 +Subject: [PATCH 11/11] Fix BT in-call on CAF devices + +See https://github.com/phhusson/treble_experimentations/issues/374 + +In Qualcomm's BSP audio_policy_configuration.xml, one route is missing, +from primary output and telephony to BT SCO. + +Add it if we detect telephony and bt sco, but no such route. +--- + .../managerdefinitions/src/Serializer.cpp | 91 +++++++++++++++++++ + 1 file changed, 91 insertions(+) + +diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +index 1c5967141..024f122f8 100644 +--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp ++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp +@@ -424,6 +424,96 @@ status_t RouteTraits::deserialize(_xmlDoc */*doc*/, const _xmlNode *root, PtrEle + return NO_ERROR; + } + ++static void fixupQualcommBtScoRoute(RouteTraits::Collection& routes, DevicePortTraits::Collection& devicePorts, HwModule* ctx) { ++ // On many Qualcomm devices, there is a BT SCO Headset Mic => primary input mix ++ // But Telephony Rx => BT SCO Headset route is missing ++ // When we detect such case, add the missing route ++ ++ // If we have: ++ // ++ // ++ // ++ // And no ++ ++ // Add: ++ // ++ bool foundBtScoHeadsetDevice = false; ++ for(const auto& device: devicePorts) { ++ if(device->getTagName() == String8("BT SCO Headset")) { ++ foundBtScoHeadsetDevice = true; ++ break; ++ } ++ } ++ if(!foundBtScoHeadsetDevice) { ++ ALOGE("No BT SCO Headset device found, don't patch policy"); ++ return; ++ } ++ ++ bool foundTelephony = false; ++ bool foundBtScoInput = false; ++ bool foundScoHeadsetRoute = false; ++ for(const auto& route: routes) { ++ ALOGE("Looking at route %d\n", route->getType()); ++ if(route->getType() != AUDIO_ROUTE_MIX) ++ continue; ++ auto sink = route->getSink(); ++ ALOGE("... With sink %s\n", sink->getTagName().c_str()); ++ if(sink->getTagName() == String8("Telephony Tx")) { ++ foundTelephony = true; ++ continue; ++ } ++ if(sink->getTagName() == String8("BT SCO Headset")) { ++ foundScoHeadsetRoute = true; ++ break; ++ } ++ for(const auto& source: route->getSources()) { ++ ALOGE("... With source %s\n", source->getTagName().c_str()); ++ if(source->getTagName() == String8("BT SCO Headset Mic")) { ++ foundBtScoInput = true; ++ break; ++ } ++ } ++ } ++ //The route we want to add is already there ++ ALOGE("Done looking for existing routes"); ++ if(foundScoHeadsetRoute) ++ return; ++ ++ ALOGE("No existing route found... %d %d", foundTelephony ? 1 : 0, foundBtScoInput ? 1 : 0); ++ //We couldn't find the routes we assume are required for the function we want to add ++ if(!foundTelephony || !foundBtScoInput) ++ return; ++ ALOGE("Adding our own."); ++ ++ // Add: ++ // ++ AudioRoute *newRoute = new AudioRoute(AUDIO_ROUTE_MIX); ++ ++ auto sink = ctx->findPortByTagName(String8("BT SCO Headset")); ++ ALOGE("Got sink %p\n", sink.get()); ++ newRoute->setSink(sink); ++ ++ AudioPortVector sources; ++ for(const auto& sourceName: { ++ "primary output", ++ "deep_buffer", ++ "compressed_offload", ++ "Telephony Rx" ++ }) { ++ auto source = ctx->findPortByTagName(String8(sourceName)); ++ ALOGE("Got source %p\n", source.get()); ++ sources.add(source); ++ source->addRoute(newRoute); ++ } ++ ++ newRoute->setSources(sources); ++ ++ sink->addRoute(newRoute); ++ ++ auto ret = routes.add(newRoute); ++ ALOGE("route add returned %zd", ret); ++} ++ + const char *const ModuleTraits::childAttachedDevicesTag = "attachedDevices"; + const char *const ModuleTraits::childAttachedDeviceTag = "item"; + const char *const ModuleTraits::childDefaultOutputDeviceTag = "defaultOutputDevice"; +@@ -465,6 +555,7 @@ status_t ModuleTraits::deserialize(xmlDocPtr doc, const xmlNode *root, PtrElemen + + RouteTraits::Collection routes; + deserializeCollection(doc, root, routes, module.get()); ++ fixupQualcommBtScoRoute(routes, devicePorts, module.get()); + module->setRoutes(routes); + + const xmlNode *children = root->xmlChildrenNode; +-- +2.17.1 + diff --git a/patches/platform_system_core/0008-Instead-of-panic-ing-to-bootloader-useless-for-us-me.patch b/patches/platform_system_core/0008-Instead-of-panic-ing-to-bootloader-useless-for-us-me.patch new file mode 100644 index 0000000..b5733e7 --- /dev/null +++ b/patches/platform_system_core/0008-Instead-of-panic-ing-to-bootloader-useless-for-us-me.patch @@ -0,0 +1,44 @@ +From 5cc2638b5cf4e386e74301934982756bd485dada Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 5 Aug 2019 21:19:45 +0200 +Subject: [PATCH 8/8] Instead of panic-ing to bootloader (useless for us mere + mortals), panic to recovery + +Change-Id: If3ff381de845e579814941f89e0a6699c9f8c0e0 +--- + init/init.cpp | 2 +- + init/log.cpp | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/init/init.cpp b/init/init.cpp +index fc58eeabb..168e68042 100644 +--- a/init/init.cpp ++++ b/init/init.cpp +@@ -478,7 +478,7 @@ static void InstallRebootSignalHandlers() { + // RebootSystem uses syscall() which isn't actually async-signal-safe, but our only option + // and probably good enough given this is already an error case and only enabled for + // development builds. +- RebootSystem(ANDROID_RB_RESTART2, "bootloader"); ++ RebootSystem(ANDROID_RB_RESTART2, "recovery"); + }; + action.sa_flags = SA_RESTART; + sigaction(SIGABRT, &action, nullptr); +diff --git a/init/log.cpp b/init/log.cpp +index 6198fc25f..759b54117 100644 +--- a/init/log.cpp ++++ b/init/log.cpp +@@ -46,9 +46,9 @@ static void InitAborter(const char* abort_message) { + has_aborted = true; + // Do not queue "shutdown" trigger since we want to shutdown immediately and it's not likely + // that we can even run the ActionQueue at this point. +- DoReboot(ANDROID_RB_RESTART2, "reboot", "bootloader", false); ++ DoReboot(ANDROID_RB_RESTART2, "reboot", "recovery", false); + } else { +- RebootSystem(ANDROID_RB_RESTART2, "bootloader"); ++ RebootSystem(ANDROID_RB_RESTART2, "recovery"); + } + } + +-- +2.17.1 + diff --git a/patches/platform_system_netd/0002-Don-t-fail-on-FTP-conntracking-failing.patch b/patches/platform_system_netd/0002-Don-t-fail-on-FTP-conntracking-failing.patch new file mode 100644 index 0000000..e4c5127 --- /dev/null +++ b/patches/platform_system_netd/0002-Don-t-fail-on-FTP-conntracking-failing.patch @@ -0,0 +1,44 @@ +From b0c0422579e2d2958c59de694d4bdf0af9c4e77f Mon Sep 17 00:00:00 2001 +From: Pierre-Hugues Husson +Date: Mon, 29 Jul 2019 18:09:12 +0200 +Subject: [PATCH 2/2] Don't fail on FTP conntracking failing + +The issue has been seen on some Samsung devices. +See https://github.com/phhusson/treble_experimentations/issues/425 + +Thanks @zamrih for pin-pointing the issue and validating fix + +Change-Id: I3d9c865eb5a4b421f9983210c2ceae62b4906234 +--- + server/TetherController.cpp | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/server/TetherController.cpp b/server/TetherController.cpp +index 884b8138..0c0ad68a 100644 +--- a/server/TetherController.cpp ++++ b/server/TetherController.cpp +@@ -629,11 +629,17 @@ int TetherController::setForwardRules(bool add, const char *intIface, const char + return -1; + } + ++ std::vector v4Ftp = { ++ "*raw", ++ StringPrintf("%s %s -p tcp --dport 21 -i %s -j CT --helper ftp", ++ op, LOCAL_RAW_PREROUTING, intIface), ++ "COMMIT", ++ }; ++ if(iptablesRestoreFunction(V4, Join(v4Ftp, '\n'), nullptr) == -1) { ++ ALOGE("Failed adding iptables CT target on FTP."); ++ } ++ + std::vector v4 = { +- "*raw", +- StringPrintf("%s %s -p tcp --dport 21 -i %s -j CT --helper ftp", +- op, LOCAL_RAW_PREROUTING, intIface), +- "COMMIT", + "*filter", + StringPrintf("%s %s -i %s -o %s -m state --state ESTABLISHED,RELATED -g %s", + op, LOCAL_FORWARD, extIface, intIface, LOCAL_TETHER_COUNTERS_CHAIN), +-- +2.17.1 +