diff options
author | Bryan Brattlof <hello@bryanbrattlof.com> | 2020-07-15 16:30:03 -0400 |
---|---|---|
committer | Bryan Brattlof <hello@bryanbrattlof.com> | 2020-07-15 16:30:03 -0400 |
commit | 4f27198d12f7efb3514277c8ac3d3cf1ceb7a56d (patch) | |
tree | 4de24b7d56b2f65d3ab357c4a2e51f1c76c325be | |
parent | ffb738163d21ad1fe339256cdcffc295d51a83ff (diff) | |
download | eudyptula-challenge-4f27198d12f7efb3514277c8ac3d3cf1ceb7a56d.tar.gz eudyptula-challenge-4f27198d12f7efb3514277c8ac3d3cf1ceb7a56d.tar.bz2 |
task 15: add task readme
-rw-r--r-- | readme.rst | 4 | ||||
-rw-r--r-- | tasks/15/readme | 42 |
2 files changed, 45 insertions, 1 deletions
@@ -39,4 +39,6 @@ Here are the links to each task's readme: 13. Optimizing Linked Lists: `task <https://git.bryanbrattlof.com/eudyptula-challenge/tree/tasks/13/readme>`__ -14. Process Task: `task <https://git.bryanbrattlof.com/eudyptula-challenge/tree/tasks/13/readme>`__ +14. Process Task: `task <https://git.bryanbrattlof.com/eudyptula-challenge/tree/tasks/14/readme>`__ + +15. Create a syscall: `task <https://git.bryanbrattlof.com/eudyptula-challenge/tree/tasks/15/readme>`__ diff --git a/tasks/15/readme b/tasks/15/readme new file mode 100644 index 0000000..aaa5a1e --- /dev/null +++ b/tasks/15/readme @@ -0,0 +1,42 @@ +Task 15 +======= + +That process task turned out to not be all that complex, but digging +through the core kernel was a tough task, nice work with that. + +Speaking of "core kernel" tasks, let's do another one. It's one of the +most common undergraduate tasks there is: create a new syscall! +Yeah, loads of fun, but it's good to know the basics of how to do this, +and, how to call it from userspace. + +For this task: + + - Add a new syscall to the kernel called "sys_eudyptula", so this is + all going to be changes to the kernel tree itself, no stand-alone + module needed for this task (unless you want to do it that way + without hacking around the syscall table, if so, bonus points for + you...) + + - The syscall number needs to be the next syscall number for the + architecture you test it on (some of you all are doing this on ARM + systems, showoffs, and syscall numbers are not the same across all + architectures). Document the arch you are using and why you picked + this number in the module. + + - The syscall should take two parameters: int high_id, int low_id. + + - The syscall will take the two values, mush them together into one + 64bit value (low_id being the lower 32bits of the id, high_id being + the upper 32bits of the id). + + - If the id value matches your id (which of course you know as + "7c1caf2f50d1", then the syscall returns success. Otherwise it + returns a return code signifying an invalid value was passed to it. + + - Write a userspace C program that calls the syscall and properly + exercises it (valid and invalid calls need to be made). + + - "Proof" of running the code needs to be provided. + +So you need to send in a .c userspace program, a kernel patch, and +"proof" that it all works, as a response.
\ No newline at end of file |