diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e8ee510..31aca25 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -16,7 +16,9 @@
-
+
+
+
@@ -153,6 +155,7 @@
+
diff --git a/Makefile b/Makefile
index 4840824..b2ca6fd 100644
--- a/Makefile
+++ b/Makefile
@@ -6,12 +6,12 @@ all: driver_and_interrupts.ko
driver_and_interrupts.ko: $(SRC)
$(MAKE) -C $(KDIR) M=$$PWD LLVM=1
-install: modprobe rules_install
+install: modprobe rule_install
-modules_install: driver_and_interrupts.ko
+module_install: driver_and_interrupts.ko
$(MAKE) -C $(KDIR) M=$$PWD LLVM=1 modules_install
-rules_install: modules_install 99-Hotload-Keyboard.rules driver_and_interrupts.ko
+rule_install: module_install 99-Hotload-Keyboard.rules driver_and_interrupts.ko
cp -v 99-Hotload-Keyboard.rules /etc/udev/rules.d/
udevadm control --reload-rules
udevadm trigger
@@ -19,7 +19,7 @@ rules_install: modules_install 99-Hotload-Keyboard.rules driver_and_interrupts.k
clean:
$(MAKE) -C $(KDIR) M=$$PWD LLVM=1 clean
-modprobe: modules_install
+modprobe: module_install
modprobe driver_and_interrupts
rmmod:
diff --git a/src/main.c b/src/main.c
index aec100c..0aa36fb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -56,10 +56,14 @@ static void __exit m_exit(void) {
struct linked_list_node *ptr, *tmp;
misc_deregister(&device);
+ size_t len = 0;
+
list_for_each_entry_safe(ptr, tmp, &keyboard_log, list){
+ len++;
list_del(&ptr->list);
kfree(ptr);
}
+ printk(KERN_INFO "Captured %zu Keyboard inputs", len);
free_irq(1,&key_logger);
mutex_destroy(&lock);
printk(KERN_INFO "Drivers and Interrupts (exit)\n");
diff --git a/src/misc_device_fops.c b/src/misc_device_fops.c
index cbc5c27..d092531 100644
--- a/src/misc_device_fops.c
+++ b/src/misc_device_fops.c
@@ -45,6 +45,10 @@ ssize_t read_keyboard_misc_device(struct file *file, char __user *buf, size_t co
char min = (tmp->when.tv_sec - (sys_tz.tz_minuteswest * 60)) / 60 % 60;
char hour = (tmp->when.tv_sec - (sys_tz.tz_minuteswest * 60)) / 60 / 60 % 24;
char *buffer = kmalloc(sizeof(char) * tmp->size, GFP_KERNEL);
+ if (!buffer) {
+ mutex_unlock(&lock);
+ return -ENOMEM;
+ }
memset(buffer, 0, tmp->size);
snprintf(buffer, tmp->size, "%02d:%02d:%02d \"%s\"", hour, min, sec, tmp->key.key_name);
if (tmp->key.ascii_value) {
@@ -58,6 +62,7 @@ ssize_t read_keyboard_misc_device(struct file *file, char __user *buf, size_t co
if (copy_to_user(buf + user_offset, buffer + node_offset, tmp->size - node_offset)) {
kfree(buffer);
+ mutex_unlock(&lock);
return -EFAULT;
}
kfree(buffer);