summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@redhat.com>2013-01-27 18:20:45 +0100
committerOleg Nesterov <oleg@redhat.com>2013-02-08 18:10:17 +0100
commit84d7ed799fd6c1366547d88ddb8188c65de3b94f (patch)
treea40db2f5e04c02d087a37c53182335fc46803ea3
parentuprobes: Add exports for module use (diff)
downloadlinux-84d7ed799fd6c1366547d88ddb8188c65de3b94f.tar.xz
linux-84d7ed799fd6c1366547d88ddb8188c65de3b94f.zip
uprobes/tracing: Fix dentry/mount leak in create_trace_uprobe()
create_trace_uprobe() does kern_path() to find ->d_inode, but forgets to do path_put(). We can do this right after igrab(). Signed-off-by: Oleg Nesterov <oleg@redhat.com> Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
-rw-r--r--kernel/trace/trace_uprobe.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index 17d9b2bcc28d..06c22bad776a 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -253,16 +253,18 @@ static int create_trace_uprobe(int argc, char **argv)
if (ret)
goto fail_address_parse;
- ret = kstrtoul(arg, 0, &offset);
- if (ret)
- goto fail_address_parse;
-
inode = igrab(path.dentry->d_inode);
+ path_put(&path);
+
if (!S_ISREG(inode->i_mode)) {
ret = -EINVAL;
goto fail_address_parse;
}
+ ret = kstrtoul(arg, 0, &offset);
+ if (ret)
+ goto fail_address_parse;
+
argc -= 2;
argv += 2;