FEX-Emu / FEX-Emu/FEX

Support mixture of guest and host robust futexes

Open
#809 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
8k
Forks
351
Avg merge
12h 31m
Merged PRs (30d)
102

Description

We can't safely modify the guest's robust list
- Memory might not be sufficient, or it will just overwrite our additions on change
We also can't safely consume the full guest robust and append it to our own
- We don't have a full view of glibc's robust list
- Might work if we capture all HOST get/set lists and modifying it? Needs seccomp filters then.
- Would require us to track our own list, append the glibc head to our tail, and append the guest one to that tail as well.
- Same problem where host glibc could potentially overwrite the and end that contains the guest.
- Can't guarantee no host robust-futex usage due to thunks.
We have no interface in to setting 32bit robust list
- Needs the syscall32 API

Proposal to the kernel?
- New robust list indexing API?
- Something that uses the key api?
- long set_robust_list_key(key_t key, struct robust_list_head *head, size_t len, int listflg);
- IPC_CREAT - Create a new robust list associated with key
- IPC_EXCL - same to ensure the syscall fails if already created
- long get_robust_list_key(key_t key, int pid, struct robust_list_head **head_ptr,
size_t *len_ptr);
- long del_robust_list_key(key_t key);
- Disassociates robust list of key from process and deletes?

Allows us to create multiple robust lists tied to a pid.
Still have the regular get/set robust list path, just additional list arrays on top of that.
Expectation is to only have a handful of robust lists, can be a linear scan lookup.
Expose the 32bit path through the "regular" 32bit syscall path.

I'm already dreading bringing this up on the mailing list.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.