|
@@ -4147,6 +4147,7 @@ static int m_show(struct seq_file *m, void *p)
|
|
|
{
|
|
|
struct module *mod = list_entry(p, struct module, list);
|
|
|
char buf[MODULE_FLAGS_BUF_SIZE];
|
|
|
+ unsigned long value;
|
|
|
|
|
|
/* We always ignore unformed modules. */
|
|
|
if (mod->state == MODULE_STATE_UNFORMED)
|
|
@@ -4162,7 +4163,8 @@ static int m_show(struct seq_file *m, void *p)
|
|
|
mod->state == MODULE_STATE_COMING ? "Loading" :
|
|
|
"Live");
|
|
|
/* Used by oprofile and other similar tools. */
|
|
|
- seq_printf(m, " 0x%pK", mod->core_layout.base);
|
|
|
+ value = m->private ? 0 : (unsigned long)mod->core_layout.base;
|
|
|
+ seq_printf(m, " 0x" KALLSYM_FMT, value);
|
|
|
|
|
|
/* Taints info */
|
|
|
if (mod->taints)
|
|
@@ -4184,9 +4186,23 @@ static const struct seq_operations modules_op = {
|
|
|
.show = m_show
|
|
|
};
|
|
|
|
|
|
+/*
|
|
|
+ * This also sets the "private" pointer to non-NULL if the
|
|
|
+ * kernel pointers should be hidden (so you can just test
|
|
|
+ * "m->private" to see if you should keep the values private).
|
|
|
+ *
|
|
|
+ * We use the same logic as for /proc/kallsyms.
|
|
|
+ */
|
|
|
static int modules_open(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
- return seq_open(file, &modules_op);
|
|
|
+ int err = seq_open(file, &modules_op);
|
|
|
+
|
|
|
+ if (!err) {
|
|
|
+ struct seq_file *m = file->private_data;
|
|
|
+ m->private = kallsyms_show_value() ? NULL : (void *)8ul;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static const struct file_operations proc_modules_operations = {
|