On 6/14/2010 12:46 PM, Andre Zepezauer wrote:
> Hello Douglas,
>
> attached is a patch that is almost the same like yours. The only
> difference is, that it still honours the max_virtual_slots property.
> Consider it as untested too.

Looking closer at the code, it looks like the only place the
max_virtual_slots was still being used was in this one place. It looks
like when the conversion from a fixed size slot list to the list_* code
for slots was done this one location in the code was missed.  If this
is correct, then the rest of the code to parse the max_virtual_slots
could be dropped and the opensc.conf file comments updated too. So your
test of max_virtual_slots in the "for" loop could be dropped too.

>
> Regards,
> Andre Zepezauer
>
> On Mon, 2010-06-14 at 09:44 -0500, Douglas E. Engert wrote:
>>
>> On 6/12/2010 6:02 AM, Martin Vogt wrote:
>>> Hello,
>>>
>>> today I had a glibc error with svn head, which looks like "writing
>>> over an array boundary" to me:
>>>
>>>> 0x7fe7120b66f0 12:48:44.133 [opensc-pkcs11] 
>>>> pkcs11-global.c:447:C_GetSlotList: doing free
>>>> *** glibc detected *** 
>>>> /home/kde/work/opensc/svn_head/opensc/src/tools/.libs/pkcs11-tool: free(): 
>>>> invalid next size (fast): 0x0000000000629b00 ***
>>>> ======= Backtrace: =========
>>>> /lib64/libc.so.6[0x7fe710d42108]
>>>> /lib6Aborted
>>>
>>> The glibc abort happens in the function: pkcs11-global:C_GetSlotList
>>> As far as I understand this, the section:(around line 380)
>>>
>>>
>>>> if ((found = (CK_SLOT_ID_PTR)malloc (sizeof (*found) * 
>>>> sc_pkcs11_conf.max_virtual_slots)) == NULL) {
>>>>            rv = CKR_HOST_MEMORY;
>>>>            goto out;
>>>> }
>>>
>>
>> This looks like a hold over from previous code. It looks like  
>> list_size(&virtual_slots)
>> should be used, and the code should be  moved after the detection for new 
>> readers.
>> See *untested* patch attached.
>>
>> With the changes for virtual_slots being based on readers found, does this 
>> mean
>> the opensc.conf max_virtual_slots is obsolete?
>>
>>
>>> allocates an array with sc_pkcs11_conf.max_virtual_slots entries. My
>>> printf says that:
>>>
>>>> sc_debug(context, SC_LOG_DEBUG_NORMAL,"found 
>>>> 2:%d\n",sc_pkcs11_conf.max_virtual_slots);
>>>> 0x7fe7120b66f0 12:48:44.132 [opensc-pkcs11] 
>>>> pkcs11-global.c:381:C_GetSlotList: found 2:1
>>>
>>> ==>   1
>>>
>>> But then it writes to this array 5 times:(around line 400)
>>>
>>>> if (!tokenPresent || (slot->slot_info.flags&   CKF_TOKEN_PRESENT)) {
>>>>    sc_debug(context, SC_LOG_DEBUG_NORMAL,"writing found :%d\n",numMatches);
>>>> /*
>>>> if (numMatches>= sc_pkcs11_conf.max_virtual_slots) {
>>>>    printf("malloc error in found\n");
>>>>    exit(1);
>>>> }
>>>> */
>>>> found[numMatches++] = slot->id;
>>>     
>>> 0x7fe7120b66f0 12:48:44.133 [opensc-pkcs11]
>>> pkcs11-global.c:408:C_GetSlotList: writing found :0
>>> 0x7fe7120b66f0 12:48:44.133 [opensc-pkcs11]
>>> pkcs11-global.c:408:C_GetSlotList: writing found :1
>>> 0x7fe7120b66f0 12:48:44.133 [opensc-pkcs11]
>>> pkcs11-global.c:408:C_GetSlotList: writing found :2
>>> 0x7fe7120b66f0 12:48:44.133 [opensc-pkcs11]
>>> pkcs11-global.c:408:C_GetSlotList: writing found :3
>>> 0x7fe7120b66f0 12:48:44.133 [opensc-pkcs11]
>>> pkcs11-global.c:408:C_GetSlotList: writing found :4
>>> 0x7fe7120b66f0 12:48:44.133 [opensc-pkcs11]
>>> pkcs11-global.c:422:C_GetSlotList: was only a size inquiry (5)
>>>
>>>
>>> Is this the heap corruption detected by glibc?
>>>
>>> Maybe I have a broken config file, but can this
>>> be handled somehow without a heap corruption?
>>>
>>> regards,
>>>
>>> Martin
>>> _______________________________________________
>>> opensc-devel mailing list
>>> opensc-devel@lists.opensc-project.org
>>> http://www.opensc-project.org/mailman/listinfo/opensc-devel
>>>
>>>
>>
>> _______________________________________________
>> opensc-devel mailing list
>> opensc-devel@lists.opensc-project.org
>> http://www.opensc-project.org/mailman/listinfo/opensc-devel

-- 

  Douglas E. Engert  <deeng...@anl.gov>
  Argonne National Laboratory
  9700 South Cass Avenue
  Argonne, Illinois  60439
  (630) 252-5444
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to