Again: innd got SIGBUS (fwd)

Mirek Luc mirecki at nask.pl
Tue Dec 19 15:05:53 UTC 2000


On Tue, 19 Dec 2000, Katsuhiro Kondou wrote:

> 	Mirek Luc <mirecki at nask.pl> wrote;
> } ICDiovset() tried to access data beyond the end of the active file.
> I don't think so.  innd tries to write active in a size
> when mmap'ed.
Right. But I shrank the active file by hand. In ICDiovset():
memcpy(...,base,iovp->iov_len)
    where: base == ICDactpointer (mmap returned it),
           iovp->iov_len == ICDactsize (initial size of mmap'ed active)
So memcpy tried to copy data from non-existent area (near the and of the
"old" active file, before editing by hand). And this caused SIGBUS. In my
opinion of course.

> I'm not sure if the problem is OS issue.
I don't know how mmap works in other OSes but Solaris' mmap(2) says:
     The mmap() function allows [pa, pa + len) to  extend  beyond
     the  end  of  the  object both at the time of the mmap() and
     while the mapping persists, such as when the file is created
     prior  to  the  mmap() call and has no contents, or when the
     file is truncated. Any reference to addresses beyond the end
     of  the  object,  however,  will result in the delivery of a
     SIGBUS or SIGSEGV signal. The mmap() function cannot be used
     to implicitly extend the length of files.
ICDiovset() (memcpy) tried "Any reference to addresses beyond the end of
the object". That was in my case I think.

> Anyone runs innd on Solaris8 successfully?
innd works fine for me.:-) Except throttle / edit active / go.

-Mirek




More information about the inn-workers mailing list