Squatter BUS error.
Andy Fiddaman
cyrus at fiddaman.net
Wed Jun 30 04:05:08 EDT 2004
I am running Cyrus IMAP 2.2.6 as a 64-bit binary on Solaris 9. I don't
know whether this is officially supported but it is running perfectly
apart from one small problem; that squatter crashes when indexing
mailboxes due to an address alignment error.
The crash is being caused by the ntohl() call in annotate.c:split_attribs()
(Note that on this architecture, an unsigned long is 64-bits)
attrib->size = (size_t) ntohl(*(unsigned long *) data);
Changing this line to
attrib->size = (size_t) ntohl(*(uint32_t *) data);
stops the crashes but I don't know enough about what's going on here to
know if this is a good fix.
If anyone has any ideas about the proper way to fix this that would be
appreciated.
Thanks,
Andy
12588/1: Incurred fault #5, FLTACCESS %pc = 0x100030D30
12588/1: siginfo: SIGBUS BUS_ADRALN addr=0xFFFFFFFF7CF00334
12588/1: Received signal #10, SIGBUS [default]
12588/1: siginfo: SIGBUS BUS_ADRALN addr=0xFFFFFFFF7CF00334
(gdb) where
#0 split_attribs (
data=0xffffffff7cf00334 <Address 0xffffffff7cf00334 out of bounds>,
datalen=32, attrib=0xffffffff7fffce30) at sys/byteorder.h:139
#1 0x00000001000329e4 in annotatemore_lookup (
mboxname=0xffffffff7cf00334 <Address 0xffffffff7cf00334 out of bounds>,
entry=0x20 <Address 0x20 out of bounds>, userid=0xffffffff7fffce30 "",
attrib=0xffffffff7fffce30) at annotate.c:1199
#2 0x0000000100008bd8 in index_me (
name=0xffffffff7fffe1b0 "mydomainx.co.uk!user.xx", matchlen=23,
maycreate=1, rock=0xffffffff7fffe0e0) at squatter.c:319
#3 0x000000010002284c in find_cb (rockp=0xffffffff7fffe940,
key=0xffffffff7ce004a4 <Address 0xffffffff7ce004a4 out of bounds>,
keylen=23,
data=0xffffffff7ce004c0 <Address 0xffffffff7ce004c0 out of bounds>,
datalen=62) at mboxlist.c:1853
#4 0x0000000100044ab4 in myforeach (db=0x1001e0e30,
prefix=0xffffffff7fffe560 "*", prefixlen=0, goodp=0x10002238c <find_p>,
cb=0x1000226f8 <find_cb>, rock=0xffffffff7fffe940, tid=0x0)
at sys/byteorder.h:141
#5 0x0000000100022f2c in mboxlist_findall (namespace=0x1001d2f28,
pattern=0xffffffff7fffea80 "*", isadmin=1, userid=0x0, auth_state=0x0,
proc=0x1000084ac <index_me>, rock=0xffffffff7fffe940) at mboxlist.c:2032
#6 0x0000000100009150 in main (argc=2, argv=0xffffffff7ffffb58)
at squatter.c:529
(gdb) frame 0
#0 split_attribs (
data=0xffffffff7cf00334 <Address 0xffffffff7cf00334 out of bounds>,
datalen=32, attrib=0xffffffff7fffce50) at sys/byteorder.h:139
139 {
(gdb) list
134
135 /* Convert a network long to a host long. */
136
137 static __inline__ unsigned long
138 ntohl (unsigned long __arg)
139 {
140 return htonl (__arg);
141 }
---
Cyrus Home Page: http://asg.web.cmu.edu/cyrus
Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html
More information about the Info-cyrus
mailing list