Commit Graph

15322 Commits

Author SHA1 Message Date
JosJuice
6376e0c1f1 IOS/FS: Fix loading savestate when files are open
We already had code to close open host files when reading or writing a
savestate, but due to d35fe1b we also need to close open guest files
when reading a savestate, otherwise DoStateRead fails to delete them.

I was considering an alternative solution where instead of copying and
clearing m_handles, we just set `handle.opened = false;` for each handle
before reading a savestate (but not before writing a savestate).
However, this wouldn't solve the problem of DoStateWriteOrMeasure's
calls to OpenFile failing due to all handles being open. I'm not aware
of any games that have that many handles open, though.
2026-08-10 17:50:28 -04:00
Acts1631
f29ed945d0 Core: log invalid ELF input
Log each rejected ELF header, range, and symbol reference. This
provides actionable diagnostics for malformed files without changing the
validation behavior.
2026-08-10 17:50:27 -04:00
Acts1631
7c4ed02b27 Core: validate standalone ELF input ranges
ElfReader trusted table offsets and counts from standalone ELF files.
Malformed input could make it read and write past the loaded file buffer.

Validate the ELF header, table ranges, segment data, section data, and
string-table references before accessing them. Invalid files use the
existing executable boot failure path.
2026-08-10 17:50:27 -04:00
Acts1631
a926974153 NetPlay: bound LZO decompression output
NetPlay save synchronization decoded remote LZO blocks with the unsafe
decoder and no output capacity. A malicious host could overflow a client
buffer with a block larger than its declared size.

Use the bounds-checking decoder, validate the declared output length, and
grow buffer results only after each checked block has been decoded.
2026-08-10 17:50:27 -04:00
Scott Mansell
5e237fd284 DolReader: Fix integer wraparound
A malicious dol could theoretically use integer wraparound to bypass
bounds checking and cause DolReader to read past the end of m_bytes.

Could result in crashes, wasting large amounts of memory, or even the
disclosure of heap memory contents.
2026-08-10 17:50:27 -04:00
DacoTaco
611d864897 fixes: make dolreader validate section addresses and sizes
IOS and IPL reject non-32byte aligned sections
2026-08-10 17:50:27 -04:00
Admiral H. Curtiss
b6282fb9ab IOS/NetIPTopDevice: Zero-initialize sockaddr structs
Fixes https://github.com/dolphin-emu/dolphin/security/advisories/GHSA-5fqv-9qrg-gm4j
2026-08-10 17:50:26 -04:00
Tillmann Karras
5aa711db41 DSPHLE/Zelda: prevent out-of-bounds stack read
Reported by @RickdeJager.
2026-08-10 17:50:26 -04:00
Admiral H. Curtiss
6d2e3a1ecc HW/DSPHLE/AXVoice: Prefer BitCastPtr over BitCastToArray in ApplyUpdatesForMs() 2026-08-10 17:50:26 -04:00
Admiral H. Curtiss
b2c4d543dd HW/DSPHLE/AXVoice: Check array bounds in ApplyUpdatesForMs()
Fixes https://github.com/dolphin-emu/dolphin/security/advisories/GHSA-4q28-hhjv-hf3f
2026-08-10 17:50:26 -04:00
OatmealDome
2f1c14cdc7 Merge pull request #14687 from JoshuaVandaele/realtek-linux-list
RealtekFirmwareLoader: Update list from Linux source
2026-06-24 18:32:43 -04:00
Joshua Vandaële
d52afbf83b TAPServerConnection: Fix builds with LLVM toolchain
On an Alpine system using a full LLVM toolchain, building fails because `fd_set`/`timeval` are undefined.
2026-06-24 20:17:35 +02:00
Joshua Vandaële
d170a27cc6 ICCardReader: Fix macro collision
On Alpine Linux, Dolphin fails to build due to PAGE_SIZE being already defined somewhere in the system includes.
2026-06-23 22:48:35 +02:00
JosJuice
21f12fdc77 Merge pull request #14692 from JosJuice/netplay-memory-safety
NetPlay: Fix memory safety issues
2026-06-21 21:44:22 +02:00
JosJuice
6bdf00ed21 Merge pull request #14691 from JosJuice/bba-memory-safety
EXI/BBA: Fix tx_fifo memory safety issues
2026-06-21 21:43:50 +02:00
JosJuice
79322e77b0 Merge pull request #14668 from JosJuice/state-nand-path-traversal
IOS/FS: Rewrite NAND savestating
2026-06-21 14:56:09 +02:00
JosJuice
5aed26fb11 NetPlay: Fix chunked data buffer overflow
Reported by MrSynAckster.
2026-06-20 15:15:36 +02:00
JosJuice
747e1e0d92 NetPlay: Fix Wii save banner buffer overflow
Reported by MrSynAckster.
2026-06-20 15:15:36 +02:00
JosJuice
95f3f8c6df EXI/BBA: Add null check in CEXIETHERNET::DirectFIFOWrite
Just in case. DMAWrite calls DirectFIFOWrite with the result of a
GetPointerForRange call without first checking if it's null.
2026-06-20 15:15:28 +02:00
JosJuice
31eaf1d67c EXI/BBA: Fix tx_fifo memory safety issues
Reported by MrSynAckster.
2026-06-20 15:15:28 +02:00
Amon Neander
5797b943b2 State: Fix Use After Move In LoadAsFromCore
This use-after-move error inhibits the use of savestates during the Dolphin TAS Movie creation process.
2026-06-19 07:40:59 -07:00
Dentomologist
43210d1430 Merge pull request #14685 from JosJuice/netplayclient-pad-index
NetPlayClient: Check for invalid pad indices
2026-06-17 13:36:11 -07:00
Joshua Vandaële
6dbc4f36df RealtekFirmwareLoader: Update list from Linux source 2026-06-15 18:47:54 +02:00
JosJuice
32eaf7961f NetPlayClient: Check for invalid pad indices
Like 29e577d but for the client instead of the server.
2026-06-14 14:47:17 +02:00
agalq13
5585aa0474 NetPlay: Stop game when mapped Wii Remote disconnects 2026-06-11 14:31:05 +03:00
agalq13
29e577d966 NetPlay: Validate controller packet indices 2026-06-11 13:20:48 +03:00
JosJuice
d35fe1b78b IOS/FS: Rewrite NAND savestating
This makes us savestate the NAND using the same APIs the guest uses
instead of directly touching the host files. This solves several
problems:

* If the user loaded a malicious savestate, it could use path traversal
  to overwrite arbitrary files on the host file system. (Reported by
  MrSynAckster.)
* Metadata (UID, GID, attribute, modes) wasn't being savestated.
* NAND redirects weren't handled, except for NAND redirects at the root
  of where the savestate was being done. (This only possibly matters if
  TASing a Riivolution patch. The root of the savestate is at /tmp when
  not TASing, and the only case where we do a NAND redirect is inside
  /title if requested by a Riivolution patch.)
2026-06-10 21:21:30 +02:00
JosJuice
a6278030c2 JitArm64: Fix twx
The conditions were in reverse order (maybe someone was reading the
PowerPC manual and forgot about IBM's bit numbering), and additionally
the two conditions for unsigned comparison were wrong.

Fixes https://bugs.dolphin-emu.org/issues/14054.
2026-05-31 11:49:34 +02:00
JosJuice
635fa74b4c Fix uninitialized variable warning in ZeldaAudioRenderer::ApplyReverb
If CopyFromEmuSwapped considers the address to be invalid, nothing will
be written to the passed-in pointer.
2026-05-29 22:09:13 +02:00
Dentomologist
379a1a7109 Merge pull request #14607 from elyashue/internal-resolution-display
VideoCommon: Added option for showcasing internal resolution
2026-05-25 12:17:29 -07:00
Admiral H. Curtiss
d3217f65c3 Merge pull request #14506 from adamscott/crop-that-screen
Add screen crop feature
2026-05-23 20:53:31 +02:00
Tillmann Karras
4618e4bb40 IOS/Network: reduce log verbosity of SO_EAGAIN to info level
Otherwise IOCTL_SO_ACCEPT is very noisy until a client connects.
2026-05-15 23:01:27 +01:00
Weston Heard
adcfbda2a3 AudioCommon: Add individual Wiimote audio mixer
Also incremented STATE_VERSION.
2026-05-14 14:50:45 -05:00
Admiral H. Curtiss
8bf1f8970a Merge pull request #14613 from JosJuice/wad-tmd-checks
DiscIO: Add extra IsValid checks for VolumeWAD::m_tmd
2026-05-11 22:59:40 +02:00
Dentomologist
d19952cc11 Merge pull request #14634 from JosJuice/jitarm64-msr-dr-bit
JitArm64: Fix DR check in MSRUpdated
2026-05-07 17:21:50 -07:00
Tom Pratt
bedb283d93 DoAllPlayersHaveSameGame returns correct result instead of always true
SendGameStatus() was writing SyncIdentifierComparison as a u32 but the server reads it as a u8 enum, so the server always gets 0 (SameGame). This bug was introduced in commit 66276ac.
2026-05-06 14:06:01 +02:00
Jordan Woyak
b0eb643c61 Merge pull request #14642 from SuperSamus/cpp-move-fixup-nocubeb
Fixup #14565 (compilation with `-DENABLE_CUBEB=OFF`)
2026-05-05 11:45:55 -05:00
Martino Fontana
3c06541718 Fixup #14565 (compilation with -DENABLE_CUBEB=OFF) 2026-05-05 13:50:05 +02:00
Dentomologist
34646cb9a9 Replace some [[maybe_unused]] annotations with commented names
Remove the [[maybe_unused]] annotation from various parameters that are
unconditionally unused and comment out their names instead. This makes
it unambiguous that the variables are unused, while making the remaining
[[maybe_unused]] annotations more reliable indicators that those
variables are in fact used in some contexts.

These parameters are mostly in overridden functions where the override
doesn't need that particular variable.
2026-05-03 17:09:59 -07:00
JosJuice
058c7021b8 JitArm64: Fix DR check in MSRUpdated
TBZ takes the index of the bit to test, not a LogicalImm.
2026-05-01 10:23:59 +02:00
spaceage64
3944310308 Add Classic Controller support cheats for Animal Crossing (all regions) 2026-04-29 19:44:31 +02:00
Dentomologist
2b743639d8 Merge pull request #13505 from tygyh/Replace-find-with-contains
Source/Core: Replace `find(x) != npos` with `contains(x)`
2026-04-28 17:50:51 -07:00
JMC47
0e8fa3caca Merge pull request #14601 from jordan-woyak/mkgp-wheel-fix
HW/Triforce/MarioKartGP: Tweak the steering wheel FFB device responses to prevent "Wheel Error" screens.
2026-04-27 16:48:28 -04:00
JMC47
6409c5beb3 Merge pull request #13931 from SuperSamus/pikmin-squared-60fps
GameINI: Add 60 FPS code for Pikmin Squared
2026-04-27 13:09:00 -04:00
Jordan Woyak
5e1185b979 HW/Triforce/MarioKartGP: Tweak the steering wheel FFB device responses to prevent "Wheel Error" screens. 2026-04-27 11:59:12 -05:00
Martino Fontana
c96d1b7b4a GameINI: Add 60 FPS code for Pikmin Squared 2026-04-25 10:45:25 +02:00
Dentomologist
59eef9d4d8 HotkeyManager: Unabbreviate HK_TOGGLE_STEREO_TAB
Rename HK_TOGGLE_STEREO_TAB to HK_TOGGLE_STEREO_TOP_AND_BOTTOM.
2026-04-23 12:32:26 -07:00
Dentomologist
8b743dfe9c HotkeyManager: Unabbreviate HK_TOGGLE_STEREO_SBS
Rename HK_TOGGLE_STEREO_SBS to HK_TOGGLE_STEREO_SIDE_BY_SIDE.
2026-04-23 12:32:26 -07:00
JosJuice
a992245aa2 VolumeVerifier: Add extra validity checks for ticket and TMD
This fixes VolumeVerifier potentially calling TMDReader::GetIOSId for
invalid TMDs.

VolumeVerifier also has a call to TMDReader::GetContent that doesn't
check if the TMD is valid. In practice, this can't get called with an
invalid TMD because the previous commit made it so GetContentOffsets
returns an empty vector if the TMD is invalid, but I've added a check
inside TMDReader::GetContent just to be on the safe side.

I also made VolumeVerifier show a specifically worded problem if the
ticket or TMD is invalid. Before, invalid TMDs in Wii discs and WADs
and invalid tickets in WADs would show a more generic problem.
2026-04-20 20:26:31 +02:00
JosJuice
97fff931fd DiscIO: Add extra IsValid checks for VolumeWAD::m_tmd
Plus an IsValid check inside TMDReader::GetContents, which is called by
VolumeWAD.

Fixes https://bugs.dolphin-emu.org/issues/14032.
2026-04-20 20:18:36 +02:00