From patchwork Thu Jul 9 13:49:14 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Dryomov X-Patchwork-Id: 6756331 Return-Path: X-Original-To: patchwork-ceph-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 965F5C05AC for ; Thu, 9 Jul 2015 13:49:27 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id B7CA3205E4 for ; Thu, 9 Jul 2015 13:49:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D550F205E3 for ; Thu, 9 Jul 2015 13:49:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753316AbbGINtX (ORCPT ); Thu, 9 Jul 2015 09:49:23 -0400 Received: from mail-la0-f41.google.com ([209.85.215.41]:36130 "EHLO mail-la0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752128AbbGINtW (ORCPT ); Thu, 9 Jul 2015 09:49:22 -0400 Received: by lagc2 with SMTP id c2so243754921lag.3 for ; Thu, 09 Jul 2015 06:49:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id; bh=OBLEFBtZZ8BUGXczRstUd3tlStUDLiNggy+0SpXFXjI=; b=YaMX+N8Vy/aAYa45Lgohab1wKqOB1l9mivg/58cPCp9NGoJGTrSzZaS8eEWUrJh2UO SQyZ/gYGmvtfh+c3OWS1b6Pc2WFhhQ6+mLj/GnCWG31i2irgv78j3n8s5CSUMIhp4Jpl HODHkkqziyV71EEPPn0lgZirp/OeejkTe2Y09MMCXr0D2wTHjmn6utZq+ULU2M0DxMha L+wcNW9NtiRLgJ1yya/f6iolRKocr16E4AnKBBFTa0+akJn2TKdy0hksJlFxzAfU4VgB 9t+aveSG/LIGSAc0qXmA4DfyxwEeGQ6reoH843v2gtlVJuSEee4EjLM73dwyEQFsS2WZ BeUA== X-Received: by 10.152.246.37 with SMTP id xt5mr14842719lac.83.1436449761219; Thu, 09 Jul 2015 06:49:21 -0700 (PDT) Received: from localhost.localdomain ([109.110.66.238]) by smtp.gmail.com with ESMTPSA id t15sm1538071lbk.0.2015.07.09.06.49.20 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Jul 2015 06:49:20 -0700 (PDT) From: Ilya Dryomov To: ceph-devel@vger.kernel.org Subject: [PATCH] libceph: treat sockaddr_storage with uninitialized family as blank Date: Thu, 9 Jul 2015 16:49:14 +0300 Message-Id: <1436449754-34910-1-git-send-email-idryomov@gmail.com> X-Mailer: git-send-email 1.9.3 Sender: ceph-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP addr_is_blank() should return true if family is neither AF_INET nor AF_INET6. This is what its counterpart entity_addr_t::is_blank_ip() is doing and it is the right thing to do: in process_banner() we check if our address is blank and if it is "learn" it from our peer. As it is, we never learn our address and always send out a blank one. This goes way back to ceph.git commit dd732cbfc1c9 ("use sockaddr_storage; and some ipv6 support groundwork") from 2009. While at at, do not open-code ipv6_addr_any() and use INADDR_ANY constant instead of 0. Signed-off-by: Ilya Dryomov Reviewed-by: Sage Weil --- net/ceph/messenger.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index 726a57af760f..101ab6285fba 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -1732,17 +1732,17 @@ static int verify_hello(struct ceph_connection *con) static bool addr_is_blank(struct sockaddr_storage *ss) { + struct in_addr *addr = &((struct sockaddr_in *)ss)->sin_addr; + struct in6_addr *addr6 = &((struct sockaddr_in6 *)ss)->sin6_addr; + switch (ss->ss_family) { case AF_INET: - return ((struct sockaddr_in *)ss)->sin_addr.s_addr == 0; + return addr->s_addr == htonl(INADDR_ANY); case AF_INET6: - return - ((struct sockaddr_in6 *)ss)->sin6_addr.s6_addr32[0] == 0 && - ((struct sockaddr_in6 *)ss)->sin6_addr.s6_addr32[1] == 0 && - ((struct sockaddr_in6 *)ss)->sin6_addr.s6_addr32[2] == 0 && - ((struct sockaddr_in6 *)ss)->sin6_addr.s6_addr32[3] == 0; + return ipv6_addr_any(addr6); + default: + return true; } - return false; } static int addr_port(struct sockaddr_storage *ss)