Skip to content

Conversation

@D4R30
Copy link
Contributor

@D4R30 D4R30 commented Oct 29, 2025

There were two prerequisites mentioned for House of Einherjar 2.23 & 2.24, which I believe are incorrect assumptions:

  1. The comment HERE explicitly states that fake_chunk->prev_size and fake_chunk->size should be equal, which is not necessary, until GLIBC 2.26. This could be misleading, since in many cases one might be incapable of setting these two fields, which is totally fine because they play no role during exploit's run.

  2. The comment HERE also explicitly states that size of fake chunk should be in smallbins range, which is misleading because fake_chunk->size plays no role during backward consolidation, and is overwritten by b->size + b->prev_size.

I've covered these two fixes for both 2.23 & 2.24 in two commits (Each for one problem).

D4R30 added 2 commits October 29, 2025 15:47
The `P->bk->size == P->prev_size` check in unlink() was introduced in
GLIBC 2.26 and does not exist in the implementations of GLIBC 2.23 or
2.24. Therefore, fake_chunk[0] and fake_chunk[1] do not need to be
equal in these versions.

The original note explicitly stated that they should be equal, which
could be misleading in many situations.
fake_chunk->size is not used in computing its value after backward
consolidation. It is actually overwritten by b->size + b->prev_size.

The original comment stated that fake_chunk->size must be in the
smallbins range, which is incorrect.
@Kyle-Kyle
Copy link
Contributor

I guess the inconsistency was there for historical reasons (the repo's was meant for 2.26 before). And I'm glad that you figured it out and fixed the issue.
Thank you!

@Kyle-Kyle Kyle-Kyle merged commit a8ae36d into shellphish:master Oct 29, 2025
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants