From patchwork Tue Jul 19 20:05:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thadeu Lima de Souza Cascardo X-Patchwork-Id: 650430 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id 3rv9z10VW9z9sR8 for ; Wed, 20 Jul 2016 06:06:05 +1000 (AEST) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id F0A3C10B72; Tue, 19 Jul 2016 13:06:03 -0700 (PDT) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx1e4.cudamail.com (mx1.cudamail.com [69.90.118.67]) by archives.nicira.com (Postfix) with ESMTPS id E373B10B71 for ; Tue, 19 Jul 2016 13:06:02 -0700 (PDT) Received: from bar5.cudamail.com (unknown [192.168.21.12]) by mx1e4.cudamail.com (Postfix) with ESMTPS id 1B8661E0836 for ; Tue, 19 Jul 2016 14:06:02 -0600 (MDT) X-ASG-Debug-ID: 1468958760-09eadd30a9de6a0001-byXFYA Received: from mx1-pf2.cudamail.com ([192.168.24.2]) by bar5.cudamail.com with ESMTP id QhyXRZT3QHnBgaV7 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 19 Jul 2016 14:06:00 -0600 (MDT) X-Barracuda-Envelope-From: cascardo@redhat.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.24.2 Received: from unknown (HELO mx1.redhat.com) (209.132.183.28) by mx1-pf2.cudamail.com with ESMTPS (DHE-RSA-AES256-SHA encrypted); 19 Jul 2016 20:05:59 -0000 Received-SPF: pass (mx1-pf2.cudamail.com: SPF record at _spf1.redhat.com designates 209.132.183.28 as permitted sender) X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-Barracuda-RBL-IP: 209.132.183.28 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 042197EAA3 for ; Tue, 19 Jul 2016 20:05:58 +0000 (UTC) Received: from indiana.gru.redhat.com ([10.96.65.236]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u6JK5uua003668 for ; Tue, 19 Jul 2016 16:05:57 -0400 X-CudaMail-Envelope-Sender: cascardo@redhat.com From: Thadeu Lima de Souza Cascardo To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-E2-718065938 X-CudaMail-DTE: 071916 X-CudaMail-Originating-IP: 209.132.183.28 Date: Tue, 19 Jul 2016 17:05:51 -0300 X-ASG-Orig-Subj: [##CM-E2-718065938##][PATCH] stream-unix: only use path-based socket names Message-Id: <1468958751-16836-1-git-send-email-cascardo@redhat.com> In-Reply-To: <20160718181350.GJ26424@ovn.org> References: <20160718181350.GJ26424@ovn.org> References: <1467982913-18897-1-git-send-email-cascardo@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 19 Jul 2016 20:05:58 +0000 (UTC) X-Barracuda-Connect: UNKNOWN[192.168.24.2] X-Barracuda-Start-Time: 1468958760 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 Subject: [ovs-dev] [PATCH] stream-unix: only use path-based socket names X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" FreeBSD returns a socklen of sockaddr_storage when doing an accept on an unix STREAM socket. The current code will assume it means a sun_path larger than 0. That breaks some tests like the one below which don't expect to find "unix::" on the logs. As a Linux abstract address would not have a more useful name either, it's better to check that sun_path starts with a non-zero byte and return 0 length in case it doesn't. 402: ovs-ofctl replace-flows with --bundle FAILED (ovs-ofctl.at:2928) 2016-07-08T12:44:30.068Z|00020|vconn|DBG|unix:: sent (Success): OFPT_HELLO (OF1.6) (xid=0x1): Signed-off-by: Thadeu Lima de Souza Cascardo --- lib/socket-util-unix.c | 5 +++-- lib/socket-util.h | 3 ++- lib/stream-unix.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/socket-util-unix.c b/lib/socket-util-unix.c index 32f966d..5d4b88c 100644 --- a/lib/socket-util-unix.c +++ b/lib/socket-util-unix.c @@ -387,9 +387,10 @@ error: } int -get_unix_name_len(socklen_t sun_len) +get_unix_name_len(const struct sockaddr_un *sun, socklen_t sun_len) { - return (sun_len >= offsetof(struct sockaddr_un, sun_path) + return (sun_len >= offsetof(struct sockaddr_un, sun_path) && + sun->sun_path[0] != 0 ? sun_len - offsetof(struct sockaddr_un, sun_path) : 0); } diff --git a/lib/socket-util.h b/lib/socket-util.h index c3c1224..5bf76a4 100644 --- a/lib/socket-util.h +++ b/lib/socket-util.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include "openvswitch/types.h" @@ -84,7 +85,7 @@ int drain_rcvbuf(int fd); int make_unix_socket(int style, bool nonblock, const char *bind_path, const char *connect_path); -int get_unix_name_len(socklen_t sun_len); +int get_unix_name_len(const struct sockaddr_un *sun, socklen_t sun_len); /* Helpers for calling ioctl() on an AF_INET socket. */ struct ifreq; diff --git a/lib/stream-unix.c b/lib/stream-unix.c index cadd180..6424d3e 100644 --- a/lib/stream-unix.c +++ b/lib/stream-unix.c @@ -110,7 +110,7 @@ punix_accept(int fd, const struct sockaddr_storage *ss, size_t ss_len, struct stream **streamp) { const struct sockaddr_un *sun = (const struct sockaddr_un *) ss; - int name_len = get_unix_name_len(ss_len); + int name_len = get_unix_name_len(sun, ss_len); char name[128]; if (name_len > 0) {