From: gameblabla Date: Wed, 17 Jul 2019 23:55:57 +0000 (+0200) Subject: psxbios: Add checks for card_write, card_read X-Git-Tag: r23~156^2~46 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd48ba5ea8c87bf8c771550bc5320f7e6f73c9a6;p=pcsx_rearmed.git psxbios: Add checks for card_write, card_read This also implements a bug which allows writes to 0x400 (Is supposed to only accept sector number between 0..3FFh). Function should return 0 if sector is invalid. --- diff --git a/libpcsxcore/psxbios.c b/libpcsxcore/psxbios.c index 265dbfd3..d4a38e18 100644 --- a/libpcsxcore/psxbios.c +++ b/libpcsxcore/psxbios.c @@ -2146,7 +2146,13 @@ void psxBios__card_write() { // 0x4e #ifdef PSXBIOS_LOG PSXBIOS_LOG("psxBios_%s: %x,%x,%x\n", biosB0n[0x4e], a0, a1, a2); #endif - + /* Function also accepts sector 400h (a bug) */ + if (!(a1 <= 0x400)) + { + /* Invalid sectors */ + v0 = 0; pc0 = ra; + return; + } card_active_chan = a0; port = a0 >> 4; @@ -2173,7 +2179,13 @@ void psxBios__card_read() { // 0x4f #ifdef PSXBIOS_LOG PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x4f]); #endif - + /* Function also accepts sector 400h (a bug) */ + if (!(a1 <= 0x400)) + { + /* Invalid sectors */ + v0 = 0; pc0 = ra; + return; + } card_active_chan = a0; port = a0 >> 4;