首页 > 解决方案 > 如何擦除内核模块变量中的数据?

问题描述

我有一个内核模块,它检查请求的 IP 地址,如果请求包含错误数据(垃圾邮件关键字),则将其添加到“黑名单”变量中。

我申报黑名单的方式如下:

#define blacklist (uint32_t[3]) { \
  2071690107, \
  168430090, \
  4294967295 \
}

我做了一些初步测试到达这一步(过滤 IPv4、printk 日志),并且必须已经阻止了我需要测试的请求之一的 IP 地址。

我这样说是因为当我执行 make clean、make 并重新插入我的模块时,我会自动看到 IP 地址被阻止。

应该发生的是数据打印首先显示一个垃圾邮件词,然后它阻止 IP 地址,然后它将打印它已经在任何后续请求中被阻止(我知道稍后会跟进)。

Mar 16 18:43:33 deadsupra-VirtualBox kernel: [36594.961054] Module insertion completed successfully!
Mar 16 18:43:46 deadsupra-VirtualBox kernel: [36607.186539] ip checking: 127.0.0.1
Mar 16 18:43:46 deadsupra-VirtualBox kernel: [36607.186541] ip is already blacklisted 127.0.0.1
Mar 16 18:43:46 deadsupra-VirtualBox kernel: [36607.186546] ip checking: 127.0.0.1
Mar 16 18:43:46 deadsupra-VirtualBox kernel: [36607.186547] ip is already blacklisted 127.0.0.1
Mar 16 18:43:51 deadsupra-VirtualBox kernel: [36612.190103] ip checking: 127.0.0.1
Mar 16 18:43:51 deadsupra-VirtualBox kernel: [36612.190108] ip is already blacklisted 127.0.0.1
Mar 16 18:43:51 deadsupra-VirtualBox kernel: [36612.190119] ip checking: 127.0.0.1
Mar 16 18:43:51 deadsupra-VirtualBox kernel: [36612.190121] ip is already blacklisted 127.0.0.1

我的make文件如下:

obj-m += wander.o 

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

all:
    make -C $(KERNELDIR) -Wno-declaration-after-statement M=$(PWD) modules 

clean:
    make -C $(KERNELDIR) M=$(PWD) clean

insert:
    -sudo rmmod wander
    sudo dmesg -C
    sudo insmod wander.ko
    dmesg

test:
    curl "http://www1.udel.edu/registrar/graduation-diplomas/diplomas.html" | grep -i -o -P '.{0,10}university.diploma.{0,20}'

log:
    cat /var/log/kern.log

我没有正确清理我的项目空间吗?我想每次都刷新我的测试场景,并忘记以前在重建源代码时阻止的任何 IP 地址。

我在想,当我清理模块时,它会删除它,但出于某种原因必须保留数据。

标签: kernel-module

解决方案


推荐阅读