Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp2551440lqp; Mon, 25 Mar 2024 02:15:30 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXYMRAKLYCCs/p8jzH1VgVaPyyxekCCeHasnic623TCBoDjBm3aMh0oBoJAv+SG1VscTutEXUdRj3n95msNBE/cRjIkI9W4w0SoA8GvlQ== X-Google-Smtp-Source: AGHT+IF6bl4T/Opfmw/90AyAXyHAL6fdat+VSH6gtsPAEocRcW27pG4tgAIdPyZ2GywNsK0tK+x+ X-Received: by 2002:a17:902:e884:b0:1e0:afa0:d512 with SMTP id w4-20020a170902e88400b001e0afa0d512mr4311776plg.46.1711358129839; Mon, 25 Mar 2024 02:15:29 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711358129; cv=pass; d=google.com; s=arc-20160816; b=Sa9xpPoDnrVcFsqa/njJiGnBTHKR/BvRw/b2QoTDFKLTi6uFrKUMGpXVOyBFzRvpIi srB4g5W8ZciWxmFyIY2okSsFx7WZdNqCt04YMeZKkpK7trjMeRHZNCEg8pIRGIA0oRNE cA+PxxwmT2I7gpVLonrOJEUWmqQbeBzrDSDYjmTRd8eu7jTDPUvapRp0OUwG2OY/lK5g PNQKHtuGW3BpAIhQzYZbuRpDBUb9eV+oS3gFt1zst6Hui6l5FuGhNhlcghPBQHcdDNfR c7FGw0SLTTp9Yj/2nm98kBbepiVtoGikkrXAjeATo8xPkc7URcGkC2IhVt/Hn5/x/u95 UUCw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=cnXzIYlJtljwT2z1IihFKhzChfTbIcYZfAtF4MZu8kM=; fh=3aQkzVPwo3SrqBHuirQ7QXvw1qvLy3O2d+/je03cHDA=; b=YQrm6bLp42Vj3QCXh+AtklV1utyYR0Kgmd6RKflfO4zYwTstbtJn1htOoB15LWjtuL TzjMZM99oS60Gk9uVjbaA41CydKuqjIH2ZSFo+pksWe5ptZmMnh3El5gJ5OawqLGt4QQ CYzzlxfhbC8GkRYFNpvs0exzqbEfm3DU4hPxOqslHBJVEbO97+5JkXZiJ0gZfwXC/nyv pzqK/gS3swX2ezsMXwWRF/CkaqWfa2SOyMhHSTMDPzLe6hvgAvNrAfw8THQZRkp7wRWD 4zIxxqe6t3Db97ecbgnoVL1Zig8zrgJ3bJfV5IvdEcJBoFWUd521wdZNlsv0YvonXZwC LWdQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=LGsKbzye; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-115743-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-115743-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id j15-20020a170903024f00b001e027ccc606si4709221plh.388.2024.03.25.02.15.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 02:15:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-115743-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=LGsKbzye; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-115743-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-115743-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 5C23229B9B5 for ; Mon, 25 Mar 2024 09:14:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6A2D315E5BF; Mon, 25 Mar 2024 02:58:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LGsKbzye" 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 3BA52156862; Sun, 24 Mar 2024 23:11:20 +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=1711321880; cv=none; b=ujWoLzacoFUW+Ccj68IM3cWjQgpLMdRyJ1yUoJG7wbdTkPPM4rgEQ/vIXjJdwQMIbo7USi4zTujX1SGIqnWtpXeRhPDFY87K7Qx40u5ghGTw++uf1D83tlyfpON5T6BNzLNTIgCAPG6Oyc4NrLEgJe3AdZrtNh7yinWKVkGrO5I= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711321880; c=relaxed/simple; bh=rbPa+Ctn/YI4xgNS41/BQYk1owmjhkNPLW58UozUyrQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JCIu835tg94Dj8mMlb9HPEG6UyeSjYvhCQs26AIcm4O49HtTNwRZSRDRASefgx9fCRc5Xzg9/onxAHY4ZJK171XO4aqHiXXb9gKSXVD0dr3hMYSzeAzEj8S0FGyPkqHRVoEyKuvWK+MOCZAOXWmi3PT45YCvmJXPdo5MHRkwXgQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LGsKbzye; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7D678C433F1; Sun, 24 Mar 2024 23:11:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711321880; bh=rbPa+Ctn/YI4xgNS41/BQYk1owmjhkNPLW58UozUyrQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LGsKbzyeb7frF48g5njNLnK9/XS0EAq7Nm2PJ7r4YI6F0LudB+OzDXJT4NiazUFa8 jGWsyOPVHS6VcW7i39taxewBaqbryWXRfE21mREmPIGf2AyqQ0bW02M0cIMYAkfJ2g FKx96slEGmBT3D5p5cxaqmVpOOC9xB/qcF9skRM7gBSsQrfVWtrjwzI40ZCdr9CcSq jkPiAGnhTCSC/7m+dQ4yoLwLC/8CUvObRYwciSo3tnH2ZZExI+ZUPhuE3IxvKRUNPp 6ZBc8Hq3pw6HEWNFQN3A+UJHMX7DtjhR0/fVPlZLybwo5mFCxt7t17DhKG54Jgr0lx GTovLAiWAvReA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Xuan Zhuo , "Michael S . Tsirkin" , Sasha Levin Subject: [PATCH 6.6 608/638] virtio: packed: fix unmap leak for indirect desc table Date: Sun, 24 Mar 2024 19:00:45 -0400 Message-ID: <20240324230116.1348576-609-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240324230116.1348576-1-sashal@kernel.org> References: <20240324230116.1348576-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit From: Xuan Zhuo [ Upstream commit d5c0ed17fea60cca9bc3bf1278b49ba79242bbcd ] When use_dma_api and premapped are true, then the do_unmap is false. Because the do_unmap is false, vring_unmap_extra_packed is not called by detach_buf_packed. if (unlikely(vq->do_unmap)) { curr = id; for (i = 0; i < state->num; i++) { vring_unmap_extra_packed(vq, &vq->packed.desc_extra[curr]); curr = vq->packed.desc_extra[curr].next; } } So the indirect desc table is not unmapped. This causes the unmap leak. So here, we check vq->use_dma_api instead. Synchronously, dma info is updated based on use_dma_api judgment This bug does not occur, because no driver use the premapped with indirect. Fixes: b319940f83c2 ("virtio_ring: skip unmap for premapped") Signed-off-by: Xuan Zhuo Message-Id: <20240223071833.26095-1-xuanzhuo@linux.alibaba.com> Signed-off-by: Michael S. Tsirkin Signed-off-by: Sasha Levin --- drivers/virtio/virtio_ring.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 49299b1f9ec74..6f7e5010a6735 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -1340,7 +1340,7 @@ static int virtqueue_add_indirect_packed(struct vring_virtqueue *vq, sizeof(struct vring_packed_desc)); vq->packed.vring.desc[head].id = cpu_to_le16(id); - if (vq->do_unmap) { + if (vq->use_dma_api) { vq->packed.desc_extra[id].addr = addr; vq->packed.desc_extra[id].len = total_sg * sizeof(struct vring_packed_desc); @@ -1481,7 +1481,7 @@ static inline int virtqueue_add_packed(struct virtqueue *_vq, desc[i].len = cpu_to_le32(sg->length); desc[i].id = cpu_to_le16(id); - if (unlikely(vq->do_unmap)) { + if (unlikely(vq->use_dma_api)) { vq->packed.desc_extra[curr].addr = addr; vq->packed.desc_extra[curr].len = sg->length; vq->packed.desc_extra[curr].flags = @@ -1615,7 +1615,7 @@ static void detach_buf_packed(struct vring_virtqueue *vq, vq->free_head = id; vq->vq.num_free += state->num; - if (unlikely(vq->do_unmap)) { + if (unlikely(vq->use_dma_api)) { curr = id; for (i = 0; i < state->num; i++) { vring_unmap_extra_packed(vq, -- 2.43.0