Forskelle

Dette viser forskellene mellem den valgte og den nuværende udgave af dokumentet. Gul er linjer der findes i den gamle udgave, og grøn er linjer der findes i den nuværende.

Link til denne sammenlinings vising

diverse:fkernelmodul:v2025 [06-03-2025 18:47] (nuværende)
tjen19 oprettet
Linje 1: Linje 1:
 +grundet uforsvarlige ændringer i linux kernen gennem de få 20 år siden [[diverse:​fkernelmodul|]] blev skabt, er følgende diff nødvendig:
  
 +<code diff>
 +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);​
 +</​code>​
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