From nobody Thu Jul 30 14:06:06 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4h9rb23MHzz6mLjJ for ; Thu, 30 Jul 2026 14:06:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h9rb22QdFz3cgS for ; Thu, 30 Jul 2026 14:06:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785420366; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XqDXVr+G4XqwzgKXK5Tj3NVj76BOP+5howb+cpovmSw=; b=igELfUWqp9tE0/kF3K+lpihtNVAT6qdwUR4bUJN5qUF+gmQMrNvGLTrcNomF331Tppa/6X t8nx0sE5YZgGtvz2Xe3OXaJe657WBpf/9Ql7zu4oHH9TB7tMyX3wLyhVDZHjoZxL80KyWB /70mnwz1kc9m9KPdpO+UJ2YqYMGAPSFWhxY+ajblKZms9CpGCTMhdr7Cf6+hvtfF/cQqyH CbqCL1vEPsCpdJKYFd5PLVJPSx5amkNcRGQiQy6mPzfdyeHUf3XKEVoVTXh1BM5/Ipo0QJ n5jz5Mo9bFFnho3WXCFpcf+BForz2n+jVnL0js8M3dx8j7WwWsj+pxjWBYv2LA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785420366; a=rsa-sha256; cv=none; b=gN8YSIGXM6uYHkXKZq86bEahqwvo4IzqPgvScip1Xhj1XqqbSctRrqrD883vc3T0pCFNK/ oj2JaqS/5gKRmnih+LMeZ+lG2LGwqffcDkhv+Ykun9p6JtpPUrOlxOAAXCZq4Ovx4YbadS 6ul12yz9MRI+8zAZwFaQasJ96esMfFbdgQ0AvbSjnwz1WfJRPWQLDPVGAvHxmWdp1wgveO FrZb/0icPhN1HSxIXnAkj2UuWdCY/rErd6xMBqB+nrz+4+qK9nsxVyZWC1WvFkuC12KCdT kBsX/L5hR6uYzo8T+sKRDUIZSDN/SvCyKI44PkAstxz92d5D/kzfm/p70C9wwQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785420366; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XqDXVr+G4XqwzgKXK5Tj3NVj76BOP+5howb+cpovmSw=; b=dux3mr+X32228YbdRLRdPDciV8BYAu6yjWExirU807Pa7CFqqAIxNM7AMv2hrzmu8mzvUb y/+Hh0aH/ZZ+XF1wGOtQX3OFPjKhmKFjG8rfQMNmVLoaKWCH3WGYeYynozhRtHCh17xz3L xrpw2WF9WM8GCjiNs3lWNEPpTDrnPv1QpS4XAJwto+Ehn1KpqDTkOtDgB6HeR7ukJsiTeG H7zf1LsSRwDhdUKbtZZmANq+UPGCdmbZv2b5kOJbvw+zrLO2JcvUbv4iwP8vkLeu05BZXy c6CfbC2smGr55CszqHrMVlGOUTei91dbWXal85KpihzTb6Ke+DEUHsQsU/pNwQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h9rb2137Gz1Zd for ; Thu, 30 Jul 2026 14:06:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1dc2e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 30 Jul 2026 14:06:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 7cd6d2365b31 - main - e1000: Correct VF register validation List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7cd6d2365b3121743dfd6012e259a3b05b0e7adb Auto-Submitted: auto-generated Date: Thu, 30 Jul 2026 14:06:06 +0000 Message-Id: <6a6b5a4e.1dc2e.6510fc08@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=7cd6d2365b3121743dfd6012e259a3b05b0e7adb commit 7cd6d2365b3121743dfd6012e259a3b05b0e7adb Author: Kevin Bowling AuthorDate: 2026-07-30 10:29:57 +0000 Commit: Kevin Bowling CommitDate: 2026-07-30 14:05:59 +0000 e1000: Correct VF register validation Pass the VF generation through the CSR accessors so the validator can distinguish the sparse 82576 and I350 register maps. Admit the queue-zero RXCTRL, TXCTRL, TDWBAL, TDWBAH, and VFPSRTYPE registers exposed by both families. 82576 exposes VFMPRC at 0xf3c. I350 erratum 31 makes its corrected 0xf38 address inaccessible to a VF, so reject both I350 spellings while retaining read access on 82576. Sponsored by: BBOX.io --- sys/dev/e1000/e1000_osdep.h | 22 ++++++++++++++++++---- sys/dev/e1000/if_em.c | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/sys/dev/e1000/e1000_osdep.h b/sys/dev/e1000/e1000_osdep.h index c7e938f5c93c..0f6364f9a7b5 100644 --- a/sys/dev/e1000/e1000_osdep.h +++ b/sys/dev/e1000/e1000_osdep.h @@ -162,6 +162,7 @@ struct e1000_osdep device_t dev; if_ctx_t ctx; bool vf; + bool vf_82576; }; #ifdef INVARIANTS @@ -174,7 +175,7 @@ struct e1000_osdep * support must extend this predicate from the applicable device CSR map. */ static __inline bool -e1000_vf_reg_valid(uint32_t reg, bool write) +e1000_vf_reg_valid(uint32_t reg, bool write, bool vf_82576) { /* VF mailbox memory: 16 dwords beginning at 0x800. */ if (reg >= 0x00800 && reg <= 0x0083c && (reg & 3) == 0) @@ -191,6 +192,7 @@ e1000_vf_reg_valid(uint32_t reg, bool write) case 0x02808: /* RDLEN */ case 0x0280c: /* SRRCTL */ case 0x02810: /* RDH */ + case 0x02814: /* RXCTL */ case 0x02818: /* RDT */ case 0x02828: /* RXDCTL */ return (true); @@ -202,15 +204,26 @@ e1000_vf_reg_valid(uint32_t reg, bool write) case 0x03804: /* TDBAH */ case 0x03808: /* TDLEN */ case 0x03810: /* TDH */ + case 0x03814: /* TXCTL */ case 0x03818: /* TDT */ case 0x03828: /* TXDCTL */ + case 0x03838: /* TDWBAL */ + case 0x0383c: /* TDWBAH */ return (true); } + /* + * 82576 exposes VFMPRC at 0xf3c. I350 erratum 31 makes + * its corrected 0xf38 address inaccessible to a VF. + */ + if (vf_82576 && reg == 0x00f3c) + return (!write); + switch (reg) { case 0x00000: /* CTRL */ case 0x000c4: /* Legacy ITR, listed but unused by igb VFs */ case 0x00c40: /* V2PMAILBOX(0) */ + case 0x00f0c: /* VFPSRTYPE */ case 0x01524: /* EIMS */ case 0x0152c: /* EIAC */ case 0x01530: /* EIAM */ @@ -225,7 +238,6 @@ e1000_vf_reg_valid(uint32_t reg, bool write) case 0x00f14: /* VFGPTC */ case 0x00f18: /* VFGORC */ case 0x00f34: /* VFGOTC */ - case 0x00f3c: /* VFMPRC */ case 0x00f40: /* VFGPRLBC */ case 0x00f44: /* VFGPTLBC */ case 0x00f48: /* VFGORLBC */ @@ -261,7 +273,8 @@ e1000_rd32(struct e1000_osdep *osdep, uint32_t reg) ("e1000: register offset %#jx too large (max is %#jx)", (uintmax_t)reg, (uintmax_t)osdep->mem_bus_space_size)); #ifdef INVARIANTS - KASSERT(!osdep->vf || e1000_vf_reg_valid(reg, false), + KASSERT(!osdep->vf || + e1000_vf_reg_valid(reg, false, osdep->vf_82576), ("e1000: invalid VF register read at %#x", reg)); #endif @@ -278,7 +291,8 @@ e1000_wr32(struct e1000_osdep *osdep, uint32_t reg, uint32_t value) ("e1000: register offset %#jx too large (max is %#jx)", (uintmax_t)reg, (uintmax_t)osdep->mem_bus_space_size)); #ifdef INVARIANTS - KASSERT(!osdep->vf || e1000_vf_reg_valid(reg, true), + KASSERT(!osdep->vf || + e1000_vf_reg_valid(reg, true, osdep->vf_82576), ("e1000: invalid VF register write at %#x", reg)); #endif diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 2269f3014abb..db84004643f2 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -1254,6 +1254,7 @@ em_if_attach_pre(if_ctx_t ctx) /* Determine hardware and mac info */ em_identify_hardware(ctx); + sc->osdep.vf_82576 = sc->hw.mac.type == e1000_vfadapt; /* VF sysctls are deferred until attach-post confirms MSI-X. */ ctx_list = device_get_sysctl_ctx(dev);