You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.2 KiB
63 lines
2.2 KiB
6 years ago
|
From 645f678af24fc1e0f1559e0384f57f8fd35836b4 Mon Sep 17 00:00:00 2001
|
||
|
From: Jakub Jelen <jjelen@redhat.com>
|
||
|
Date: Fri, 21 Jul 2017 11:30:47 +0200
|
||
|
Subject: [PATCH 1/4] cac: Make the retransmitted APDU valid by restoring the
|
||
|
resplen
|
||
|
|
||
|
---
|
||
|
src/libopensc/card-cac.c | 1 +
|
||
|
1 file changed, 1 insertion(+)
|
||
|
|
||
|
diff --git a/src/libopensc/card-cac.c b/src/libopensc/card-cac.c
|
||
|
index ed15ba0a8..47f9aaf0c 100644
|
||
|
--- a/src/libopensc/card-cac.c
|
||
|
+++ b/src/libopensc/card-cac.c
|
||
|
@@ -1106,6 +1106,7 @@ static int cac_select_file_by_type(sc_card_t *card, const sc_path_t *in_path, sc
|
||
|
r = sc_check_sw(card, apdu.sw1, apdu.sw2);
|
||
|
if (apdu.sw1 == 0x6A && apdu.sw2 == 0x86) {
|
||
|
apdu.p2 = 0x00;
|
||
|
+ apdu.resplen = sizeof(buf);
|
||
|
if (sc_transmit_apdu(card, &apdu) == SC_SUCCESS)
|
||
|
r = sc_check_sw(card, apdu.sw1, apdu.sw2);
|
||
|
}
|
||
|
|
||
|
From a57407a5257b24edf313a4839c523a19cd8b0dc5 Mon Sep 17 00:00:00 2001
|
||
|
From: Jakub Jelen <jjelen@redhat.com>
|
||
|
Date: Fri, 21 Jul 2017 13:09:14 +0200
|
||
|
Subject: [PATCH 2/4] cac: Check SWs for all the APDUs and report the errors to
|
||
|
underlying layers
|
||
|
|
||
|
---
|
||
|
src/libopensc/card-cac.c | 4 +---
|
||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/src/libopensc/card-cac.c b/src/libopensc/card-cac.c
|
||
|
index 47f9aaf0c..f3b64a33d 100644
|
||
|
--- a/src/libopensc/card-cac.c
|
||
|
+++ b/src/libopensc/card-cac.c
|
||
|
@@ -390,9 +390,7 @@ static int cac_apdu_io(sc_card_t *card, int ins, int p1, int p2,
|
||
|
goto err;
|
||
|
}
|
||
|
|
||
|
- if (apdu.sw1 == 0x61) {
|
||
|
- r = sc_check_sw(card, apdu.sw1, apdu.sw2);
|
||
|
- }
|
||
|
+ r = sc_check_sw(card, apdu.sw1, apdu.sw2);
|
||
|
|
||
|
if (r < 0) {
|
||
|
sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL, "Card returned error ");
|
||
|
diff -up OpenSC-777e2a3751e3f6d53f056c98e9e20e42af674fb1/src/libopensc/card-cac.c.old OpenSC-777e2a3751e3f6d53f056c98e9e20e42af674fb1/src/libopensc/card-cac.c
|
||
|
--- OpenSC-777e2a3751e3f6d53f056c98e9e20e42af674fb1/src/libopensc/card-cac.c.old 2017-12-19 10:39:08.662925868 +0100
|
||
|
+++ OpenSC-777e2a3751e3f6d53f056c98e9e20e42af674fb1/src/libopensc/card-cac.c 2017-12-19 10:39:58.665293224 +0100
|
||
|
@@ -450,6 +450,10 @@ static int cac_read_file(sc_card_t *card
|
||
|
if (r < 0) {
|
||
|
goto fail;
|
||
|
}
|
||
|
+ if (len == 0) {
|
||
|
+ r = SC_ERROR_FILE_NOT_FOUND;
|
||
|
+ goto fail;
|
||
|
+ }
|
||
|
}
|
||
|
*out_len = size;
|
||
|
*out_buf = out;
|