From nobody Mon Jun 8 04:24:53 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C03D63F0755 for ; Tue, 2 Jun 2026 15:52:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780415535; cv=none; b=CSXwh+yt3+NJQCnlK438od5xjr74n3QHfRL6IblC/uVL9LTpiOW/Vm9Q8UitHomn8IUWofoO0RcJSbnoqoAQxSwesFBc0lirLp/OdM5/OMc5ReaD7Ye7skGPwiLvCt6tdQicRWBB0lvmMbxGPbpGKxxrAfmrveqnW7dvHdP2B9I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780415535; c=relaxed/simple; bh=RAL3ZX7gX3Qwt4a6LoAFqg4/b9gWA2A+ezozkGYu5v4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=AXWJ6vI9OczdOgo5ydKukhdDpNfgbbgrRG5SmJxkNNRLcCQXtheUka+exYQGiRHp2l5Bff54qUPlVay+yYOsOD7Lu3nDH+y5LhFRv/m17thONF4Dj28fR1prxIM7XtgekZVoPSYR+xEzcXSTnOxqQa8a1h/+4vi/h1iuv6ATQwI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=D0wZVm+y; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="D0wZVm+y" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-490388fd0dbso116226325e9.0 for ; Tue, 02 Jun 2026 08:52:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780415532; x=1781020332; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=fcSYq5CNRe914+kh+MhUoX6E3CbZbAlZ8MDYAoh0zI0=; b=D0wZVm+yPCQCUkDlqARJFBllvw1zfPTP3YXy460qUBOs+SkuKaLPX0+4G2Fhj3UIE9 +GVh0dZmh6tY0zokqQFa8q8y06ssjwhSTJQ5Xpf2rfMB5/EDHv2MnCg3EDg3grmEj01Q DU37Re78vyEQLlfePfrySp0K89hJ3JIekz2yXvBdsXsMsQ5EuTsnS2Z2kZtZrpiL3aQc 0/S4/CHuNf93ZE/uEcP/aOLM4rpmKDkgVa+ueHsihYHhX8xLEr5NY10bG9MfrJwaQb9J DGbgiph62Mf48FlLvlYm8OFWqF2pSzVA6FmNglM5FLcs2mFMyP9r1fHY3Gh+MTVZCa7u MIIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780415532; x=1781020332; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fcSYq5CNRe914+kh+MhUoX6E3CbZbAlZ8MDYAoh0zI0=; b=ju8KkqeZGAXTJYWVNJ11NDdEiCUfwInc55LlTVsRK2vOswfpI/hwQJnhhwJK44C7VW HvvR9oZVcqoBMi/+sAVWHlpS3NDuJSowDvAT5tsEB8GQaYffOFMVFF+yZm8/XK+Uuo23 L8y5UdsOYkHs7JSrpEi52fC5cKmbJmSEUaleFYsqeBTeUNIdqtszMnhsTcQ+WE54qRf4 Ztwe/JADs7yIN5EroXMuT3Ay4LiOGfF/gxouf88KFbfeKLjbpRNzXSH+yEmuF8SQOCx/ y0KfK3BPuczabnSVWszGZiRVCi5LzfnRKTrp/026VjOBr5D71dSStQJhLxea9q5MlLLm fvKw== X-Forwarded-Encrypted: i=1; AFNElJ/Y8kLWvG6thl0Xxp0uRPnte9EVHK83pi+w3mQ9xfeyGbvdssIJU8qgtwODXBJElKegfni8MpHBDSNMjp0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8gP3BI1rHT+MHfsIvzEN/kcUgrlBnZpRkaSx2YQNvy/yTKJGn tGg9kgiZ2N6ORjVlSi0ESs5yyRw2y7IFLiwI+SOkkHO7yIcl20PlyFr8 X-Gm-Gg: Acq92OF6EHXz/i/QkaRJe/Lumxywzd2pracbpKl6pF7dpMKNueMXsi58VO39pIlrQug FpwOByXUA0uROsky0Fl7GX9QpWtYZrEOtjJzrXpjmNyy8wXIR3vkJyRIlH2Gi1cp88ATld+eR0S z43so7MEWxCVNtwq9tO+xH9EZdFngEs56Fa8tVXa0j8acTF4gGNT4u5GLTDEEAQySorz7RqIbct y3z5FECYw02rhBurP9XfwCpLBKh/k2xzj36gDz64SjRapBQycxxBC7JwEz0gLNQnbTxqepYmWZ6 h6jga/0CoEWJo2rBf73mlJP+IrIi8bpkiVLFLZ6BL31CWVdvz638XpGVd757e+S4Wo67JvalSUa 1ErBeS8mowizijzwAU8pAyTsl8LlLeWchInXaqBOz+qUA+6IU2aycu6QAKs5GcRlnJgnVVWZdCa zIRCcVGWcusPuadwq5J4TKCIFEs7LpN2dbvkUVUH68pM0SjYwufpauM32arWZ5EdHu/w== X-Received: by 2002:a05:600c:8b2e:b0:490:48df:2793 with SMTP id 5b1f17b1804b1-490b50c634cmr4713175e9.26.1780415531774; Tue, 02 Jun 2026 08:52:11 -0700 (PDT) Received: from localhost.localdomain ([5.165.242.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b55fda1dsm108445e9.1.2026.06.02.08.52.07 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 02 Jun 2026 08:52:10 -0700 (PDT) From: LeantionX X-Google-Original-From: LeantionX To: netdev@vger.kernel.org Cc: linux-hyperv@vger.kernel.org, kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, longli@microsoft.com, andrew+netdev@lunn.ch, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, davem@davemloft.net, stable@vger.kernel.org, linux-kernel@vger.kernel.org, Anton Leontev Subject: [PATCH net] hv_netvsc: use kmap_local_page in netvsc_copy_to_send_buf Date: Tue, 2 Jun 2026 18:52:10 +0300 Message-ID: <20260602155210.90987-1-leontyevanton1995@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Anton Leontev netvsc_copy_to_send_buf() copies skb fragment pages into the shared VMBus send buffer using phys_to_virt() on the fragment PFN. On 32-bit x86 with CONFIG_HIGHMEM=3Dy, phys_to_virt() (i.e. __va()) is only valid for LOWMEM addresses below 896 MiB. For a HIGHMEM page it returns an address that has no kernel page table entry and lies outside the kernel direct map, so the subsequent memcpy() faults. As this happens on the transmit softirq path, the fault is fatal. A HIGHMEM fragment reaches this path whenever the page backing an skb fragment lives above the LOWMEM boundary, which is common on a 32-bit guest with several GiB of RAM (for example when the in-kernel NFS server splices page cache pages directly into the reply skb). Map the fragment page on demand with kmap_local_page()/kunmap_local() instead. Using pfn_to_page() on pb[i].pfn maps exactly the page described by the page buffer entry. On configurations without HIGHMEM (amd64, i386 without CONFIG_HIGHMEM) kmap_local_page() reduces to page_address(), so this is a no-op there. Fixes: c25aaf814a63 ("hyperv: Enable sendbuf mechanism on the send path") Cc: stable@vger.kernel.org Signed-off-by: Anton Leontev --- drivers/net/hyperv/netvsc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index 59e95341f9b1..6984f6c97257 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -965,11 +966,13 @@ static void netvsc_copy_to_send_buf(struct netvsc_dev= ice *net_device, } =20 for (i =3D 0; i < page_count; i++) { - char *src =3D phys_to_virt(pb[i].pfn << HV_HYP_PAGE_SHIFT); + struct page *page =3D pfn_to_page(pb[i].pfn); + char *src =3D kmap_local_page(page); u32 offset =3D pb[i].offset; u32 len =3D pb[i].len; =20 memcpy(dest, (src + offset), len); + kunmap_local(src); dest +=3D len; } =20 --=20 2.43.0