From 58438bfdbcfef30141b5c37ecd69c0cb8613b613 Mon Sep 17 00:00:00 2001 From: Eric Wild Date: Tue, 28 Jul 2026 17:42:32 +0200 Subject: [PATCH] firmware: card_emu: fix 7816-3 10.3.2 0=256 case add_tpdu_byte() accumulates bytes received from the reader, but passes reader_to_card = 0, but ISO 7816-3 10.3.2 says P3 == 0 means 256 not 0 Only reachable with P3 == 0 in a receive data phase, but simtrace2-cardem-pcsc only requests PB_AND_RX when there is command data. Fix this anyway. Change-Id: I0fa4741bc1293549816595e6b4e8af9e22bcfbc1 --- firmware/libcommon/source/card_emu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firmware/libcommon/source/card_emu.c b/firmware/libcommon/source/card_emu.c index a1d44837..72da9d8a 100644 --- a/firmware/libcommon/source/card_emu.c +++ b/firmware/libcommon/source/card_emu.c @@ -745,7 +745,8 @@ static void add_tpdu_byte(struct card_handle *ch, uint8_t byte) { struct msgb *msg; struct cardemu_usb_msg_rx_data *rd; - unsigned int num_data_bytes = t0_num_data_bytes(ch->tpdu.hdr[_P3], 0); + /* these are bytes the reader sends to us, so P3 is a literal count */ + unsigned int num_data_bytes = t0_num_data_bytes(ch->tpdu.hdr[_P3], 1); /* ensure we have a buffer */ if (!ch->uart_rx_msg) {