DynamoRIO / DynamoRIO/dynamorio

The JIT should not trace through the vsyscall page on x86-64

Open
#530 0 comments 0 reactions 0 assignees View on GitHub
Migrated Priority-Medium
Dominant language
C
Stars
3.2k
Forks
629
Avg merge
2d 18h
Merged PRs (30d)
30

Description

_From [aml...@gmail.com](https://code.google.com/u/117315860241161471469/) on August 05, 2011 16:49:33_

Current versions of Linus' tree replace the native code in the vsyscall page with trap instructions. DynamoRIO tries to instrument them and dies like this:

illegal int 0xcc (exploit attempt?) ip:775ee850 cs:33 sp:7fffe74d5f78 ax:ffffffffff600000 si:7fffe74d5fd0 di:7fffe74d5fa0

The fix is straightforward: rather than tracing through code with a negative address, just call it.

(This would be a good fix to make even if we end up changing the kernel to work around this problem. Calls to 0xffffffffff600000 are magic according to ancient kernel ABI, and user code should not make any assumptions about how they are implemented.)

_Original issue: http://code.google.com/p/dynamorio/issues/detail?id=530_

Contributor guide

Open the contributing guide

Research direction

Start by locating the x86-64 tracing logic that handles the vsyscall page and the call path for addresses such as 0xffffffffff600000. Reproduce the illegal int 0xcc failure on a Linux system, then verify that negative-address vsyscall code is called rather than traced or instrumented.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, linux
Domain
devtools, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.