Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp906651pxb; Wed, 6 Apr 2022 03:56:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx7TE/7jryij9xg4i2FF6emC8FSScR/Dkdi0Wp5HPa1yGRkDHJBbMeu53ozCs1qJ5M55YN9 X-Received: by 2002:a05:6a00:815:b0:4fb:e46:511c with SMTP id m21-20020a056a00081500b004fb0e46511cmr8149812pfk.54.1649242583608; Wed, 06 Apr 2022 03:56:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649242583; cv=none; d=google.com; s=arc-20160816; b=H/Zhk5md8MNd9TIfMOPQqSYQqZ9Am3PMUeGJ0xbJ3w/OKBObM9WkLrjDXCe88Ehtyk sGBJFtd0ObyIjYGW9i2RFijzkriae0585eBK7X0N0BRoDeSEpJT336anC1drygP7R2Hy 2Uyiht27ErLznyd5m+7bxO6aUithXlKlkfSids2afU3ZVSVinsp37NPK+fxcMpJvbOwB vNWG9zaV1MUGwo+jm0Lg8YyxwOTniP3xRAoUGN4WbFDdwkmnnTd+QQpFEEymXubYEF4B 3iNlER6YQOCirG0YNXmRmWGmZx1mw25vqqj83aI9Oj386yu/i3hboOAk78weYjEuajEI mudA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Ei7QWn7rYbOLoGD8ImQ7EG+kQpY4ynH3x20HmicKj44=; b=v2iow7FTNfuIFN71qe3WrLv3fDhpbsfa9Iw4AiKjpggPbiBFHSa8lMV8nML9OoLWd0 4/B61YcDae393mU7y64Peli678oGATcb+B8LzJ1cNhJZIgaoZdm7Oalakljqjp9veaPu WLjR7VT3wr+f7/uCLSev2aaXPqkv1jGEXps4vlMgGJCbjbZOwe1coqUUfrXYwkzW7WON wQ0DSz0Pq6rtV6VysCOYT//aqsLnHOkUfeWYJ2hUXoQxzCZpqUXoWEqi3DVF1IR3PIgl 3EEbUepVB4AOjYKyxB4ZjcpFVnhHJlTWWBM0/3a2zMc7xGWg6ISD5IElEUmToBk47MVQ pO1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rsTmzPp4; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id j13-20020a63ec0d000000b003980ae22575si14775972pgh.438.2022.04.06.03.56.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Apr 2022 03:56:23 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rsTmzPp4; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2B3A03E68ED; Wed, 6 Apr 2022 02:14:45 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1841801AbiDFBZv (ORCPT + 99 others); Tue, 5 Apr 2022 21:25:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57390 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356071AbiDEKWv (ORCPT ); Tue, 5 Apr 2022 06:22:51 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 144D6B0A4A; Tue, 5 Apr 2022 03:05:54 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id BE035B81B7A; Tue, 5 Apr 2022 10:05:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2E323C385A2; Tue, 5 Apr 2022 10:05:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649153151; bh=1srLbwnp+33mPNfQrlU4NgdphoWy2lW4na0w7ivP5IM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rsTmzPp4nG0VL3O7GrslZznBD+dfkzYIglRzgC2nbOzNymg7gSnqYdMLGGWS3iKGH 4eRkNibNmSwC+C08j6YpBXSEBeLJoV/zVvDztVO3zZ3umoYXyNgY/cYaq5+Q7iR6ob Ch3y42CEcKoGusyo9/ifUKjgXaO8DzhuX3OPLK48= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, syzbot+2339c27f5c66c652843e@syzkaller.appspotmail.com, Oliver Hartkopp , Marc Kleine-Budde Subject: [PATCH 5.10 081/599] can: isotp: sanitize CAN ID checks in isotp_bind() Date: Tue, 5 Apr 2022 09:26:15 +0200 Message-Id: <20220405070301.236975712@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405070258.802373272@linuxfoundation.org> References: <20220405070258.802373272@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Oliver Hartkopp commit 3ea566422cbde9610c2734980d1286ab681bb40e upstream. Syzbot created an environment that lead to a state machine status that can not be reached with a compliant CAN ID address configuration. The provided address information consisted of CAN ID 0x6000001 and 0xC28001 which both boil down to 11 bit CAN IDs 0x001 in sending and receiving. Sanitize the SFF/EFF CAN ID values before performing the address checks. Fixes: e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol") Link: https://lore.kernel.org/all/20220316164258.54155-1-socketcan@hartkopp.net Reported-by: syzbot+2339c27f5c66c652843e@syzkaller.appspotmail.com Signed-off-by: Oliver Hartkopp Signed-off-by: Marc Kleine-Budde Signed-off-by: Greg Kroah-Hartman --- net/can/isotp.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) --- a/net/can/isotp.c +++ b/net/can/isotp.c @@ -1102,6 +1102,7 @@ static int isotp_bind(struct socket *soc struct net *net = sock_net(sk); int ifindex; struct net_device *dev; + canid_t tx_id, rx_id; int err = 0; int notify_enetdown = 0; int do_rx_reg = 1; @@ -1109,8 +1110,18 @@ static int isotp_bind(struct socket *soc if (len < ISOTP_MIN_NAMELEN) return -EINVAL; - if (addr->can_addr.tp.tx_id & (CAN_ERR_FLAG | CAN_RTR_FLAG)) - return -EADDRNOTAVAIL; + /* sanitize tx/rx CAN identifiers */ + tx_id = addr->can_addr.tp.tx_id; + if (tx_id & CAN_EFF_FLAG) + tx_id &= (CAN_EFF_FLAG | CAN_EFF_MASK); + else + tx_id &= CAN_SFF_MASK; + + rx_id = addr->can_addr.tp.rx_id; + if (rx_id & CAN_EFF_FLAG) + rx_id &= (CAN_EFF_FLAG | CAN_EFF_MASK); + else + rx_id &= CAN_SFF_MASK; if (!addr->can_ifindex) return -ENODEV; @@ -1122,21 +1133,13 @@ static int isotp_bind(struct socket *soc do_rx_reg = 0; /* do not validate rx address for functional addressing */ - if (do_rx_reg) { - if (addr->can_addr.tp.rx_id == addr->can_addr.tp.tx_id) { - err = -EADDRNOTAVAIL; - goto out; - } - - if (addr->can_addr.tp.rx_id & (CAN_ERR_FLAG | CAN_RTR_FLAG)) { - err = -EADDRNOTAVAIL; - goto out; - } + if (do_rx_reg && rx_id == tx_id) { + err = -EADDRNOTAVAIL; + goto out; } if (so->bound && addr->can_ifindex == so->ifindex && - addr->can_addr.tp.rx_id == so->rxid && - addr->can_addr.tp.tx_id == so->txid) + rx_id == so->rxid && tx_id == so->txid) goto out; dev = dev_get_by_index(net, addr->can_ifindex); @@ -1160,8 +1163,7 @@ static int isotp_bind(struct socket *soc ifindex = dev->ifindex; if (do_rx_reg) - can_rx_register(net, dev, addr->can_addr.tp.rx_id, - SINGLE_MASK(addr->can_addr.tp.rx_id), + can_rx_register(net, dev, rx_id, SINGLE_MASK(rx_id), isotp_rcv, sk, "isotp", sk); dev_put(dev); @@ -1181,8 +1183,8 @@ static int isotp_bind(struct socket *soc /* switch to new settings */ so->ifindex = ifindex; - so->rxid = addr->can_addr.tp.rx_id; - so->txid = addr->can_addr.tp.tx_id; + so->rxid = rx_id; + so->txid = tx_id; so->bound = 1; out: