aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_ksym.c
diff options
context:
space:
mode:
authorLi Zefan <lizf@cn.fujitsu.com>2009-07-07 01:53:18 -0400
committerIngo Molnar <mingo@elte.hu>2009-07-10 05:59:41 -0400
commitf088e5471297cc78d7465e1fd997cb1a91a48019 (patch)
treef3e03e2cf1a83621b9005ff72298845791160e6b /kernel/trace/trace_ksym.c
parentbe9742e6cb107fe1d77db7a081ea4eb25e79e1ad (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>
Diffstat (limited to 'kernel/trace/trace_ksym.c')
-rw-r--r--kernel/trace/trace_ksym.c32
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 */
117static int ksym_trace_get_access_type(char *access_str) 117static 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;