Mercurial > illumos > illumos-gate
changeset 10295:f7a18a1e9610
6870564 panic in zfs_getsecattr
author | Mark Shellenbaum <Mark.Shellenbaum@Sun.COM> |
---|---|
date | Wed, 12 Aug 2009 10:02:32 -0600 |
parents | b85a363540de |
children | afe43a511349 |
files | usr/src/uts/common/fs/zfs/zfs_acl.c |
diffstat | 1 files changed, 11 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/zfs/zfs_acl.c Wed Aug 12 09:39:20 2009 +0100 +++ b/usr/src/uts/common/fs/zfs/zfs_acl.c Wed Aug 12 10:02:32 2009 -0600 @@ -2011,8 +2011,6 @@ if (mask & VSA_ACE) { size_t aclsz; - zfs_acl_node_t *aclnode = list_head(&aclp->z_acl); - aclsz = count * sizeof (ace_t) + sizeof (ace_object_t) * largeace; @@ -2023,8 +2021,17 @@ zfs_copy_fuid_2_ace(zp->z_zfsvfs, aclp, cr, vsecp->vsa_aclentp, !(mask & VSA_ACE_ALLTYPES)); else { - bcopy(aclnode->z_acldata, vsecp->vsa_aclentp, - count * sizeof (ace_t)); + zfs_acl_node_t *aclnode; + void *start = vsecp->vsa_aclentp; + + for (aclnode = list_head(&aclp->z_acl); aclnode; + aclnode = list_next(&aclp->z_acl, aclnode)) { + bcopy(aclnode->z_acldata, start, + aclnode->z_size); + start = (caddr_t)start + aclnode->z_size; + } + ASSERT((caddr_t)start - (caddr_t)vsecp->vsa_aclentp == + aclp->z_acl_bytes); } } if (mask & VSA_ACE_ACLFLAGS) {