grundet uforsvarlige ændringer i linux kernen gennem de få 20 år siden F-Kernel Modul blev skabt, er følgende diff nødvendig:
diff --git a/f-kernel.c b/f-kernel.c index be62e81..d7e2d7f 100644 --- a/f-kernel.c +++ b/f-kernel.c @@ -1,6 +1,7 @@ #include <linux/kernel.h> #include <linux/module.h> #include <linux/fs.h> +#include <linux/uaccess.h> #define MAX_Fs 99999 //-1 for infinitet @@ -20,9 +21,11 @@ static int device_close(struct inode *i, struct file *f) } static ssize_t device_read( - struct file *f, char *buffer, size_t length, loff_t *offset) + struct file *f, char __user *buffer, size_t length, loff_t *offset) { - *buffer = 'F'; + char F = 'F'; + copy_to_user(buffer, &F, 1); + fCount++; if (fCount != -1 && fCount >= MAX_Fs){ @@ -33,12 +36,15 @@ static ssize_t device_read( } static ssize_t device_write( - struct file *f, const char *buffer, size_t length, loff_t *offset) + struct file *f, const char __user *buffer, size_t length, loff_t *offset) { - if (*buffer = 'F' || *buffer = 'f'){ + char buf; + copy_from_user(&buf, buffer, 1); + + if (buf == 'F' || buf == 'f'){ fCount--; }else{ - panic("My world only contains F!!! ") + panic("My world only contains F!!! "); } return length; } @@ -67,11 +73,11 @@ static int device_init(void) static void device_exit(void) { - int n = unregister_chrdev(major, "null device"); - if (n < 0) - { - printk("Cleanup failed (%d)\n", n); - } + unregister_chrdev(major, "null device"); + //if (n < 0) + //{ + // printk("Cleanup failed (%d)\n", n); + //} } module_init(device_init);