diff options
Diffstat (limited to 'api')
-rw-r--r-- | api/src/glfs-fops.c | 50 | ||||
-rw-r--r-- | api/src/glfs-handleops.c | 20 |
2 files changed, 70 insertions, 0 deletions
diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c index f17d7212d39..dd9becea3a4 100644 --- a/api/src/glfs-fops.c +++ b/api/src/glfs-fops.c @@ -2846,12 +2846,25 @@ glfs_getxattr_common (struct glfs *fs, const char *path, const char *name, DECLARE_OLD_THIS; __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs); + if (!name || *name == '\0') { + ret = -1; + errno = EINVAL; + goto out; + } + + if (strlen(name) > GF_XATTR_NAME_MAX) { + ret = -1; + errno = ENAMETOOLONG; + goto out; + } + subvol = glfs_active_subvol (fs); if (!subvol) { ret = -1; errno = EIO; goto out; } + retry: if (follow) ret = glfs_resolve (fs, subvol, path, &loc, &iatt, reval); @@ -2916,6 +2929,18 @@ pub_glfs_fgetxattr (struct glfs_fd *glfd, const char *name, void *value, DECLARE_OLD_THIS; __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs); + if (!name || *name == '\0') { + ret = -1; + errno = EINVAL; + goto out; + } + + if (strlen(name) > GF_XATTR_NAME_MAX) { + ret = -1; + errno = ENAMETOOLONG; + goto out; + } + subvol = glfs_active_subvol (glfd->fs); if (!subvol) { ret = -1; @@ -3109,12 +3134,25 @@ glfs_setxattr_common (struct glfs *fs, const char *path, const char *name, DECLARE_OLD_THIS; __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs); + if (!name || *name == '\0') { + ret = -1; + errno = EINVAL; + goto out; + } + + if (strlen(name) > GF_XATTR_NAME_MAX) { + ret = -1; + errno = ENAMETOOLONG; + goto out; + } + subvol = glfs_active_subvol (fs); if (!subvol) { ret = -1; errno = EIO; goto out; } + retry: if (follow) ret = glfs_resolve (fs, subvol, path, &loc, &iatt, reval); @@ -3184,6 +3222,18 @@ pub_glfs_fsetxattr (struct glfs_fd *glfd, const char *name, const void *value, DECLARE_OLD_THIS; __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs); + if (!name || *name == '\0') { + ret = -1; + errno = EINVAL; + goto out; + } + + if (strlen(name) > GF_XATTR_NAME_MAX) { + ret = -1; + errno = ENAMETOOLONG; + goto out; + } + subvol = glfs_active_subvol (glfd->fs); if (!subvol) { ret = -1; diff --git a/api/src/glfs-handleops.c b/api/src/glfs-handleops.c index 0f201a2b99d..0fe5b35ff11 100644 --- a/api/src/glfs-handleops.c +++ b/api/src/glfs-handleops.c @@ -326,6 +326,16 @@ glfs_h_getxattrs_common (struct glfs *fs, struct glfs_object *object, return -1; } + if (!name || *name == '\0') { + errno = EINVAL; + return -1; + } + + if (strlen(name) > GF_XATTR_NAME_MAX) { + errno = ENAMETOOLONG; + return -1; + } + /* get the active volume */ subvol = glfs_active_subvol (fs); if (!subvol) { @@ -476,6 +486,16 @@ pub_glfs_h_setxattrs (struct glfs *fs, struct glfs_object *object, return -1; } + if (!name || *name == '\0') { + errno = EINVAL; + return -1; + } + + if (strlen(name) > GF_XATTR_NAME_MAX) { + errno = ENAMETOOLONG; + return -1; + } + DECLARE_OLD_THIS; __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs); |