46203 Commits
Author SHA1 Message Date
Scott Mansell 53cd8ffa3f Fix stack overflow in ZeldaHLE
Independently spotted by both @Dentomologist and me while reviewing
PR #14805
The previous limit was correct for valid VPBs, but an invalid VPB
controlled by a malicious game could contain a non-fractional value
in current_pos_frac, which would allow writing an extra 15 samples
(30 bytes) into the stack. With AFC encoding, this is rounded up to 16
samples, but with much less control over which bytes are written.

Maybe we should be doing some validation, or bounds checking, but I'm
pretty sure this issue was copied from the original ucode, and we kinda
want to stay compatible.

The simpler fix is to just increase the size of raw_input_samples.
I've checked other code paths, and 0x514 samples seems to be the limit.
2026-08-11 12:30:54 +12:00
OatmealDome 596d71fbba ScmRevGen: Bump version to 2606a 2026-08-10 18:06:46 -04:00
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 54a651074c Merge pull request #14805 from Tilka/zelda_oob
DSPHLE/Zelda: prevent out-of-bounds stack read
2026-08-10 17:15:35 -04:00
Joshua Vandaële 7da0baae93 SDLGamepad: Support multiple touchpads 2026-08-10 22:41:40 +02:00
JMC47 3450298af0 Merge pull request #14583 from jordan-woyak/gamesettings-deadly-creatures
GameSettings: Add CPU overclock to work around long black screen on boot in "Deadly Creatures".
2026-08-10 16:30:39 -04:00
Tillmann Karras ce85da6b96 DSPHLE/Zelda: prevent out-of-bounds stack read
Reported by @RickdeJager.
2026-08-09 15:56:21 +01:00
Scott Mansell 216ffb4581 Merge pull request #14803 from Andy1210/fix/bbox-memorybarrier-mainline
VideoBackends/OGL: Don't call glMemoryBarrier without ARB_shader_image_load_store
2026-08-09 15:12:01 +12:00
JosJuice cd3ea81462 Merge pull request #14767 from JosJuice/state-nand-open-file
IOS/FS: Fix loading savestate when files are open
2026-08-08 13:02:54 +02:00
Dentomologist f42c349c32 Merge pull request #14802 from phire/fallthrough_warnings
Enable Fallthrough warnings
2026-08-08 01:21:25 -07:00
Scott Mansell 94eceb35e8 Enable fallthrough warnings for msvc++ 2026-08-08 13:18:32 +12:00
Scott Mansell 02bffba368 Enable implicit fallthrough warnings for gcc/clang 2026-08-08 13:18:32 +12:00
Scott Mansell a6cf98332b Fix fallthough in CodeView/MemoryView widgets
This slightly changes the behaviour, but I think this is more correct.
2026-08-08 13:18:32 +12:00
Scott Mansell 7de31b291e Fix missing break in BluetoothRealDevice
Minor behaviour change, prevents an erroreous error log
2026-08-08 13:16:57 +12:00
Scott Mansell ca33c38afd Add missing breaks (no behaviour change) 2026-08-08 13:14:06 +12:00
Andy1210 21ace56160 VideoBackends/OGL: Don't call glMemoryBarrier without ARB_shader_image_load_store
glMemoryBarrier comes from ARB_shader_image_load_store, so on a desktop context
below GL 4.2 the pointer is null. bSupportsBBox is set from
bSupportsFragmentStoresAndAtomics, which such a driver can still have, so saving
a state reads the bounding box and calls a null pointer.

UsePersistentStagingBuffers() in OGLTexture.cpp already guards the same call with
bSupportsImageLoadStore.
2026-08-07 17:09:46 +02:00
Scott Mansell 1c4208e1fb Add fallthroughs to OpenGL InitExtentionList 2026-08-07 20:41:59 +12:00
Scott Mansell 4a10a9c634 Add fallthroughs to GetMurmurHash3 2026-08-07 19:27:41 +12:00
Scott Mansell e5eabd08f5 Optimize vertex_shader_uid_data down to 28 bytes
This started as a fixing a misalignment issue, but I got carried away.
Was originally 41 bytes (overflowing it's expected 40 bytes by 1 bit).

Now it's 27 bytes plus 8 bits of padding (ready for future expansion).

The savings come from:
 - Removing UV usage from components, it can be reconstructed from
   texcoord_elem_count (saved 8 bits)
 - Removed the 8 unused bits from texMtxInfo_n_projection (saved 8 bits)
 - Removing unused bit from from start of components (saved 1 bit)
 - Removed extra bit from inputform, texgentype and sourcerow
 - packed texMtxInfo_n_projection and texcoord_elem_count back into
   the per texgen info space freed up above. (saved 24 bits)
 - Overlayed postMtx index and Emboss mode shifts into a union based on
   texgentype (saved 56 bits)
 - Move to a single-bit union tag, freeing up an extra bit for regular
   texgens.
 - Move PotMtx normalize into the freed up space (saved 8 bits)

Total savings: 105 bits of data

EDIT: Even worse, MSVC wasn't respecting pack(1) for bitfields at all,
      so on windows this struct was actually quite a bit larger.
      Something like 80 bytes, if not more.

      Fixed this by dropping the size of any enums used in these
      bit structs to u8. Our Common::BitField allows for the underlying
      type to be explicitly specified to something larger.

      msvc's bitfield packing appears to be completely braindead, can't
      mix sizes at all.
2026-08-07 18:42:52 +12:00
Scott Mansell 430138f468 Merge pull request #14798 from sepalani/bitcast-noptr
Common/BitCastPtr: Prevent destination type to be a pointer
2026-08-07 14:55:50 +12:00
dreamsyntax ed25d5649b Require VS 2026, update WinUpdater redist
Updater now pulls VC14
Require MSVC 19.51.36252
2026-08-05 08:50:39 -07:00
Sepalani 6496d6c0c9 Common/BitCastPtr: Prevent destination type to be a pointer 2026-08-05 00:15:16 +04:00
Admiral H. Curtiss 66d8a89220 Merge pull request #14788 from phire/mach_msg_alignment
Mach exception thread: Fix msg alignment
2026-08-03 16:04:47 +02:00
Scott Mansell 9c5ff6b248 Mach exception thread: Fix msg alignment
msg_in and msg_out were ending up with only 4-byte alignment, which
is undefined behaviour, since they contain 64-bit fields. Probably
doesn't cause any issues, but it showed up in ubsan.
2026-08-03 22:46:45 +12:00
Admiral H. Curtiss 4af65cbed0 Merge pull request #14785 from JosJuice/fix-texture-count
VideoCommon: Fix custom texture count in OSD message
2026-08-02 14:19:09 +02:00
JosJuice f5be1c30e5 VideoCommon: Fix custom texture count in OSD message
83dc468 broke the OSD message that shows the number of custom textures.
If Prefetch Custom Textures was disabled, the number would always be 0.
2026-08-02 10:11:15 +02:00
Scott Mansell 35925ceb15 Merge pull request #14777 from tygyh/Use-designated-constructors
Use designated constructors
2026-08-02 15:59:42 +12:00
Dr. Dystopia be3ad38ec7 Use designated constructors 2026-08-01 21:37:43 +02:00
Scott Mansell 5c6dcce721 Merge pull request #14758 from JoshuaVandaele/egl-platform-nowayland
Forbid EGL_PLATFORM to be "wayland"
2026-08-02 02:57:00 +12:00
JosJuice ad7e793548 Merge pull request #14768 from phire/security/gcz_overflows
Better validation and handling of GCZ
2026-08-01 12:26:10 +02:00
Scott Mansell 3c63788e01 Merge pull request #14776 from tygyh/Core/Use-static-cast
Replace functional cast with `static_cast`
2026-08-01 22:17:15 +12:00
Scott Mansell 463bcb8aeb Merge pull request #14781 from sepalani/gai-error
IP/Top: Add getaddrinfo() error log message
2026-08-01 22:15:10 +12:00
Sepalani a3a43f9bd2 IP/Top: Add getaddrinfo() error log message 2026-07-31 18:25:54 +04:00
Joshua Vandaële 1c2b7fbf7f EGLX11: Forbid EGL_PLATFORM to be "wayland" 2026-07-31 10:34:00 +02:00
Scott Mansell f1b4345d08 Merge pull request #14755 from JoshuaVandaele/cmakeupd-qt-useless-dlls
windeployqt: Disable uneeded DLLs
2026-07-31 18:00:43 +12:00
Scott Mansell 3bd410c4c5 Merge pull request #14775 from tygyh/Replace-zero-constants-with-nullptr
Replace zero constants with `nullptr`
2026-07-31 13:49:48 +12:00