Hi Jeff,
Thanks for your help, finally I found this in kernel document.
Pointer Types
=============
Pointers printed without a specifier extension (i.e unadorned %p) are hashed to give a unique identifier without leaking kernel addresses to user space. On 64 bit machines the first 32 bits are zeroed. If you _really_ want the address see %px below.
On Jan 13, 2022, at 23:44, Jeffrey Walton < noloader@xxxxxxxxx> wrote:
On Thu, Jan 13, 2022 at 4:04 PM admin LI <admin@xxxxxxxxxxxxx> wrote:
I'm developing a kernel module for an ARM machine, while debugging I found addresses printed are all randomized and useless for debugging.
To prove I was not crazy I wrote this small program:
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/slab.h>
MODULE_LICENSE("GPL"); MODULE_AUTHOR("Somebody"); MODULE_DESCRIPTION("A simple example Linux module."); MODULE_VERSION("0.01");
static int __init example_init(void) { uint32_t a; uint32_t b; uint32_t c; uint8_t d[10]; uint8_t *e;
printk(KERN_INFO "Hello, World!\n"); printk(KERN_INFO "&a %p\n",&a); printk(KERN_INFO "&b %p\n",&b); printk(KERN_INFO "&c %p\n",&c); printk(KERN_INFO "&d %p\n",d); printk(KERN_INFO "&d[0] %p\n",&d[0]); printk(KERN_INFO "&d[1] %p\n",&d[1]);
e = kmalloc(10, GFP_KERNEL); printk(KERN_INFO "&e[0] %p\n",&e[0]); printk(KERN_INFO "&e[1] %p\n",&e[1]);
kfree(e);
return 0; }
static void __exit example_exit(void) { printk(KERN_INFO "Goodbye, World!\n"); }
module_init(example_init); module_exit(example_exit);
And it gave me this output:
Hello, World! &a b3f9fa31 &b 27e1c68a &c da50d287 &d 9f9aec2b &d[0] 9f9aec2b &d[1] cc627580 &e[0] 98b8c9eb &e[1] 45f248f8
Then I tested on my debian host machine which gave me the same kind of randomized addresses.
When I search randomization the only thing I found is KASLR which I don't think is the same thing.
I think something else may be going on, but I'll toss this out there in case it helps.
In the past randomization was disabled by writing 0 to /proc/sys/kernel/randomize_va_space. Something like:
sysctl -w kernel.randomize_va_space=0
To make it permanent, change it in /etc/sysctl.conf.
Jeff
|
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies