<code>trampoline</code>

问题描述 投票:0回答:1

问题是,每次我尝试从用户空间返回时(我们现在仍然使用用户页表),此代码将执行。但是,每次我写入堆栈时,我都会出现错误并继续执行此代码。这是一个无限的循环。

因此,我检查了Sp。指向地址的权限。实际上,该地址已在用户页面表中映射。
第一个过程,例如
uservec:    
    #
        # trap.c sets stvec to point here, so
        # traps from user space start here,
        # in supervisor mode, but with a
        # user page table.
        #

        # store intermediate registers on the stack
        addi sp, sp, -32
        sd a0, 0(sp)
        sd a1, 8(sp)
        sd a2, 16(sp)

uvmfirst(p->mm.pagetable, initcode, sizeof(initcode)); p->sz = PGSIZE; // prepare for the very first "return" from kernel to user. t->trapframe->epc = 0; // user program counter t->trapframe->sp = PGSIZE; // user stack pointer

uvmfrist()

,为什么我为该地址设置了正确的权限,但仍然无法写入?我对XV6的原始版本做了同样的操作,并且它现在不起作用!

XV6:

void uvmfirst(pagetable_t pagetable, uchar *src, uint sz) { char *mem; if(sz >= PGSIZE) panic("uvmfirst: more than a page"); mem = kalloc(); memset(mem, 0, PGSIZE); mappages(pagetable, 0, PGSIZE, (uint64)mem, PTE_W|PTE_R|PTE_X|PTE_U); memmove(mem, src, sz); }

	

我认为您可能会击中主管模式访问。出于明显的原因,U模式无法访问非使用页面。但是,M/S模式也无法默认访问用户模式页面,以防止某些攻击向量。在陷阱代码中,您正在运行S模式代码,但是您的堆栈如您所说的,在用户模式页面中分配。因此,您的代码可能无法访问它。有关SMAP的更多信息,请参见sstatus.sum标志。 我还必须指出整个方法可能无效。通过为您自己的目的,通过使用用户模式堆栈,您实际上是在遵循ABI要求

abi要求。具体而言,SP-56..SP-32处的24个字节可能会在
时(由于分页故障和中断)时被丢弃,因此无法使用。本质上,您正在设置32个字节

区域
。如果将XV6的USERMODE工具链配置为128字节红色区域,那么您的更改将破坏事物。
用这种方法指出更多的东西:它本质上是不安全的。您现在获得无限循环的事实是指向这一点的指针。 SP-56上可能没有有效的可写页面(由于分页或堆叠溢出或不良SP),这会破坏内核。它将允许一个琐碎的本地dos:

.align 4 .globl uservec uservec: # # trap.c sets stvec to point here, so # traps from user space start here, # in supervisor mode, but with a # user page table. # # for debugging addi sp, sp, -32 sd a0, 0(sp) sd a1, 8(sp) sd a2, 16(sp) addi sp, sp, 32

worse,它将允许任意24字节写入内核内存。对手只需要将A0,A1,A2设置为他们选择的数据,将SP设置为所需的任何

KERNELMOMENE
位置,然后通过SYSCALL和WHAM触发陷阱 - 内核内存覆盖。
有SSCratch CSR;大多数陷阱代码的使用原因(包括XV6 ...的RISC-V端口),此原因是“您不能相信Usermode”。所有登记册必须被假定污染;您需要一些理智的起点。 SSCratch允许您释放一个寄存器以获取自己的数据,然后从那里开始。
linux kernel riscv xv6
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.