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

Makes Coverity happy with libcacard/ (for now).

v2:
- Fix g_new() vs. g_renew() mistake in PATCH 5 [Michael Tokarev]
- Trivially rebased

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 | 17 +++++++----------
 libcacard/vreader.c        | 10 ++++------
 libcacard/vscclient.c      |  7 +++----
 4 files changed, 16 insertions(+), 31 deletions(-)

-- 
1.9.0

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

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

Spotted by Coverity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Alon Levy <alevy@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] 14+ messages in thread

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

Spotted by Coverity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Alon Levy <alevy@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] 14+ messages in thread

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

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

Bonus: hushes up Coverity.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Alon Levy <alevy@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] 14+ messages in thread

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

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Alon Levy <alevy@redhat.com>
---
 libcacard/cac.c            | 13 ++-----------
 libcacard/vcard_emul_nss.c |  7 ++-----
 2 files changed, 4 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..2048917 100644
--- a/libcacard/vcard_emul_nss.c
+++ b/libcacard/vcard_emul_nss.c
@@ -1178,11 +1178,8 @@ 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_renew(VirtualReaderOptions, opts->vreader,
+                                     reader_count);
             }
             opts->vreader = vreaderOpt;
             vreaderOpt = &vreaderOpt[opts->vreader_count];
-- 
1.9.0

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

* [Qemu-devel] [PATCH v2 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null
  2014-05-23 11:24 [Qemu-devel] [PATCH v2 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
                   ` (4 preceding siblings ...)
  2014-05-23 11:24 ` [Qemu-devel] [PATCH v2 5/7] libcacard: Convert two leftover realloc() to GLib Markus Armbruster
@ 2014-05-23 11:24 ` Markus Armbruster
  2014-05-23 18:09   ` Michael Tokarev
  2014-05-23 11:24 ` [Qemu-devel] [PATCH v2 7/7] libcacard/vcard_emul_nss: Drop a redundant conditional Markus Armbruster
  2014-05-23 18:20 ` [Qemu-devel] [PATCH v2 0/7] libcacard: A few simple fixes and cleanups Michael Tokarev
  7 siblings, 1 reply; 14+ messages in thread
From: Markus Armbruster @ 2014-05-23 11:24 UTC (permalink / raw)
  To: qemu-devel; +Cc: mjt, alevy

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

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Alon Levy <alevy@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 2048917..4f55e44 100644
--- a/libcacard/vcard_emul_nss.c
+++ b/libcacard/vcard_emul_nss.c
@@ -1181,6 +1181,7 @@ vcard_emul_options(const char *args)
                 vreaderOpt = g_renew(VirtualReaderOptions, opts->vreader,
                                      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] 14+ messages in thread

* [Qemu-devel] [PATCH v2 7/7] libcacard/vcard_emul_nss: Drop a redundant conditional
  2014-05-23 11:24 [Qemu-devel] [PATCH v2 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
                   ` (5 preceding siblings ...)
  2014-05-23 11:24 ` [Qemu-devel] [PATCH v2 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null Markus Armbruster
@ 2014-05-23 11:24 ` Markus Armbruster
  2014-05-23 18:20 ` [Qemu-devel] [PATCH v2 0/7] libcacard: A few simple fixes and cleanups Michael Tokarev
  7 siblings, 0 replies; 14+ messages in thread
From: Markus Armbruster @ 2014-05-23 11:24 UTC (permalink / raw)
  To: qemu-devel; +Cc: mjt, 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>
Reviewed-by: Alon Levy <alevy@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 4f55e44..8f8e9e0 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] 14+ messages in thread

* Re: [Qemu-devel] [PATCH v2 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null
  2014-05-23 11:24 ` [Qemu-devel] [PATCH v2 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null Markus Armbruster
@ 2014-05-23 18:09   ` Michael Tokarev
  2014-05-23 18:16     ` Michael Tokarev
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Tokarev @ 2014-05-23 18:09 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: alevy

23.05.2014 15:24, Markus Armbruster пишет:
> It's not locally obvious, and Coverity can't see it either.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> Reviewed-by: Alon Levy <alevy@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 2048917..4f55e44 100644
> --- a/libcacard/vcard_emul_nss.c
> +++ b/libcacard/vcard_emul_nss.c
> @@ -1181,6 +1181,7 @@ vcard_emul_options(const char *args)
>                  vreaderOpt = g_renew(VirtualReaderOptions, opts->vreader,
>                                       reader_count);
>              }
> +            assert(vreaderOpt);
>              opts->vreader = vreaderOpt;
>              vreaderOpt = &vreaderOpt[opts->vreader_count];
>              vreaderOpt->name = g_strndup(name, name_length);

Shouldn't the assignment be moved up one line into the if {}
statement instead?

Sigh, thats a second comment about this code... :)

Thanks,

/mjt

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

* Re: [Qemu-devel] [PATCH v2 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null
  2014-05-23 18:09   ` Michael Tokarev
@ 2014-05-23 18:16     ` Michael Tokarev
  2014-05-23 18:18       ` Michael Tokarev
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Tokarev @ 2014-05-23 18:16 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: alevy

23.05.2014 22:09, Michael Tokarev wrote:
> 23.05.2014 15:24, Markus Armbruster wrote:
>> It's not locally obvious, and Coverity can't see it either.
>>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> Reviewed-by: Alon Levy <alevy@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 2048917..4f55e44 100644
>> --- a/libcacard/vcard_emul_nss.c
>> +++ b/libcacard/vcard_emul_nss.c
>> @@ -1181,6 +1181,7 @@ vcard_emul_options(const char *args)
>>                  vreaderOpt = g_renew(VirtualReaderOptions, opts->vreader,
>>                                       reader_count);
>>              }
>> +            assert(vreaderOpt);
>>              opts->vreader = vreaderOpt;
>>              vreaderOpt = &vreaderOpt[opts->vreader_count];
>>              vreaderOpt->name = g_strndup(name, name_length);
> 
> Shouldn't the assignment be moved up one line into the if {}
> statement instead?

Actually it looks like this code is just buggy, it works for just
one iteration.  Because at this place, vreaderOpts will be non-NULL
only if we expanded the array.  If we didn't (we do that in
READER_STEP increments), we'll be assigning NULL to opts->vreader,
because vreaderOpt will _really_ be NULL here.

One good example when setting initial values like this (for vreaderOpts)
is a Bad Idea (tm).  If it weren't needlessly NULL initially, compiler
was able to tell us about using uninitialized variable.

Thanks,

/mjt

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

* Re: [Qemu-devel] [PATCH v2 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null
  2014-05-23 18:16     ` Michael Tokarev
@ 2014-05-23 18:18       ` Michael Tokarev
  2014-05-26  6:16         ` Markus Armbruster
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Tokarev @ 2014-05-23 18:18 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: alevy

23.05.2014 22:16, Michael Tokarev пишет:
> 23.05.2014 22:09, Michael Tokarev wrote:
>> 23.05.2014 15:24, Markus Armbruster wrote:
>>> It's not locally obvious, and Coverity can't see it either.
>>>
>>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>>> Reviewed-by: Alon Levy <alevy@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 2048917..4f55e44 100644
>>> --- a/libcacard/vcard_emul_nss.c
>>> +++ b/libcacard/vcard_emul_nss.c
>>> @@ -1181,6 +1181,7 @@ vcard_emul_options(const char *args)
>>>                  vreaderOpt = g_renew(VirtualReaderOptions, opts->vreader,
>>>                                       reader_count);
>>>              }
>>> +            assert(vreaderOpt);
>>>              opts->vreader = vreaderOpt;
>>>              vreaderOpt = &vreaderOpt[opts->vreader_count];
>>>              vreaderOpt->name = g_strndup(name, name_length);
>>
>> Shouldn't the assignment be moved up one line into the if {}
>> statement instead?
> 
> Actually it looks like this code is just buggy, it works for just
> one iteration.  Because at this place, vreaderOpts will be non-NULL
> only if we expanded the array.  If we didn't (we do that in
> READER_STEP increments), we'll be assigning NULL to opts->vreader,
> because vreaderOpt will _really_ be NULL here.

So, the real fix is:

1) drop = NULL at declaration of vreaderOpt;
2) do not mention vreaderOpt inside the if{} statement at
   all, we don't need indirection there;
3) drop this opts->vreader assignment

and ofcourse do not add the assert as in the patch above ;)

/mjt

> One good example when setting initial values like this (for vreaderOpts)
> is a Bad Idea (tm).  If it weren't needlessly NULL initially, compiler
> was able to tell us about using uninitialized variable.
> 
> Thanks,
> 
> /mjt
> 

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

* Re: [Qemu-devel] [PATCH v2 0/7] libcacard: A few simple fixes and cleanups
  2014-05-23 11:24 [Qemu-devel] [PATCH v2 0/7] libcacard: A few simple fixes and cleanups Markus Armbruster
                   ` (6 preceding siblings ...)
  2014-05-23 11:24 ` [Qemu-devel] [PATCH v2 7/7] libcacard/vcard_emul_nss: Drop a redundant conditional Markus Armbruster
@ 2014-05-23 18:20 ` Michael Tokarev
  2014-05-23 20:54   ` Michael Tokarev
  7 siblings, 1 reply; 14+ messages in thread
From: Michael Tokarev @ 2014-05-23 18:20 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: alevy

23.05.2014 15:24, Markus Armbruster wrote:
> Makes Coverity happy with libcacard/ (for now).
> 
> v2:
> - Fix g_new() vs. g_renew() mistake in PATCH 5 [Michael Tokarev]
> - Trivially rebased

> 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

Reviewed-by: Michael Tokarev <mjt@tls.msk.ru>

Except of the vreaderOpt assertion patch which I commented
separately.

I think this can easily go to the -trivial tree, as all the
changes are really trivial.  Including the bugfix, for which
I can send a patch myself, again, as described in my previous
reply.

Thanks,

/mjt

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

* Re: [Qemu-devel] [PATCH v2 0/7] libcacard: A few simple fixes and cleanups
  2014-05-23 18:20 ` [Qemu-devel] [PATCH v2 0/7] libcacard: A few simple fixes and cleanups Michael Tokarev
@ 2014-05-23 20:54   ` Michael Tokarev
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Tokarev @ 2014-05-23 20:54 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: alevy

23.05.2014 22:20, Michael Tokarev wrote:
> 23.05.2014 15:24, Markus Armbruster wrote:
>> Makes Coverity happy with libcacard/ (for now).
>>
>> v2:
>> - Fix g_new() vs. g_renew() mistake in PATCH 5 [Michael Tokarev]
>> - Trivially rebased
> 
>> 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
> 
> Reviewed-by: Michael Tokarev <mjt@tls.msk.ru>
> 
> Except of the vreaderOpt assertion patch which I commented
> separately.
> 
> I think this can easily go to the -trivial tree, as all the
> changes are really trivial.  Including the bugfix, for which
> I can send a patch myself, again, as described in my previous
> reply.

I applied whole series to -trivial, except of this problematic
patch, for which I applied a real fix (will post in another
email).

Good stuff ;)

Thanks,

/mjt

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

* Re: [Qemu-devel] [PATCH v2 6/7] libcacard/vcard_emul_nss: Assert vreaderOpt isn't null
  2014-05-23 18:18       ` Michael Tokarev
@ 2014-05-26  6:16         ` Markus Armbruster
  0 siblings, 0 replies; 14+ messages in thread
From: Markus Armbruster @ 2014-05-26  6:16 UTC (permalink / raw)
  To: Michael Tokarev; +Cc: alevy, qemu-devel

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

> 23.05.2014 22:16, Michael Tokarev пишет:
>> 23.05.2014 22:09, Michael Tokarev wrote:
>>> 23.05.2014 15:24, Markus Armbruster wrote:
>>>> It's not locally obvious, and Coverity can't see it either.
>>>>
>>>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>>>> Reviewed-by: Alon Levy <alevy@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 2048917..4f55e44 100644
>>>> --- a/libcacard/vcard_emul_nss.c
>>>> +++ b/libcacard/vcard_emul_nss.c
>>>> @@ -1181,6 +1181,7 @@ vcard_emul_options(const char *args)
>>>>                  vreaderOpt = g_renew(VirtualReaderOptions, opts->vreader,
>>>>                                       reader_count);
>>>>              }
>>>> +            assert(vreaderOpt);
>>>>              opts->vreader = vreaderOpt;
>>>>              vreaderOpt = &vreaderOpt[opts->vreader_count];
>>>>              vreaderOpt->name = g_strndup(name, name_length);
>>>
>>> Shouldn't the assignment be moved up one line into the if {}
>>> statement instead?
>> 
>> Actually it looks like this code is just buggy, it works for just
>> one iteration.  Because at this place, vreaderOpts will be non-NULL
>> only if we expanded the array.  If we didn't (we do that in
>> READER_STEP increments), we'll be assigning NULL to opts->vreader,
>> because vreaderOpt will _really_ be NULL here.

You're right.  When I saw the conditional realloc, I jumped to convince
myself that it's always executed in the first loop iteration, but missed
the fact that vreaderOpt is reset to null on *every* iteration.

> So, the real fix is:
>
> 1) drop = NULL at declaration of vreaderOpt;
> 2) do not mention vreaderOpt inside the if{} statement at
>    all, we don't need indirection there;
> 3) drop this opts->vreader assignment
>
> and ofcourse do not add the assert as in the patch above ;)

I'll review it.  Thanks!

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

end of thread, other threads:[~2014-05-26  6:16 UTC | newest]

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).