Hello all,

It seams that the USB code was taken from the previous version of FILO
but never have been tested.

Some symptoms are
1)
malloc_diag: alloc: 4208 bytes (8 blocks), free: 61320 bytes (1 blocks)
malloc_check: sizes mismatch: 0xa1 vs 0x0 at 00132670
2)
dma_to_td: can not find td


Trying to debug it, I discovered the following piece of code:

void *allot2(size_t size, unsigned int alignment)
{
        void *addr;
        unsigned long addrval;
        addr=malloc(2*size);

        addrval=(unsigned long)addr;
        addrval+=alignment+1; //  0x12345600 + 0xff + 1
        addrval&=~alignment;  //  0x12345700
        *(void * *)(addrval-sizeof(unsigned long))=addr;
        return (void *)addrval;
}

void forget2(void *mem)
{
        unsigned long addr=(unsigned long)mem;
        
        addr-=sizeof(unsigned long);
        free((void *)(*(unsigned long *)addr));
}

I have 2 questions:
if size = 8 and alignment=256, it writes outside malloc allocation, isn't it?
What was the meaning of the code?

Thanks

-- 
linuxbios mailing list
linuxbios@linuxbios.org
http://www.linuxbios.org/mailman/listinfo/linuxbios

Reply via email to