Quantcast
Channel: Active questions tagged kernel-modules - Unix & Linux Stack Exchange
Viewing all articles
Browse latest Browse all 1183

writing to character device file is causing list_del or list_add corruption. How do I fix it?

$
0
0

I am following LDD3. I have implemented the read and write functionality for the scull module. whenever I run echo hello > /dev/scull0 to test the write function, I get list_add / list_del corruption and a stack trace.

Here is my code:

#include <linux/module.h>#include <linux/init.h>#include <linux/moduleparam.h>#include <linux/stat.h>#include <linux/types.h>#include <linux/fs.h>#include <linux/cdev.h>#define SCULL_DEV_NO 4MODULE_LICENSE("Dual BSD/GPL");static int scull_major = 0;static int scull_minor = 0;static int scull_nr_devs = 4;static int scull_qset_val = 1000;static int scull_quantum_val = 4000;module_param(scull_major, int, S_IRUGO);static dev_t dev = 0;struct scull_qset{    void **data;    struct scull_qset * next;};struct scull_dev{    struct cdev cdev;    struct scull_qset *data;    int qset;    unsigned long size;    int quantum;    unsigned int access_key;    struct semaphore sem;};int scull_trim(struct scull_dev *dev){    struct scull_qset *dptr, *next;    int i;    int qset =  dev->qset;    for (dptr = dev->data; dptr; dptr = next){        if (dptr->data){            for(i = 0; i < qset; i++){                kfree(dptr->data[i]);            }            kfree(dptr->data);            dptr->data = NULL;        }        next = dptr->next;        kfree(dptr);    }    dev->data = NULL;    dev->qset = scull_qset_val;    dev->size = 0;    dev->quantum = scull_quantum_val;    return 0;}int scull_open(struct inode * inode, struct file * filp){    struct scull_dev * dev;    dev = container_of(inode->i_cdev, struct scull_dev, cdev);    filp->private_data = dev;    if((filp->f_flags & O_ACCMODE) == O_WRONLY){        scull_trim(dev);    }    printk(KERN_INFO "scull: Opened device %d\n", iminor(inode));    return 0;}int scull_release(struct inode * inode, struct file * filp){    printk(KERN_INFO "scull: Released device %d\n", iminor(inode));    return 0;}struct scull_qset* scull_follow(struct scull_dev *dev, int item){    struct scull_qset* ptr = dev->data;    struct scull_qset* rptr = NULL;    for(int i=0; i<item+1; i++){        pr_info("DEBUG: ptr = %p, ptr->next = %p\n", ptr, ptr ? ptr->next : NULL);        if(ptr == NULL){            ptr = kmalloc(sizeof(struct scull_qset), GFP_KERNEL);            if (ptr == NULL)                return NULL;            memset(ptr, 0, sizeof(struct scull_qset));            ptr->data = NULL;            ptr->next = NULL;        }        rptr = ptr;        ptr = ptr->next;    }    return rptr;}ssize_t scull_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos){    ssize_t retval = 0;    struct scull_dev *dev = filp->private_data;    struct scull_qset *dptr;    int quantum = dev->quantum, qset = dev->qset;    int itemsize = quantum * qset;    int item, s_pos, q_pos, rest;    if (down_interruptible(&dev->sem))        return -ERESTARTSYS;    if (*f_pos >= dev->size)        goto out;    if (*f_pos + count > dev->size)        count = dev->size - *f_pos;    item = (long)*f_pos / itemsize;    rest = (long)*f_pos % itemsize;    s_pos = rest / quantum; q_pos = rest % quantum;    dptr = scull_follow(dev, item);    if (dptr == NULL || !dptr->data || !dptr->data[s_pos])        goto out;    if (count > quantum - q_pos)        count = quantum - q_pos;    if (copy_to_user(buf, dptr->data[s_pos] + q_pos, count)){        return -EFAULT;        goto out;    }    *f_pos += count;    retval = count;    out:        up(&dev->sem);        return retval;}ssize_t scull_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos){    struct scull_dev *dev = filp->private_data;    struct scull_qset *dptr;    int quantum = dev->quantum, qset = dev->qset;    int itemsize = quantum * qset;    int item, s_pos, q_pos, rest;    ssize_t retval = -ENOMEM;    if (down_interruptible(&dev->sem))        return -ERESTARTSYS;    item = (long)*f_pos / itemsize;    rest = (long)*f_pos % itemsize;    s_pos = rest / quantum; q_pos = rest % quantum;    dptr = scull_follow(dev, item);    if (dptr == NULL)        goto out;    if (!dptr->data){        dptr->data = kmalloc(sizeof(char *)  * dev->qset, GFP_KERNEL);        if (!dptr->data)            goto out;        memset(dptr->data, 0, qset * sizeof(char *));    }    if (!dptr->data[s_pos]){        dptr->data[s_pos] = kmalloc(dev->quantum, GFP_KERNEL);        if (!dptr->data[s_pos])            goto out;    }    if (count > quantum - q_pos)        count = quantum - q_pos;    if (copy_from_user(dptr->data[s_pos] + q_pos, buf, count)){        retval = -EFAULT;        goto out;    }    *f_pos += count;    retval = count;    if (dev->size < *f_pos)        dev->size = *f_pos;    out:        up(&dev->sem);        return retval; }static struct scull_dev scull_devp_array[SCULL_DEV_NO];struct file_operations scull_fops = {    .owner = THIS_MODULE,    .open = scull_open,    .release = scull_release,    .read = scull_read,    .write = scull_write};static void scull_setup_cdev(struct scull_dev *dev, int index){    dev_t dev_no = MKDEV(scull_major, scull_minor + index);    cdev_init(&dev->cdev, &scull_fops);    dev->cdev.owner = THIS_MODULE;    printk(KERN_INFO "scull: Initialized Major: %d, Minor: %d\n", scull_major, scull_minor + index);    int result = cdev_add(&dev->cdev, dev_no, 1);    if (result < 0){        printk(KERN_ERR "scull: Failed to add Major: %d, Minor: %d\n", scull_major, scull_minor + index);    }}static void scull_rm_cdev(struct scull_dev *dev){    printk(KERN_INFO "scull: Removing cdev\n");    cdev_del(&dev->cdev);}static int __init scull_init(void){    printk(KERN_INFO "scull: Allocating char device...\n");    int result;    if(scull_major){        dev = MKDEV(scull_major, scull_minor);        result = register_chrdev_region(dev, scull_nr_devs, "scull");    }    else{        result = alloc_chrdev_region(&dev, scull_minor, scull_nr_devs, "scull");        scull_major = MAJOR(dev);    }    if (result < 0){        printk(KERN_WARNING "scull: can't get major %d\n", scull_major);        return result;    }    printk(KERN_INFO "scull: Major is %d", scull_major);    for(int i = scull_minor; i < scull_nr_devs; i++){        scull_setup_cdev(&scull_devp_array[i], i);    }    return 0;}static void __exit scull_exit(void){    printk(KERN_INFO "scull: Exiting...\n");    unregister_chrdev_region(dev, scull_nr_devs);    printk(KERN_INFO "scull: Unregistered device\n");    for(int i = scull_minor; i < scull_nr_devs; i++){        scull_rm_cdev(&scull_devp_array[i]);        printk(KERN_INFO "scull: Freeing scull_dev %d\n", i);    }}module_init(scull_init);module_exit(scull_exit);

I ran echo hello > /dev/scull0. The dmesg logs shows list_add corruption. prev is NULL on running the command. When I exit out with Ctrl + C and run the command again, the dmesg logs shows 2 errors, the first being a list_del corruption and the second being a list_add corruption. Here is the dmesg log for the 3 errors:

[43170.630743] scull: Opened device 0[43170.630761] ------------[ cut here ]------------[43170.630764] list_add corruption. prev is NULL.[43170.630773] WARNING: CPU: 6 PID: 57011 at lib/list_debug.c:25 __list_add_valid_or_report+0x42/0xa0[43170.630784] Modules linked in: scull(OE) ntfs3 snd_seq_dummy snd_hrtimer snd_seq ccm nvidia_drm(POE) nvidia_uvm(POE) nvidia_modeset(POE) nvidia(POE) vfat fat intel_rapl_msr intel_rapl_common edac_mce_amd kvm_amd iwlmvm kvm mac80211 irqbypass mousedev snd_usb_audio joydev crct10dif_pclmul crc32_pclmul polyval_clmulni polyval_generic snd_usbmidi_lib snd_ump snd_hda_codec_realtek snd_rawmidi snd_hda_codec_generic snd_seq_device ledtrig_audio gf128mul snd_hda_codec_hdmi mc ghash_clmulni_intel sha512_ssse3 sha256_ssse3 sha1_ssse3 aesni_intel snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi snd_hda_codec libarc4 snd_hda_core btusb btrtl btintel iwlwifi btbcm snd_hwdep btmtk snd_pcm bluetooth cfg80211 snd_timer snd r8169 crypto_simd cryptd ecdh_generic rapl soundcore realtek sp5100_tco mdio_devres k10temp libphy rfkill i2c_piix4 video ccp gigabyte_wmi wmi_bmof pcspkr acpi_cpufreq gpio_amdpt wmi mac_hid gpio_generic i2c_dev crypto_user loop fuse dm_mod nfnetlink ip_tables x_tables ext4 crc32c_generic crc16 mbcache jbd2[43170.630928]  usbhid nvme nvme_core crc32c_intel xhci_pci xhci_pci_renesas nvme_auth[43170.630941] Unloaded tainted modules: scull(OE):13 [last unloaded: scull(OE)][43170.630951] CPU: 6 PID: 57011 Comm: bash Tainted: P  R   D W  OE      6.7.0-arch3-1 #1 29ada86f174bb9983ea57568622d66509982ed7e[43170.630957] Hardware name: Gigabyte Technology Co., Ltd. B450M DS3H WIFI/B450M DS3H WIFI-CF, BIOS F52 01/07/2021[43170.630960] RIP: 0010:__list_add_valid_or_report+0x42/0xa0[43170.630966] Code: 75 41 4c 8b 02 49 39 c0 75 4c 48 39 fa 74 60 49 39 f8 74 5b b8 01 00 00 00 e9 fa 05 77 00 48 c7 c7 d0 c7 2a 92 e8 fe 24 a5 ff <0f> 0b 31 c0 e9 e5 05 77 00 48 c7 c7 f8 c7 2a 92 e8 e9 24 a5 ff 0f[43170.630970] RSP: 0018:ffffad82c1e9bcf8 EFLAGS: 00010082[43170.630975] RAX: 0000000000000000 RBX: 7fffffffffffffff RCX: 0000000000000027[43170.630979] RDX: ffff89f40e9a16c8 RSI: 0000000000000001 RDI: ffff89f40e9a16c0[43170.630982] RBP: ffffad82c1e9bd68 R08: 0000000000000000 R09: ffffad82c1e9bb80[43170.630985] R10: 0000000000000003 R11: ffff89f41f32b368 R12: ffffffffc24b87c8[43170.630989] R13: 0000000000000001 R14: 0000000000000000 R15: ffffffffc24b87d0[43170.630992] FS:  00007747f80d6740(0000) GS:ffff89f40e980000(0000) knlGS:0000000000000000[43170.630997] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033[43170.631000] CR2: 0000563ef7be1000 CR3: 00000001c487c000 CR4: 0000000000350ef0[43170.631004] Call Trace:[43170.631008]  <TASK>[43170.631011]  ? __list_add_valid_or_report+0x42/0xa0[43170.631016]  ? __warn+0x81/0x130[43170.631025]  ? __list_add_valid_or_report+0x42/0xa0[43170.631030]  ? report_bug+0x171/0x1a0[43170.631037]  ? prb_read_valid+0x1b/0x30[43170.631043]  ? srso_return_thunk+0x5/0x5f[43170.631050]  ? handle_bug+0x3c/0x80[43170.631057]  ? exc_invalid_op+0x17/0x70[43170.631063]  ? asm_exc_invalid_op+0x1a/0x20[43170.631074]  ? __list_add_valid_or_report+0x42/0xa0[43170.631080]  ? __list_add_valid_or_report+0x42/0xa0[43170.631084]  __down_common+0x71/0x230[43170.631095]  down_interruptible+0x52/0x60[43170.631101]  scull_write+0x4c/0x200 [scull bd55e810425245067618b333771c8e3ae1dc9535][43170.631114]  vfs_write+0xf2/0x400[43170.631127]  ksys_write+0x6f/0xf0[43170.631135]  do_syscall_64+0x64/0xe0[43170.631140]  ? srso_return_thunk+0x5/0x5f[43170.631145]  ? syscall_exit_to_user_mode+0x2b/0x40[43170.631150]  ? srso_return_thunk+0x5/0x5f[43170.631155]  ? do_syscall_64+0x70/0xe0[43170.631159]  ? srso_return_thunk+0x5/0x5f[43170.631164]  ? do_syscall_64+0x70/0xe0[43170.631169]  ? srso_return_thunk+0x5/0x5f[43170.631174]  ? exc_page_fault+0x7f/0x180[43170.631180]  entry_SYSCALL_64_after_hwframe+0x6e/0x76[43170.631186] RIP: 0033:0x7747f8254034[43170.631209] Code: c7 00 16 00 00 00 b8 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 80 3d 35 c3 0d 00 00 74 13 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 54 c3 0f 1f 00 48 83 ec 28 48 89 54 24 18 48[43170.631213] RSP: 002b:00007fffe0667af8 EFLAGS: 00000202 ORIG_RAX: 0000000000000001[43170.631218] RAX: ffffffffffffffda RBX: 0000000000000006 RCX: 00007747f8254034[43170.631222] RDX: 0000000000000006 RSI: 0000563ef7bde970 RDI: 0000000000000001[43170.631225] RBP: 0000563ef7bde970 R08: 0000000000000073 R09: 0000000000000001[43170.631228] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000006[43170.631232] R13: 00007747f83295c0 R14: 00007747f8326f20 R15: 0000000000000000[43170.631241]  </TASK>[43170.631244] ---[ end trace 0000000000000000 ]---[43188.138981] ------------[ cut here ]------------[43188.138987] list_del corruption, ffffad82c1e9bd10->next is NULL[43188.138999] WARNING: CPU: 6 PID: 57011 at lib/list_debug.c:52 __list_del_entry_valid_or_report+0x5d/0xe0[43188.139009] Modules linked in: scull(OE) ntfs3 snd_seq_dummy snd_hrtimer snd_seq ccm nvidia_drm(POE) nvidia_uvm(POE) nvidia_modeset(POE) nvidia(POE) vfat fat intel_rapl_msr intel_rapl_common edac_mce_amd kvm_amd iwlmvm kvm mac80211 irqbypass mousedev snd_usb_audio joydev crct10dif_pclmul crc32_pclmul polyval_clmulni polyval_generic snd_usbmidi_lib snd_ump snd_hda_codec_realtek snd_rawmidi snd_hda_codec_generic snd_seq_device ledtrig_audio gf128mul snd_hda_codec_hdmi mc ghash_clmulni_intel sha512_ssse3 sha256_ssse3 sha1_ssse3 aesni_intel snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi snd_hda_codec libarc4 snd_hda_core btusb btrtl btintel iwlwifi btbcm snd_hwdep btmtk snd_pcm bluetooth cfg80211 snd_timer snd r8169 crypto_simd cryptd ecdh_generic rapl soundcore realtek sp5100_tco mdio_devres k10temp libphy rfkill i2c_piix4 video ccp gigabyte_wmi wmi_bmof pcspkr acpi_cpufreq gpio_amdpt wmi mac_hid gpio_generic i2c_dev crypto_user loop fuse dm_mod nfnetlink ip_tables x_tables ext4 crc32c_generic crc16 mbcache jbd2[43188.139153]  usbhid nvme nvme_core crc32c_intel xhci_pci xhci_pci_renesas nvme_auth[43188.139166] Unloaded tainted modules: scull(OE):13 [last unloaded: scull(OE)][43188.139175] CPU: 6 PID: 57011 Comm: bash Tainted: P  R   D W  OE      6.7.0-arch3-1 #1 29ada86f174bb9983ea57568622d66509982ed7e[43188.139182] Hardware name: Gigabyte Technology Co., Ltd. B450M DS3H WIFI/B450M DS3H WIFI-CF, BIOS F52 01/07/2021[43188.139186] RIP: 0010:__list_del_entry_valid_or_report+0x5d/0xe0[43188.139191] Code: 48 8b 01 48 39 f8 75 67 48 8b 72 08 48 39 c6 75 74 b8 01 00 00 00 e9 32 05 77 00 48 89 fe 48 c7 c7 f8 c8 2a 92 e8 33 24 a5 ff <0f> 0b 31 c0 e9 1a 05 77 00 48 89 fe 48 c7 c7 20 c9 2a 92 e8 1b 24[43188.139196] RSP: 0018:ffffad82c1e9bcf8 EFLAGS: 00010082[43188.139200] RAX: 0000000000000000 RBX: 7fffffffffffffff RCX: 0000000000000027[43188.139204] RDX: ffff89f40e9a16c8 RSI: 0000000000000001 RDI: ffff89f40e9a16c0[43188.139208] RBP: ffffad82c1e9bd68 R08: 0000000000000000 R09: ffffad82c1e9bb80[43188.139211] R10: 0000000000000003 R11: ffff89f41f32b368 R12: ffffffffc24b87c8[43188.139214] R13: 0000000000000001 R14: 0000000000000001 R15: ffff89f270b10000[43188.139217] FS:  00007747f80d6740(0000) GS:ffff89f40e980000(0000) knlGS:0000000000000000[43188.139222] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033[43188.139225] CR2: 00007740023bd698 CR3: 00000001c487c000 CR4: 0000000000350ef0[43188.139229] Call Trace:[43188.139233]  <TASK>[43188.139236]  ? __list_del_entry_valid_or_report+0x5d/0xe0[43188.139241]  ? __warn+0x81/0x130[43188.139248]  ? __list_del_entry_valid_or_report+0x5d/0xe0[43188.139253]  ? report_bug+0x171/0x1a0[43188.139261]  ? prb_read_valid+0x1b/0x30[43188.139267]  ? srso_return_thunk+0x5/0x5f[43188.139274]  ? handle_bug+0x3c/0x80[43188.139280]  ? exc_invalid_op+0x17/0x70[43188.139286]  ? asm_exc_invalid_op+0x1a/0x20[43188.139298]  ? __list_del_entry_valid_or_report+0x5d/0xe0[43188.139304]  ? __list_del_entry_valid_or_report+0x5d/0xe0[43188.139308]  __down_common+0xdb/0x230[43188.139318]  down_interruptible+0x52/0x60[43188.139325]  scull_write+0x4c/0x200 [scull bd55e810425245067618b333771c8e3ae1dc9535][43188.139338]  vfs_write+0xf2/0x400[43188.139350]  ksys_write+0x6f/0xf0[43188.139358]  do_syscall_64+0x64/0xe0[43188.139363]  ? srso_return_thunk+0x5/0x5f[43188.139368]  ? syscall_exit_to_user_mode+0x2b/0x40[43188.139373]  ? srso_return_thunk+0x5/0x5f[43188.139378]  ? do_syscall_64+0x70/0xe0[43188.139382]  ? srso_return_thunk+0x5/0x5f[43188.139387]  ? do_syscall_64+0x70/0xe0[43188.139392]  ? srso_return_thunk+0x5/0x5f[43188.139397]  ? exc_page_fault+0x7f/0x180[43188.139403]  entry_SYSCALL_64_after_hwframe+0x6e/0x76[43188.139409] RIP: 0033:0x7747f8254034[43188.139432] Code: c7 00 16 00 00 00 b8 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 80 3d 35 c3 0d 00 00 74 13 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 54 c3 0f 1f 00 48 83 ec 28 48 89 54 24 18 48[43188.139436] RSP: 002b:00007fffe0667af8 EFLAGS: 00000202 ORIG_RAX: 0000000000000001[43188.139442] RAX: ffffffffffffffda RBX: 0000000000000006 RCX: 00007747f8254034[43188.139445] RDX: 0000000000000006 RSI: 0000563ef7bde970 RDI: 0000000000000001[43188.139448] RBP: 0000563ef7bde970 R08: 0000000000000073 R09: 0000000000000001[43188.139452] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000006[43188.139455] R13: 00007747f83295c0 R14: 00007747f8326f20 R15: 0000000000000000[43188.139464]  </TASK>[43188.139467] ---[ end trace 0000000000000000 ]---[43188.139503] scull: Released device 0[43189.594736] scull: Opened device 0[43189.594753] ------------[ cut here ]------------[43189.594757] list_add corruption. prev is NULL.[43189.594766] WARNING: CPU: 6 PID: 57011 at lib/list_debug.c:25 __list_add_valid_or_report+0x42/0xa0[43189.594777] Modules linked in: scull(OE) ntfs3 snd_seq_dummy snd_hrtimer snd_seq ccm nvidia_drm(POE) nvidia_uvm(POE) nvidia_modeset(POE) nvidia(POE) vfat fat intel_rapl_msr intel_rapl_common edac_mce_amd kvm_amd iwlmvm kvm mac80211 irqbypass mousedev snd_usb_audio joydev crct10dif_pclmul crc32_pclmul polyval_clmulni polyval_generic snd_usbmidi_lib snd_ump snd_hda_codec_realtek snd_rawmidi snd_hda_codec_generic snd_seq_device ledtrig_audio gf128mul snd_hda_codec_hdmi mc ghash_clmulni_intel sha512_ssse3 sha256_ssse3 sha1_ssse3 aesni_intel snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi snd_hda_codec libarc4 snd_hda_core btusb btrtl btintel iwlwifi btbcm snd_hwdep btmtk snd_pcm bluetooth cfg80211 snd_timer snd r8169 crypto_simd cryptd ecdh_generic rapl soundcore realtek sp5100_tco mdio_devres k10temp libphy rfkill i2c_piix4 video ccp gigabyte_wmi wmi_bmof pcspkr acpi_cpufreq gpio_amdpt wmi mac_hid gpio_generic i2c_dev crypto_user loop fuse dm_mod nfnetlink ip_tables x_tables ext4 crc32c_generic crc16 mbcache jbd2[43189.594923]  usbhid nvme nvme_core crc32c_intel xhci_pci xhci_pci_renesas nvme_auth[43189.594936] Unloaded tainted modules: scull(OE):13 [last unloaded: scull(OE)][43189.594945] CPU: 6 PID: 57011 Comm: bash Tainted: P  R   D W  OE      6.7.0-arch3-1 #1 29ada86f174bb9983ea57568622d66509982ed7e[43189.594951] Hardware name: Gigabyte Technology Co., Ltd. B450M DS3H WIFI/B450M DS3H WIFI-CF, BIOS F52 01/07/2021[43189.594955] RIP: 0010:__list_add_valid_or_report+0x42/0xa0[43189.594960] Code: 75 41 4c 8b 02 49 39 c0 75 4c 48 39 fa 74 60 49 39 f8 74 5b b8 01 00 00 00 e9 fa 05 77 00 48 c7 c7 d0 c7 2a 92 e8 fe 24 a5 ff <0f> 0b 31 c0 e9 e5 05 77 00 48 c7 c7 f8 c7 2a 92 e8 e9 24 a5 ff 0f[43189.594964] RSP: 0018:ffffad82c1e9bd28 EFLAGS: 00010086[43189.594970] RAX: 0000000000000000 RBX: 7fffffffffffffff RCX: 0000000000000027[43189.594973] RDX: ffff89f40e9a16c8 RSI: 0000000000000001 RDI: ffff89f40e9a16c0[43189.594977] RBP: ffffad82c1e9bd98 R08: 0000000000000000 R09: ffffad82c1e9bbb0[43189.594980] R10: 0000000000000003 R11: ffff89f41f32b368 R12: ffffffffc24b87c8[43189.594983] R13: 0000000000000001 R14: 0000000000000000 R15: ffffffffc24b87d0[43189.594987] FS:  00007747f80d6740(0000) GS:ffff89f40e980000(0000) knlGS:0000000000000000[43189.594991] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033[43189.594995] CR2: 00007740023bd698 CR3: 00000001c487c000 CR4: 0000000000350ef0[43189.594999] Call Trace:[43189.595003]  <TASK>[43189.595006]  ? __list_add_valid_or_report+0x42/0xa0[43189.595011]  ? __warn+0x81/0x130[43189.595020]  ? __list_add_valid_or_report+0x42/0xa0[43189.595026]  ? report_bug+0x171/0x1a0[43189.595033]  ? prb_read_valid+0x1b/0x30[43189.595038]  ? srso_return_thunk+0x5/0x5f[43189.595046]  ? handle_bug+0x3c/0x80[43189.595052]  ? exc_invalid_op+0x17/0x70[43189.595058]  ? asm_exc_invalid_op+0x1a/0x20[43189.595069]  ? __list_add_valid_or_report+0x42/0xa0[43189.595075]  ? __list_add_valid_or_report+0x42/0xa0[43189.595079]  __down_common+0x71/0x230[43189.595090]  down_interruptible+0x52/0x60[43189.595096]  scull_write+0x4c/0x200 [scull bd55e810425245067618b333771c8e3ae1dc9535][43189.595109]  vfs_write+0xf2/0x400[43189.595117]  ? srso_return_thunk+0x5/0x5f[43189.595122]  ? syscall_exit_to_user_mode+0x2b/0x40[43189.595127]  ? srso_return_thunk+0x5/0x5f[43189.595131]  ? do_syscall_64+0x70/0xe0[43189.595136]  ? srso_return_thunk+0x5/0x5f[43189.595141]  ? filp_flush+0x52/0x80[43189.595149]  ksys_write+0x6f/0xf0[43189.595157]  do_syscall_64+0x64/0xe0[43189.595162]  ? do_syscall_64+0x70/0xe0[43189.595166]  ? syscall_exit_to_user_mode+0x2b/0x40[43189.595171]  ? srso_return_thunk+0x5/0x5f[43189.595175]  ? do_syscall_64+0x70/0xe0[43189.595180]  ? srso_return_thunk+0x5/0x5f[43189.595184]  ? syscall_exit_to_user_mode+0x2b/0x40[43189.595189]  ? srso_return_thunk+0x5/0x5f[43189.595194]  ? do_syscall_64+0x70/0xe0[43189.595199]  entry_SYSCALL_64_after_hwframe+0x6e/0x76[43189.595205] RIP: 0033:0x7747f8254034[43189.595228] Code: c7 00 16 00 00 00 b8 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 80 3d 35 c3 0d 00 00 74 13 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 54 c3 0f 1f 00 48 83 ec 28 48 89 54 24 18 48[43189.595232] RSP: 002b:00007fffe0667af8 EFLAGS: 00000202 ORIG_RAX: 0000000000000001[43189.595237] RAX: ffffffffffffffda RBX: 0000000000000006 RCX: 00007747f8254034[43189.595241] RDX: 0000000000000006 RSI: 0000563ef7bde970 RDI: 0000000000000001[43189.595244] RBP: 0000563ef7bde970 R08: 0000000000000073 R09: 0000000000000001[43189.595247] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000006[43189.595250] R13: 00007747f83295c0 R14: 00007747f8326f20 R15: 0000000000000000[43189.595260]  </TASK>[43189.595263] ---[ end trace 0000000000000000 ]---

I tested to see if it was an issue with the scull_follow function by removing everything in the write function and just using down_interruptible and printk to see if that was the case. I was encountering the same issue. I am hypothesising that the issue has something to do with the semaphore. Please guide me on what to do.


Viewing all articles
Browse latest Browse all 1183

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>