2019-07-05 13:50:52

by Peng Wang

[permalink] [raw]
Subject: [PATCH] kernfs: fix potential null pointer dereference

Get root safely after kn is ensureed to be not null.

Signed-off-by: Peng Wang <[email protected]>
---
fs/kernfs/dir.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
index a387534c9577..ea3fc972c48b 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -430,7 +430,7 @@ struct kernfs_node *kernfs_get_active(struct kernfs_node *kn)
*/
void kernfs_put_active(struct kernfs_node *kn)
{
- struct kernfs_root *root = kernfs_root(kn);
+ struct kernfs_root *root;
int v;

if (unlikely(!kn))
@@ -442,6 +442,7 @@ void kernfs_put_active(struct kernfs_node *kn)
if (likely(v != KN_DEACTIVATED_BIAS))
return;

+ root = kernfs_root(kn);
wake_up_all(&root->deactivate_waitq);
}

--
2.19.1


2019-07-08 19:26:57

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH] kernfs: fix potential null pointer dereference

On Fri, Jul 05, 2019 at 09:47:30PM +0800, Peng Wang wrote:
> diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
> index a387534c9577..ea3fc972c48b 100644
> --- a/fs/kernfs/dir.c
> +++ b/fs/kernfs/dir.c
> @@ -430,7 +430,7 @@ struct kernfs_node *kernfs_get_active(struct kernfs_node *kn)
> */
> void kernfs_put_active(struct kernfs_node *kn)
> {
> - struct kernfs_root *root = kernfs_root(kn);
> + struct kernfs_root *root;
> int v;
>
> if (unlikely(!kn))
> @@ -442,6 +442,7 @@ void kernfs_put_active(struct kernfs_node *kn)
> if (likely(v != KN_DEACTIVATED_BIAS))
> return;
>
> + root = kernfs_root(kn);
> wake_up_all(&root->deactivate_waitq);

Maybe just remove the root variable altogether? Other than that,

Acked-by: Tejun Heo <[email protected]>

Thanks.

--
tejun