From 113f3a4a1d9171db7456aa9ae8b0a2b50545c326 Mon Sep 17 00:00:00 2001 From: chloedai Date: Tue, 11 Jan 2022 04:11:19 +0000 Subject: [PATCH] Add tag availability checking mechanism Set a cookie to the tag objects when they are constructed, the cookie could be used to check the availability before returning the tag service Bug: 199291025 Test: test with some reader apps, test pass Merged-In: Iabaab1f6d2d22e15966d31dd79099369d828f4c6 Change-Id: Iabaab1f6d2d22e15966d31dd79099369d828f4c6 --- core/java/android/nfc/INfcTag.aidl | 3 +++ core/java/android/nfc/Tag.java | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/core/java/android/nfc/INfcTag.aidl b/core/java/android/nfc/INfcTag.aidl index 539fd4adb0a06..e1ccc4fb740be 100644 --- a/core/java/android/nfc/INfcTag.aidl +++ b/core/java/android/nfc/INfcTag.aidl @@ -45,4 +45,7 @@ interface INfcTag boolean canMakeReadOnly(int ndefType); int getMaxTransceiveLength(int technology); boolean getExtendedLengthApdusSupported(); + + void setTagUpToDate(long cookie); + boolean isTagUpToDate(long cookie); } diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java index 398ec63a931b1..0ce9c70569b54 100644 --- a/core/java/android/nfc/Tag.java +++ b/core/java/android/nfc/Tag.java @@ -34,6 +34,7 @@ import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteException; +import android.os.SystemClock; import java.io.IOException; import java.util.Arrays; @@ -121,6 +122,7 @@ public final class Tag implements Parcelable { final INfcTag mTagService; // interface to NFC service, will be null if mock tag int mConnectedTechnology; + long mCookie; /** * Hidden constructor to be used by NFC service and internal classes. @@ -140,6 +142,13 @@ public final class Tag implements Parcelable { mTagService = tagService; mConnectedTechnology = -1; + + try { + mCookie = SystemClock.elapsedRealtime(); + tagService.setTagUpToDate(mCookie); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } } /** @@ -361,6 +370,18 @@ public final class Tag implements Parcelable { /** @hide */ @UnsupportedAppUsage public INfcTag getTagService() { + try { + if (!mTagService.isTagUpToDate(mCookie)) { + String id_str = ""; + for (int i = 0; i < mId.length; i++) { + id_str = id_str + String.format("%02X ", mId[i]); + } + String msg = "Permission Denial: Tag ( ID: " + id_str + ") is out of date"; + throw new SecurityException(msg); + } + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } return mTagService; }