opnsense-src/sys
Osama Abboud b9e80b5280 ena: Initialize statistics before the interface is available
In [1], the FBSD community exposed a bug in the fbsd/ena driver.

Bug description:
----------------
Current function call order is as follows:

1. ena_attach()
1.1. ena_setup_ifnet()
1.1.1. Registration of ena_get_counter()
1.1.2. ether_ifattach(ifp, adapter->mac_addr);
1.2. Statistics allocation and initialization.

At point 1.1.2, when ether_ifattach() returns, the interface is available,
and stats can be read before they are allocated, leading to kernel panic.

Also fixed a potential memory leak by freeing the stats since they were
not freed in case the following calls failed.

Fix:
----
This commit moves the statistics allocation and initialization to happen
before ena_setup_ifnet()

[1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=268934

Fixes: 9b8d05b8ac ("Add support for Amazon Elastic Network Adapter (ENA) NIC")
Fixes: 30217e2dff ("Rework counting of hardware statistics in ENA driver")
MFC after: 2 weeks
Sponsored by: Amazon, Inc.
2023-07-04 15:51:16 +02:00
..
amd64 qlnxe: add driver to amd64 NOTES 2023-07-01 11:06:59 -06:00
arm fix qcom_cpu_kpssv2 compile on ASUS_AC1300 2023-06-12 08:30:15 -06:00
arm64 arm64: make VM_NFREEORDER and the comment describing it match 2023-06-29 12:48:48 -05:00
bsm
cam nvme_xpt: Tidy nvme_announce_periph for fabrics support. 2023-06-26 20:37:43 -07:00
cddl dtrace/arm64: Fix user memory access routines 2023-06-15 12:39:21 -04:00
compat LinuxKPI: list.h add list_count_nodes() 2023-06-28 01:32:29 +00:00
conf sys: Add [u]divmoddi4 intrinsics on i386. 2023-07-01 12:22:44 -07:00
contrib zfs: merge openzfs/zfs@009d3288d 2023-07-01 15:24:26 +02:00
crypto ossl: Don't try to initialize the cipher for Chacha20+Poly1305. 2023-06-20 07:53:50 -07:00
ddb spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
dev ena: Initialize statistics before the interface is available 2023-07-04 15:51:16 +02:00
dts spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
fs fdescfs: improve linrdlnk mount option 2023-06-27 13:43:17 +03:00
gdb netgdb: Fix netgdb double ack, print proxy address 2023-05-27 09:34:17 -07:00
geom bios: Don't keep sending BIO_FLUSH after first ENOTSUPP. 2023-07-01 11:14:49 -06:00
gnu spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
i386 linux: binutils as requires %eflags instead of %flags for CFI. 2023-06-30 09:43:58 -07:00
isa spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
kern killpg(): close a race with fork(), part 2 2023-07-04 06:43:16 +03:00
kgssapi spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
libkern libkern: Trim OBE comment from divmoddi routines. 2023-07-01 14:43:53 -07:00
modules rdrand_rng: Build with -fPIC on i386 when using GCC. 2023-07-01 12:23:00 -07:00
net altq codel: do not insert the same mtag twice 2023-07-03 21:32:33 +02:00
net80211 net80211: Radiotap: update for defines 2023-05-20 00:56:21 +00:00
netgraph SPDX: It's spelled 'SPDX-License-Identifier' 2023-05-12 10:44:04 -06:00
netinet dtrace: improve siftr probe 2023-07-02 03:08:51 +02:00
netinet6 netinet[6]: make in[6]_control use ucred instead of td. 2023-07-01 06:52:24 +00:00
netipsec tcp: fix TCP MD5 digest computation for TCP over UDP 2023-06-21 22:48:12 +02:00
netlink netinet[6]: make in[6]_control use ucred instead of td. 2023-07-01 06:52:24 +00:00
netpfil pf: Add code to enable filtering for locally delivered packets 2023-06-20 15:34:01 +01:00
netsmb spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
nfs Fix panic in nfs bootp/diskless after 0785c323f3. 2023-06-02 12:57:26 -04:00
nfsclient
nfsserver
nlm spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
ofed spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
opencrypto crypto: Advance the correct pointer in crypto_cursor_copydata() 2023-06-12 12:52:24 -04:00
powerpc sysentvec: Retire sv_imgact_try as unneeded anymore 2023-05-29 11:18:11 +03:00
riscv riscv: Remove MACHINE_ARCH-specific remnants of riscv64sf. 2023-06-27 10:19:31 -07:00
rpc spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
security veriexec: Do not save error from file info in fingerprint status 2023-06-09 10:49:59 -04:00
sys killpg(): close a race with fork(), part 2 2023-07-04 06:43:16 +03:00
teken spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
tests ktest: make ktest work with Netlink loaded as a module. 2023-06-13 06:04:14 +00:00
tools makesyscall: Stop generating $FreeBSD$ 2023-06-09 07:26:24 -06:00
ufs Write out corrected superblock when creating a UFS/FFS snapshot. 2023-06-13 00:22:13 -07:00
vm vm_fault: move FAULT_* return codes out of range for Mach errors 2023-06-28 00:03:14 +03:00
x86 x86: Add defines for a couple of thermal and PM bits 2023-06-19 13:32:22 -04:00
xdr spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
xen spdx: Remove duplicate lines 2023-05-12 10:44:03 -06:00
Makefile Remove dead code in the cscope target 2022-11-11 15:53:57 +00:00
README.md note that some arch independent code can live in dev (e.g. SMBios) 2023-03-03 01:54:07 -08:00

FreeBSD Kernel Source:

This directory contains the source files and build glue that make up the FreeBSD kernel and its modules, including both original and contributed software.

Kernel configuration files are located in the conf/ subdirectory of each architecture. GENERIC is the configuration used in release builds. NOTES contains documentation of all possible entries. LINT is a compile-only configuration used to maximize build coverage and detect regressions.

Source Roadmap:

Directory Description
amd64 AMD64 (64-bit x86) architecture support
arm 32-bit ARM architecture support
arm64 64-bit ARM (AArch64) architecture support
cam Common Access Method storage subsystem - cam(4) and ctl(4)
cddl CDDL-licensed optional sources such as DTrace
conf kernel build glue
compat Linux compatibility layer, FreeBSD 32-bit compatibility
contrib 3rd-party imported software such as OpenZFS
crypto crypto drivers
ddb interactive kernel debugger - ddb(4)
fs most filesystems, excluding UFS, NFS, and ZFS
dev device drivers and other arch independent code
gdb kernel remote GDB stub - gdb(4)
geom GEOM framework - geom(4)
i386 i386 (32-bit x86) architecture support
kern main part of the kernel
libkern libc-like and other support functions for kernel use
modules kernel module infrastructure
net core networking code
net80211 wireless networking (IEEE 802.11) - net80211(4)
netgraph graph-based networking subsystem - netgraph(4)
netinet IPv4 protocol implementation - inet(4)
netinet6 IPv6 protocol implementation - inet6(4)
netipsec IPsec protocol implementation - ipsec(4)
netpfil packet filters - ipfw(4), pf(4), and ipfilter(4)
opencrypto OpenCrypto framework - crypto(7)
powerpc PowerPC/POWER (32 and 64-bit) architecture support
riscv 64-bit RISC-V architecture support
security security facilities - audit(4) and mac(4)
sys kernel headers
tests kernel unit tests
ufs Unix File System - ffs(7)
vm virtual memory system
x86 code shared by AMD64 and i386 architectures