How to disable address randomization ?

Jeffrey Walton noloader at gmail.com
Thu Jan 13 17:44:47 EST 2022


On Thu, Jan 13, 2022 at 4:04 PM admin LI <admin at hifiphile.com> 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



More information about the Kernelnewbies mailing list