Summary
AlwaysStrong (which bundles TEESimulator-RS) breaks all StrongBox-backed apps on
devices that have a real StrongBox secure element running Android 16.
The root cause is in the bundled TEESimulator-RS, not in the PIF part, so I
filed the detailed report upstream:
➡️ Enginex0/TEESimulator-RS#49
Short description
On a device with a real StrongBox (NXP JavaCard), TEESimulator forwards the
StrongBox createOperation to the HAL, the operation finish completes
successfully on hardware, but the per-UID StrongBox operation counter is never
released. It accumulates to hw=4 / max=4 and then rejects everything with
StrongBox op limit reached → the app gets KeyStoreException -29 TOO_MANY_OPERATIONS. This happens globally, even for apps NOT in
target.txt, so excluding an app from the GUI does not help.
Result: apps work on first launch (fresh data) and fail on second launch when
they must decrypt their keychain.
Environment
- AlwaysStrong 1.0.3 (also reproduced with standalone TEESimulator-RS v6.0.1-307 + separate PIF)
- POCO F8 Ultra (myron) and POCO F8 Pro (annibale) — xiaomi.eu HyperOS 3, Android 16
Summary
AlwaysStrong (which bundles TEESimulator-RS) breaks all StrongBox-backed apps on
devices that have a real StrongBox secure element running Android 16.
The root cause is in the bundled TEESimulator-RS, not in the PIF part, so I
filed the detailed report upstream:
➡️ Enginex0/TEESimulator-RS#49
Short description
On a device with a real StrongBox (NXP JavaCard), TEESimulator forwards the
StrongBox
createOperationto the HAL, the operationfinishcompletessuccessfully on hardware, but the per-UID StrongBox operation counter is never
released. It accumulates to
hw=4 / max=4and then rejects everything withStrongBox op limit reached→ the app getsKeyStoreException -29 TOO_MANY_OPERATIONS. This happens globally, even for apps NOT intarget.txt, so excluding an app from the GUI does not help.Result: apps work on first launch (fresh data) and fail on second launch when
they must decrypt their keychain.
Environment