Received: by 2002:a17:90a:bc8d:0:0:0:0 with SMTP id x13csp1572058pjr; Mon, 18 May 2020 16:44:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxej9bQ5FsSf/gIo7TtQkhCkgAAr4S5dlaAlb46HFXP8fXdUW40b8HY0OlASjfqQx8sM+CU X-Received: by 2002:aa7:cb4f:: with SMTP id w15mr16034353edt.239.1589845470809; Mon, 18 May 2020 16:44:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589845470; cv=none; d=google.com; s=arc-20160816; b=R3VypRtEg2lldnRdPHKXRxv7Qa8cL/gB5TpC63FV7RbUOpwgsAHxd2Ie0aw6IwAY+2 D15fRA8CGjO3jfqkd8H1bw/CXj1qta+dXmVsF+Oj9Rj2t66qNfOOo0cjNTMl1GJnAcQl DxPb7akIubwI/zcF2uaBQynkPQN3HJYyxz4YZ5yAfyd0w8fFVQutSNCRkPagZZWsc1L9 x0/yC99Cp2vWgdve4/wx2gxS2nZi6XiX+tn7aH5Se0/wqpSIC2p/EylZpRTC8UeANE2N WjgKp6VSNag14P8nmBc0iQcXhJAsKkxE4mKAUEbd6EpiAxuqFViauLskZIy8YgydEEPI qtgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=bmTaXr5Az43gp7mDoMfnM5QSkVl/U05jvUD8Gt6IlEw=; b=CydY+UZwer0Kjac1hrWRPVUWDiiIZEp9DqzLoroS4f9qj9rn1R+kZmv8TkFUjVCpCW dBhLFbO/FqJYWxwJPboFDs+8stHJjfr59FQKpomEQcEeX2v6Iwxz0BMT4UpGrJ+brkC9 7FflumRQvWBqyx/poEidQltKNF7DAvYn1m0u02bKU/pxgJYz+lSXgWnLVNSDHcMZ72kM APgVs4FylhcPA8SSTr0o/+qtx+NUnXi59JejSR3RCtcUno4A4/MhsY6kWNKEYS9RxqJd 1Bqa5XOBrp0vT1mHJcUJg9rqHeSDFJKGnE5T3CUtNdCj+XFQFKkhLwFRcC/9PMNe1CdT mplQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=L7KoGMbv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e22si7504410eje.203.2020.05.18.16.44.07; Mon, 18 May 2020 16:44:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=L7KoGMbv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731289AbgERRyW (ORCPT + 99 others); Mon, 18 May 2020 13:54:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:58946 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731280AbgERRyU (ORCPT ); Mon, 18 May 2020 13:54:20 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D5FF2207C4; Mon, 18 May 2020 17:54:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589824460; bh=vJwxjENKjponhZzinjr7aum5pc/rXKXOdzUWMBC5U60=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L7KoGMbvdggu90Akxl8kM6oYfnYs/HAbP2DZPOFP3fRw8lBVy40PmcNT6pxeirSeK GNAb7au3Wb52kmrTnImbDNQ6Phv1UWK3ek7yI9lv4n6hUXpotpOueU6R/ZV7d4nkZv VHRjiYaDf0uAbhb7V8M/aQHwbWyrQAFx394152wE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Matthew Sheets , Paolo Abeni , Paul Moore , "David S. Miller" Subject: [PATCH 5.4 020/147] netlabel: cope with NULL catmap Date: Mon, 18 May 2020 19:35:43 +0200 Message-Id: <20200518173516.304392838@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200518173513.009514388@linuxfoundation.org> References: <20200518173513.009514388@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Paolo Abeni [ Upstream commit eead1c2ea2509fd754c6da893a94f0e69e83ebe4 ] The cipso and calipso code can set the MLS_CAT attribute on successful parsing, even if the corresponding catmap has not been allocated, as per current configuration and external input. Later, selinux code tries to access the catmap if the MLS_CAT flag is present via netlbl_catmap_getlong(). That may cause null ptr dereference while processing incoming network traffic. Address the issue setting the MLS_CAT flag only if the catmap is really allocated. Additionally let netlbl_catmap_getlong() cope with NULL catmap. Reported-by: Matthew Sheets Fixes: 4b8feff251da ("netlabel: fix the horribly broken catmap functions") Fixes: ceba1832b1b2 ("calipso: Set the calipso socket label to match the secattr.") Signed-off-by: Paolo Abeni Acked-by: Paul Moore Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/ipv4/cipso_ipv4.c | 6 ++++-- net/ipv6/calipso.c | 3 ++- net/netlabel/netlabel_kapi.c | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) --- a/net/ipv4/cipso_ipv4.c +++ b/net/ipv4/cipso_ipv4.c @@ -1258,7 +1258,8 @@ static int cipso_v4_parsetag_rbm(const s return ret_val; } - secattr->flags |= NETLBL_SECATTR_MLS_CAT; + if (secattr->attr.mls.cat) + secattr->flags |= NETLBL_SECATTR_MLS_CAT; } return 0; @@ -1439,7 +1440,8 @@ static int cipso_v4_parsetag_rng(const s return ret_val; } - secattr->flags |= NETLBL_SECATTR_MLS_CAT; + if (secattr->attr.mls.cat) + secattr->flags |= NETLBL_SECATTR_MLS_CAT; } return 0; --- a/net/ipv6/calipso.c +++ b/net/ipv6/calipso.c @@ -1047,7 +1047,8 @@ static int calipso_opt_getattr(const uns goto getattr_return; } - secattr->flags |= NETLBL_SECATTR_MLS_CAT; + if (secattr->attr.mls.cat) + secattr->flags |= NETLBL_SECATTR_MLS_CAT; } secattr->type = NETLBL_NLTYPE_CALIPSO; --- a/net/netlabel/netlabel_kapi.c +++ b/net/netlabel/netlabel_kapi.c @@ -734,6 +734,12 @@ int netlbl_catmap_getlong(struct netlbl_ if ((off & (BITS_PER_LONG - 1)) != 0) return -EINVAL; + /* a null catmap is equivalent to an empty one */ + if (!catmap) { + *offset = (u32)-1; + return 0; + } + if (off < catmap->startbit) { off = catmap->startbit; *offset = off;