From 14e4cfae36aa878c6a9838299bc7b9aa42a16dfa Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Thu, 3 Jun 2021 21:40:45 +0000 Subject: libbinder: +2 bytes in BBinder from stability rep sizeof(BBinder) may not be changed unless 1,000s of people in many different companies fundamentally change the way they work. So, with precious few bits to spare, we make room by changing the way that binder stability reserves space on the wire. Now, it uses the least significant 16-bits of the 32-bits which is reserved on the wire. The sideeffect of this straightforward implementation is that the wire protocol is slightly changed. This is an intentional change in order to exercise its instability, perhaps as an early warning. Bug: 166282674 Test: boot, binderLibTest Change-Id: I654fcd2cc9d20cbac557d1a176a5095c491d88cf --- libs/binder/Parcel.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'libs/binder/Parcel.cpp') diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index d19b4d83fb..10188fee6e 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -173,8 +173,8 @@ static void release_object(const sp& proc, status_t Parcel::finishFlattenBinder(const sp& binder) { internal::Stability::tryMarkCompilationUnit(binder.get()); - auto category = internal::Stability::getCategory(binder.get()); - return writeInt32(category.repr()); + int16_t rep = internal::Stability::getCategory(binder.get()).repr(); + return writeInt32(rep); } status_t Parcel::finishUnflattenBinder( @@ -184,7 +184,8 @@ status_t Parcel::finishUnflattenBinder( status_t status = readInt32(&stability); if (status != OK) return status; - status = internal::Stability::setRepr(binder.get(), stability, true /*log*/); + status = internal::Stability::setRepr(binder.get(), static_cast(stability), + true /*log*/); if (status != OK) return status; *out = binder; -- cgit v1.2.3-59-g8ed1b