aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs/zio.c
diff options
context:
space:
mode:
authorPaul Zuchowski <[email protected]>2021-04-16 14:00:53 -0400
committerGitHub <[email protected]>2021-04-16 11:00:53 -0700
commitf2286383d017856a276e6ea73f2a61f85b99df35 (patch)
tree1b85e0baf78d04459820b2246e3b972a6668945c /module/zfs/zio.c
parentd92af6fc8d8274180c1f4afd10585893291324c5 (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.c5
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);
}
}