Skip to content

Commit 5340daf

Browse files
committed
fix potential RSP DMA buffer overflows, based on change from parallel-n64
1 parent 632371e commit 5340daf

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/device/rcp/rsp/rsp_core.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ static void do_sp_dma(struct rsp_core* sp, const struct sp_dma* dma)
5656
{
5757
for(j=0; j<count; j++) {
5858
for(i=0; i<length; i++) {
59-
dram[dramaddr^S8] = spmem[memaddr^S8];
59+
dram[(dramaddr^S8) & 0x7fffff] = spmem[(memaddr^S8) & 0xfff];
6060
memaddr++;
6161
dramaddr++;
6262
}
63-
64-
post_framebuffer_write(&sp->dp->fb, dramaddr - length, length);
63+
if (dramaddr <= 0x800000)
64+
post_framebuffer_write(&sp->dp->fb, dramaddr - length, length);
6565
dramaddr+=skip;
6666
}
6767

@@ -72,10 +72,11 @@ static void do_sp_dma(struct rsp_core* sp, const struct sp_dma* dma)
7272
else
7373
{
7474
for(j=0; j<count; j++) {
75-
pre_framebuffer_read(&sp->dp->fb, dramaddr);
75+
if (dramaddr < 0x800000)
76+
pre_framebuffer_read(&sp->dp->fb, dramaddr);
7677

7778
for(i=0; i<length; i++) {
78-
spmem[memaddr^S8] = dram[dramaddr^S8];
79+
spmem[(memaddr^S8) & 0xfff] = dram[(dramaddr^S8) & 0x7fffff];
7980
memaddr++;
8081
dramaddr++;
8182
}

0 commit comments

Comments
 (0)