Crash in memmove function

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
zungnguyen
Posts: 10
Joined: Wed Sep 14, 2022 12:42 pm

Crash in memmove function

Post by zungnguyen »

Hi everyone,

It ís me again :(.

I have an issue with memmove function. When my OS run into memmove function. Everything works correctly if there is no interrupt happened. If there is interrupt happened, when the memmove's thread back, it raises exception General Protection. The context is saved correctly. Please help
void* memmove(void* des, void* src, size_t size)
{
size_t numq = size >> 3;
size_t numb = size & 0b111;
if (des < src)
{
uint64 *qdes = (uint64*)des;
uint64 *qsrc = (uint64*)src;
for (size_t i = 0; i < numq; ++i)
{
qdes = qsrc;
// printf(" %d ", i);
}
uint8 *bdes = (uint8*)(des + numq * 8);
uint8 *bsrc = (uint8*)(src + numq * 8);
for (size_t i = 0; i < numb; ++i)
{
bdes = bsrc;
}
}
return des;
}
kzinti
Member
Member
Posts: 898
Joined: Mon Feb 02, 2015 7:11 pm

Re: Crash in memmove function

Post by kzinti »

zungnguyen wrote:The context is saved correctly.
Is it restored correctly? Clearly both can't be true.
zungnguyen
Posts: 10
Joined: Wed Sep 14, 2022 12:42 pm

Re: Crash in memmove function

Post by zungnguyen »

kzinti wrote:
zungnguyen wrote:The context is saved correctly.
Is it restored correctly? Clearly both can't be true.
Yep, but i handle interrupt in the same stack, can it change data in function stack? I see that the saved rbp is the same with saved rsp , so that when interruptHanler is call, it change the local in my function
Gigasoft
Member
Member
Posts: 856
Joined: Sat Nov 21, 2009 5:11 pm

Re: Crash in memmove function

Post by Gigasoft »

If you are using a compiler that uses the SystemV AMD64 ABI, such as GCC, you must remember to disable the red zone for code that runs in kernel mode (-mno-red-zone on GCC), because it will be overwritten on every interrupt.
zungnguyen
Posts: 10
Joined: Wed Sep 14, 2022 12:42 pm

Re: Crash in memmove function

Post by zungnguyen »

Gigasoft wrote:If you are using a compiler that uses the SystemV AMD64 ABI, such as GCC, you must remember to disable the red zone for code that runs in kernel mode (-mno-red-zone on GCC), because it will be overwritten on every interrupt.
Thank you. It works!
Post Reply