From f4fa069b4ace9446fa9b3c13503298b3c04dc672 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Fri, 24 Jul 2015 12:08:53 -0700 Subject: [PATCH] Check for NULL in dmu_free_long_range_impl() A NULL should never be passed as the dnode_t pointer to the function dmu_free_long_range_impl(). Regardless, because we have a reported occurrence of this let's add some error handling to catch this. Better to report a reasonable error to caller than panic the system. Signed-off-by: Brian Behlendorf Issue #3445 --- module/zfs/dmu.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c index 7d3945433bb3..eb3bc0ed285f 100644 --- a/module/zfs/dmu.c +++ b/module/zfs/dmu.c @@ -644,9 +644,13 @@ static int dmu_free_long_range_impl(objset_t *os, dnode_t *dn, uint64_t offset, uint64_t length) { - uint64_t object_size = (dn->dn_maxblkid + 1) * dn->dn_datablksz; + uint64_t object_size; int err; + if (dn == NULL) + return (SET_ERROR(EINVAL)); + + object_size = (dn->dn_maxblkid + 1) * dn->dn_datablksz; if (offset >= object_size) return (0);