Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 尝试访问常量字符*缓冲区时崩溃_C_Linux Device Driver - Fatal编程技术网

C 尝试访问常量字符*缓冲区时崩溃

C 尝试访问常量字符*缓冲区时崩溃,c,linux-device-driver,C,Linux Device Driver,我正在尝试编写一个Linux内核模块。在这里,我注册了如下打开、读取、写入和释放功能: static struct file_operations fops = { .open = dev_open, .read = dev_read, .write = dev_write, .release = dev_release, }; 驱动程序创建一个字符设备作为/dev/hvacchar。这部分似乎工作得很好 为了进行测试,我向驱动程序写入如下内容: cat > /d

我正在尝试编写一个Linux内核模块。在这里,我注册了如下打开、读取、写入和释放功能:

static struct file_operations fops =
{
   .open = dev_open,
   .read = dev_read,
   .write = dev_write,
   .release = dev_release,
};
驱动程序创建一个字符设备作为/dev/hvacchar。这部分似乎工作得很好

为了进行测试,我向驱动程序写入如下内容:

cat > /dev/hvacchar
asdf1234
调用进程立即被终止

我已经删除了dev_write中的所有内容,只剩下一个printk()。代码如下:

static ssize_t dev_write(struct file *filep, const char *buffer, size_t len, loff_t *offset){
   printk(KERN_INFO "HVACCHAR: Entered dev_write()\n");
   printk(KERN_INFO "HVACChar: b4 sprintf(): buffer=%c\n", buffer[0]);
   return len;
}
tail-f/var/log/kern.log显示第一条printk语句,但不显示第二条。我猜当它试图访问缓冲区变量时会崩溃。据我了解,它是由系统提供的,应该有一个有效的内存分配。我做错了什么

这是kern.log的整个转储

Aug 31 15:17:28 app-ThinkCentre-M900 kernel: [873016.888579] HVACChar: Device has been opened 1 time(s)
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.627170] HVACCHAR: Entered dev_write()
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.627203] BUG: unable to handle kernel paging request at 00000000015c9004
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.630465] IP: [<ffffffffc08f7070>] dev_write+0x20/0x40 [hvacchar]
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.633714] PGD 51364067 PUD 374d3067 PMD 374f6067 PTE 80000000ac7de867
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.637075] Oops: 0001 [#36] SMP
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.640346] Modules linked in: hvacchar(OE) binfmt_misc btrfs xor raid6_pq ufs qnx4 hfsplus hfs minix ntfs msdos jfs xfs libcrc32c uas usb_storage ebbchar(OE) rfcomm bnep intel_rapl x86_pkg_temp_thermal input_leds intel_powerclamp coretemp snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic snd_hda_intel snd_hda_codec i915_bpo snd_hda_core snd_hwdep snd_pcm kvm_intel snd_seq_midi kvm snd_seq_midi_event snd_rawmidi snd_seq hci_uart irqbypass btbcm btqca snd_seq_device btintel snd_timer crct10dif_pclmul intel_ips drm_kms_helper bluetooth drm crc32_pclmul ghash_clmulni_intel aesni_intel snd aes_x86_64 lrw gf128mul mei_me glue_helper ablk_helper serio_raw cryptd i2c_algo_bit fb_sys_fops syscopyarea sysfillrect sysimgblt soundcore mei video acpi_pad 8250_fintek wmi intel_lpss_acpi intel_lpss pinctrl_sunrisepoint pinctrl_intel acpi_als kfifo_buf i2c_hid industrialio mac_hid parport_pc ppdev lp parport hid_generic usbhid hid e1000e psmouse ptp ahci pps_core libahci fjes [last unloaded: hvacchar]
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.660535] CPU: 1 PID: 31522 Comm: cat Tainted: G      D    OE   4.4.0-92-generic #115~14.04.1-Ubuntu
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.662854] Hardware name: LENOVO 10FLS13501/30D0, BIOS FWKT5AA   09/23/2016
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.664735] task: ffff88010759e900 ti: ffff8800374e0000 task.ti: ffff8800374e0000
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.666473] RIP: 0010:[<ffffffffc08f7070>]  [<ffffffffc08f7070>] dev_write+0x20/0x40 [hvacchar]
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.668233] RSP: 0018:ffff8800374e3ea8  EFLAGS: 00010282
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.669703] RAX: 000000000000001d RBX: 00000000015c9000 RCX: 0000000000000000
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.671127] RDX: 0000000000000001 RSI: ffff88023dc8dd98 RDI: ffff88023dc8dd98
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.672547] RBP: ffff8800374e3eb8 R08: 000000000000000a R09: 0000000000000000
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.673890] R10: 0000000000000000 R11: 00000000000009bc R12: 0000000000000009
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.675080] R13: 0000000000000009 R14: ffff8800374e3f20 R15: 0000000000000009
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.676237] FS:  00007f92c016d740(0000) GS:ffff88023dc80000(0000) knlGS:0000000000000000
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.677373] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.678484] CR2: 00000000015c9004 CR3: 000000008fbd5000 CR4: 00000000003406e0
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.679420] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.680331] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.681209] Stack:
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.682065]  ffff880139bf6300 00000000015c9000 ffff8800374e3ec8 ffffffff812010c8
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.682936]  ffff8800374e3f08 ffffffff812016e2 ffffffff8120161c ffff880139bf6300
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.683789]  ffff880139bf6300 00000000015c9000 0000000000000009 0000000000000009
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.684640] Call Trace:
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.685436]  [<ffffffff812010c8>] __vfs_write+0x18/0x40
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.686232]  [<ffffffff812016e2>] vfs_write+0xa2/0x1a0
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.687028]  [<ffffffff8120161c>] ? vfs_read+0x10c/0x130
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.687818]  [<ffffffff81202406>] SyS_write+0x46/0xa0
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.688604]  [<ffffffff8180cd36>] entry_SYSCALL_64_fastpath+0x16/0x75
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.689391] Code: c0 31 c0 5d c3 66 0f 1f 44 00 00 0f 1f 44 00 00 55 48 c7 c7 80 80 8f c0 31 c0 48 89 e5 41 54 49 89 d4 53 48 89 f3 e8 ff cb 88 c0 <0f> be 53 04 0f be 33 48 c7 c7 a8 80 8f c0 31 c0 e8 ea cb 88 c0
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.691080] RIP  [<ffffffffc08f7070>] dev_write+0x20/0x40 [hvacchar]
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.691905]  RSP <ffff8800374e3ea8>
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.692728] CR2: 00000000015c9004
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.693552] ---[ end trace eee0478c7200f93f ]---
Aug 31 15:17:31 app-ThinkCentre-M900 kernel: [873020.693962] HVACChar: Device successfully closed
8月31日15:17:28 app-THINKCENTER-M900内核:[873016.888579]HVACChar:设备已打开1次
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.627170]HVACCHAR:已输入dev_write()
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.627203]错误:无法处理000000000 15C9004上的内核分页请求
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.630465]IP:[]开发写入+0x20/0x40[hvacchar]
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.633714]PGD 5136407 PUD 374d3067 PMD 374f6067 PTE 80000000ac7de867
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.637075]Oops:0001[#36]SMP
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.640346]模块链接:hvacchar(OE)binfmt_misc btrfs xor raid6_pq ufs qnx4 hfsplus hfs minix ntfs msdos jfs xfs libcrc32c uas usb_存储ebbchar(OE)本文介绍了一种新的研究方法:一种新的研究方法(一种新的一种新的一种新的一种新的研究方法(一种新的一种新的一种新的研究方法(一种新的一种新的一种新的一种新的研究方法(一种新的一种新的一种新的研究方法)英特尔(一种新的研究方法)英特尔(U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U D_定时器crct10dif pclmul英特尔ips drm kms辅助设备蓝牙drm crc32 pclmul ghash clmulni英特尔AESND aes x86 64 lrw gf128mul mei mei glue辅助设备ablk辅助设备序列原始加密i2c算法位fb系统fops系统复制区域系统填充系统音频核心mei视频acpi pad 8250芬特克wmi英特尔lpss英特尔CPU ACSS PINCU TRL点acpi\u als kfifo\u buf i2c\u hid Industrial mac\u hid parport\u pc ppdev lp parport hid\u通用usbhid hid e1000e psmouse ptp ahci pps\u core libahci fjes[上次卸载:hvacchar]
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.660535]CPU:1 PID:31522通信:猫污染:G D OE 4.4.0-92-generic#115~14.04.1-Ubuntu
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.662854]硬件名称:联想10FLS13501/30D0,BIOS FWKT5AA 09/23/2016
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.664735]任务:ffff88010759e900 ti:FF8800374E0000任务:ffff8800374e0000
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.666473]RIP:0010:[]开发写入+0x20/0x40[hvacchar]
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.668233]RSP:0018:ffff8800374e3ea8 EFLAGS:00010282
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.669703]RAX:00000000000000 1D RBX:000000000 15C9000 RCX:0000000000000000000000
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.671127]RDX:000000000000000 1 RSI:ffff88023dc8dd98 RDI:ffff88023dc8dd98
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.672547]RBP:ffff8800374e3eb8 R08:000000000000000000000 A R09:0000000000000000000000
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.673890]R10:0000000000000000 R11:0000000000000000000 9BC R12:0000000000000000000009
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.675080]R13:0000000000000009 R14:ffff8800374e3f20 R15:0000000000000009
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.676237]FS:00007f92c016d740(0000)GS:ffff88023dc80000(0000)KNLG:0000000000000000
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.677373]CS:0010 DS:0000 ES:0000 CR0:00000000 80050033
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.678484]CR2:000000000 15C9004 CR3:00000000 8FBD5000 CR4:0000000000 3406E0
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.679420]DR0:0000000000000000 DR1:0000000000000000000000 DR2:0000000000000000000000
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.680331]DR3:0000000000000000 DR6:00000000 FFFE0FF0 DR7:00000000000000000000 400
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.681209]堆栈:
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.682065]FFFF880139BF630000000000 15C9000 FF8800374E3EC8 FFFFFFFFFFFF812010C8
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.682936]ffff8800374e3f08 ffffffff812016e2 ffffffff8120161c ffff880139bf6300
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.683789]FFFF880139BF630000000000 15C9000 000000000000000 9
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.684640]呼叫跟踪:
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.685436][]\uu vfs\u write+0x18/0x40
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.686232][]vfs_写入+0xa2/0x1a0
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.687028][]?vfs_读取+0x10c/0x130
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.687818][]系统写入+0x46/0xa0
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.688604][]入口\系统调用\ 64 \快速路径+0x16/0x75
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.689391]代码:c0 31 c0 5d c3 66 0f 1f 44 00 00F 1f 44 00 55 48 c7 c7 80 80 80 8f c0 31 c0 48 89 e5 41 54 49 89 d4 53 48 89 f3 e8 ff cb 88 c0 53 04 0f be 33 48 c7 c7 a8 80 8f c0 31 c0 e8 ea cb 88 c0
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.691080]RIP[]开发写入+0x20/0x40[hvacchar]
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.691905]RSP
八月31日15:17:31 app-THINKCENTER-M900内核:[873020.692728]CR2:000000000 15C9004
8月31日15:17:31 app-THINKCENTER-M900内核:[873020.693552]--[结束跟踪eee0478c7200f93f]---
八月31日15:17:31 app-THINKCENTER-M900内核:[87302
#include <linux/slab.h>

static ssize_t dev_write(struct file *filep, const char __user *buffer, size_t len, loff_t *offset) {
    char *buf_internal;

    buf_internal = kmalloc(len, GFP_KERNEL);
    if (buf_internal == NULL)
        return -ENOMEM;

    if (copy_from_user(buf_internal, buffer, len)) {
        kfree(buf_internal);
        return -EFAULT;
    }

    buf_internal[len - 1] = '\0';

    printk(KERN_INFO "HVACCHAR: Entered dev_write()\n");
    printk(KERN_INFO "HVACChar: b4 sprintf(): buffer=%c\n", buf_internal[0]);

    kfree(buf_internal);

    return len;
}