Commit Graph

45733 Commits

Author SHA1 Message Date
OatmealDome
94b20d52f0 BuildMacOSUniversalBinary: Add flag to enable CCache 2026-08-10 17:50:28 -04:00
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
Scott Mansell
b6d8da24b3 GCZ: use 64-bit for m_data_offset
A malicious GCZ file could probably force this to be negative.
Shouldn't cause any issues other than file read failures, but need to fix
because it is causing errors on MSVC.
2026-08-10 17:50:27 -04:00
Scott Mansell
4eb90c7314 GCZ: validate while loading 2026-08-10 17:50:26 -04:00
Scott Mansell
8f1e33a5f4 GCZ: Don't trust block_num either
SectorReader::ReadChunk does do some validation on it, but it only
checks against the original disc size (reported by the GCZ file).
It has no idea how many blocks the header claimed the disc had.

A maliciously crafted GCZ file could trigger read overflows off the end
of the m_block_pointers/m_hashes arrays.
2026-08-10 17:50:26 -04:00
Scott Mansell
2f5232fbf4 GCZ: Don't trust GetBlockCompressedSize
It comes unverified from the file, and a maliciously crafted file could
trigger not one, but two buffer overflows in the heap.
2026-08-10 17:50:26 -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
6094cfcf7b ScmRevGen: Bump version to 2606 2606 2026-06-24 18:36:03 -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
JosJuice
0dd29f2493 Merge pull request #14697 from JoshuaVandaele/llvm-build-fix
TAPServerConnection: Fix builds with LLVM toolchain
2026-06-24 21:28:08 +02: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
JosJuice
8230647205 Merge pull request #14696 from JoshuaVandaele/alpine-pagesize-collision
ICCardReader: Fix macro collision
2026-06-23 23:32:09 +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
Tilka
8328469f5e Merge pull request #14694 from JoshuaVandaele/fmt12.2
fmt: Allow building with version >=12.2.0
2026-06-23 21:13:02 +01:00
Joshua Vandaële
faaea5919a Add missing includes 2026-06-23 21:09:18 +02:00
Joshua Vandaële
e97b1cd759 fmt: Allow building with version >=12.2.0
This change was causing some issues:

> Made FMT_STRING a no-op when FMT_USE_CONSTEVAL is enabled, since the consteval format-string constructor already provides compile-time validation (#4611, #4612). Thanks @friedkeenan.
2026-06-23 21:09:14 +02:00
Admiral H. Curtiss
32ee8ad7ca Merge pull request #14693 from JosJuice/redump-info
Use redump.info instead of redump.org
2026-06-23 02:47:44 +02:00
JosJuice
53dad6f230 VolumeVerifier: Remove SystemNotAvailable
We had some code in VolumeVerifier to catch the error message that
Redump.org used to show when trying to access the Wii datfile without
logging in. This restriction was removed from Redump.org around the
start of 2022, and the code has been unnecessary ever since.
2026-06-22 08:36:50 +02:00
JosJuice
47040a1834 Don't send Dolphin version in user agent to Redump
When we added the RetroAchievements integration, we had a discussion
about whether sending version information in the user agent was fine
from a privacy standpoint. We reached the conclusion that it was okay,
but it was conditional on the website having a privacy policy. Neither
incarnation of Redump has that, and Redump also never asked us to send
version information like RetroAchievements did, so let's use a user
agent that just says "Dolphin" when connecting to Redump.
2026-06-22 08:36:44 +02:00
JosJuice
d202fd07d2 Use redump.info instead of redump.org
All the staff of Redump (except the absentee sysadmin) have decided to
start a new version of the website at redump.info. It has every disc
from the old site, it has HTTPS, it isn't buckling under the load of AI
scrapers, and moving forward, all adding and verifying of discs is going
to be happening on the new website only. Let's move over.

I've taken the unusual step of updating the translation files manually.
This is because we're very close to a release and because the change is
simple enough that I feel confident about making the change to languages
I don't speak. (I double checked that the Korean translation doesn't
ever follow "Redump.org" by a particle that has a different form
depending on whether there's a final consonant.)
2026-06-22 08:28:51 +02:00
JosJuice
5f011709b7 Translation resources sync with Transifex 2026-06-21 21:48:44 +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
Jordan Woyak
a426df4823 Merge pull request #14690 from MaverickAmon02/dtm-use-after-move
State: Fix Use After Move In LoadAsFromCore
2026-06-20 11:40:17 -05: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
Jordan Woyak
144d19433a Merge pull request #14603 from jordan-woyak/gamesettings-solitaire
GameSettings: Apply settings required for Solitaire and Mahjong WiiWare.
2026-06-14 11:47:50 -05: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
JosJuice
107169bfd8 Merge pull request #14677 from doldol22312/netplay-validate-controller-packet-indices
NetPlayServer: Fix remote crash via invalid pad index
2026-06-14 13:51:46 +02:00
Tilka
f96a7682d4 Merge pull request #14680 from Tilka/fs_null_fix
DolphinTool: fix crash when listing partition without filesystem
2026-06-13 19:01:57 +01:00
Tillmann Karras
37a3b0fe6a DolphinTool: fix crash when listing partition without filesystem
We were also passing the wrong partition name.
2026-06-13 17:39:08 +01: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
1bc93fd16d Merge pull request #14672 from AdmiralCurtiss/recursive-nand
NANDImporter: Abort extraction if a NAND FST entry is visited more than once
2026-06-10 17:38:48 +02:00
Admiral H. Curtiss
29f1bc4d4c NANDImporter: Abort extraction if a NAND FST entry is visited more than once 2026-06-04 18:48:19 +02:00