diff options
| author | Li Zefan <lizf@cn.fujitsu.com> | 2009-07-07 01:53:18 -0400 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-07-10 05:59:41 -0400 | 
| commit | f088e5471297cc78d7465e1fd997cb1a91a48019 (patch) | |
| tree | f3e03e2cf1a83621b9005ff72298845791160e6b | |
| parent | be9742e6cb107fe1d77db7a081ea4eb25e79e1ad (diff) | |
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>
| -rw-r--r-- | kernel/trace/trace_ksym.c | 32 | 
1 files changed, 14 insertions, 18 deletions
| diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c index b6710d31bdf0..955600929907 100644 --- a/kernel/trace/trace_ksym.c +++ b/kernel/trace/trace_ksym.c | |||
| @@ -114,24 +114,22 @@ void ksym_hbp_handler(struct hw_breakpoint *hbp, struct pt_regs *regs) | |||
| 114 | * --x : Set Execution Break points (Not available yet) | 114 | * --x : Set Execution Break points (Not available yet) | 
| 115 | * | 115 | * | 
| 116 | */ | 116 | */ | 
| 117 | static int ksym_trace_get_access_type(char *access_str) | 117 | static int ksym_trace_get_access_type(char *str) | 
| 118 | { | 118 | { | 
| 119 | int pos, access = 0; | 119 | int access = 0; | 
| 120 | 120 | ||
| 121 | for (pos = 0; pos < KSYM_TRACER_OP_LEN; pos++) { | 121 | if (str[0] == 'r') | 
| 122 | switch (access_str[pos]) { | 122 | access += 4; | 
| 123 | case 'r': | 123 | else if (str[0] != '-') | 
| 124 | access += (pos == 0) ? 4 : -1; | 124 | return -EINVAL; | 
| 125 | break; | 125 | |
| 126 | case 'w': | 126 | if (str[1] == 'w') | 
| 127 | access += (pos == 1) ? 2 : -1; | 127 | access += 2; | 
| 128 | break; | 128 | else if (str[1] != '-') | 
| 129 | case '-': | 129 | return -EINVAL; | 
| 130 | break; | 130 | |
| 131 | default: | 131 | if (str[2] != '-') | 
| 132 | return -EINVAL; | 132 | return -EINVAL; | 
| 133 | } | ||
| 134 | } | ||
| 135 | 133 | ||
| 136 | switch (access) { | 134 | switch (access) { | 
| 137 | case 6: | 135 | case 6: | 
| @@ -140,8 +138,6 @@ static int ksym_trace_get_access_type(char *access_str) | |||
| 140 | case 2: | 138 | case 2: | 
| 141 | access = HW_BREAKPOINT_WRITE; | 139 | access = HW_BREAKPOINT_WRITE; | 
| 142 | break; | 140 | break; | 
| 143 | case 0: | ||
| 144 | access = 0; | ||
| 145 | } | 141 | } | 
| 146 | 142 | ||
| 147 | return access; | 143 | return access; | 
