向内核模块添加功能

问题描述

我正在尝试实现LKM(出于教育目的),并且在我尝试向其添加一些功能之前一直很好。当前,模块回显收到的字符串,我正在尝试对其进行修改

ssize_t echo_write(struct file *fileptr,const char __user *buff,size_t cmax,loff_t *offptr) {
ssize_t cwrite = 0,error = 0;
struct echo_dev *echo_device = fileptr->private_data;
char *kbuff;
printk(KERN_INFO "  -K- echo_write was invoked!\n");
if(echo_device->f_write) {
    kfree(kbuff);
    error = echo_device->f_write;
    echo_device->f_write = 0;
    return error;
}

kbuff = kzalloc(cmax+1,GFP_KERNEL);
if(!kbuff) {
    printk(KERN_ALERT "  -K- echo_write Could NOT alloc memory!\n");
    return -1;
}

printk(KERN_INFO "  -K- echo_write was invoked!\n");
cwrite = cmax - copy_from_user(kbuff,buff,cmax);
echo_device->cwrite += cwrite;
kbuff[cwrite] = '\0';

if(cwrite == 0) {
    echo_device->f_write = 0;
    return -EFAULT; //No char written,return error
}
else if(cwrite < cmax)
    echo_device->f_write = -EFAULT; //Flags error to return on next call
else
    echo_device->f_write = 0;

printk(KERN_NOTICE "      -KW- %s",kbuff);

kfree(kbuff);
return cwrite;
}

buff是接收到的数据,正在复制到kbuff。我想将buff变量暴露给sha256哈希并分配给kbuff。我试图对模块实施OpenSSL,但是我不断收到未知的符号错误。通过搜索,我得到了;

Compile flags: -lssl -lcrypto

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main (void) {
const char *s = "test1";
unsigned char *d = SHA256(s,strlen(s),0);

int i;
for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
    printf("%02x",d[i]);
putchar('\n');

return 0;
}

它可以按预期进行编译和运行,但是我无法将其嵌入到echo_write函数中。我将感谢经验丰富的用户的指导。是否可以将sha256代码添加函数中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)