freebsd with flexible iflib nic queues
Go to file
Mark Johnston d91d2b513e geom: Handle partial I/O in g_{read,write,delete}_data()
These routines are used internally by GEOM to dispatch I/O requests to a
provider, typically for tasting or for updating GEOM class metadata
blocks.

These routines assumed that partial I/O did not occur without setting
BIO_ERROR, but this is possible in at least two cases:
- Some or all of the I/O range is beyond the provider's mediasize.
  In this scenario g_io_check() truncates the bounds of the request
  before it is handed to the target provider.
- A read from vnode-backed md(4) device returns EOF (the backing vnode
  is allowed to be smaller than the device itself) or partial vnode I/O
  occurs.
In these scenarios g_read_data() could return a partially uninitialized
buffer.  Many consumers are not affected by the first case, since the
offsets used for provider metadata or tasting are relative to the
provider's mediasize, but in some cases metadata is read at fixed
offsets, such as when searching for a UFS superblock using the offsets
defined by SBLOCKSEARCH.

Thus, modify the routines to explicitly check for a non-zero residual
and return EIO in that case.  Remove a related check from the
DIOCGDELETE ioctl handler, it is handled within g_delete_data() now.

Reviewed by:	mav, imp, kib
Reported by:	KMSAN
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D31293
2022-01-20 08:29:39 -05:00
.cirrus-ci Cirrus-CI: add some timing info on pkg install failure 2021-08-04 15:02:00 -04:00
.github [skip ci] fix syntax in CODEOWNERS 2021-07-22 10:58:54 -06:00
bin pkgbase: Create a FreeBSD-csh package 2021-12-21 10:17:50 +01:00
cddl dt_unring_buf: set dtbd_oldest to the start of the first record 2022-01-11 15:44:04 +02:00
contrib sanitizers: Improve FreeBSD ASLR detection 2022-01-19 13:07:40 -05:00
crypto sshd: update the libwrap patch to drop connections early 2022-01-02 18:32:30 -08:00
etc libsoft: Remove support for installing libsoft 2022-01-06 22:34:10 -07:00
gnu libdialog: Bump shared library version to 10. 2021-10-27 09:30:24 -07:00
include ipfilter: Move kernel bits to netpfil 2021-12-20 06:16:33 -08:00
kerberos5 pkgbase: Create a FreeBSD-kerberos package 2021-09-07 10:23:14 +02:00
lib kqueue(2): Add note about format of the data for NOTE_EXIT 2022-01-20 00:37:25 +02:00
libexec etc/defaults/rc.conf: set default of zfskeys_enable to NO 2022-01-18 14:26:30 -09:00
release pkgbase: Remove runtime dependency on bootloader 2022-01-14 10:52:08 +01:00
rescue rescue: include ping iff at least one of INET & INET6 is enabled 2021-12-31 13:16:30 -05:00
sbin ifconfig: improve vlan options parsing 2022-01-17 09:35:15 +00:00
secure OpenSSL: Merge OpenSSL 1.1.1m 2021-12-14 16:03:52 -05:00
share pci_vendors: update to 2022-01-15 2022-01-19 09:58:13 +01:00
stand geliboot: Use the correct IV length for AES-XTS. 2022-01-13 17:19:54 -08:00
sys geom: Handle partial I/O in g_{read,write,delete}_data() 2022-01-20 08:29:39 -05:00
targets Retire obsolete iscsi_initiator(4) 2021-10-26 16:17:35 -04:00
tests Add tests for ses(4) 2022-01-19 12:43:51 -07:00
tools stress2: Added a regression test 2022-01-16 07:48:55 +01:00
usr.bin remove debug code for cpu usage 2022-01-20 06:43:54 +00:00
usr.sbin Add tests for ses(4) 2022-01-19 12:43:51 -07:00
.arcconfig Remove history.immutable from .arcconfig 2021-04-13 12:36:25 +01:00
.arclint
.cirrus.yml Cirrus-CI: build with LLVM 13 package 2021-11-18 09:57:33 -05:00
.clang-format clang-format: Add bitset loop macros 2021-09-21 12:08:01 -04:00
.gitattributes Add a basic clang-format configuration file 2019-06-07 15:23:52 +00:00
.gitignore .gitignore: Restore inadvertently deleted file 2022-01-18 08:00:42 -08:00
COPYRIGHT Welcome 2022, update copyrights. 2022-01-01 09:49:49 -07:00
LOCKS
MAINTAINERS Remove myself from bhyve maintenance; ENOTIME. 2021-11-19 07:09:30 +10:00
Makefile Add list-old-{dirs,files,libs} targets. 2022-01-11 11:38:11 -08:00
Makefile.inc1 Add list-old-{dirs,files,libs} targets. 2022-01-11 11:38:11 -08:00
Makefile.libcompat libcompat: Remove MIPS from list of compat libraries 2021-12-09 08:22:51 -07:00
Makefile.sys.inc
ObsoleteFiles.inc Remove usr/lib/libssp.a. 2022-01-13 14:49:14 -08:00
README.md Vendor import of expat 2.4.3. 2022-01-16 18:55:26 -08:00
RELNOTES RELNOTES: Note support for KTLS RX for TLS 1.3. 2021-12-14 11:02:45 -08:00
UPDATING Make CPU_SET macros compliant with other implementations 2021-12-30 12:20:32 +01:00

FreeBSD Source:

This is the top level of the FreeBSD source directory.

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), FreeBSD handbook on building userland, and Handbook for kernels for more information, including setting make(1) variables.

Source Roadmap:

Directory Description
bin System/user commands.
cddl Various commands and libraries under the Common Development and Distribution License.
contrib Packages contributed by 3rd parties.
crypto Cryptography stuff (see crypto/README).
etc Template files for /etc.
gnu Commands and libraries under the GNU General Public License (GPL) or Lesser General Public License (LGPL). Please see gnu/COPYING and gnu/COPYING.LIB for more information.
include System include files.
kerberos5 Kerberos5 (Heimdal) package.
lib System libraries.
libexec System daemons.
release Release building Makefile & associated tools.
rescue Build system for statically linked /rescue utilities.
sbin System commands.
secure Cryptographic libraries and commands.
share Shared resources.
stand Boot loader sources.
sys Kernel sources.
sys/arch/conf Kernel configuration files. GENERIC is the configuration used in release builds. NOTES contains documentation of all possible entries.
tests Regression tests which can be run by Kyua. See tests/README for additional information.
tools Utilities for regression testing and miscellaneous tasks.
usr.bin User commands.
usr.sbin System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see FreeBSD Handbook.