diff options
author | Paul Zuchowski <[email protected]> | 2021-04-16 14:00:53 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2021-04-16 11:00:53 -0700 |
commit | f2286383d017856a276e6ea73f2a61f85b99df35 (patch) | |
tree | 1b85e0baf78d04459820b2246e3b972a6668945c /module/zfs/zio.c | |
parent | d92af6fc8d8274180c1f4afd10585893291324c5 (diff) |
Fix crash in zio_done error reporting
Fix NULL pointer dereference when reporting
checksum error for gang block in zio_done.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Paul Zuchowski <[email protected]>
Closes #11872
Closes #11896
Diffstat (limited to 'module/zfs/zio.c')
-rw-r--r-- | module/zfs/zio.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/module/zfs/zio.c b/module/zfs/zio.c index d97c8ddc9..5f56f67ff 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -25,6 +25,7 @@ * Copyright (c) 2017, Intel Corporation. * Copyright (c) 2019, Klara Inc. * Copyright (c) 2019, Allan Jude + * Copyright (c) 2021, Datto, Inc. */ #include <sys/sysmacros.h> @@ -4539,7 +4540,7 @@ zio_done(zio_t *zio) uint64_t asize = P2ROUNDUP(psize, align); abd_t *adata = zio->io_abd; - if (asize != psize) { + if (adata != NULL && asize != psize) { adata = abd_alloc(asize, B_TRUE); abd_copy(adata, zio->io_abd, psize); abd_zero_off(adata, psize, asize - psize); @@ -4550,7 +4551,7 @@ zio_done(zio_t *zio) zcr->zcr_finish(zcr, adata); zfs_ereport_free_checksum(zcr); - if (asize != psize) + if (adata != NULL && asize != psize) abd_free(adata); } } |