Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp2932802rwb; Mon, 15 Aug 2022 14:19:15 -0700 (PDT) X-Google-Smtp-Source: AA6agR7WBlwE96ZLR05fq3iVHNNJV9LltbNhdNyClkrEo2WoK7mwI/zVgpbcpTrGcqz2WdH8/feG X-Received: by 2002:a05:6402:20b:b0:440:cb9f:c469 with SMTP id t11-20020a056402020b00b00440cb9fc469mr16506818edv.420.1660598355662; Mon, 15 Aug 2022 14:19:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660598355; cv=none; d=google.com; s=arc-20160816; b=MZVnjlpLnYzqWONsVufFq1l4Xy5oZOYVc3X1kfbGE7LCHJelX4gwGzjphVWdCLA1f/ lv1BgYW8UUYHXGPNydRO2a8V3Rg0GYpMLn8FKYsb9xPRR3Gn1MZ4YYdfiUzvo+b+qXAU UjUK5xO9kTB29UpMxBwBFd/y7Tlr+uoJFMsUcXq6gvcEp7BzwNP8jCybGMeEPlLhZrQv 0c/7nxBZk39Y+hpcMxUA7BhL+rWBQz208IoAnW5RjmN6RssG3Q41XzCOgkSYj4ZSQsdG 0Zh+77EPuI/yzZB6U4DJma3TR1SLimowajY/ffiiknWdAgT5fCCYyyKTBCl1xcHIZ+yC uH+Q== 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=Bzp2lyWW6S1uUBbCmHpwDiildBIw5XWjWGbesfmvXnw=; b=WVIACBHCB5gsOedl1e//Fm6r+p82mN2WVSw7heu92QY6WFHDYWhQ9HfNnfdHLzTBub cuVOeK3s5Wg+aWzehHGFFVUpRK24SzBsSmAoX3aEJ5BqSqA1mWVjeKANwvFI9Cj9WO/k U559nvHOejPKHJDSnWCnaG0thKRe/NqA/g6WiRXyQHH2hSKPQR/eYKGqS+MNdd/GIeED igoPPMN1vbEwDAe5dSPrW79hkHOnc7ii0tagdX0TSna9w0DZrHSbziQswQ74+g9Umr88 QmIO7KmURqevJjnm+js4ZSOMMdrsKnpYmnnvPBQKFu8aN5vdAE6mXg5JWzteJqmFv+X0 qEkg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="CN/XWQ+S"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cr18-20020a170906d55200b00730d5c78b76si9049303ejc.961.2022.08.15.14.18.41; Mon, 15 Aug 2022 14:19:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="CN/XWQ+S"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S243302AbiHOVPS (ORCPT + 99 others); Mon, 15 Aug 2022 17:15:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347982AbiHOVHw (ORCPT ); Mon, 15 Aug 2022 17:07:52 -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 60D642E686; Mon, 15 Aug 2022 12:17:19 -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 1B3A2B8107A; Mon, 15 Aug 2022 19:17:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6608DC433C1; Mon, 15 Aug 2022 19:17:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1660591036; bh=9gl4kRdQ+WLKKQ5khPH9o29OL7Te4TCVWT384FGVGKk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CN/XWQ+SZwtm8+YvOY3yGycumBkpfQgANOH7UjMW5YtEyNtXclLbQbbyjWARF6nUn FwUAghLPcdw4ZZiam37Ze/K1zIu4EedGi3PPZuABP1z/gzNSq2asZdxeg5QK2kF0ZL Rc1qND5OwxVhNpqUzl+oac/bObRwh9rBlLo59KqM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Liu Jian , Daniel Borkmann , John Fastabend , Sasha Levin Subject: [PATCH 5.18 0451/1095] skmsg: Fix invalid last sg check in sk_msg_recvmsg() Date: Mon, 15 Aug 2022 19:57:30 +0200 Message-Id: <20220815180448.289597023@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220815180429.240518113@linuxfoundation.org> References: <20220815180429.240518113@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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: Liu Jian [ Upstream commit 9974d37ea75f01b47d16072b5dad305bd8d23fcc ] In sk_psock_skb_ingress_enqueue function, if the linear area + nr_frags + frag_list of the SKB has NR_MSG_FRAG_IDS blocks in total, skb_to_sgvec will return NR_MSG_FRAG_IDS, then msg->sg.end will be set to NR_MSG_FRAG_IDS, and in addition, (NR_MSG_FRAG_IDS - 1) is set to the last SG of msg. Recv the msg in sk_msg_recvmsg, when i is (NR_MSG_FRAG_IDS - 1), the sk_msg_iter_var_next(i) will change i to 0 (not NR_MSG_FRAG_IDS), the judgment condition "msg_rx->sg.start==msg_rx->sg.end" and "i != msg_rx->sg.end" can not work. As a result, the processed msg cannot be deleted from ingress_msg list. But the length of all the sge of the msg has changed to 0. Then the next recvmsg syscall will process the msg repeatedly, because the length of sge is 0, the -EFAULT error is always returned. Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface") Signed-off-by: Liu Jian Signed-off-by: Daniel Borkmann Acked-by: John Fastabend Link: https://lore.kernel.org/bpf/20220628123616.186950-1-liujian56@huawei.com Signed-off-by: Sasha Levin --- net/core/skmsg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/core/skmsg.c b/net/core/skmsg.c index ede0af308f40..f50f8d95b628 100644 --- a/net/core/skmsg.c +++ b/net/core/skmsg.c @@ -462,7 +462,7 @@ int sk_msg_recvmsg(struct sock *sk, struct sk_psock *psock, struct msghdr *msg, if (copied == len) break; - } while (i != msg_rx->sg.end); + } while (!sg_is_last(sge)); if (unlikely(peek)) { msg_rx = sk_psock_next_msg(psock, msg_rx); @@ -472,7 +472,7 @@ int sk_msg_recvmsg(struct sock *sk, struct sk_psock *psock, struct msghdr *msg, } msg_rx->sg.start = i; - if (!sge->length && msg_rx->sg.start == msg_rx->sg.end) { + if (!sge->length && sg_is_last(sge)) { msg_rx = sk_psock_dequeue_msg(psock); kfree_sk_msg(msg_rx); } -- 2.35.1