mirror_zfs/module
Alan Somers 0433523ca2
Verify every block pointer is either embedded, hole, or has a valid DVA
Now instead of crashing when attempting to read the corrupt block
pointer, ZFS will return ECKSUM, in a stack that looks like this:

```
none:set-error
zfs.ko`arc_read+0x1d82
zfs.ko`dbuf_read+0xa8c
zfs.ko`dmu_buf_hold_array_by_dnode+0x292
zfs.ko`dmu_read_uio_dnode+0x47
zfs.ko`zfs_read+0x2d5
zfs.ko`zfs_freebsd_read+0x7b
kernel`VOP_READ_APV+0xd0
kernel`vn_read+0x20e
kernel`vn_io_fault_doio+0x45
kernel`vn_io_fault1+0x15e
kernel`vn_io_fault+0x150
kernel`dofileread+0x80
kernel`sys_read+0xb7
kernel`amd64_syscall+0x424
kernel`0xffffffff810633cb
```

This patch should hopefully also prevent such corrupt block pointers
from being written to disk in the first place.

And in zdb, don't crash when printing a block pointer with no valid
DVAs.  If a block pointer isn't embedded yet doesn't have any valid
DVAs, that's a data corruption bug.  zdb should be able to handle the
situation gracefully.

Finally, remove an extra check for gang blocks in SNPRINTF_BLKPTR.  This
check, which compares the asizes of two different DVAs within the same
BP, was added by illumos-gate commit b24ab67[^1], and I can't understand
why.  It doesn't appear to do anything useful, so remove it.

[^1]: b24ab67627

Fixes		#17077
Sponsored by:	ConnectWise
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Alek Pinchuk <pinchuk.alek@gmail.com>
Signed-off-by:	Alan Somers <asomers@gmail.com>
Closes #17078
2025-03-13 13:07:48 -04:00
..
avl Suppress Clang Static Analyzer false positive in the AVL tree code. 2023-03-08 13:51:21 -08:00
icp gcm_avx_init: zero the ghash state after hashing the IV 2025-02-25 17:31:08 -08:00
lua lua: add flex array field to TString type 2024-09-30 10:30:03 -07:00
nvpair Remove unnecessary CSTYLED escapes on top-level macro invocations 2024-12-06 08:53:57 -08:00
os vdev_file: unify FreeBSD and Linux implementations (#17046) 2025-02-20 10:42:42 -08:00
unicode module: unicode: remove unused tolower transformations 2024-11-04 17:26:35 -08:00
zcommon zprop: fix value help for ZPOOL_PROP_CAPACITY 2024-12-18 15:25:12 -08:00
zfs Verify every block pointer is either embedded, hole, or has a valid DVA 2025-03-13 13:07:48 -04:00
zstd compress: change zio_compress API to use ABDs 2024-08-22 16:22:24 -07:00
.gitignore FreeBSD: Ignore symlink to i386 includes 2022-08-02 16:34:23 -07:00
Kbuild.in vdev_file: unify FreeBSD and Linux implementations (#17046) 2025-02-20 10:42:42 -08:00
Makefile.bsd vdev_file: unify FreeBSD and Linux implementations (#17046) 2025-02-20 10:42:42 -08:00
Makefile.in Fix "make install" with DESTDIR set (#16995) 2025-02-07 16:38:58 -08:00