Albert Solana wrote:
Hi,

I think i've found a bug on OpenSC. Whenever I look for any certificate
on a smart card, searching by its subject, OpenSC returns no matches and
I have 3 certificates on it!
I've found that on asn1_sequence_wrapper function returns a greater
attribute buffer size than it should be.

I attach a patch created against 2941 revision that works for me.
Could anyone test it and, if it's correct, apply it to OpenSC code?
...
Index: src/pkcs11/framework-pkcs15.c
===================================================================
--- src/pkcs11/framework-pkcs15.c       (revision 2941)
+++ src/pkcs11/framework-pkcs15.c       (working copy)
@@ -2478,7 +2478,7 @@
        size_t          len2;
len2 = len;
-       check_attribute_buffer(attr, len + 1 + sizeof(len));
+       check_attribute_buffer(attr, len + 1 + 1);
dest = (u8 *) attr->pValue;
        *dest++ = 0x30; /* SEQUENCE tag */

I don't think your patch will work if we have "len > 127" as in
this case the length of the value part of the sequence is encoded
in more than one byte. The current code uses sizeof(len) == sizeof(size_t)
as an upper bound for the length needed for the length bytes of the
sequence (note: this is actually wrong as in case of for example
0x11223344 we need and additional fifth byte 0x84 for number of length
bytes ...) a better solution would be to calculate the exact number
of bytes needed for the length encoding, i.e. something like
(untested !!):

        size_t lenb = 1;
        if (len > 127) {
                unsigned int i = 0;
                lenb++;         /* number of length bytes */
                for (i = 0; (len & (0xff << i)) != 0 && (0xff << i) != 0; i++)
                        lenb++;
        }
        check_attribute_buffer(attr, 1 + lenb + len);

Cheers,
Nils
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to