From owner-freebsd-bugs@FreeBSD.ORG Mon Apr 3 18:40:22 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 61DEA16A400 for ; Mon, 3 Apr 2006 18:40:22 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0B07343D72 for ; Mon, 3 Apr 2006 18:40:17 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k33IeGOJ041396 for ; Mon, 3 Apr 2006 18:40:16 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k33IeGxZ041395; Mon, 3 Apr 2006 18:40:16 GMT (envelope-from gnats) Resent-Date: Mon, 3 Apr 2006 18:40:16 GMT Resent-Message-Id: <200604031840.k33IeGxZ041395@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Qiao Yang Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B7C6316A400 for ; Mon, 3 Apr 2006 18:37:22 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 85F9043D46 for ; Mon, 3 Apr 2006 18:37:22 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.13.1/8.13.1) with ESMTP id k33IbMoD044848 for ; Mon, 3 Apr 2006 18:37:22 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.13.1/8.13.1/Submit) id k33IbMhv044847; Mon, 3 Apr 2006 18:37:22 GMT (envelope-from nobody) Message-Id: <200604031837.k33IbMhv044847@www.freebsd.org> Date: Mon, 3 Apr 2006 18:37:22 GMT From: Qiao Yang To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Cc: Subject: kern/95277: IP Encapsulation mask_match() returns wrong results X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Apr 2006 18:40:22 -0000 >Number: 95277 >Category: kern >Synopsis: IP Encapsulation mask_match() returns wrong results >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Apr 03 18:40:16 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Qiao Yang >Release: 5.4 >Organization: St Bernard Software >Environment: >Description: As documented in the code, /* * We prioritize the matches by using bit length of the * matches. mask_match() and user-supplied matching function * should return the bit length of the matches (for example, * if both src/dst are matched for IPv4, 64 should be returned). * 0 or negative return value means "it did not match". */ But in mask_match(), it use "struct sockaddr" to do byte-array comparison when applying the network mask. The problem is that this mask is applied to the whole 'struct sockaddr' data structure. Because 'struct sockaddr' includes both sa_len and sa_family, the result match_len will not be 0 even when the network mask is 0.0.0.0. And, if both src/dst are matched for IPv4, 88 instead of 64 is returned. This causes problem for protocols which want to set 0.0.0.0 netmask on the tunnel end. >How-To-Repeat: Just read the code. >Fix: When doing byte-array comparison, use sockaddr.sa_data instead of sockaddr. >Release-Note: >Audit-Trail: >Unformatted: