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);
diverse/fkernelmodul/v2025.txt · Sidst ændret: 06-03-2025 18:47 af tjen19
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0