diff options
| author | George Chang <georgekgchang@google.com> | 2019-07-09 15:46:28 +0800 |
|---|---|---|
| committer | JP Sugarbroad <jpsugar@google.com> | 2019-08-07 14:13:31 -0700 |
| commit | 70fc5e8ef8419b907bbb7abdceadcbebf9403397 (patch) | |
| tree | e2ddcb43dce04673b3b0739fe070edcc9aa44b13 | |
| parent | 6543f9bf2dfc95ce05b3a94fa0a496e9cf9bcf88 (diff) | |
| download | platform_packages_apps_Nfc-security-pi-release.tar.gz platform_packages_apps_Nfc-security-pi-release.tar.bz2 platform_packages_apps_Nfc-security-pi-release.zip | |
Prevent length underflow in NfcTag.cppandroid-9.0.0_r60android-9.0.0_r59android-9.0.0_r58android-9.0.0_r57android-9.0.0_r56android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r49security-pi-release
Bug: 124940143
Test: Read Type4B Tag
Exempt-From-Owner-Approval: Old Owners are all transferred to another BU
Change-Id: Ibdab756410bf55d701875279df3e289dbc9369d6
(cherry picked from commit c7b41a96744e1ac30920991ef1b427acbcde44db)
| -rw-r--r-- | nci/jni/NfcTag.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/nci/jni/NfcTag.cpp b/nci/jni/NfcTag.cpp index d8a42c11..7194d8c0 100644 --- a/nci/jni/NfcTag.cpp +++ b/nci/jni/NfcTag.cpp @@ -21,6 +21,7 @@ #include <android-base/stringprintf.h> #include <base/logging.h> +#include <log/log.h> #include <nativehelper/ScopedLocalRef.h> #include <nativehelper/ScopedPrimitiveArray.h> @@ -713,7 +714,14 @@ void NfcTag::fillNativeNfcTagMembers3(JNIEnv* e, jclass tag_cls, jobject tag, DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: tech B; TARGET_TYPE_ISO14443_3B", fn); len = mTechParams[i].param.pb.sensb_res_len; - len = len - 4; // subtract 4 bytes for NFCID0 at byte 2 through 5 + if (len >= NFC_NFCID0_MAX_LEN) { + // subtract 4 bytes for NFCID0 at byte 2 through 5 + len = len - NFC_NFCID0_MAX_LEN; + } else { + android_errorWriteLog(0x534e4554, "124940143"); + LOG(ERROR) << StringPrintf("%s: sensb_res_len error", fn); + len = 0; + } pollBytes.reset(e->NewByteArray(len)); e->SetByteArrayRegion(pollBytes.get(), 0, len, (jbyte*)(mTechParams[i].param.pb.sensb_res + 4)); |
