Compare commits

..

3 commits

Author SHA1 Message Date
SkewedZeppelin
e73d483d6c
Merge 04af86fc9b into 4fe9018b6f 2025-03-22 08:00:31 +00:00
Tavi
04af86fc9b
perform size checks on memcpy/memmove/memset
- memset is disabled for now as it causes hangs
- underlying functions were copied from isoalloc, licensed Apache-2.0
	- credit Chris Rohlf for memcpy/memset
	- credit David Carlier for memmove
- use the fast path as some programs crash otherwise

Signed-off-by: Tavi <tavi@divested.dev>
2025-03-22 03:59:56 -04:00
Tavi
d8343018fd
Run the test suite on aarch64 CI too
Signed-off-by: Tavi <tavi@divested.dev>
2025-03-22 03:05:45 -04:00
4 changed files with 27 additions and 27 deletions

View file

@ -52,4 +52,4 @@ jobs:
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libgcc-s1-arm64-cross cpp-aarch64-linux-gnu
- name: Build
run: CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-gcc++ make CONFIG_NATIVE=false
run: CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-gcc++ make CONFIG_NATIVE=false test

View file

@ -276,7 +276,7 @@ The following boolean configuration options are available:
hardware, which may become drastically lower in the future. Whether or not
this feature is enabled, the metadata is all contained within an isolated
memory region with high entropy random guard regions around it.
* `CONFIG_BLOCK_OPS_CHECK_SIZE`: `true` or `false` (default) to ensure length
* `CONFIG_BLOCK_OPS_CHECK_SIZE`: `true` (default) or `false` to ensure length
parameter of the memcpy/memmove/memset block operations are within
approximate bounds to minimize buffer overflows. Note, memset override is
currently disabled due to improper behavior.

View file

@ -21,4 +21,4 @@ CONFIG_CLASS_REGION_SIZE := 34359738368 # 32GiB
CONFIG_N_ARENA := 4
CONFIG_STATS := false
CONFIG_SELF_INIT := true
CONFIG_BLOCK_OPS_CHECK_SIZE := false
CONFIG_BLOCK_OPS_CHECK_SIZE := true

View file

@ -238,38 +238,38 @@ class TestSimpleMemoryCorruption(unittest.TestCase):
"realloc_init")
self.assertEqual(returncode, 0)
#def test_memcpy_buffer_overflow(self):
# _stdout, stderr, returncode = self.run_test(
# "memcpy_buffer_overflow")
# self.assertEqual(returncode, -6)
# self.assertEqual(stderr.decode(
# "utf-8"), "fatal allocator error: memcpy buffer overflow\n")
def test_memcpy_buffer_overflow(self):
_stdout, stderr, returncode = self.run_test(
"memcpy_buffer_overflow")
self.assertEqual(returncode, -6)
self.assertEqual(stderr.decode(
"utf-8"), "fatal allocator error: memcpy buffer overflow\n")
#def test_memcpy_read_overflow(self):
# _stdout, stderr, returncode = self.run_test(
# "memcpy_read_overflow")
# self.assertEqual(returncode, -6)
# self.assertEqual(stderr.decode(
# "utf-8"), "fatal allocator error: memcpy read overflow\n")
def test_memcpy_read_overflow(self):
_stdout, stderr, returncode = self.run_test(
"memcpy_read_overflow")
self.assertEqual(returncode, -6)
self.assertEqual(stderr.decode(
"utf-8"), "fatal allocator error: memcpy read overflow\n")
def test_memcpy_valid(self):
_stdout, _stderr, returncode = self.run_test(
"memcpy_valid")
self.assertEqual(returncode, 0)
#def test_memmove_buffer_overflow(self):
# _stdout, stderr, returncode = self.run_test(
# "memmove_buffer_overflow")
# self.assertEqual(returncode, -6)
# self.assertEqual(stderr.decode(
# "utf-8"), "fatal allocator error: memmove buffer overflow\n")
def test_memmove_buffer_overflow(self):
_stdout, stderr, returncode = self.run_test(
"memmove_buffer_overflow")
self.assertEqual(returncode, -6)
self.assertEqual(stderr.decode(
"utf-8"), "fatal allocator error: memmove buffer overflow\n")
#def test_memmove_read_overflow(self):
# _stdout, stderr, returncode = self.run_test(
# "memmove_read_overflow")
# self.assertEqual(returncode, -6)
# self.assertEqual(stderr.decode(
# "utf-8"), "fatal allocator error: memmove read overflow\n")
def test_memmove_read_overflow(self):
_stdout, stderr, returncode = self.run_test(
"memmove_read_overflow")
self.assertEqual(returncode, -6)
self.assertEqual(stderr.decode(
"utf-8"), "fatal allocator error: memmove read overflow\n")
def test_memmove_valid(self):
_stdout, _stderr, returncode = self.run_test(