Loading fs/ecryptfs/ecryptfs_kernel.h +2 −0 Original line number Diff line number Diff line Loading @@ -715,4 +715,6 @@ int ecryptfs_set_f_namelen(long *namelen, long lower_namelen, int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat, loff_t offset); extern const struct xattr_handler *ecryptfs_xattr_handlers[]; #endif /* #ifndef ECRYPTFS_KERNEL_H */ fs/ecryptfs/inode.c +48 −14 Original line number Diff line number Diff line Loading @@ -1066,19 +1066,22 @@ ecryptfs_listxattr(struct dentry *dentry, char *list, size_t size) return rc; } static int ecryptfs_removexattr(struct dentry *dentry, const char *name) static int ecryptfs_removexattr(struct dentry *dentry, struct inode *inode, const char *name) { int rc = 0; struct dentry *lower_dentry; struct inode *lower_inode; lower_dentry = ecryptfs_dentry_to_lower(dentry); if (!d_inode(lower_dentry)->i_op->removexattr) { lower_inode = ecryptfs_inode_to_lower(inode); if (!lower_inode->i_op->removexattr) { rc = -EOPNOTSUPP; goto out; } inode_lock(d_inode(lower_dentry)); rc = d_inode(lower_dentry)->i_op->removexattr(lower_dentry, name); inode_unlock(d_inode(lower_dentry)); inode_lock(lower_inode); rc = lower_inode->i_op->removexattr(lower_dentry, name); inode_unlock(lower_inode); out: return rc; } Loading @@ -1089,10 +1092,10 @@ const struct inode_operations ecryptfs_symlink_iops = { .permission = ecryptfs_permission, .setattr = ecryptfs_setattr, .getattr = ecryptfs_getattr_link, .setxattr = ecryptfs_setxattr, .getxattr = ecryptfs_getxattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ecryptfs_listxattr, .removexattr = ecryptfs_removexattr .removexattr = generic_removexattr }; const struct inode_operations ecryptfs_dir_iops = { Loading @@ -1107,18 +1110,49 @@ const struct inode_operations ecryptfs_dir_iops = { .rename = ecryptfs_rename, .permission = ecryptfs_permission, .setattr = ecryptfs_setattr, .setxattr = ecryptfs_setxattr, .getxattr = ecryptfs_getxattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ecryptfs_listxattr, .removexattr = ecryptfs_removexattr .removexattr = generic_removexattr }; const struct inode_operations ecryptfs_main_iops = { .permission = ecryptfs_permission, .setattr = ecryptfs_setattr, .getattr = ecryptfs_getattr, .setxattr = ecryptfs_setxattr, .getxattr = ecryptfs_getxattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ecryptfs_listxattr, .removexattr = ecryptfs_removexattr .removexattr = generic_removexattr }; static int ecryptfs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, void *buffer, size_t size) { return ecryptfs_getxattr(dentry, inode, name, buffer, size); } static int ecryptfs_xattr_set(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, const void *value, size_t size, int flags) { if (value) return ecryptfs_setxattr(dentry, inode, name, value, size, flags); else { BUG_ON(flags != XATTR_REPLACE); return ecryptfs_removexattr(dentry, inode, name); } } const struct xattr_handler ecryptfs_xattr_handler = { .prefix = "", /* match anything */ .get = ecryptfs_xattr_get, .set = ecryptfs_xattr_set, }; const struct xattr_handler *ecryptfs_xattr_handlers[] = { &ecryptfs_xattr_handler, NULL }; fs/ecryptfs/main.c +1 −0 Original line number Diff line number Diff line Loading @@ -529,6 +529,7 @@ static struct dentry *ecryptfs_mount(struct file_system_type *fs_type, int flags /* ->kill_sb() will take care of sbi after that point */ sbi = NULL; s->s_op = &ecryptfs_sops; s->s_xattr = ecryptfs_xattr_handlers; s->s_d_op = &ecryptfs_dops; err = "Reading sb failed"; Loading Loading
fs/ecryptfs/ecryptfs_kernel.h +2 −0 Original line number Diff line number Diff line Loading @@ -715,4 +715,6 @@ int ecryptfs_set_f_namelen(long *namelen, long lower_namelen, int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat, loff_t offset); extern const struct xattr_handler *ecryptfs_xattr_handlers[]; #endif /* #ifndef ECRYPTFS_KERNEL_H */
fs/ecryptfs/inode.c +48 −14 Original line number Diff line number Diff line Loading @@ -1066,19 +1066,22 @@ ecryptfs_listxattr(struct dentry *dentry, char *list, size_t size) return rc; } static int ecryptfs_removexattr(struct dentry *dentry, const char *name) static int ecryptfs_removexattr(struct dentry *dentry, struct inode *inode, const char *name) { int rc = 0; struct dentry *lower_dentry; struct inode *lower_inode; lower_dentry = ecryptfs_dentry_to_lower(dentry); if (!d_inode(lower_dentry)->i_op->removexattr) { lower_inode = ecryptfs_inode_to_lower(inode); if (!lower_inode->i_op->removexattr) { rc = -EOPNOTSUPP; goto out; } inode_lock(d_inode(lower_dentry)); rc = d_inode(lower_dentry)->i_op->removexattr(lower_dentry, name); inode_unlock(d_inode(lower_dentry)); inode_lock(lower_inode); rc = lower_inode->i_op->removexattr(lower_dentry, name); inode_unlock(lower_inode); out: return rc; } Loading @@ -1089,10 +1092,10 @@ const struct inode_operations ecryptfs_symlink_iops = { .permission = ecryptfs_permission, .setattr = ecryptfs_setattr, .getattr = ecryptfs_getattr_link, .setxattr = ecryptfs_setxattr, .getxattr = ecryptfs_getxattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ecryptfs_listxattr, .removexattr = ecryptfs_removexattr .removexattr = generic_removexattr }; const struct inode_operations ecryptfs_dir_iops = { Loading @@ -1107,18 +1110,49 @@ const struct inode_operations ecryptfs_dir_iops = { .rename = ecryptfs_rename, .permission = ecryptfs_permission, .setattr = ecryptfs_setattr, .setxattr = ecryptfs_setxattr, .getxattr = ecryptfs_getxattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ecryptfs_listxattr, .removexattr = ecryptfs_removexattr .removexattr = generic_removexattr }; const struct inode_operations ecryptfs_main_iops = { .permission = ecryptfs_permission, .setattr = ecryptfs_setattr, .getattr = ecryptfs_getattr, .setxattr = ecryptfs_setxattr, .getxattr = ecryptfs_getxattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ecryptfs_listxattr, .removexattr = ecryptfs_removexattr .removexattr = generic_removexattr }; static int ecryptfs_xattr_get(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, void *buffer, size_t size) { return ecryptfs_getxattr(dentry, inode, name, buffer, size); } static int ecryptfs_xattr_set(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, const void *value, size_t size, int flags) { if (value) return ecryptfs_setxattr(dentry, inode, name, value, size, flags); else { BUG_ON(flags != XATTR_REPLACE); return ecryptfs_removexattr(dentry, inode, name); } } const struct xattr_handler ecryptfs_xattr_handler = { .prefix = "", /* match anything */ .get = ecryptfs_xattr_get, .set = ecryptfs_xattr_set, }; const struct xattr_handler *ecryptfs_xattr_handlers[] = { &ecryptfs_xattr_handler, NULL };
fs/ecryptfs/main.c +1 −0 Original line number Diff line number Diff line Loading @@ -529,6 +529,7 @@ static struct dentry *ecryptfs_mount(struct file_system_type *fs_type, int flags /* ->kill_sb() will take care of sbi after that point */ sbi = NULL; s->s_op = &ecryptfs_sops; s->s_xattr = ecryptfs_xattr_handlers; s->s_d_op = &ecryptfs_dops; err = "Reading sb failed"; Loading