Skip to contentSkip to conversation

Switch proc interfaces in kernel/ to %pK

PATCH In review Dan Rosenberg 4 participants 7 messages Jan 18, 2011 – Jan 20, 2011 kprobes

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Switch proc interfaces in kernel/ to %pK

Switch users of %p in /proc interfaces in kernel/ to %pK, to allow configuring the level of exposure of kernel pointers via the kptr_restrict sysctl.

---
 kernel/cgroup.c           |    2 +-
 kernel/kprobes.c          |    4 ++--
 kernel/lockdep_proc.c     |   10 +++++-----
 kernel/time/timer_stats.c |    2 +-
 4 files changed, 9 insertions(+), 9 deletions(-)
kernel/cgroup.c +1 -1
index b24d702..b04951b 100644
@@ -4894,7 +4894,7 @@ static int cgroup_css_links_read(struct cgroup *cont,
 		struct css_set *cg = link->cg;
 		struct task_struct *task;
 		int count = 0;
-		seq_printf(seq, "css_set %p\n", cg);
+		seq_printf(seq, "css_set %pK\n", cg);
 		list_for_each_entry(task, &cg->tasks, cg_list) {
 			if (count++ > MAX_TASKS_SHOWN_PER_CSS) {
 				seq_puts(seq, "  ...\n");
kernel/kprobes.c +2 -2
index 7798181..2437ca4 100644
@@ -2021,11 +2021,11 @@ static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p,
 		kprobe_type = "k";
 
 	if (sym)
-		seq_printf(pi, "%p  %s  %s+0x%x  %s ",
+		seq_printf(pi, "%pK  %s  %s+0x%x  %s ",
 			p->addr, kprobe_type, sym, offset,
 			(modname ? modname : " "));
 	else
-		seq_printf(pi, "%p  %s  %p ",
+		seq_printf(pi, "%pK  %s  %pK ",
 			p->addr, kprobe_type, p->addr);
 
 	if (!pp)
kernel/lockdep_proc.c +5 -5
index 1969d2f..215638d 100644
@@ -65,7 +65,7 @@ static int l_show(struct seq_file *m, void *v)
 		return 0;
 	}
 
-	seq_printf(m, "%p", class->key);
+	seq_printf(m, "%pK", class->key);
 #ifdef CONFIG_DEBUG_LOCKDEP
 	seq_printf(m, " OPS:%8ld", class->ops);
 #endif
@@ -83,7 +83,7 @@ static int l_show(struct seq_file *m, void *v)
 
 	list_for_each_entry(entry, &class->locks_after, entry) {
 		if (entry->distance == 1) {
-			seq_printf(m, " -> [%p] ", entry->class->key);
+			seq_printf(m, " -> [%pK] ", entry->class->key);
 			print_name(m, entry->class);
 			seq_puts(m, "\n");
 		}
@@ -152,7 +152,7 @@ static int lc_show(struct seq_file *m, void *v)
 		if (!class->key)
 			continue;
 
-		seq_printf(m, "[%p] ", class->key);
+		seq_printf(m, "[%pK] ", class->key);
 		print_name(m, class);
 		seq_puts(m, "\n");
 	}
@@ -502,7 +502,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
 		if (!i)
 			seq_line(m, '-', 40-namelen, namelen);
 
-		snprintf(ip, sizeof(ip), "[<%p>]",
+		snprintf(ip, sizeof(ip), "[<%pK>]",
 				(void *)class->contention_point[i]);
 		seq_printf(m, "%40s %14lu %29s %pS\n",
 			   name, stats->contention_point[i],
@@ -517,7 +517,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
 		if (!i)
 			seq_line(m, '-', 40-namelen, namelen);
 
-		snprintf(ip, sizeof(ip), "[<%p>]",
+		snprintf(ip, sizeof(ip), "[<%pK>]",
 				(void *)class->contending_point[i]);
 		seq_printf(m, "%40s %14lu %29s %pS\n",
 			   name, stats->contending_point[i],
kernel/time/timer_stats.c +1 -1
index 2f3b585..3069d0d 100644
@@ -272,7 +272,7 @@ static void print_name_offset(struct seq_file *m, unsigned long addr)
 	char symname[KSYM_NAME_LEN];
 
 	if (lookup_symbol_name(addr, symname) < 0)
-		seq_printf(m, "<%p>", (void *)addr);
+		seq_printf(m, "<%pK>", (void *)addr);
 	else
 		seq_printf(m, "%s", symname);
 }
Acked-by on v1 1/1
#1 lore raw
Quoted 5 lines · Dan Rosenberg

Switch users of %p in /proc interfaces in kernel/ to %pK, to allow configuring the level of exposure of kernel pointers via the kptr_restrict sysctl.

(for cgroup.c)

Quoted 103 lines

---
 kernel/cgroup.c           |    2 +-
 kernel/kprobes.c          |    4 ++--
 kernel/lockdep_proc.c     |   10 +++++-----
 kernel/time/timer_stats.c |    2 +-

 4 files changed, 9 insertions(+), 9 deletions(-)
kernel/cgroup.c +1 -1
index b24d702..b04951b 100644
@@ -4894,7 +4894,7 @@ static int cgroup_css_links_read(struct cgroup *cont,
                struct css_set *cg = link->cg;
                struct task_struct *task;
                int count = 0;
-               seq_printf(seq, "css_set %p\n", cg);
+               seq_printf(seq, "css_set %pK\n", cg);
                list_for_each_entry(task, &cg->tasks, cg_list) {
                        if (count++ > MAX_TASKS_SHOWN_PER_CSS) {
                                seq_puts(seq, "  ...\n");
kernel/kprobes.c +1 -1
index 7798181..2437ca4 100644
@@ -2021,11 +2021,11 @@ static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p,
                kprobe_type = "k";
 
        if (sym)
-               seq_printf(pi, "%p  %s  %s+0x%x  %s ",
+               seq_printf(pi, "%pK  %s  %s+0x%x  %s ",
                        p->addr, kprobe_type, sym, offset,
                        (modname ? modname : " "));

       else
-               seq_printf(pi, "%p  %s  %p ",
+               seq_printf(pi, "%pK  %s  %pK ", p->addr, kprobe_type, p->addr);

       if (!pp)

kernel/lockdep_proc.c +5 -5
index 1969d2f..215638d 100644
@@ -65,7 +65,7 @@ static int l_show(struct seq_file *m, void *v)
                return 0;
        }
 
-       seq_printf(m, "%p", class->key);
+       seq_printf(m, "%pK", class->key);
  #ifdef CONFIG_DEBUG_LOCKDEP
        seq_printf(m, " OPS:%8ld", class->ops);
  #endif
@@ -83,7 +83,7 @@ static int l_show(struct seq_file *m, void *v)
 
        list_for_each_entry(entry, &class->locks_after, entry) {
                if (entry->distance == 1) {
-                       seq_printf(m, " -> [%p] ", entry->class->key);
+                       seq_printf(m, " -> [%pK] ", entry->class->key);
                        print_name(m, entry->class);
                        seq_puts(m, "\n");
                }
@@ -152,7 +152,7 @@ static int lc_show(struct seq_file *m, void *v)
                if (!class->key)
                        continue;
 
-               seq_printf(m, "[%p] ", class->key);
+               seq_printf(m, "[%pK] ", class->key);
                print_name(m, class);
                seq_puts(m, "\n");
        }
@@ -502,7 +502,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
                if (!i)
                        seq_line(m, '-', 40-namelen, namelen);
 
-               snprintf(ip, sizeof(ip), "[<%p>]",
+               snprintf(ip, sizeof(ip), "[<%pK>]",
                                (void *)class->contention_point[i]);
                seq_printf(m, "%40s %14lu %29s %pS\n",
                           name, stats->contention_point[i],
@@ -517,7 +517,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
                if (!i)
                        seq_line(m, '-', 40-namelen, namelen);
 
-               snprintf(ip, sizeof(ip), "[<%p>]",
+               snprintf(ip, sizeof(ip), "[<%pK>]",
                                (void *)class->contending_point[i]);
                seq_printf(m, "%40s %14lu %29s %pS\n",
                           name, stats->contending_point[i],
kernel/time/timer_stats.c +1 -1
index 2f3b585..3069d0d 100644
@@ -272,7 +272,7 @@ static void print_name_offset(struct seq_file *m, unsigned long addr)
        char symname[KSYM_NAME_LEN];
 
        if (lookup_symbol_name(addr, symname) < 0)
-               seq_printf(m, "<%p>", (void *)addr);
+               seq_printf(m, "<%pK>", (void *)addr);

       else
               seq_printf(m, "%s", symname);
 }

#2 lore raw
In reply to Dan Rosenberg

kernel/lockdep_proc.c

Quoted 6 lines · Dan Rosenberg

Switch users of %p in /proc interfaces in kernel/ to %pK, to allow configuring the level of exposure of kernel pointers via the kptr_restrict sysctl.

kernel/lockdep_proc.c +0 -0

/proc/lockdep is r--------
/proc/lockdep_chains is r--------
/proc/lock_stat is rw-------

Is this supposed to mean something?

#3 lore raw
Quoted 5 lines · Alexey Dobriyan
Quoted 3 lines · Dan Rosenberg

Switch users of %p in /proc interfaces in kernel/ to %pK, to allow configuring the level of exposure of kernel pointers via the kptr_restrict sysctl.

Quoted 8 lines

kernel/lockdep_proc.c

Quoted 2 lines
kernel/lockdep_proc.c +0 -0

/proc/lockdep is r--------
/proc/lockdep_chains is r--------
/proc/lock_stat is rw-------

Is this supposed to mean something?

It's certainly not a priority to switch these particular interfaces over since they aren't exposed to unprivileged users. However, when kptr_restrict is set to 2, kernel pointers aren't exposed at all, even to root. Changing to %pK will certainly have no negative effect with the default setting of 1 (hide when the reader does not have CAP_SYSLOG).

Let me know if you're opposed and I can re-send a version that doesn't touch these files.

#4 lore raw
In reply to Dan Rosenberg
Quoted 3 lines · Dan Rosenberg

Switch users of %p in /proc interfaces in kernel/ to %pK, to allow configuring the level of exposure of kernel pointers via the kptr_restrict sysctl.

This report_probe interface is at /sys/kernel/debug/kprobes/list. Is that policy applied to debugfs interface (for debug) too?

# in that case, you might update ftrace and perf tracing interfaces...
Quoted 18 lines
kernel/kprobes.c +2 -2
index 7798181..2437ca4 100644
@@ -2021,11 +2021,11 @@ static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p,
 		kprobe_type = "k";
 
 	if (sym)
-		seq_printf(pi, "%p  %s  %s+0x%x  %s ",
+		seq_printf(pi, "%pK  %s  %s+0x%x  %s ",
 			p->addr, kprobe_type, sym, offset,
 			(modname ? modname : " "));
 	else
-		seq_printf(pi, "%p  %s  %p ",
+		seq_printf(pi, "%pK  %s  %pK ",
 			p->addr, kprobe_type, p->addr);
 
 	if (!pp)
Signature · 4 lines
Masami HIRAMATSU
2nd Dept. Linux Technology Center
Hitachi, Ltd., Systems Development Laboratory
E-mail: [email protected]
#5 lore raw
Quoted 9 lines · Masami Hiramatsu
Quoted 3 lines · Dan Rosenberg

Switch users of %p in /proc interfaces in kernel/ to %pK, to allow configuring the level of exposure of kernel pointers via the kptr_restrict sysctl.

This report_probe interface is at /sys/kernel/debug/kprobes/list. Is that policy applied to debugfs interface (for debug) too?

# in that case, you might update ftrace and perf tracing interfaces...

There's no reason to not update ftrace and perf too, since I'd assume no one is using debugging interfaces without root privileges anyway. I'll add them to my list.

Quoted 25 lines
Quoted 18 lines
kernel/kprobes.c +2 -2
index 7798181..2437ca4 100644
@@ -2021,11 +2021,11 @@ static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p,
 		kprobe_type = "k";
 
 	if (sym)
-		seq_printf(pi, "%p  %s  %s+0x%x  %s ",
+		seq_printf(pi, "%pK  %s  %s+0x%x  %s ",
 			p->addr, kprobe_type, sym, offset,
 			(modname ? modname : " "));
 	else
-		seq_printf(pi, "%p  %s  %p ",
+		seq_printf(pi, "%pK  %s  %pK ",
 			p->addr, kprobe_type, p->addr);
 
 	if (!pp)
Signature · 4 lines
Masami HIRAMATSU
2nd Dept. Linux Technology Center
Hitachi, Ltd., Systems Development Laboratory
E-mail: [email protected]
#6 lore raw
Quoted 6 lines · Dan Rosenberg
Quoted 5 lines · Masami Hiramatsu
Quoted 3 lines · Dan Rosenberg

Switch users of %p in /proc interfaces in kernel/ to %pK, to allow configuring the level of exposure of kernel pointers via the kptr_restrict sysctl.

Quoted 8 lines
Quoted 4 lines

This report_probe interface is at /sys/kernel/debug/kprobes/list. Is that policy applied to debugfs interface (for debug) too?

# in that case, you might update ftrace and perf tracing interfaces...

There's no reason to not update ftrace and perf too, since I'd assume no one is using debugging interfaces without root privileges anyway. I'll add them to my list.

OK, I see.

Quoted 27 lines
Quoted 25 lines
Quoted 18 lines
kernel/kprobes.c +2 -2
index 7798181..2437ca4 100644
@@ -2021,11 +2021,11 @@ static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p,
 		kprobe_type = "k";
 
 	if (sym)
-		seq_printf(pi, "%p  %s  %s+0x%x  %s ",
+		seq_printf(pi, "%pK  %s  %s+0x%x  %s ",
 			p->addr, kprobe_type, sym, offset,
 			(modname ? modname : " "));
 	else
-		seq_printf(pi, "%p  %s  %p ",
+		seq_printf(pi, "%pK  %s  %pK ",
 			p->addr, kprobe_type, p->addr);
 
 	if (!pp)
Signature · 4 lines
Masami HIRAMATSU
2nd Dept. Linux Technology Center
Hitachi, Ltd., Systems Development Laboratory
E-mail: [email protected]
Signature · 4 lines
Masami HIRAMATSU
2nd Dept. Linux Technology Center
Hitachi, Ltd., Systems Development Laboratory
E-mail: [email protected]