diff options
author | Fedor Uporov <fsu@FreeBSD.org> | 2017-12-12 20:02:48 +0000 |
---|---|---|
committer | Fedor Uporov <fsu@FreeBSD.org> | 2017-12-12 20:02:48 +0000 |
commit | 1806c9ab85f2a46d509b72b79b0e1a82ff8a1c55 (patch) | |
tree | f383fcc1ec7095c77eec22cd11491facf47467dc /sys/fs | |
parent | 155b183ad2778bd7442fc26efbac9113eb58f91f (diff) | |
download | src-1806c9ab85f2a46d509b72b79b0e1a82ff8a1c55.tar.gz src-1806c9ab85f2a46d509b72b79b0e1a82ff8a1c55.zip |
Fix extattr getters in case of neither uio nor buffer was not passed to VOP_*.
Approved by: pfg (mentor)
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D13359
Notes
Notes:
svn path=/head/; revision=326807
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/ext2fs/ext2_extattr.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/sys/fs/ext2fs/ext2_extattr.c b/sys/fs/ext2fs/ext2_extattr.c index 47c0f4ebdcf8..6bb99cec4ab2 100644 --- a/sys/fs/ext2fs/ext2_extattr.c +++ b/sys/fs/ext2fs/ext2_extattr.c @@ -220,9 +220,10 @@ ext2_extattr_inode_list(struct inode *ip, int attrnamespace, return (ENOTSUP); } - if (uio == NULL) + if (size != NULL) *size += name_len + 1; - else { + + if (uio != NULL) { char *name = malloc(name_len + 1, M_TEMP, M_WAITOK); name[0] = name_len; memcpy(&name[1], attr_name, name_len); @@ -286,9 +287,10 @@ ext2_extattr_block_list(struct inode *ip, int attrnamespace, return (ENOTSUP); } - if (uio == NULL) + if (size != NULL) *size += name_len + 1; - else { + + if (uio != NULL) { char *name = malloc(name_len + 1, M_TEMP, M_WAITOK); name[0] = name_len; memcpy(&name[1], attr_name, name_len); @@ -361,12 +363,12 @@ ext2_extattr_inode_get(struct inode *ip, int attrnamespace, if (strlen(name) == name_len && 0 == strncmp(attr_name, name, name_len)) { - if (uio == NULL) + if (size != NULL) *size += entry->e_value_size; - else { + + if (uio != NULL) error = uiomove(((char *)EXT2_IFIRST(header)) + entry->e_value_offs, entry->e_value_size, uio); - } brelse(bp); return (error); @@ -428,12 +430,12 @@ ext2_extattr_block_get(struct inode *ip, int attrnamespace, if (strlen(name) == name_len && 0 == strncmp(attr_name, name, name_len)) { - if (uio == NULL) + if (size != NULL) *size += entry->e_value_size; - else { + + if (uio != NULL) error = uiomove(bp->b_data + entry->e_value_offs, entry->e_value_size, uio); - } brelse(bp); return (error); |