Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d954fbf0 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

tracing: Fix wrong usage of strstrip in trace_ksyms



strstrip returns a pointer to the first non space character, but the
code in parse_ksym_trace_str() ignores that.

strstrip is now must_check and therefor we get the correct warning:
kernel/trace/trace_ksym.c:294: warning:
ignoring return value of ‘strstrip’, declared with attribute warn_unused_result

We are really not interested in leading whitespace here.

Fix that and cleanup the dozen kfree() exit pathes.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
parent 788d70dc
Loading
Loading
Loading
Loading
+21 −28
Original line number Diff line number Diff line
@@ -277,21 +277,20 @@ static ssize_t ksym_trace_filter_write(struct file *file,
{
	struct trace_ksym *entry;
	struct hlist_node *node;
	char *input_string, *ksymname = NULL;
	char *buf, *input_string, *ksymname = NULL;
	unsigned long ksym_addr = 0;
	int ret, op, changed = 0;

	input_string = kzalloc(count + 1, GFP_KERNEL);
	if (!input_string)
	buf = kzalloc(count + 1, GFP_KERNEL);
	if (!buf)
		return -ENOMEM;

	if (copy_from_user(input_string, buffer, count)) {
		kfree(input_string);
		return -EFAULT;
	}
	input_string[count] = '\0';
	ret = -EFAULT;
	if (copy_from_user(buf, buffer, count))
		goto out;

	strstrip(input_string);
	buf[count] = '\0';
	input_string = strstrip(buf);

	/*
	 * Clear all breakpoints if:
@@ -302,15 +301,13 @@ static ssize_t ksym_trace_filter_write(struct file *file,
	if (!input_string[0] || !strcmp(input_string, "0") ||
	    !strcmp(input_string, "*:---")) {
		__ksym_trace_reset();
		kfree(input_string);
		return count;
		ret = 0;
		goto out;
	}

	ret = op = parse_ksym_trace_str(input_string, &ksymname, &ksym_addr);
	if (ret < 0) {
		kfree(input_string);
		return ret;
	}
	if (ret < 0)
		goto out;

	mutex_lock(&ksym_tracer_mutex);

@@ -321,7 +318,7 @@ static ssize_t ksym_trace_filter_write(struct file *file,
			if (entry->attr.bp_type != op)
				changed = 1;
			else
				goto out;
				goto out_unlock;
			break;
		}
	}
@@ -336,28 +333,24 @@ static ssize_t ksym_trace_filter_write(struct file *file,
			if (IS_ERR(entry->ksym_hbp))
				ret = PTR_ERR(entry->ksym_hbp);
			else
				goto out;
				goto out_unlock;
		}
		/* Error or "symbol:---" case: drop it */
		ksym_filter_entry_count--;
		hlist_del_rcu(&(entry->ksym_hlist));
		synchronize_rcu();
		kfree(entry);
		goto out;
		goto out_unlock;
	} else {
		/* Check for malformed request: (4) */
		if (op == 0)
			goto out;
		if (op)
			ret = process_new_ksym_entry(ksymname, op, ksym_addr);
	}
out:
out_unlock:
	mutex_unlock(&ksym_tracer_mutex);

	kfree(input_string);

	if (!ret)
		ret = count;
	return ret;
out:
	kfree(buf);
	return !ret ? count : ret;
}

static const struct file_operations ksym_tracing_fops = {