All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups
@ 2014-05-22 14:57 Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 1/7] libcacard/vscclient: Bury some dead code Markus Armbruster
                   ` (7 more replies)
  0 siblings, 8 replies; 11+ messages in thread
From: Markus Armbruster @ 2014-05-22 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: alevy

Makes Coverity happy with libcacard/ (for now).

Markus Armbruster (7):
  libcacard/vscclient: Bury some dead code
  libcacard: Plug memory leaks around vreader_get_reader_list()
  libcacard/vreader: Drop broken recovery from failed assertion
  libcacard/vreader: Tighten assertion to clarify intent
  libcacard: Convert two leftover realloc() to GLib
  libcacard/vcard_emul_nss: Assert vreaderOpt isn't null
  libcacard/vcard_emul_nss: Drop a redundant conditional

 libcacard/cac.c            | 13 ++-----------
 libcacard/vcard_emul_nss.c | 16 ++++++----------
 libcacard/vreader.c        | 10 ++++------
 libcacard/vscclient.c      |  7 +++----
 4 files changed, 15 insertions(+), 31 deletions(-)

-- 
1.9.0

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH 1/7] libcacard/vscclient: Bury some dead code
  2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
@ 2014-05-22 14:57 ` Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 2/7] libcacard: Plug memory leaks around vreader_get_reader_list() Markus Armbruster
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2014-05-22 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: alevy

Spotted by Coverity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 libcacard/vscclient.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/libcacard/vscclient.c b/libcacard/vscclient.c
index 3477ab3..29f4958 100644
--- a/libcacard/vscclient.c
+++ b/libcacard/vscclient.c
@@ -502,8 +502,7 @@ do_command(GIOChannel *source,
             if (reader != NULL) {
                 error = vcard_emul_force_card_insert(reader);
                 printf("insert %s, returned %d\n",
-                       reader ? vreader_get_name(reader)
-                       : "invalid reader", error);
+                       vreader_get_name(reader), error);
             } else {
                 printf("no reader by id %u found\n", reader_id);
             }
@@ -515,8 +514,7 @@ do_command(GIOChannel *source,
             if (reader != NULL) {
                 error = vcard_emul_force_card_remove(reader);
                 printf("remove %s, returned %d\n",
-                        reader ? vreader_get_name(reader)
-                        : "invalid reader", error);
+                       vreader_get_name(reader), error);
             } else {
                 printf("no reader by id %u found\n", reader_id);
             }
-- 
1.9.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH 2/7] libcacard: Plug memory leaks around vreader_get_reader_list()
  2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 1/7] libcacard/vscclient: Bury some dead code Markus Armbruster
@ 2014-05-22 14:57 ` Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 3/7] libcacard/vreader: Drop broken recovery from failed assertion Markus Armbruster
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2014-05-22 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: alevy

Spotted by Coverity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 libcacard/vcard_emul_nss.c | 4 ++++
 libcacard/vscclient.c      | 1 +
 2 files changed, 5 insertions(+)

diff --git a/libcacard/vcard_emul_nss.c b/libcacard/vcard_emul_nss.c
index e2b196d..692534c 100644
--- a/libcacard/vcard_emul_nss.c
+++ b/libcacard/vcard_emul_nss.c
@@ -433,11 +433,13 @@ vcard_emul_find_vreader_from_slot(PK11SlotInfo *slot)
         VReader *reader = vreader_list_get_reader(current_entry);
         VReaderEmul *reader_emul = vreader_get_private(reader);
         if (reader_emul->slot == slot) {
+            vreader_list_delete(reader_list);
             return reader;
         }
         vreader_free(reader);
     }
 
+    vreader_list_delete(reader_list);
     return NULL;
 }
 
@@ -1059,6 +1061,8 @@ vcard_emul_replay_insertion_events(void)
         next_entry = vreader_list_get_next(current_entry);
         vreader_queue_card_event(vreader);
     }
+
+    vreader_list_delete(list);
 }
 
 /*
diff --git a/libcacard/vscclient.c b/libcacard/vscclient.c
index 29f4958..f2a753a 100644
--- a/libcacard/vscclient.c
+++ b/libcacard/vscclient.c
@@ -570,6 +570,7 @@ do_command(GIOChannel *source,
                        "CARD_PRESENT" : "            ",
                        vreader_get_name(reader));
             }
+            vreader_list_delete(list);
         } else if (*string != 0) {
             printf("valid commands:\n");
             printf("insert [reader_id]\n");
-- 
1.9.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH 3/7] libcacard/vreader: Drop broken recovery from failed assertion
  2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 1/7] libcacard/vscclient: Bury some dead code Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 2/7] libcacard: Plug memory leaks around vreader_get_reader_list() Markus Armbruster
@ 2014-05-22 14:57 ` Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 4/7] libcacard/vreader: Tighten assertion to clarify intent Markus Armbruster
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2014-05-22 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: alevy

We suppress some code when we got unexpected status and assertion
checking is off:

     assert(card_status == VCARD_DONE);
     if (card_status == VCARD_DONE) {
         int size = MIN(*receive_buf_len, response->b_total_len);
         memcpy(receive_buf, response->b_data, size);
         *receive_buf_len = size;
    }

Such "recovery" is of dubious value even when it works.  This one
doesn't: it fails to assign to receive_buf[] and *receive_buf_len,
which the callers expect.

Make the code unconditional.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 libcacard/vreader.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/libcacard/vreader.c b/libcacard/vreader.c
index 7720295..c966bb3 100644
--- a/libcacard/vreader.c
+++ b/libcacard/vreader.c
@@ -284,11 +284,9 @@ vreader_xfr_bytes(VReader *reader,
         }
     }
     assert(card_status == VCARD_DONE);
-    if (card_status == VCARD_DONE) {
-        int size = MIN(*receive_buf_len, response->b_total_len);
-        memcpy(receive_buf, response->b_data, size);
-        *receive_buf_len = size;
-    }
+    int size = MIN(*receive_buf_len, response->b_total_len);
+    memcpy(receive_buf, response->b_data, size);
+    *receive_buf_len = size;
     vcard_response_delete(response);
     vcard_apdu_delete(apdu);
     vcard_free(card); /* free our reference */
-- 
1.9.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH 4/7] libcacard/vreader: Tighten assertion to clarify intent
  2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
                   ` (2 preceding siblings ...)
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 3/7] libcacard/vreader: Drop broken recovery from failed assertion Markus Armbruster
@ 2014-05-22 14:57 ` Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 5/7] libcacard: Convert two leftover realloc() to GLib Markus Armbruster
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2014-05-22 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: alevy

Bonus: hushes up Coverity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 libcacard/vreader.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcacard/vreader.c b/libcacard/vreader.c
index c966bb3..3a8f81a 100644
--- a/libcacard/vreader.c
+++ b/libcacard/vreader.c
@@ -283,7 +283,7 @@ vreader_xfr_bytes(VReader *reader,
                   response->b_sw2, response->b_len, response->b_total_len);
         }
     }
-    assert(card_status == VCARD_DONE);
+    assert(card_status == VCARD_DONE && response);
     int size = MIN(*receive_buf_len, response->b_total_len);
     memcpy(receive_buf, response->b_data, size);
     *receive_buf_len = size;
-- 
1.9.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH 5/7] libcacard: Convert two leftover realloc() to GLib
  2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
                   ` (3 preceding siblings ...)
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 4/7] libcacard/vreader: Tighten assertion to clarify intent Markus Armbruster
@ 2014-05-22 14:57 ` Markus Armbruster
  2014-05-23  9:26   ` Michael Tokarev
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null Markus Armbruster
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 11+ messages in thread
From: Markus Armbruster @ 2014-05-22 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: alevy

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 libcacard/cac.c            | 13 ++-----------
 libcacard/vcard_emul_nss.c |  6 +-----
 2 files changed, 3 insertions(+), 16 deletions(-)

diff --git a/libcacard/cac.c b/libcacard/cac.c
index 74ef3e3..05ce8a2 100644
--- a/libcacard/cac.c
+++ b/libcacard/cac.c
@@ -169,17 +169,8 @@ cac_applet_pki_process_apdu(VCard *card, VCardAPDU *apdu,
         }
         size = apdu->a_Lc;
 
-        sign_buffer = realloc(pki_applet->sign_buffer,
-                      pki_applet->sign_buffer_len+size);
-        if (sign_buffer == NULL) {
-            g_free(pki_applet->sign_buffer);
-            pki_applet->sign_buffer = NULL;
-            pki_applet->sign_buffer_len = 0;
-            *response = vcard_make_response(
-                            VCARD7816_STATUS_EXC_ERROR_MEMORY_FAILURE);
-            ret = VCARD_DONE;
-            break;
-        }
+        sign_buffer = g_realloc(pki_applet->sign_buffer,
+                                pki_applet->sign_buffer_len + size);
         memcpy(sign_buffer+pki_applet->sign_buffer_len, apdu->a_body, size);
         size += pki_applet->sign_buffer_len;
         switch (apdu->a_p1) {
diff --git a/libcacard/vcard_emul_nss.c b/libcacard/vcard_emul_nss.c
index 692534c..f98541f 100644
--- a/libcacard/vcard_emul_nss.c
+++ b/libcacard/vcard_emul_nss.c
@@ -1178,11 +1178,7 @@ vcard_emul_options(const char *args)
 
             if (opts->vreader_count >= reader_count) {
                 reader_count += READER_STEP;
-                vreaderOpt = realloc(opts->vreader,
-                                reader_count * sizeof(*vreaderOpt));
-                if (vreaderOpt == NULL) {
-                    return opts; /* we're done */
-                }
+                vreaderOpt = g_new(VirtualReaderOptions, reader_count);
             }
             opts->vreader = vreaderOpt;
             vreaderOpt = &vreaderOpt[opts->vreader_count];
-- 
1.9.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null
  2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
                   ` (4 preceding siblings ...)
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 5/7] libcacard: Convert two leftover realloc() to GLib Markus Armbruster
@ 2014-05-22 14:57 ` Markus Armbruster
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 7/7] libcacard/vcard_emul_nss: Drop a redundant conditional Markus Armbruster
  2014-05-22 17:01 ` [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Alon Levy
  7 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2014-05-22 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: alevy

It's not locally obvious, and Coverity can't see it either.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 libcacard/vcard_emul_nss.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/libcacard/vcard_emul_nss.c b/libcacard/vcard_emul_nss.c
index f98541f..83b89e4 100644
--- a/libcacard/vcard_emul_nss.c
+++ b/libcacard/vcard_emul_nss.c
@@ -1180,6 +1180,7 @@ vcard_emul_options(const char *args)
                 reader_count += READER_STEP;
                 vreaderOpt = g_new(VirtualReaderOptions, reader_count);
             }
+            assert(vreaderOpt);
             opts->vreader = vreaderOpt;
             vreaderOpt = &vreaderOpt[opts->vreader_count];
             vreaderOpt->name = g_strndup(name, name_length);
-- 
1.9.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PATCH 7/7] libcacard/vcard_emul_nss: Drop a redundant conditional
  2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
                   ` (5 preceding siblings ...)
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null Markus Armbruster
@ 2014-05-22 14:57 ` Markus Armbruster
  2014-05-22 17:01 ` [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Alon Levy
  7 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2014-05-22 14:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: alevy

Bailing out when PK11_FindGenericObjects() returns null ensures the
loop that follows it executes at least once.  The "loop did not
execute" test right after it is useless.  Drop it.

Spotted by Coverity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 libcacard/vcard_emul_nss.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/libcacard/vcard_emul_nss.c b/libcacard/vcard_emul_nss.c
index 83b89e4..2ebe13f 100644
--- a/libcacard/vcard_emul_nss.c
+++ b/libcacard/vcard_emul_nss.c
@@ -618,11 +618,6 @@ vcard_emul_mirror_card(VReader *vreader)
         cert_count++;
     }
 
-    if (cert_count == 0) {
-        PK11_DestroyGenericObjects(firstObj);
-        return NULL;
-    }
-
     /* allocate the arrays */
     vcard_emul_alloc_arrays(&certs, &cert_len, &keys, cert_count);
 
-- 
1.9.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups
  2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
                   ` (6 preceding siblings ...)
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 7/7] libcacard/vcard_emul_nss: Drop a redundant conditional Markus Armbruster
@ 2014-05-22 17:01 ` Alon Levy
  7 siblings, 0 replies; 11+ messages in thread
From: Alon Levy @ 2014-05-22 17:01 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

On 05/22/2014 05:57 PM, Markus Armbruster wrote:
> Makes Coverity happy with libcacard/ (for now).
> 
> Markus Armbruster (7):
>   libcacard/vscclient: Bury some dead code
>   libcacard: Plug memory leaks around vreader_get_reader_list()
>   libcacard/vreader: Drop broken recovery from failed assertion
>   libcacard/vreader: Tighten assertion to clarify intent
>   libcacard: Convert two leftover realloc() to GLib
>   libcacard/vcard_emul_nss: Assert vreaderOpt isn't null
>   libcacard/vcard_emul_nss: Drop a redundant conditional
> 
>  libcacard/cac.c            | 13 ++-----------
>  libcacard/vcard_emul_nss.c | 16 ++++++----------
>  libcacard/vreader.c        | 10 ++++------
>  libcacard/vscclient.c      |  7 +++----
>  4 files changed, 15 insertions(+), 31 deletions(-)
> 

Reviewed-by: Alon Levy <alevy@redhat.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH 5/7] libcacard: Convert two leftover realloc() to GLib
  2014-05-22 14:57 ` [Qemu-devel] [PATCH 5/7] libcacard: Convert two leftover realloc() to GLib Markus Armbruster
@ 2014-05-23  9:26   ` Michael Tokarev
  2014-05-23  9:44     ` Markus Armbruster
  0 siblings, 1 reply; 11+ messages in thread
From: Michael Tokarev @ 2014-05-23  9:26 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: alevy

22.05.2014 18:57, Markus Armbruster wrote:

> diff --git a/libcacard/vcard_emul_nss.c b/libcacard/vcard_emul_nss.c
> index 692534c..f98541f 100644
> --- a/libcacard/vcard_emul_nss.c
> +++ b/libcacard/vcard_emul_nss.c
> @@ -1178,11 +1178,7 @@ vcard_emul_options(const char *args)
>  
>              if (opts->vreader_count >= reader_count) {
>                  reader_count += READER_STEP;
> -                vreaderOpt = realloc(opts->vreader,
> -                                reader_count * sizeof(*vreaderOpt));
> -                if (vreaderOpt == NULL) {
> -                    return opts; /* we're done */
> -                }
> +                vreaderOpt = g_new(VirtualReaderOptions, reader_count);
>              }
>              opts->vreader = vreaderOpt;

This does not look like equivalent code.  It is equivalent
to malloc(), not realloc().  So we'll leak old opts->vreader
on every expansion of the array, and will lose old elements
in it too.

Thanks,

/mjt

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH 5/7] libcacard: Convert two leftover realloc() to GLib
  2014-05-23  9:26   ` Michael Tokarev
@ 2014-05-23  9:44     ` Markus Armbruster
  0 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2014-05-23  9:44 UTC (permalink / raw)
  To: Michael Tokarev; +Cc: alevy, qemu-devel

Michael Tokarev <mjt@tls.msk.ru> writes:

> 22.05.2014 18:57, Markus Armbruster wrote:
>
>> diff --git a/libcacard/vcard_emul_nss.c b/libcacard/vcard_emul_nss.c
>> index 692534c..f98541f 100644
>> --- a/libcacard/vcard_emul_nss.c
>> +++ b/libcacard/vcard_emul_nss.c
>> @@ -1178,11 +1178,7 @@ vcard_emul_options(const char *args)
>>  
>>              if (opts->vreader_count >= reader_count) {
>>                  reader_count += READER_STEP;
>> -                vreaderOpt = realloc(opts->vreader,
>> -                                reader_count * sizeof(*vreaderOpt));
>> -                if (vreaderOpt == NULL) {
>> -                    return opts; /* we're done */
>> -                }
>> +                vreaderOpt = g_new(VirtualReaderOptions, reader_count);
>>              }
>>              opts->vreader = vreaderOpt;
>
> This does not look like equivalent code.  It is equivalent
> to malloc(), not realloc().  So we'll leak old opts->vreader
> on every expansion of the array, and will lose old elements
> in it too.

Typo, meant g_renew(), will respin.  Thanks!

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2014-05-23  9:44 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-22 14:57 [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
2014-05-22 14:57 ` [Qemu-devel] [PATCH 1/7] libcacard/vscclient: Bury some dead code Markus Armbruster
2014-05-22 14:57 ` [Qemu-devel] [PATCH 2/7] libcacard: Plug memory leaks around vreader_get_reader_list() Markus Armbruster
2014-05-22 14:57 ` [Qemu-devel] [PATCH 3/7] libcacard/vreader: Drop broken recovery from failed assertion Markus Armbruster
2014-05-22 14:57 ` [Qemu-devel] [PATCH 4/7] libcacard/vreader: Tighten assertion to clarify intent Markus Armbruster
2014-05-22 14:57 ` [Qemu-devel] [PATCH 5/7] libcacard: Convert two leftover realloc() to GLib Markus Armbruster
2014-05-23  9:26   ` Michael Tokarev
2014-05-23  9:44     ` Markus Armbruster
2014-05-22 14:57 ` [Qemu-devel] [PATCH 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null Markus Armbruster
2014-05-22 14:57 ` [Qemu-devel] [PATCH 7/7] libcacard/vcard_emul_nss: Drop a redundant conditional Markus Armbruster
2014-05-22 17:01 ` [Qemu-devel] [PATCH 0/7] libcacard: A few simple fixes and cleanups Alon Levy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.