bankd: Verify bankd/client slot in tpduModemToCard rx handler

Change-Id: I58fce1392f418b36f5f61f224e03a9dbbe34f01f
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 @@
 	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 @@
 		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,