aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scd/apdu.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/scd/apdu.c b/scd/apdu.c
index 4c73283fb..f78463ae2 100644
--- a/scd/apdu.c
+++ b/scd/apdu.c
@@ -3404,7 +3404,16 @@ apdu_check_keypad (int slot, int command, pininfo_t *pininfo)
pininfo->fixedlen = 0;
if (reader_table[slot].check_keypad)
- return reader_table[slot].check_keypad (slot, command, pininfo);
+ {
+ int sw;
+
+ if ((sw = lock_slot (slot)))
+ return sw;
+
+ sw = reader_table[slot].check_keypad (slot, command, pininfo);
+ unlock_slot (slot);
+ return sw;
+ }
else
return SW_HOST_NOT_SUPPORTED;
}
@@ -3418,8 +3427,17 @@ apdu_keypad_verify (int slot, int class, int ins, int p0, int p1,
return SW_HOST_NO_DRIVER;
if (reader_table[slot].keypad_verify)
- return reader_table[slot].keypad_verify (slot, class, ins, p0, p1,
- pininfo);
+ {
+ int sw;
+
+ if ((sw = lock_slot (slot)))
+ return sw;
+
+ sw = reader_table[slot].keypad_verify (slot, class, ins, p0, p1,
+ pininfo);
+ unlock_slot (slot);
+ return sw;
+ }
else
return SW_HOST_NOT_SUPPORTED;
}
@@ -3433,8 +3451,17 @@ apdu_keypad_modify (int slot, int class, int ins, int p0, int p1,
return SW_HOST_NO_DRIVER;
if (reader_table[slot].keypad_modify)
- return reader_table[slot].keypad_modify (slot, class, ins, p0, p1,
+ {
+ int sw;
+
+ if ((sw = lock_slot (slot)))
+ return sw;
+
+ sw = reader_table[slot].keypad_modify (slot, class, ins, p0, p1,
pininfo);
+ unlock_slot (slot);
+ return sw;
+ }
else
return SW_HOST_NOT_SUPPORTED;
}