libbinder: only set sm stability if non-null
These mark*Stability functions actually abort for the nullptr case, but
when SM crashes, we'll get a null proxy here, and aborts everywhere
(instead of waiting in other processes).
Bug: one flake in binder_parcel_fuzzer weeks ago and more recently,
discovered in some failure logs from kaleshsingh@
Test: manual (with crash in flattenBinder in SM)
Change-Id: I89787127d836d18d343161881dff6b156c2dc482
diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp
index 6f26450..b5e4dfe 100644
--- a/libs/binder/ProcessState.cpp
+++ b/libs/binder/ProcessState.cpp
@@ -124,14 +124,14 @@
{
sp<IBinder> context = getStrongProxyForHandle(0);
- if (context == nullptr) {
- ALOGW("Not able to get context object on %s.", mDriverName.c_str());
+ if (context) {
+ // The root object is special since we get it directly from the driver, it is never
+ // written by Parcell::writeStrongBinder.
+ internal::Stability::markCompilationUnit(context.get());
+ } else {
+ ALOGW("Not able to get context object on %s.", mDriverName.c_str());
}
- // The root object is special since we get it directly from the driver, it is never
- // written by Parcell::writeStrongBinder.
- internal::Stability::markCompilationUnit(context.get());
-
return context;
}