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: Li Zefan <lizf@cn.fujitsu.com> Acked-by: Frederic 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: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
be9742e6cb
commit
f088e54712
1 changed files with 14 additions and 18 deletions
|
@ -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:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
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;
|
||||
|
|
Loading…
Reference in a new issue