Commit c7afb0f9 authored by KaiGai Kohei's avatar KaiGai Kohei Committed by David Woodhouse

[JFFS2][XATTR] Fix memory leak in POSIX-ACL support

jffs2_clear_acl() which releases acl caches allocated by kmalloc()
was defined but it was never called. Thus, we faced to the risk
of memory leaking.

This patch plugs jffs2_clear_acl() into jffs2_do_clear_inode().
It ensures to release acl cache when inode is cleared.
Signed-off-by: default avatarKaiGai Kohei <kaigai@ak.jp.nec.com>
Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
parent c05d52c7
...@@ -345,10 +345,8 @@ int jffs2_init_acl(struct inode *inode, struct inode *dir) ...@@ -345,10 +345,8 @@ int jffs2_init_acl(struct inode *inode, struct inode *dir)
return rc; return rc;
} }
void jffs2_clear_acl(struct inode *inode) void jffs2_clear_acl(struct jffs2_inode_info *f)
{ {
struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
if (f->i_acl_access && f->i_acl_access != JFFS2_ACL_NOT_CACHED) { if (f->i_acl_access && f->i_acl_access != JFFS2_ACL_NOT_CACHED) {
posix_acl_release(f->i_acl_access); posix_acl_release(f->i_acl_access);
f->i_acl_access = JFFS2_ACL_NOT_CACHED; f->i_acl_access = JFFS2_ACL_NOT_CACHED;
......
...@@ -30,7 +30,7 @@ struct jffs2_acl_header { ...@@ -30,7 +30,7 @@ struct jffs2_acl_header {
extern int jffs2_permission(struct inode *, int, struct nameidata *); extern int jffs2_permission(struct inode *, int, struct nameidata *);
extern int jffs2_acl_chmod(struct inode *); extern int jffs2_acl_chmod(struct inode *);
extern int jffs2_init_acl(struct inode *, struct inode *); extern int jffs2_init_acl(struct inode *, struct inode *);
extern void jffs2_clear_acl(struct inode *); extern void jffs2_clear_acl(struct jffs2_inode_info *);
extern struct xattr_handler jffs2_acl_access_xattr_handler; extern struct xattr_handler jffs2_acl_access_xattr_handler;
extern struct xattr_handler jffs2_acl_default_xattr_handler; extern struct xattr_handler jffs2_acl_default_xattr_handler;
...@@ -40,6 +40,6 @@ extern struct xattr_handler jffs2_acl_default_xattr_handler; ...@@ -40,6 +40,6 @@ extern struct xattr_handler jffs2_acl_default_xattr_handler;
#define jffs2_permission NULL #define jffs2_permission NULL
#define jffs2_acl_chmod(inode) (0) #define jffs2_acl_chmod(inode) (0)
#define jffs2_init_acl(inode,dir) (0) #define jffs2_init_acl(inode,dir) (0)
#define jffs2_clear_acl(inode) #define jffs2_clear_acl(f)
#endif /* CONFIG_JFFS2_FS_POSIX_ACL */ #endif /* CONFIG_JFFS2_FS_POSIX_ACL */
...@@ -968,6 +968,7 @@ void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f) ...@@ -968,6 +968,7 @@ void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
struct jffs2_full_dirent *fd, *fds; struct jffs2_full_dirent *fd, *fds;
int deleted; int deleted;
jffs2_clear_acl(f);
jffs2_xattr_delete_inode(c, f->inocache); jffs2_xattr_delete_inode(c, f->inocache);
down(&f->sem); down(&f->sem);
deleted = f->inocache && !f->inocache->nlink; deleted = f->inocache && !f->inocache->nlink;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment