diff --git a/src/bankd_main.c b/src/bankd_main.c index 11a26fd..e3ec23f 100644 --- a/src/bankd_main.c +++ b/src/bankd_main.c @@ -550,6 +550,8 @@ static int worker_handle_tpduModemToCard(struct bankd_worker *worker, const Rspr uint8_t rx_buf[1024]; DWORD rx_buf_len = sizeof(rx_buf); RsproPDU_t *pdu_resp; + struct client_slot clslot; + struct bank_slot bslot; long rc; LOGW(worker, "tpduModemToCard(%s)\n", osmo_hexdump_nospc(mdm2sim->data.buf, mdm2sim->data.size)); @@ -559,7 +561,19 @@ static int worker_handle_tpduModemToCard(struct bankd_worker *worker, const Rspr return -104; } - /* FIXME: Validate that toBankSlot / fromClientSlot match our expectations */ + /* Validate that toBankSlot / fromClientSlot match our expectations */ + rspro2client_slot(&clslot, &mdm2sim->fromClientSlot); + rspro2bank_slot(&bslot, &mdm2sim->toBankSlot); + if (!bank_slot_equals(&worker->slot, &bslot)) { + LOGW(worker, "Unexpected BankSlot %u:%u in tpduModemToCard\n", + bslot.bank_id, bslot.slot_nr); + return -105; + } + if (!client_slot_equals(&worker->client.clslot, &clslot)) { + LOGW(worker, "Unexpected ClientSlot %u:%u in tpduModemToCard\n", + clslot.client_id, clslot.slot_nr); + return -106; + } rc = SCardTransmit(worker->reader.pcsc.hCard, pioSendPci, mdm2sim->data.buf, mdm2sim->data.size,