Prevent Out of bounds write in rw_t3t_handle_get_sc_poll_rsp()
Test: Read T3T Tag
Bug: 120499324
Change-Id: I5f76f207d16ee744ec9be06e94034adf01727ac8
(cherry picked from commit 17b8a8126c018062f36bd492c7535e216b6660c0)
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.c
index b42bb22..2ed2461 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.c
@@ -1675,8 +1675,15 @@
{
RW_TRACE_DEBUG1 ("FeliCa Lite tag detected (system code %04X)", sc);
/* Store system code */
- p_cb->system_codes[p_cb->num_system_codes++] = sc;
-
+ if (p_cb->num_system_codes < T3T_MAX_SYSTEM_CODES)
+ {
+ p_cb->system_codes[p_cb->num_system_codes++] = sc;
+ }
+ else
+ {
+ RW_TRACE_ERROR0 ("Exceed T3T_MAX_SYSTEM_CODES!");
+ android_errorWriteLog(0x534e4554, "120499324");
+ }
/* Poll for NDEF system code */
if ((status = (tNFC_STATUS) nci_snd_t3t_polling (T3T_SYSTEM_CODE_NDEF, 0, 0)) == NCI_STATUS_OK)
{
@@ -1722,7 +1729,15 @@
if ((nci_status == NCI_STATUS_OK) && (num_responses > 0))
{
/* Tag responded for NDEF poll */
- p_cb->system_codes[p_cb->num_system_codes++] = T3T_SYSTEM_CODE_NDEF;
+ if (p_cb->num_system_codes < T3T_MAX_SYSTEM_CODES)
+ {
+ p_cb->system_codes[p_cb->num_system_codes++] = T3T_SYSTEM_CODE_NDEF;
+ }
+ else
+ {
+ RW_TRACE_ERROR0 ("Exceed T3T_MAX_SYSTEM_CODES!");
+ android_errorWriteLog(0x534e4554, "120499324");
+ }
}
rw_t3t_handle_get_system_codes_cplt ();
}
@@ -1830,7 +1845,15 @@
for (i = 0; i < num_sc; i++)
{
BE_STREAM_TO_UINT16 (sc, p);
- p_cb->system_codes[p_cb->num_system_codes++] = sc;
+ if (p_cb->num_system_codes < T3T_MAX_SYSTEM_CODES)
+ {
+ p_cb->system_codes[p_cb->num_system_codes++] = sc;
+ }
+ else
+ {
+ RW_TRACE_ERROR0 ("Exceed T3T_MAX_SYSTEM_CODES!");
+ android_errorWriteLog(0x534e4554, "120499324");
+ }
}
}
rw_t3t_handle_get_system_codes_cplt ();