I wrote a special system call for assignment that compares two integers and returns the largest. Here is my kernel side code (max.c):
#include <linux/kernel.h> #include <linux/syscalls.h> asmlinkage long sys_max(int num1, int num2) { if (num1 > num2) { return num1; } else { return num2; } }
And here is my user space code (max.h):
#include <unistd.h> #define SYS_MAX 323 int max(int num1, int num2) { int maxnumber = syscall(SYS_MAX, num1, num2); return maxnumber; }
I use this little program to test the system call:
#include <stdio.h> #include <max.h> int main() { int a, b; scanf("%d", &a); scanf("%d", &b); printf("%d", max(a, b)); return 0; }
It works fine for positive numbers, or when it is positive and the other negative, but max always returns -1 when dealing with two negative values. I was wondering if this is due to the int-> long conversion, but I cannot figure out what causes the problem.
source share