classification
Title: Non-portable address length calculation for AF_UNIX sockets
Type: behavior Stage:
Components: Extension Modules Versions: Python 3.0, Python 2.6
process
Status: closed Resolution: accepted
Dependencies: Superseder:
Assigned To: loewis Nosy List: arigo, loewis, vlahan
Priority: normal Keywords: patch

Created on 2007-07-15 23:07 by vlahan, last changed 2008-01-23 14:07 by arigo. This issue is now closed.

Files
File name Uploaded Description Edit
addrlen_using_offsetof.patch vlahan, 2007-07-15 23:07 Portable calculation of AF_UNIX address length patch
Messages (4)
msg52887 - (view) Author: Vlado Handziski (vlahan) Date: 2007-07-15 23:07
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.
msg59008 - (view) Author: Armin Rigo (arigo) * (Python committer) Date: 2007-12-27 10:50
The patch looks ok on 2.6, I recommend checking it there.  (Due to line
number changes in socketmodule.c, the patch gives a warning, but it is
still otherwise up-to-date.)
msg61390 - (view) Author: Vlado Handziski (vlahan) Date: 2008-01-21 13:25
So what is the procedure for checking in the patch? I don't have a
commit access to the repository to do it myself...
msg61580 - (view) Author: Armin Rigo (arigo) * (Python committer) Date: 2008-01-23 14:07
Checked in as r60214.
History
Date User Action Args
2008-01-23 14:07:48arigosetstatus: open -> closed
resolution: accepted
messages: + msg61580
2008-01-21 13:25:23vlahansetmessages: + msg61390
2007-12-27 10:50:14arigosetnosy: + arigo
messages: + msg59008
2007-12-11 09:28:01christian.heimessetassignee: loewis
nosy: + loewis
2007-12-10 23:11:43christian.heimessettype: behavior
versions: + Python 2.6, Python 3.0
2007-07-15 23:07:19vlahancreate