path: root/tasks/15
diff options
Diffstat (limited to 'tasks/15')
1 files changed, 42 insertions, 0 deletions
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