Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2828971pxv; Mon, 12 Jul 2021 02:59:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx4F5kIRF/KvQtDdU12Tec+zNXM368Hk/ktMTY9STFIJFbbjjJbV01MUCx+SEHw7Xzgj5xb X-Received: by 2002:a92:d80c:: with SMTP id y12mr16455456ilm.30.1626083941710; Mon, 12 Jul 2021 02:59:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626083941; cv=none; d=google.com; s=arc-20160816; b=WJ1g8Y1ZCdAuqniMHuRYyueg6AW82SE2Kif5QgF4EahKs0QGE+N3qFitMKKp9obgh2 4/JWPzGnZY1rl9TusjXqR/vWsVyAoVkYWsq3ov7wcCod7Sp5cxymoljw4a7AOHz1mCnJ xOvwT8EdDjFu0BHJfzoWcAg18YZCefuzNHq8r0wZ1p++7vq22b3w0h5OrsgdU9+IlKRF oGu0BLXHT8BntXTPnbreMuBzVW98Pst+b8DVeso/zIgq02RG+w6/lXoBhEu73ysn1rBr jSxgt5WiMMmQVcX2HwY1sLyp9ffvcbTIDadChNJo5vHf0U2SyQ6h9Mu4gmTU1SkwyOEL KRSw== 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=tWCJ1bPtRoy4MjdiEzrSh0EkkOdghHOuwM7d1mLLIOE=; b=FsHiIOlxVBWg6aZZGvTHkK0cNFu2Ch1/PBwfhDFdV4OjBnb1dNhghMFn79ToINed0c 8viqRyOtiGKAMVszZ3hNllddgWX5hGZvpIaMjQwM/66UGUY4zg1hvNTu6b8JcwhhoEgm 5tlTilp0Qo0+FchXLn/erEiUJsdYu/agGOHTP/E1L+d1y4qJSFyV9dKH/5BmHkd8fK4G 7srW2ndH6bh0Kghw0sI2xkx3R2v9vukp92DDMxFW3FkrXdHNgoMXtLXQva2UDlS2hbDX tGrFNSvLxCaQkva5ShdU35PLbxRaDVs07pl0VJKKA9Zv30vIywqJWi8KL+qUahsrAJzB zcsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=b9XQeOgg; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v14si17008311iom.9.2021.07.12.02.58.50; Mon, 12 Jul 2021 02:59:01 -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=@linuxfoundation.org header.s=korg header.b=b9XQeOgg; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239322AbhGLHCo (ORCPT + 99 others); Mon, 12 Jul 2021 03:02:44 -0400 Received: from mail.kernel.org ([198.145.29.99]:41894 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237239AbhGLGqJ (ORCPT ); Mon, 12 Jul 2021 02:46:09 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9DCE561004; Mon, 12 Jul 2021 06:42:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626072121; bh=Y5BeouvsHyV2BTcopdaBpsoIlKZw4mEHsCOW3L5bBFg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=b9XQeOggh+GDQjRGT5q3afXjukJAIRgPavCe1ccAelmwqj9c+oBr9bairuDccygCI YwBCdKmZJAvw+p4EbaTVlvSEhxnzxz949rtu6WTdPecCqQ9s8ECLFNy/2NquhQlqkw SCMsuEW1PNbG7DZLoBaJt3r07Z+lYFFvOTktL/Xw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Magnus Karlsson , Daniel Borkmann , Xuan Zhuo , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , Sasha Levin Subject: [PATCH 5.10 363/593] xsk: Fix broken Tx ring validation Date: Mon, 12 Jul 2021 08:08:43 +0200 Message-Id: <20210712060926.433409450@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060843.180606720@linuxfoundation.org> References: <20210712060843.180606720@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Magnus Karlsson [ Upstream commit f654fae47e83e56b454fbbfd0af0a4f232e356d6 ] Fix broken Tx ring validation for AF_XDP. The commit under the Fixes tag, fixed an off-by-one error in the validation but introduced another error. Descriptors are now let through even if they straddle a chunk boundary which they are not allowed to do in aligned mode. Worse is that they are let through even if they straddle the end of the umem itself, tricking the kernel to read data outside the allowed umem region which might or might not be mapped at all. Fix this by reintroducing the old code, but subtract the length by one to fix the off-by-one error that the original patch was addressing. The test chunk != chunk_end makes sure packets do not straddle chunk boundraries. Note that packets of zero length are allowed in the interface, therefore the test if the length is non-zero. Fixes: ac31565c2193 ("xsk: Fix for xp_aligned_validate_desc() when len == chunk_size") Signed-off-by: Magnus Karlsson Signed-off-by: Daniel Borkmann Reviewed-by: Xuan Zhuo Acked-by: Björn Töpel Link: https://lore.kernel.org/bpf/20210618075805.14412-1-magnus.karlsson@gmail.com Signed-off-by: Sasha Levin --- net/xdp/xsk_queue.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/net/xdp/xsk_queue.h b/net/xdp/xsk_queue.h index be9fd5a72011..3c7ce60fe9a5 100644 --- a/net/xdp/xsk_queue.h +++ b/net/xdp/xsk_queue.h @@ -126,12 +126,15 @@ static inline bool xskq_cons_read_addr_unchecked(struct xsk_queue *q, u64 *addr) static inline bool xp_aligned_validate_desc(struct xsk_buff_pool *pool, struct xdp_desc *desc) { - u64 chunk; - - if (desc->len > pool->chunk_size) - return false; + u64 chunk, chunk_end; chunk = xp_aligned_extract_addr(pool, desc->addr); + if (likely(desc->len)) { + chunk_end = xp_aligned_extract_addr(pool, desc->addr + desc->len - 1); + if (chunk != chunk_end) + return false; + } + if (chunk >= pool->addrs_cnt) return false; -- 2.30.2