<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dolphin/Source/Core, branch release-prep-2606a-2</title>
<subtitle>GameCube and Wii emulator</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/'/>
<entry>
<title>IOS/FS: Fix loading savestate when files are open</title>
<updated>2026-08-11T02:47:44+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2026-07-26T08:48:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=d3c420c6a4a69d0964a23fa527932c4465bcfd23'/>
<id>d3c420c6a4a69d0964a23fa527932c4465bcfd23</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>Core: log invalid ELF input</title>
<updated>2026-08-11T02:47:44+00:00</updated>
<author>
<name>Acts1631</name>
<email>acts1631kjv@proton.me</email>
</author>
<published>2026-07-21T01:10:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=5ea9d7f8a30c677c9e1231f3244e069e7cabc057'/>
<id>5ea9d7f8a30c677c9e1231f3244e069e7cabc057</id>
<content type='text'>
Log each rejected ELF header, range, and symbol reference. This
provides actionable diagnostics for malformed files without changing the
validation behavior.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Log each rejected ELF header, range, and symbol reference. This
provides actionable diagnostics for malformed files without changing the
validation behavior.
</pre>
</div>
</content>
</entry>
<entry>
<title>Core: validate standalone ELF input ranges</title>
<updated>2026-08-11T02:47:43+00:00</updated>
<author>
<name>Acts1631</name>
<email>acts1631kjv@proton.me</email>
</author>
<published>2026-07-20T23:50:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=40cdf26dc673842f567690583df4ee1f67ee97cd'/>
<id>40cdf26dc673842f567690583df4ee1f67ee97cd</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>NetPlay: bound LZO decompression output</title>
<updated>2026-08-11T02:47:43+00:00</updated>
<author>
<name>Acts1631</name>
<email>acts1631kjv@proton.me</email>
</author>
<published>2026-07-20T01:28:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=47bb60e56430a6d9fbb7341e2ff9367f3ec9a030'/>
<id>47bb60e56430a6d9fbb7341e2ff9367f3ec9a030</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>DolReader: Fix integer wraparound</title>
<updated>2026-08-11T02:47:43+00:00</updated>
<author>
<name>Scott Mansell</name>
<email>phiren@gmail.com</email>
</author>
<published>2026-07-26T08:44:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=690b51b396edd6cb260e4f5d40619ae776c3f68e'/>
<id>690b51b396edd6cb260e4f5d40619ae776c3f68e</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>fixes: make dolreader validate section addresses and sizes</title>
<updated>2026-08-11T02:47:43+00:00</updated>
<author>
<name>DacoTaco</name>
<email>daco_65@hotmail.com</email>
</author>
<published>2026-05-13T18:26:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=1496e7a06c039b604e6ca4dd150e700ff5f05dab'/>
<id>1496e7a06c039b604e6ca4dd150e700ff5f05dab</id>
<content type='text'>
IOS and IPL reject non-32byte aligned sections
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
IOS and IPL reject non-32byte aligned sections
</pre>
</div>
</content>
</entry>
<entry>
<title>GCZ: use 64-bit for m_data_offset</title>
<updated>2026-08-11T02:47:43+00:00</updated>
<author>
<name>Scott Mansell</name>
<email>phiren@gmail.com</email>
</author>
<published>2026-07-26T10:22:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=289ff60cc23ea934c53fde89b5fee6eed0a050a2'/>
<id>289ff60cc23ea934c53fde89b5fee6eed0a050a2</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>GCZ: validate while loading</title>
<updated>2026-08-11T02:47:43+00:00</updated>
<author>
<name>Scott Mansell</name>
<email>phiren@gmail.com</email>
</author>
<published>2026-07-26T08:20:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=fe4b08bc3783d8329337b4055dde965d34dc5892'/>
<id>fe4b08bc3783d8329337b4055dde965d34dc5892</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>GCZ: Don't trust block_num either</title>
<updated>2026-08-11T02:47:43+00:00</updated>
<author>
<name>Scott Mansell</name>
<email>phiren@gmail.com</email>
</author>
<published>2026-07-26T06:15:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=22f15fbb97371c18037fca630f6e3d03966c7a1d'/>
<id>22f15fbb97371c18037fca630f6e3d03966c7a1d</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>GCZ: Don't trust GetBlockCompressedSize</title>
<updated>2026-08-11T02:47:42+00:00</updated>
<author>
<name>Scott Mansell</name>
<email>phiren@gmail.com</email>
</author>
<published>2026-07-26T06:13:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=7bcf78b7eafc9ca122af2a6111fe75fdc8534721'/>
<id>7bcf78b7eafc9ca122af2a6111fe75fdc8534721</id>
<content type='text'>
It comes unverified from the file, and a maliciously crafted file could
trigger not one, but two buffer overflows in the heap.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It comes unverified from the file, and a maliciously crafted file could
trigger not one, but two buffer overflows in the heap.
</pre>
</div>
</content>
</entry>
</feed>
