Michael,
On 26/06/2024 03:56, Michael Schmitz wrote:
Jean-Michel,
On 24/06/24 20:56, Jean-Michel Hautbois wrote:
When I printk the do_page_fault first debug, I get for the first call
to ls:
bash-5.2# ls
[ 14.700000] do page fault:
[ 14.700000] regs->sr=0x0, regs->pc=0x70069ee6, address=0x70069ee6,
0, (ptrval)
Page not present, read fault. Please disable obfuscation of kernel
pointer addresses by printk. Maybe also disable address space
randomization while debugging this.
This call works almost fine (I still have the assert failed:
folio->private != NULL issue).
And when I call it a second time, I get:
bash-5.2# ls
[ 19.820000] do page fault:
[ 19.820000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700e2004,
2, (ptrval)
Page not present, write fault.
It would be helpful if you could get a dump of /proc/1/maps before the
execve() syscall in your helloworld init replacement. That might confirm
all these addresses are legit (assuming mappings survive across
execve(), that is), and what they correspond to.
I changed the code a bit, and display an error only when error_code is
not 0. The result is for the bash launch:
[ 3.864000] Run /bin/bash as init process
[ 3.865000] with arguments:
[ 3.866000] /bin/bash
[ 3.868000] with environment:
[ 3.869000] HOME=/
[ 3.871000] TERM=linux
[ 4.250000] do page fault:
[ 4.250000] regs->sr=0x2000, regs->pc=0x41366984, address=0x700b3364,
2, 41fb0000
[ 4.258000] do page fault:
[ 4.258000] regs->sr=0x2000, regs->pc=0x41366984, address=0x6002140c,
2, 41fb0000
[ 4.273000] do page fault:
[ 4.273000] regs->sr=0x0, regs->pc=0x60011996, address=0x6001ff74, 3,
41fb0000
[ 4.332000] do page fault:
[ 4.332000] regs->sr=0x10, regs->pc=0x60012bf4, address=0x700adf44,
3, 41fb0000
[ 4.497000] do page fault:
[ 4.497000] regs->sr=0x0, regs->pc=0x60016344, address=0x600592d0, 2,
41fb0000
[ 4.505000] do page fault:
[ 4.505000] regs->sr=0x10, regs->pc=0x60007320, address=0x60055f54,
3, 41fb0000
[ 4.533000] do page fault:
[ 4.533000] regs->sr=0x0, regs->pc=0x60016344, address=0x60066244, 2,
41fb0000
[ 4.539000] do page fault:
[ 4.539000] regs->sr=0x10, regs->pc=0x60007320, address=0x60065f54,
3, 41fb0000
[ 4.635000] do page fault:
[ 4.635000] regs->sr=0x0, regs->pc=0x600098d2, address=0x60068014, 2,
41fb0000
[ 4.637000] do page fault:
[ 4.637000] regs->sr=0x0, regs->pc=0x60016344, address=0x600a2d1c, 2,
41fb0000
[ 4.647000] do page fault:
[ 4.647000] regs->sr=0x10, regs->pc=0x60007320, address=0x600a1f54,
3, 41fb0000
[ 5.163000] do page fault:
[ 5.163000] regs->sr=0x0, regs->pc=0x60016344, address=0x601d1d28, 2,
41fb0000
[ 5.175000] do page fault:
[ 5.175000] regs->sr=0x10, regs->pc=0x60007320, address=0x601cdf44,
3, 41fb0000
[ 5.212000] do page fault:
[ 5.212000] regs->sr=0x14, regs->pc=0x6000b04a, address=0x601ce004,
2, 41fb0000
[ 5.373000] do page fault:
[ 5.373000] regs->sr=0x14, regs->pc=0x6000b04a, address=0x60056004,
2, 41fb0000
[ 5.396000] random: crng init done
[ 5.401000] do page fault:
[ 5.401000] regs->sr=0x14, regs->pc=0x6000b04a, address=0x700ae004,
2, 41fb0000
[ 5.414000] do page fault:
[ 5.414000] regs->sr=0x0, regs->pc=0x6000b42a, address=0x700b0000, 2,
41fb0000
[ 5.487000] do page fault:
[ 5.487000] regs->sr=0x0, regs->pc=0x6019cbf0, address=0x601d5010, 2,
41fb0000
[ 5.488000] do page fault:
[ 5.488000] regs->sr=0x0, regs->pc=0x6019cbf6, address=0x601db288, 2,
41fb0000
[ 5.552000] do page fault:
[ 5.552000] regs->sr=0x0, regs->pc=0x600e1032, address=0x601d21d4, 3,
41fb0000
[ 5.569000] do page fault:
[ 5.569000] regs->sr=0x0, regs->pc=0x600df938, address=0x700ba8e4, 2,
41fb0000
[ 5.580000] do page fault:
[ 5.580000] regs->sr=0x8, regs->pc=0x70038476, address=0x700b4890, 2,
41fb0000
[ 5.634000] do page fault:
[ 5.634000] regs->sr=0x0, regs->pc=0x6011cbf2, address=0x700be004, 2,
41fb0000
[ 5.677000] do page fault:
[ 5.677000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700c71b4, 2,
41fb0000
[ 5.684000] do page fault:
[ 5.684000] regs->sr=0x2004, regs->pc=0x410a724a, address=0x700c0000,
2, 41fb0000
[ 5.686000] do page fault:
[ 5.686000] regs->sr=0x2004, regs->pc=0x410a724a, address=0x700c2000,
2, 41fb0000
[ 6.058000] do page fault:
[ 6.058000] regs->sr=0x10, regs->pc=0x7004b63c, address=0x700b8d2a,
3, 41fb0000
[ 6.206000] do page fault:
[ 6.206000] regs->sr=0x0, regs->pc=0x700365d2, address=0x6005a468, 2,
41fb0000
[ 6.231000] do page fault:
[ 6.231000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700c483c, 2,
41fb0000
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
[ 6.327000] do page fault:
[ 6.327000] regs->sr=0x4, regs->pc=0x70092344, address=0x700bc410, 3,
41fb0000
[ 6.349000] do page fault:
[ 6.349000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700c80f4, 2,
41fb0000
[ 6.438000] do page fault:
[ 6.438000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700ca114, 2,
41fb0000
[ 6.452000] do page fault:
[ 6.452000] regs->sr=0x8, regs->pc=0x600f28d0, address=0xbffcfd4c, 2,
41fb0000
[ 6.481000] do page fault:
[ 6.481000] regs->sr=0x0, regs->pc=0x6008b6a8, address=0xbffcd1a0, 2,
41fb0000
[ 6.493000] do page fault:
[ 6.493000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700cc474, 2,
41fb0000
[ 6.516000] do page fault:
[ 6.516000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700ce1bc, 2,
41fb0000
[ 6.517000] do page fault:
[ 6.517000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700d000c, 2,
41fb0000
[ 6.519000] do page fault:
[ 6.519000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700d246c, 2,
41fb0000
[ 6.520000] do page fault:
[ 6.520000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700d42bc, 2,
41fb0000
[ 6.528000] do page fault:
[ 6.528000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700d6004, 2,
41fb0000
[ 6.543000] do page fault:
[ 6.543000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700d8584, 2,
41fb0000
[ 6.544000] do page fault:
[ 6.544000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700da3d4, 2,
41fb0000
[ 6.546000] do page fault:
[ 6.546000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700dc224, 2,
41fb0000
[ 6.547000] do page fault:
[ 6.547000] regs->sr=0x0, regs->pc=0x6011d65a, address=0x700de074, 2,
41fb0000
[ 6.576000] do page fault:
[ 6.576000] regs->sr=0x0, regs->pc=0x6011ca12, address=0x700e02c4, 2,
41fb0000
bash-5.2#
My kernel is loaded at 0x41000000.
JM