⛏️ index : haiku.git

author Trung Nguyen <trungnt282910@gmail.com> 2023-04-16 18:38:26.0 +10:00:00
committer waddlesplash <waddlesplash@gmail.com> 2023-05-01 21:50:33.0 +00:00:00
commit
4ae9b0a03e21fcf2d6b69591c24f10268387ed59 [patch]
tree
b4ee3bd361eb7456ea73bf3ae73ef2906d7ca43d
parent
e0bf577acd2bf97801eff421ab2eb1e9a90aa29e
download
4ae9b0a03e21fcf2d6b69591c24f10268387ed59.tar.gz

libroot: Fix bad pointer access in __init_stack_protector

The address of the variable should be taken instead of the
variable itself being casted to `void*`.

This fixes a rare segfault bug when any Haiku binary runs in
a `chroot`ed environment without a `/dev` mount.

Change-Id: I2fdacac62fadbcce8006bbf0a5350f6ec95133ae
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6377
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
(cherry picked from commit 7bfc9c6fc7191c1ac21eb2c9c32b2a629499bd9e)
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6338
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>

Diff

 src/system/libroot/os/stack_protector.cpp |  9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/system/libroot/os/stack_protector.cpp b/src/system/libroot/os/stack_protector.cpp
index 78dd546..21fdff5 100644
--- a/src/system/libroot/os/stack_protector.cpp
+++ b/src/system/libroot/os/stack_protector.cpp
@@ -32,10 +32,11 @@
	}

	if (!done) {
		((unsigned char *)(void *)__stack_chk_guard)[0] = 0;
		((unsigned char *)(void *)__stack_chk_guard)[1] = 0;
		((unsigned char *)(void *)__stack_chk_guard)[2] = '\n';
		((unsigned char *)(void *)__stack_chk_guard)[3] = 0xff;
		unsigned char* p = (unsigned char *)&__stack_chk_guard;
		p[0] = 0;
		p[1] = 0;
		p[2] = '\n';
		p[3] = 0xff;
	}
}