summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-08-08 08:39:35 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-08-08 08:39:35 +0200
commit8097c43bcbec56fbd0788d99e1e236c0e0d4013f (patch)
tree5daf696782d7c8b06de28d035cd896ce222dc708
parentcc798c83898ea0a77fcaa1a92afda35c3c3ded74 (diff)
Revert "kernfs: fix memleak in kernel_ops_readdir()"
This reverts commit cc798c83898ea0a77fcaa1a92afda35c3c3ded74. Tony writes: Somehow this causes a regression in Linux next for me where I'm seeing lots of sysfs entries now missing under /sys/bus/platform/devices. For example, I now only see one .serial entry show up in sysfs. Things work again if I revert commit cc798c83898e ("kernfs: fix memleak inkernel_ops_readdir()"). Any ideas why that would be? Tejun says: Ugh, you're right. It can get double-put cuz ctx->pos is put by release too. So reverting it for now. Reported-by: Tony Lindgren <tony@atomide.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Tejun Heo <tj@kernel.org> Fixes: cc798c83898e ("kernfs: fix memleak in kernel_ops_readdir()") Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/kernfs/dir.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
index 1e98efc2bf6d..a387534c9577 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -1684,14 +1684,11 @@ static int kernfs_fop_readdir(struct file *file, struct dir_context *ctx)
kernfs_get(pos);
mutex_unlock(&kernfs_mutex);
- if (unlikely(!dir_emit(ctx, name, len, ino, type))) {
- kernfs_put(pos);
- goto out;
- }
+ if (!dir_emit(ctx, name, len, ino, type))
+ return 0;
mutex_lock(&kernfs_mutex);
}
mutex_unlock(&kernfs_mutex);
-out:
file->private_data = NULL;
ctx->pos = INT_MAX;
return 0;