I came across such a funny mistake.
When I wanted to clear the framebuffer, qemu crashed and wrote me this:
Code: Select all
e1000: Writing to register at offset: 0x00002410. It is not fully implemented.
e1000: Writing to register at offset: 0x00002418. It is not fully implemented.
e1000: Writing to register at offset: 0x00002420. It is not fully implemented.
e1000: Writing to register at offset: 0x00002428. It is not fully implemented.
e1000: Writing to register at offset: 0x00002430. It is not fully implemented.
e1000: Writing to register at offset: 0x00003410. It is not fully implemented.
e1000: Writing to register at offset: 0x00003418. It is not fully implemented.
e1000: Writing to register at offset: 0x00003420. It is not fully implemented.
e1000: Writing to register at offset: 0x00003428. It is not fully implemented.
e1000: Writing to register at offset: 0x00003430. It is not fully implemented.
e1000: Writing to register at offset: 0x00010000. It is not fully implemented.
It turns out that part of my core tried to write its data(font for ssfn) to this address because it thought it was an accessible part of memory(after all, GRUB told it so).
It turns out that in the memory area that GRUB marked as available there was an address on the network adapter (e1000) and the font loaded there damaged the memory(I still don't understand why qemu fell when trying to write something to framebuffer).
Now I'm not sure about the security of the memory area that GRUB marked as available.
How can I avoid such problems in the future?