From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECFC520C029 for ; Mon, 4 May 2026 07:46:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777880791; cv=none; b=amCuR3R2oEPnbn7fCy8lLjKlUOcHT8MD0IY6Z+ntKxlncyjD98h208T5mZDEni/AZRLvOF0yt2A67q/yzCWPxT360eIOMkSVjDx6dSCLp9qITAA7axfzTd97ggt3zxNS8g87oTmJotBoTVbSglQW6OYIn5Tq3Z3EWZ7xszA8564= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777880791; c=relaxed/simple; bh=8bbTe/9Lr2I4/0Ka0JT1SotbCwWSc7HM+LGBRclXJiQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WWEM6/iZ4PU9ePilICSUJlSMzqK2E+a3oP4V137zgx/xmkEZKoFOGq/qWno5ggGhpaQRQ5W5KrxMIuXTDq4dse4W3/0NntJpVsAZ/q80EoJK85ntCBvCKFmltFCdEwBmlXTK7SLbTDM4l+f7g47aij1hsniEkeKqJjDKaTUcAP0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NW72TYYU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NW72TYYU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2BA47C2BCB8; Mon, 4 May 2026 07:46:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1777880790; bh=8bbTe/9Lr2I4/0Ka0JT1SotbCwWSc7HM+LGBRclXJiQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NW72TYYUnSJ4oI8En20mAHuxp1JZGWMxkWZ48ZGgxFJGWzwwegztyMhYpzmG/PzUw 8mKacLmJ2zPbvlY1JjrrsXucUGZCod/7td8zSmwYGiChdRcwHyFCnS93PfB5Bz6Xyf xi/L9Pmf1MK+YGSHmgUFjey9k+ToCmc8j3BCM45zR9JbHGwC4pdhTTZ8utVfNU4I0h muwFpO2gjXSEkvTODtLkdItj4UQIZKQh8kFM+J0JY7IjTk3rqdeszyiEF5/VWnPSPu eXAqpN4xlnZRlF0kmgMRt44KfkjWzxI0csA81yxOYeEZO8/SU5m7daMhPVdPZs3fiG hZLJnmRHzFc7Q== From: Sasha Levin To: stable@vger.kernel.org Cc: Yuan Zhaoming , Jeremy Kerr , Jakub Kicinski , Sasha Levin Subject: [PATCH 6.12.y] net: mctp: fix don't require received header reserved bits to be zero Date: Mon, 4 May 2026 03:46:22 -0400 Message-ID: <20260504074622.1856099-1-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <2026050122-herring-charting-9169@gregkh> References: <2026050122-herring-charting-9169@gregkh> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Yuan Zhaoming [ Upstream commit a663bac71a2f0b3ac6c373168ca57b2a6e6381aa ] >From the MCTP Base specification (DSP0236 v1.2.1), the first byte of the MCTP header contains a 4 bit reserved field, and 4 bit version. On our current receive path, we require those 4 reserved bits to be zero, but the 9500-8i card is non-conformant, and may set these reserved bits. DSP0236 states that the reserved bits must be written as zero, and ignored when read. While the device might not conform to the former, we should accept these message to conform to the latter. Relax our check on the MCTP version byte to allow non-zero bits in the reserved field. Fixes: 889b7da23abf ("mctp: Add initial routing framework") Signed-off-by: Yuan Zhaoming Cc: stable@vger.kernel.org Acked-by: Jeremy Kerr Link: https://patch.msgid.link/20260417141340.5306-1-yuanzhaoming901030@126.com Signed-off-by: Jakub Kicinski [ Context ] Signed-off-by: Sasha Levin --- include/net/mctp.h | 3 +++ net/mctp/route.c | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/net/mctp.h b/include/net/mctp.h index 28d59ae94ca3b..5819f2ef77189 100644 --- a/include/net/mctp.h +++ b/include/net/mctp.h @@ -26,6 +26,9 @@ struct mctp_hdr { #define MCTP_VER_MIN 1 #define MCTP_VER_MAX 1 +/* Definitions for ver field */ +#define MCTP_HDR_VER_MASK GENMASK(3, 0) + /* Definitions for flags_seq_tag field */ #define MCTP_HDR_FLAG_SOM BIT(7) #define MCTP_HDR_FLAG_EOM BIT(6) diff --git a/net/mctp/route.c b/net/mctp/route.c index 08bbd861dc42e..ccba2abbbbfbc 100644 --- a/net/mctp/route.c +++ b/net/mctp/route.c @@ -388,6 +388,7 @@ static int mctp_route_input(struct mctp_route *route, struct sk_buff *skb) unsigned long f; u8 tag, flags; int rc; + u8 ver; msk = NULL; rc = -EINVAL; @@ -411,7 +412,8 @@ static int mctp_route_input(struct mctp_route *route, struct sk_buff *skb) netid = mctp_cb(skb)->net; skb_pull(skb, sizeof(struct mctp_hdr)); - if (mh->ver != 1) + ver = mh->ver & MCTP_HDR_VER_MASK; + if (ver < MCTP_VER_MIN || ver > MCTP_VER_MAX) goto out; flags = mh->flags_seq_tag & (MCTP_HDR_FLAG_SOM | MCTP_HDR_FLAG_EOM); @@ -1197,6 +1199,7 @@ static int mctp_pkttype_receive(struct sk_buff *skb, struct net_device *dev, struct mctp_skb_cb *cb; struct mctp_route *rt; struct mctp_hdr *mh; + u8 ver; rcu_read_lock(); mdev = __mctp_dev_get(dev); @@ -1214,7 +1217,8 @@ static int mctp_pkttype_receive(struct sk_buff *skb, struct net_device *dev, /* We have enough for a header; decode and route */ mh = mctp_hdr(skb); - if (mh->ver < MCTP_VER_MIN || mh->ver > MCTP_VER_MAX) + ver = mh->ver & MCTP_HDR_VER_MASK; + if (ver < MCTP_VER_MIN || ver > MCTP_VER_MAX) goto err_drop; /* source must be valid unicast or null; drop reserved ranges and -- 2.53.0