Skip to contentSkip to conversation

ftrace: fix "notrace" filtering priority

PATCH Applied Abhishek Sagar 2 participants 2 messages Jun 14, 2008

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ftrace: fix "notrace" filtering priority

Hi Steven,

This is a fix to give notrace filter rules priority over "set_ftrace_filter" rules. This way functions set to be filtered and also in the notrace list will not get traced.

---

This fix ensures that functions which are set to be filetered and are concurrently marked as "notrace" don't get recorded. As of now, if a record is marked as FTRACE_FL_FILTER and is enabled, then the notrace flag is not checked. Tested on x86-32.

kernel/trace/ftrace.c +9 -3
index 0118979..b532e4a 100644
@@ -355,20 +355,26 @@ __ftrace_replace_code(struct dyn_ftrace *rec,
 		 * If this record is set not to trace then
 		 * do nothing.
 		 *
+		 * If this record is set not to trace and
+		 * it is enabled then disable it.
+		 *
 		 * If this record is not set to be filtered and
 		 * it is enabled, disable it.
 		 */
-		fl = rec->flags & (FTRACE_FL_FILTER | FTRACE_FL_ENABLED);
+
+		fl = rec->flags & (FTRACE_FL_FILTER | FTRACE_FL_NOTRACE |
+				   FTRACE_FL_ENABLED);
 
 		if ((fl ==  (FTRACE_FL_FILTER | FTRACE_FL_ENABLED)) ||
-		    (fl == 0) || (rec->flags & FTRACE_FL_NOTRACE))
+		    (fl ==  (FTRACE_FL_FILTER | FTRACE_FL_NOTRACE)) ||
+		    !fl || (fl == FTRACE_FL_NOTRACE))
 			return 0;
 
 		/*
 		 * If it is enabled disable it,
 		 * otherwise enable it!
 		 */
-		if (fl == FTRACE_FL_ENABLED) {
+		if (fl & FTRACE_FL_ENABLED) {
 			/* swap new and old */
 			new = old;
 			old = ftrace_call_replace(ip, FTRACE_ADDR);
Applied
#1 lore raw
Quoted 10 lines · Abhishek Sagar

Hi Steven,

This is a fix to give notrace filter rules priority over "set_ftrace_filter" rules. This way functions set to be filtered and also in the notrace list will not get traced.

This fix ensures that functions which are set to be filetered and are concurrently marked as "notrace" don't get recorded. As of now, if a record is marked as FTRACE_FL_FILTER and is enabled, then the notrace flag is not checked. Tested on x86-32.

applied to tip/tracing/ftrace - thanks Abhishek.

Ingo