Fix issue #27252896: Security Vulnerability -- weak binder

Sending transaction to freed BBinder through weak handle
can cause use of a (mostly) freed object.  We need to try to
safely promote to a strong reference first.

Change-Id: Ic9c6940fa824980472e94ed2dfeca52a6b0fd342
(cherry picked from commit c11146106f94e07016e8e26e4f8628f9a0c73199)

static const void* printBinderTransactionData(TextOutput& out, const void* data)
{
 const binder_transaction_data* btd =
 (const binder_transaction_data*)data;
 if (btd->target.handle < 1024) {
 /* want to print descriptors in decimal; guess based on value */
        out << "target.desc=" << btd->target.handle;
 } else {
        out << "target.ptr=" << btd->target.ptr;
 }
    out << " (cookie " << btd->cookie << ")" << endl
 << "code=" << TypeCode(btd->code) << ", flags=" << (void*)(long)btd->flags << endl
 << "data=" << btd->data.ptr.buffer << " (" << (void*)btd->data_size
 << " bytes)" << endl
 << "offsets=" << btd->data.ptr.offsets << " (" << (void*)btd->offsets_size
 << " bytes)";
 return btd+1;
}

static const void* printBinderTransactionData(TextOutput& out, const void* data)
{
 const binder_transaction_data* btd =
 (const binder_transaction_data*)data;
 if (btd->target.handle < 1024) {
 /* want to print descriptors in decimal; guess based on value */
        out << "target.desc=" << btd->target.handle;
 } else {
        out << "target.ptr=" << btd->target.ptr;
 }
    out << " (cookie " << btd->cookie << ")" << endl
 << "code=" << TypeCode(btd->code) << ", flags=" << (void*)(long)btd->flags << endl
 << "data=" << btd->data.ptr.buffer << " (" << (void*)btd->data_size
 << " bytes)" << endl
 << "offsets=" << btd->data.ptr.offsets << " (" << (void*)btd->offsets_size
 << " bytes)";
 return btd+1;
}
