Message52887
The calculation of the address length for AF_UNIX sockets in the getsockaddrarg function in socketmodule.c returns wrong values on platforms with padded struct sockaddr_un:
*len_ret = len + sizeof(*addr) - sizeof(addr->sun_path);
sizeof(*addr) is for example 112 on an ARM (NSLU2) platforms, while it is 110 on a i386 PC.
The correct way to calculate the length is by directly using the offset of the sun_path field:
*len_ret = len + offsetof(struct sockaddr_un, sun_path);
as suggested in the GNU libc manual:
http://www.gnu.org/software/libc/manual/html_node/Local-Socket-Example.html
The correction also needs to be applied to the makesockaddr function when reversing the above addition in the case of abstract namespace sockets on linux. |
|
Date |
User |
Action |
Args |
2007-08-23 15:59:11 | admin | link | issue1754489 messages |
2007-08-23 15:59:11 | admin | create | |
|