blob: e143368f4529a6e37269053e7df83d2e0b5bf222 [file] [edit]
"""
Tests that the expression evaluator traps on ptrauth authentication failures
when -fptrauth-auth-traps is enabled. Auth traps cause aut* instructions to
be followed by a brk trap that fires on authentication failure.
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
from lldbsuite.test import configuration
from lldbsuite.test.lldbarm64e import Arm64eTestBase
class TestPtrAuthAuthTraps(Arm64eTestBase):
NO_DEBUG_INFO_TESTCASE = True
SHARED_BUILD_TESTCASE = False
def test_static_function_pointer(self):
self.build()
lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.c", False)
)
self.expect(
"expression -- "
"static int (*bad)(int, int) = "
"(int (*)(int, int))__builtin_ptrauth_sign_unauthenticated("
"__builtin_ptrauth_strip((void *)&add, 0), 0, 42); "
"bad(5, 6)",
error=True,
substrs=["execution was interrupted"],
)
def test_indirect_call_through_caller(self):
self.build()
lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.c", False)
)
self.expect(
"expression -- "
"int (*bad)(int, int) = "
"(int (*)(int, int))__builtin_ptrauth_sign_unauthenticated("
"__builtin_ptrauth_strip((void *)&add, 0), 0, 42); "
"caller(bad, 2, 3)",
error=True,
substrs=["execution was interrupted"],
)