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

Commit f088e547 authored by Li Zefan's avatar Li Zefan Committed by Ingo Molnar
Browse files

ksym_tracer: Fix validation of access type



# echo 'pid_max:rw-' > ksym_trace_filter
 # cat ksym_trace_filter
 pid_max:rw-
 # echo 'pid_max:ww-' > ksym_trace_filter
 (should return -EINVAL)
 # cat ksym_trace_filter
 (but it ended up removing filter entry)

Signed-off-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Cc: "K.Prasad" <prasad@linux.vnet.ibm.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <4A52E2CE.6080409@cn.fujitsu.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent be9742e6
Loading
Loading
Loading
Loading
+14 −18
Original line number Diff line number Diff line
@@ -114,24 +114,22 @@ void ksym_hbp_handler(struct hw_breakpoint *hbp, struct pt_regs *regs)
 * --x : Set Execution Break points (Not available yet)
 *
 */
static int ksym_trace_get_access_type(char *access_str)
static int ksym_trace_get_access_type(char *str)
{
	int pos, access = 0;
	int access = 0;

	for (pos = 0; pos < KSYM_TRACER_OP_LEN; pos++) {
		switch (access_str[pos]) {
		case 'r':
			access += (pos == 0) ? 4 : -1;
			break;
		case 'w':
			access += (pos == 1) ? 2 : -1;
			break;
		case '-':
			break;
		default:
	if (str[0] == 'r')
		access += 4;
	else if (str[0] != '-')
		return -EINVAL;

	if (str[1] == 'w')
		access += 2;
	else if (str[1] != '-')
		return -EINVAL;

	if (str[2] != '-')
		return -EINVAL;
		}
	}

	switch (access) {
	case 6:
@@ -140,8 +138,6 @@ static int ksym_trace_get_access_type(char *access_str)
	case 2:
		access = HW_BREAKPOINT_WRITE;
		break;
	case 0:
		access = 0;
	}

	return access;