为什么当我使用copy_from_user时,某些模糊字符添加到了原始缓冲区中?

米拉德·哈哈维(Milad Khajavi)

我在内核模块中创建了WRITE_IOCTL,并在用户模式下调用它:

ioctl(fd, WRITE_IOCTL, "Hello, Kernel!");

在内核模式下,我有:

static int device_ioctl(struct file *filp,
    unsigned int cmd, unsigned long args) {
  char buff[14];

  switch (cmd) {
  case WRITE_IOCTL:
    copy_from_user( buff,(char *)args, 14);
    printk("This message received from User Space: %s\n", buff);
    break;
  }
  return 0;
}

当我运行此ioctl时,在/var/log/kern.log中有类似这样的内容:

This message received from User Space: Hello, Kernel!vE�
This message received from User Space: Hello, Kernel!M�
This message received from User Space: Hello, Kernel!M�

我怎么解决这个问题??

面具

可能copy_from_user()不放置null-byte-terminator,因为args它大于或等于您的期望值,n并且printk()期望使用null-terminatted,因此您正在访问垃圾值。为了解决这个问题,请将自己初始化buf为零:

  char buff[14 + 1] = {0}; // +1 for make room to 0-byte-terminattor.

它将buf用零填充所有的字节

编辑:

正如@caf在评论中提到的那样,您需要为null-byte-terminattor留一些空间。因此,与其确切地给函数分配缓冲区大小,不如将其传递给n-1,这样函数将循环untl n,然后放入空字节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我处理字符串时,为什么会得到“预期的字符串或缓冲区”?

来自分类Dev

当我将文件添加到暂存区时,为什么 Git 会将文件存储在存储库中?

来自分类Dev

当我使用sudo时,为什么不将此目录添加到我的PATH中?

来自分类Dev

为什么我们使用char *作为缓冲区,为什么不使用boost :: asio中的字符串呢?

来自分类Dev

打印效果很好,但是当我在文件中写入()相同的内容时,得到“预期的字符缓冲区对象”吗?

来自分类Dev

当我粘贴命令而不是键入命令时,为什么未将其添加到历史记录中

来自分类Dev

node.js将空终止的字符串添加到缓冲区

来自分类Dev

node.js将空终止的字符串添加到缓冲区

来自分类Dev

如何将列表项添加到字符串缓冲区?

来自分类Dev

为什么当我在同一个元素上使用`* ngIf`和`* ngFor`时,`* ngFor`将空项目添加到要迭代的数组中?

来自分类Dev

为什么固定大小的缓冲区只能是原始类型?

来自分类Dev

添加到协议缓冲区重复字段

来自分类Dev

当我将此php添加到pages.tpl.php时,为什么链接断开?

来自分类Dev

当我添加到它时,PHP 数组不断被覆盖......为什么?

来自分类Dev

Swift:为什么在使用追加时没有元素添加到我的数组中?

来自分类Dev

将列表缓冲区中的元素添加到地图中(更新地图)

来自分类Dev

使用图表js将缓冲区添加到Y轴

来自分类Dev

为什么在使用 SPI 时全局缓冲区变量产生的结果与局部缓冲区变量不同?

来自分类Dev

在特定位置将字符串添加到字符数组中,从而在 C 编程中导致缓冲区溢出

来自分类Dev

当缓冲区未满时,为什么字节缓冲区会给出缓冲区溢出异常

来自分类Dev

当缓冲区未满时,为什么字节缓冲区会给出缓冲区溢出异常

来自分类Dev

当我使用insertAdjacentHTML(“ beforeend” ...将元素添加到DOM时,出现神秘字符

来自分类Dev

为什么位缓冲区和缓冲区给我不同的输出?

来自分类Dev

当我将一个char添加到空字符串(如“” + c)时,为什么返回一个未知值?

来自分类Dev

为什么我的IOCTL调用可与copy_from_user一起使用,而不能与get_user一起使用?

来自分类Dev

当我将项目添加到 FirebaseDatabase 时,为什么我的布尔值会抛出空指针异常?

来自分类Dev

当我重新分配一个较小的缓冲区时,它会删除缓冲区中的数据直到达到正确的大小吗?

来自分类Dev

为什么我不能写这个缓冲区?

来自分类Dev

为什么在LZW压缩中压缩缓冲区需要大于输入缓冲区?

Related 相关文章

  1. 1

    当我处理字符串时,为什么会得到“预期的字符串或缓冲区”?

  2. 2

    当我将文件添加到暂存区时,为什么 Git 会将文件存储在存储库中?

  3. 3

    当我使用sudo时,为什么不将此目录添加到我的PATH中?

  4. 4

    为什么我们使用char *作为缓冲区,为什么不使用boost :: asio中的字符串呢?

  5. 5

    打印效果很好,但是当我在文件中写入()相同的内容时,得到“预期的字符缓冲区对象”吗?

  6. 6

    当我粘贴命令而不是键入命令时,为什么未将其添加到历史记录中

  7. 7

    node.js将空终止的字符串添加到缓冲区

  8. 8

    node.js将空终止的字符串添加到缓冲区

  9. 9

    如何将列表项添加到字符串缓冲区?

  10. 10

    为什么当我在同一个元素上使用`* ngIf`和`* ngFor`时,`* ngFor`将空项目添加到要迭代的数组中?

  11. 11

    为什么固定大小的缓冲区只能是原始类型?

  12. 12

    添加到协议缓冲区重复字段

  13. 13

    当我将此php添加到pages.tpl.php时,为什么链接断开?

  14. 14

    当我添加到它时,PHP 数组不断被覆盖......为什么?

  15. 15

    Swift:为什么在使用追加时没有元素添加到我的数组中?

  16. 16

    将列表缓冲区中的元素添加到地图中(更新地图)

  17. 17

    使用图表js将缓冲区添加到Y轴

  18. 18

    为什么在使用 SPI 时全局缓冲区变量产生的结果与局部缓冲区变量不同?

  19. 19

    在特定位置将字符串添加到字符数组中,从而在 C 编程中导致缓冲区溢出

  20. 20

    当缓冲区未满时,为什么字节缓冲区会给出缓冲区溢出异常

  21. 21

    当缓冲区未满时,为什么字节缓冲区会给出缓冲区溢出异常

  22. 22

    当我使用insertAdjacentHTML(“ beforeend” ...将元素添加到DOM时,出现神秘字符

  23. 23

    为什么位缓冲区和缓冲区给我不同的输出?

  24. 24

    当我将一个char添加到空字符串(如“” + c)时,为什么返回一个未知值?

  25. 25

    为什么我的IOCTL调用可与copy_from_user一起使用,而不能与get_user一起使用?

  26. 26

    当我将项目添加到 FirebaseDatabase 时,为什么我的布尔值会抛出空指针异常?

  27. 27

    当我重新分配一个较小的缓冲区时,它会删除缓冲区中的数据直到达到正确的大小吗?

  28. 28

    为什么我不能写这个缓冲区?

  29. 29

    为什么在LZW压缩中压缩缓冲区需要大于输入缓冲区?

热门标签

归档