diff options
Diffstat (limited to 'xlators/storage/posix/src/posix-inode-fd-ops.c')
| -rw-r--r-- | xlators/storage/posix/src/posix-inode-fd-ops.c | 33 | 
1 files changed, 33 insertions, 0 deletions
diff --git a/xlators/storage/posix/src/posix-inode-fd-ops.c b/xlators/storage/posix/src/posix-inode-fd-ops.c index 3552cea7f22..bc58fbfb87b 100644 --- a/xlators/storage/posix/src/posix-inode-fd-ops.c +++ b/xlators/storage/posix/src/posix-inode-fd-ops.c @@ -1392,6 +1392,17 @@ posix_open (call_frame_t *frame, xlator_t *this,          priv = this->private;          VALIDATE_OR_GOTO (priv, out); +        if (loc->inode && +            ((loc->inode->ia_type == IA_IFBLK) || +             (loc->inode->ia_type == IA_IFCHR))) { +                gf_msg (this->name, GF_LOG_ERROR, EINVAL, +                        P_MSG_INVALID_ARGUMENT, +                        "open received on a block/char file (%s)", +                        uuid_utoa (loc->inode->gfid)); +                op_errno = EINVAL; +                goto out; +        } +          if (flags & O_CREAT)                  DISK_SPACE_CHECK_AND_GOTO (frame, priv, xdata, op_ret, op_errno, out); @@ -1488,6 +1499,17 @@ posix_readv (call_frame_t *frame, xlator_t *this,          priv = this->private;          VALIDATE_OR_GOTO (priv, out); +        if (fd->inode && +            ((fd->inode->ia_type == IA_IFBLK) || +             (fd->inode->ia_type == IA_IFCHR))) { +                gf_msg (this->name, GF_LOG_ERROR, EINVAL, +                        P_MSG_INVALID_ARGUMENT, +                        "readv received on a block/char file (%s)", +                        uuid_utoa (fd->inode->gfid)); +                op_errno = EINVAL; +                goto out; +        } +          ret = posix_fd_ctx_get (fd, this, &pfd, &op_errno);          if (ret < 0) {                  gf_msg (this->name, GF_LOG_WARNING, op_errno, P_MSG_PFD_NULL, @@ -1757,6 +1779,17 @@ posix_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          VALIDATE_OR_GOTO (priv, out);          DISK_SPACE_CHECK_AND_GOTO (frame, priv, xdata, op_ret, op_errno, out); +        if (fd->inode && +            ((fd->inode->ia_type == IA_IFBLK) || +             (fd->inode->ia_type == IA_IFCHR))) { +                gf_msg (this->name, GF_LOG_ERROR, EINVAL, +                        P_MSG_INVALID_ARGUMENT, +                        "writev received on a block/char file (%s)", +                        uuid_utoa (fd->inode->gfid)); +                op_errno = EINVAL; +                goto out; +        } +          ret = posix_fd_ctx_get (fd, this, &pfd, &op_errno);          if (ret < 0) {                  gf_msg (this->name, GF_LOG_WARNING, ret, P_MSG_PFD_NULL,  | 
