On Mon, 2009-01-05 at 09:07 -0800, Nishanth Aravamudan wrote:
> On 05.01.2009 [06:26:55 -0800], mehul vora wrote:
> > Nishanth,  
> > 
> >     I went through "munmap" code and found that core kernel (arch
> > independent) code removes all "vma" references of the passed vaddr and
> > then it calls arch dependent hooks. MIPS code removes all pagetable
> > reference of the passed vaddr and flushes tlbs on all cpus. So after
> > munmap returns, if process will try to access the same address again
> > then it will receive a SIGSEGV signal. 
> 
> We do call it a black hole, as I've said :) It's hairy code.
> 
> >    I wrote a simple program (not linked with libhugetlbfs - see
> > attachment) to cross check this on MIPS. The moment program does the
> > "munmap" of the code segment it immediately receives a SIGSEGV.  Same
> > program also crashes on x86 with SIGSEGV. 
> 
> Right, I see that.
> 
> >   Is this program, at a high level, very similar to libhugetlb init
> > (constructor - munmap/mmap sequence) code ? If yes, then, Is there
> > anything specific libhugetlbfs does before unmapping the code segment
> > apart from copying all segments in to hugepages to make this work ?
> 
> A few thoughts: we don't unmap all segments, only those that need to be
> remapped. Not sure if that matters. The only external reference we
> resolve between unmapping and mapping is mmap(), which is why we have
> that false mmap() call. So, nothing else should access the text segment
> between unmap and map in libhugetlbfs. I know libhugetlbfs works on x86
> :) I'll think about it further. Maybe someone else will have some ideas.

You are not allowed to call libc functions while segments are unmapped.
Calling printf (for example) will cause a lookup of the symbol stdout
and may trigger dynamic symbol lookups.



------------------------------------------------------------------------------
_______________________________________________
Libhugetlbfs-devel mailing list
Libhugetlbfs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel

Reply via email to