From owner-freebsd-current Mon Oct 21 07:30:24 1996 Return-Path: owner-current Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id HAA15257 for current-outgoing; Mon, 21 Oct 1996 07:30:24 -0700 (PDT) Received: from halloran-eldar.lcs.mit.edu (halloran-eldar.lcs.mit.edu [18.26.0.159]) by freefall.freebsd.org (8.7.5/8.7.3) with SMTP id HAA15249 for ; Mon, 21 Oct 1996 07:30:20 -0700 (PDT) Received: by halloran-eldar.lcs.mit.edu; (5.65v3.2/1.1.8.2/19Aug95-0530PM) id AA13042; Mon, 21 Oct 1996 10:30:07 -0400 Date: Mon, 21 Oct 1996 10:30:07 -0400 From: Garrett Wollman Message-Id: <9610211430.AA13042@halloran-eldar.lcs.mit.edu> To: Jean-Marc Zucconi Cc: freebsd-current@freebsd.org Subject: socket (AF_UNIX) bug In-Reply-To: <9610210218.AA09736@cabri.obs-besancon.fr> References: <9610210218.AA09736@cabri.obs-besancon.fr> Sender: owner-current@freebsd.org X-Loop: FreeBSD.org Precedence: bulk < said: > The following code creates a socket whose name is 1 char too > short. A workaround is to add 1 to addrlen before calling bind, but I > think that the code should work as is. The code is wrong. > strncpy (sockaddr.sun_path, path, sizeof(sockaddr.sun_path)); > addrlen = sizeof(sockaddr.sun_family) + strlen(path); sizeof(sockaddr.sun_family) == 1 offsetof(struct sockaddr_un, sun_path) == 2 This would be clearer if the sockaddr were properly initialized; i.e.: > strncpy (sockaddr.sun_path, path, sizeof(sockaddr.sun_path)); sockaddr.sun_len = offsetof(struct sockaddr_un, sun_path) + min(strlen(path), sizeof(sockaddr.sun_path)); > addrlen = sizeof(sockaddr.sun_family) + min(strlen(path), sizeof(sockaddr.sun_path)); /* alternatively, addrlen = sockaddr.sun_len */ -GAWollman -- Garrett A. Wollman | O Siem / We are all family / O Siem / We're all the same wollman@lcs.mit.edu | O Siem / The fires of freedom Opinions not those of| Dance in the burning flame MIT, LCS, ANA, or NSA| - Susan Aglukark and Chad Irschick