tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Additional kmem_alloc debugging



http://www.netbsd.org/~ad/kmguard.diff

This adds basic verification to kmem_alloc/kmem_free somewhat like you get
with ElectricFence. It's enabled with the DEBUG kernel option AND a debugger
command:

        boot -d
        db> w kmem_guard_depth 0t30000
        db> c

The above tells it to queue up to 60000 pages of unmapped KVA to catch
use-after-free type errors. Memory backing a freed item is unmapped and the
kernel VA space pushed onto a FIFO. The VA space will not be reused until
another 30k items have been freed. Until reused the kernel can catch invalid
acceses and panic with a page fault.

Limitations:

- It has a severe impact on performance. 
- It wants a 64-bit machine with lots of RAM.
- It does not handle objects larger than PAGE_SIZE.

It also tries to catch:

- Overflow in realtime, using a guard page
- Underflow at free using a canary
- Invalid pointer/size passed, at free

Comments?

Thanks,
Andrew


Home | Main Index | Thread Index | Old Index