Fix the location of td->td_frame at the top of the kernel stack.
In cpu_thread_alloc we would allocate space for the trap frame at the top of the kernel stack. This is just below the pcb, however due to a missing cast the pointer arithmetic would use the pcb size, not the trapframe size. As the pcb is larger than the trapframe this is safe, however later in cpu_fork we include the case leading to the two disagreeing on the location. Fix by using the same arithmetic in both locations. Found by: An early KASAN patch Sponsored by: DARPA, AFRL
This commit is contained in:
parent
1f041ae141
commit
80e21aabea
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=342937
@ -228,7 +228,7 @@ cpu_thread_alloc(struct thread *td)
|
|||||||
td->td_pcb = (struct pcb *)(td->td_kstack +
|
td->td_pcb = (struct pcb *)(td->td_kstack +
|
||||||
td->td_kstack_pages * PAGE_SIZE) - 1;
|
td->td_kstack_pages * PAGE_SIZE) - 1;
|
||||||
td->td_frame = (struct trapframe *)STACKALIGN(
|
td->td_frame = (struct trapframe *)STACKALIGN(
|
||||||
td->td_pcb - 1);
|
(struct trapframe *)td->td_pcb - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user