diff options
| author | Mark Shellenbaum <Mark.Shellenbaum@Sun.COM> | 2009-08-12 10:02:32 -0600 |
|---|---|---|
| committer | Mark Shellenbaum <Mark.Shellenbaum@Sun.COM> | 2009-08-12 10:02:32 -0600 |
| commit | 2e7d9b4283515cc94f4e29f4b76204b1c108c307 (patch) | |
| tree | f4b60804402cd9ae87a7ef8241233702e0d6664a /usr/src | |
| parent | e1636a06d48740791132319d080862a95596e07e (diff) | |
| download | illumos-joyent-2e7d9b4283515cc94f4e29f4b76204b1c108c307.tar.gz | |
6870564 panic in zfs_getsecattr
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/uts/common/fs/zfs/zfs_acl.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/usr/src/uts/common/fs/zfs/zfs_acl.c b/usr/src/uts/common/fs/zfs/zfs_acl.c index 12ffe9f30a..116ea81709 100644 --- a/usr/src/uts/common/fs/zfs/zfs_acl.c +++ b/usr/src/uts/common/fs/zfs/zfs_acl.c @@ -2011,8 +2011,6 @@ zfs_getacl(znode_t *zp, vsecattr_t *vsecp, boolean_t skipaclchk, cred_t *cr) 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_getacl(znode_t *zp, vsecattr_t *vsecp, boolean_t skipaclchk, cred_t *cr) 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) { |
