[Spice-devel] [PATCH libcacard 2/2] vreader: Handle read failure

Marc-André Lureau marcandre.lureau at gmail.com
Wed Aug 8 14:51:32 UTC 2018


Hi

On Tue, Jul 24, 2018 at 8:34 PM, Jason Andryuk <jandryuk at gmail.com> wrote:
> If a command fails, card_status will not match VCARD_DONE.  That will
> trigger the assert and abort the process.  Instead, handle VCARD_FAIL and
> return an error in that case.  Client software can then deal with the
> error, and we continue running to handle future commands.
>
> This can be triggered by removing the physical smartcard mid-operation.

There are other paths, like invalid instruction on
cac_common_process_apdu_read()

>
> Signed-off-by: Jason Andryuk <jandryuk at gmail.com>
> ---
>  src/vreader.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/src/vreader.c b/src/vreader.c
> index 2d8aa9f..148f65b 100644
> --- a/src/vreader.c
> +++ b/src/vreader.c
> @@ -256,6 +256,7 @@ vreader_xfr_bytes(VReader *reader,
>      VCardAPDU *apdu;
>      VCardResponse *response = NULL;
>      VCardStatus card_status;
> +    VReaderStatus ret;
>      unsigned short status;
>      VCard *card = vreader_get_card(reader);
>      int size;
> @@ -279,14 +280,23 @@ vreader_xfr_bytes(VReader *reader,
>                    response->b_sw2, response->b_len, response->b_total_len);
>          }
>      }
> +    if (card_status == VCARD_FAIL) {
> +        *receive_buf_len = 0;
> +        ret = VREADER_NO_CARD;
> +        goto exit;
> +    }
> +
>      assert(card_status == VCARD_DONE && response);
>      size = MIN(*receive_buf_len, response->b_total_len);
>      memcpy(receive_buf, response->b_data, size);
>      *receive_buf_len = size;
> +    ret = VREADER_OK;
> +
> + exit:
>      vcard_response_delete(response);
>      vcard_apdu_delete(apdu);
>      vcard_free(card); /* free our reference */
> -    return VREADER_OK;
> +    return ret;
>  }
>
>  struct VReaderListStruct {
> --
> 2.17.1

patch looks good to me, ack

Jakub, any comment?

>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel



-- 
Marc-André Lureau


More information about the Spice-devel mailing list