Skip to content

Commit 4af0532

Browse files
committed
tracing: Use __free() in trace_probe for cleanup
Use __free() in trace_probe to cleanup some gotos. Link: https://lore.kernel.org/all/173643298860.1514810.7267350121047606213.stgit@devnote2/ Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
1 parent bef8e6a commit 4af0532

File tree

1 file changed

+17
-34
lines changed

1 file changed

+17
-34
lines changed

kernel/trace/trace_probe.c

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1409,7 +1409,7 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size,
14091409
struct traceprobe_parse_context *ctx)
14101410
{
14111411
struct fetch_insn *code, *tmp = NULL;
1412-
char *type, *arg;
1412+
char *type, *arg __free(kfree) = NULL;
14131413
int ret, len;
14141414

14151415
len = strlen(argv);
@@ -1426,22 +1426,16 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size,
14261426
return -ENOMEM;
14271427

14281428
parg->comm = kstrdup(arg, GFP_KERNEL);
1429-
if (!parg->comm) {
1430-
ret = -ENOMEM;
1431-
goto out;
1432-
}
1429+
if (!parg->comm)
1430+
return -ENOMEM;
14331431

14341432
type = parse_probe_arg_type(arg, parg, ctx);
1435-
if (IS_ERR(type)) {
1436-
ret = PTR_ERR(type);
1437-
goto out;
1438-
}
1433+
if (IS_ERR(type))
1434+
return PTR_ERR(type);
14391435

14401436
code = tmp = kcalloc(FETCH_INSN_MAX, sizeof(*code), GFP_KERNEL);
1441-
if (!code) {
1442-
ret = -ENOMEM;
1443-
goto out;
1444-
}
1437+
if (!code)
1438+
return -ENOMEM;
14451439
code[FETCH_INSN_MAX - 1].op = FETCH_OP_END;
14461440

14471441
ctx->last_type = NULL;
@@ -1497,8 +1491,6 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size,
14971491
kfree(code->data);
14981492
}
14991493
kfree(tmp);
1500-
out:
1501-
kfree(arg);
15021494

15031495
return ret;
15041496
}
@@ -1668,7 +1660,7 @@ const char **traceprobe_expand_meta_args(int argc, const char *argv[],
16681660
{
16691661
const struct btf_param *params = NULL;
16701662
int i, j, n, used, ret, args_idx = -1;
1671-
const char **new_argv = NULL;
1663+
const char **new_argv __free(kfree) = NULL;
16721664

16731665
ret = argv_has_var_arg(argc, argv, &args_idx, ctx);
16741666
if (ret < 0)
@@ -1707,7 +1699,7 @@ const char **traceprobe_expand_meta_args(int argc, const char *argv[],
17071699
ret = sprint_nth_btf_arg(n, "", buf + used,
17081700
bufsize - used, ctx);
17091701
if (ret < 0)
1710-
goto error;
1702+
return ERR_PTR(ret);
17111703

17121704
new_argv[j++] = buf + used;
17131705
used += ret + 1;
@@ -1721,40 +1713,35 @@ const char **traceprobe_expand_meta_args(int argc, const char *argv[],
17211713
n = simple_strtoul(argv[i] + 4, &type, 10);
17221714
if (type && !(*type == ':' || *type == '\0')) {
17231715
trace_probe_log_err(0, BAD_VAR);
1724-
ret = -ENOENT;
1725-
goto error;
1716+
return ERR_PTR(-ENOENT);
17261717
}
17271718
/* Note: $argN starts from $arg1 */
17281719
ret = sprint_nth_btf_arg(n - 1, type, buf + used,
17291720
bufsize - used, ctx);
17301721
if (ret < 0)
1731-
goto error;
1722+
return ERR_PTR(ret);
17321723
new_argv[j++] = buf + used;
17331724
used += ret + 1;
17341725
} else
17351726
new_argv[j++] = argv[i];
17361727
}
17371728

1738-
return new_argv;
1739-
1740-
error:
1741-
kfree(new_argv);
1742-
return ERR_PTR(ret);
1729+
return_ptr(new_argv);
17431730
}
17441731

17451732
/* @buf: *buf must be equal to NULL. Caller must to free *buf */
17461733
int traceprobe_expand_dentry_args(int argc, const char *argv[], char **buf)
17471734
{
17481735
int i, used, ret;
17491736
const int bufsize = MAX_DENTRY_ARGS_LEN;
1750-
char *tmpbuf = NULL;
1737+
char *tmpbuf __free(kfree) = NULL;
17511738

17521739
if (*buf)
17531740
return -EINVAL;
17541741

17551742
used = 0;
17561743
for (i = 0; i < argc; i++) {
1757-
char *tmp;
1744+
char *tmp __free(kfree) = NULL;
17581745
char *equal;
17591746
size_t arg_len;
17601747

@@ -1769,7 +1756,7 @@ int traceprobe_expand_dentry_args(int argc, const char *argv[], char **buf)
17691756

17701757
tmp = kstrdup(argv[i], GFP_KERNEL);
17711758
if (!tmp)
1772-
goto nomem;
1759+
return -ENOMEM;
17731760

17741761
equal = strchr(tmp, '=');
17751762
if (equal)
@@ -1790,18 +1777,14 @@ int traceprobe_expand_dentry_args(int argc, const char *argv[], char **buf)
17901777
offsetof(struct file, f_path.dentry),
17911778
equal ? equal + 1 : tmp);
17921779

1793-
kfree(tmp);
17941780
if (ret >= bufsize - used)
1795-
goto nomem;
1781+
return -ENOMEM;
17961782
argv[i] = tmpbuf + used;
17971783
used += ret + 1;
17981784
}
17991785

1800-
*buf = tmpbuf;
1786+
*buf = no_free_ptr(tmpbuf);
18011787
return 0;
1802-
nomem:
1803-
kfree(tmpbuf);
1804-
return -ENOMEM;
18051788
}
18061789

18071790
void traceprobe_finish_parse(struct traceprobe_parse_context *ctx)

0 commit comments

Comments
 (0)