On Fri, 1 May 1998, James Turner wrote: > For now I've decided to handle it through a pair of guard functions > and ignore arbitrary free()ing. It adds 2*getpagesize() to every > malloc, so it's not very efficient and shouldn't be used for anything For dynamic memory allocation, the Electric Fence library by Bruce Perens does exactly that - if you have a Redhat system, just adding -lefence to the libs will link it in, replacing malloc,calloc and free. man efence. > frequently allocated. Right now I'm using it for buf, buf1, buf2, and > arg. It has proven quite effective (in test cases... my mud currently efence doesn't do that for the stack however, that's an interesting idea. It screams for C++ however :) class ProtectedBuffer { private: char buf[MSL]; char stack_guard[4096]; public: ProtectedBuffer() { mprotect(stack_guard, ...); } ~ProtectedBuffer() { munprotect(...); } operator char* () { return buf; } }; void fun() { ProtectedBuffer buf; strcpy (buffer, 10k string); } No need to call STACK_GUARD, STACK_RETURN, let the destructors sort them out. Hmm.. come to think of it, stack_guard should be *before* buf shouldn't it? It will be placed on the stack like this: Address = 1000 buf Adddress = 900 stack_guard printing to buf will start at 1000 and continue upwards. Hm, and also... I think memory needs to be aligned to be mprotected. You can do the alignment manually however, allocate a buffer of twice the size. Hmm, another thing that's problematic about the C++ code - sizeof(buf) will be wrong, returning the size of the whole structure.. I wonder if there's a operator sizeof :) ============================================================================= Erwin Andreasen Herlev, Denmark <erwin@pip.dknet.dk> UNIX System Programmer <URL:http://www.abandoned.org/drylock/> <*> (not speaking for) DDE ============================================================================= +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST