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

Bug#512437: 32bit nscd can't serve 64bit clients



Package: nscd
Version: 2.7-18
Severity: normal

Hi,

due to complicated circumstances it is perhaps not important to go into
here, I have an nscd instance, compiled for i386, that should serve a mix of
i386 and amd64 clients over the same unix domain socket (imagine, for
example, chroots with different architectures).

Apparently, some structure is aligned in an unfortunate way or maybe missing
a 'packed' attribute; while 32bit clients can query nscd fine, queries from
64bit clients fail.

I have obtained straces of the two kinds of behaviour.

Good (i386 client):

connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = 0
send(3, "\x02\x00\x00\x00\x0b\x00\x00\x00\x07\x00\x00\x00\x70\x61\x73\x73\x77\x64\x00"..., 19, MSG_NOSIGNAL) = 19
poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 1 ([{fd=3, revents=POLLIN|POLLHUP}])
recvmsg(3, {msg_name(0)=NULL, msg_iov(2)=[{"\x70\x61\x73\x73\x77\x64\x00"..., 7}, {"\xb8\x4f\x03\x00\x00\x00\x00\x00"..., 8}], msg_controllen=16, {cmsg_len=16, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, {4}}, msg_flags=0}, MSG_CMSG_CLOEXEC) = 15
mmap2(NULL, 217016, PROT_READ, MAP_SHARED, 4, 0) = 0xf7d8a000
close(4)                                = 0
close(3)                                = 0
fstat64(1, {st_dev=makedev(0, 10), st_ino=22, st_mode=S_IFCHR|0620, st_nlink=1, st_uid=0, st_gid=5, st_blksize=1024, st_blocks=0, st_rdev=makedev(136, 20), st_atime=2009/01/20-18:46:57, st_mtime=2009/01/20-18:46:57, st_ctime=2009/01/20-18:31:00}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7f06000
write(1, "foobar:x:1061:1061:foo bar:/home/foobar:/bin/bash\n"..., 55) = 55
exit_group(0)                           = ?

Bad (amd64 client):

connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = 0
sendto(3, "\x02\x00\x00\x00\x0b\x00\x00\x00\x07\x00\x00\x00\x70\x61\x73\x73\x77\x64\x00"..., 19, MSG_NOSIGNAL, NULL, 0) = 19
poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 1 ([{fd=3, revents=POLLIN|POLLHUP}])
recvmsg(3, {msg_name(0)=NULL, msg_iov(2)=[{"\x70\x61\x73\x73\x77\x64\x00"..., 7}, {"\xb8\x4f\x03\x00\x00\x00\x00\x00"..., 8}], msg_controllen=24, {cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, {4}}, msg_flags=0}, MSG_CMSG_CLOEXEC) = 15
mmap(NULL, 217016, PROT_READ, MAP_SHARED, 4, 0) = 0x2ac05280d000
close(4)                                = 0
close(3)                                = 0
exit_group(2)                           = ?

I imagine the problem may be related to

msg_controllen=16, {cmsg_len=16, cmsg_level=SOL_SOCKET, ...

vs.

msg_controllen=24, {cmsg_len=20, cmsg_level=SOL_SOCKET, ...

It would be great not to have to run two instances of nscd that both cache
the same backend.

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386

Kernel: Linux 2.6.22.19-vs2.2.0.7-stop
Locale: LANG=C, LC_CTYPE=C
Shell: /bin/sh linked to /bin/bash

Best regards,

Andras

-- 
                 Andras Korn <korn at chardonnay.math.bme.hu>
                 <http://chardonnay.math.bme.hu/~korn/>	QOTD:
                All generalizations are false (incl. this one)



Reply to: