--- x/fs/char_dev.c +++ y/fs/char_dev.c @@ -387,6 +387,8 @@ static int chrdev_open(struct inode *ino if (!kobj) return -ENXIO; new = container_of(kobj, struct cdev, kobj); + if (!cdev_get(new)) + return -ENXIO; spin_lock(&cdev_lock); /* Check i_cdev again in case somebody beat us to it while we dropped the lock. */