Skip to content

Commit 382b1e8

Browse files
mowteamgregkh
authored andcommitted
kernfs: fix memory leak of kernfs_iattrs in __kernfs_new_node
There exists a memory leak of kernfs_iattrs contained as an element of kernfs_node allocated in __kernfs_new_node(). __kernfs_setattr() allocates kernfs_iattrs as a sub-object, and the LSM security check incorrectly errors out and does not free the kernfs_iattrs sub-object. Make an additional error out case that properly frees kernfs_iattrs if security_kernfs_init_security() fails. Fixes: e19dfdc ("kernfs: initialize security of newly created nodes") Co-developed-by: Oliver Rosenberg <olrose55@gmail.com> Signed-off-by: Oliver Rosenberg <olrose55@gmail.com> Signed-off-by: Will Rosenberg <whrosenb@asu.edu> Link: https://patch.msgid.link/20251125151332.2010687-1-whrosenb@asu.edu Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 2467f99 commit 382b1e8

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

fs/kernfs/dir.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,11 +675,14 @@ static struct kernfs_node *__kernfs_new_node(struct kernfs_root *root,
675675
if (parent) {
676676
ret = security_kernfs_init_security(parent, kn);
677677
if (ret)
678-
goto err_out3;
678+
goto err_out4;
679679
}
680680

681681
return kn;
682682

683+
err_out4:
684+
simple_xattrs_free(&kn->iattr->xattrs, NULL);
685+
kmem_cache_free(kernfs_iattrs_cache, kn->iattr);
683686
err_out3:
684687
spin_lock(&root->kernfs_idr_lock);
685688
idr_remove(&root->ino_idr, (u32)kernfs_ino(kn));

0 commit comments

Comments
 (0)