copy_from_user函数打印垃圾值

时间:2015-05-23 03:27:18

标签: c linux sockets kernel

我正在尝试在内核空间中打印用户空间缓冲区的内容,但是我得到了一些垃圾字符,我不确定我哪里出错了。

SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
    unsigned, flags, struct sockaddr __user *, addr,
    int, addr_len) {

 char *messageRead = kmalloc(len,GFP_KERNEL);
 unsigned long bytesNotCopied = copy_from_user(messageRead,(char*)buff,len);
 printk("The messageRead Read is %s \n",messageRead);

.....
.....

}

bytesNotCopied返回0,因此我能够确认内容已被复制。但是当我尝试打印messageRead值时,它会返回一些垃圾值。

1 个答案:

答案 0 :(得分:0)

返回值0表示复制成功。 为什么要将缓冲区打印为字符串,即在printk()中使用%s。 buff是用户进程中的字符串吗?如果没有尝试倾倒这种方式

def make_id():
    return base64.b64encode(uuid.uuid4().bytes).decode("utf-8")