--- zzzz-none-000/linux-2.6.19.2/kernel/kallsyms.c 2007-01-10 19:10:37.000000000 +0000 +++ davinci-8020-5505/linux-2.6.19.2/kernel/kallsyms.c 2008-02-25 14:14:47.000000000 +0000 @@ -287,9 +287,31 @@ else sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); } - printk(fmt, buffer); + __printk(fmt, buffer); } +#if defined(CONFIG_AVM_SIMPLE_PROFILING) +void __sprint_symbol(char *buffer, unsigned long address) +{ + char *modname; + const char *name; + unsigned long offset, size; + char namebuf[KSYM_NAME_LEN+1]; + + name = kallsyms_lookup(address, &size, &offset, &modname, namebuf); + + if (!name) + sprintf(buffer, "0x%lx", address); + else { + if (modname) + sprintf(buffer, "%s+%#lx/%#lx [%s]", name, offset, + size, modname); + else + sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); + } +} +#endif /*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ + /* To avoid using get_symbol_offset for every symbol, we carry prefix along. */ struct kallsym_iter { @@ -337,7 +359,6 @@ static void reset_iter(struct kallsym_iter *iter, loff_t new_pos) { - iter->name[0] = '\0'; iter->nameoff = get_symbol_offset(new_pos); iter->pos = new_pos; } @@ -416,7 +437,7 @@ struct kallsym_iter *iter; int ret; - iter = kmalloc(sizeof(*iter), GFP_KERNEL); + iter = kzalloc(sizeof(*iter), GFP_KERNEL); if (!iter) return -ENOMEM; reset_iter(iter, 0); @@ -447,7 +468,15 @@ { struct proc_dir_entry *entry; +#ifdef CONFIG_GRKERNSEC_PROC_ADD +#ifdef CONFIG_GRKERNSEC_PROC_USER + entry = create_proc_entry("kallsyms", S_IFREG | S_IRUSR, NULL); +#elif CONFIG_GRKERNSEC_PROC_USERGROUP + entry = create_proc_entry("kallsyms", S_IFREG | S_IRUSR | S_IRGRP, NULL); +#endif +#else entry = create_proc_entry("kallsyms", 0444, NULL); +#endif if (entry) entry->proc_fops = &kallsyms_operations; return 0;