diff options
-rw-r--r-- | drivers/gpu/drm/drm_fops.c | 4 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-core/dvbdev.c | 5 | ||||
-rw-r--r-- | sound/core/sound.c | 4 |
3 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 3733e36d135e..b06a53715853 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c | |||
@@ -183,6 +183,10 @@ int drm_stub_open(struct inode *inode, struct file *filp) | |||
183 | 183 | ||
184 | old_fops = filp->f_op; | 184 | old_fops = filp->f_op; |
185 | filp->f_op = fops_get(&dev->driver->fops); | 185 | filp->f_op = fops_get(&dev->driver->fops); |
186 | if (filp->f_op == NULL) { | ||
187 | filp->f_op = old_fops; | ||
188 | goto out; | ||
189 | } | ||
186 | if (filp->f_op->open && (err = filp->f_op->open(inode, filp))) { | 190 | if (filp->f_op->open && (err = filp->f_op->open(inode, filp))) { |
187 | fops_put(filp->f_op); | 191 | fops_put(filp->f_op); |
188 | filp->f_op = fops_get(old_fops); | 192 | filp->f_op = fops_get(old_fops); |
diff --git a/drivers/media/dvb/dvb-core/dvbdev.c b/drivers/media/dvb/dvb-core/dvbdev.c index 65d69665f1fc..6a32680dbb1b 100644 --- a/drivers/media/dvb/dvb-core/dvbdev.c +++ b/drivers/media/dvb/dvb-core/dvbdev.c | |||
@@ -79,6 +79,10 @@ static int dvb_device_open(struct inode *inode, struct file *file) | |||
79 | file->private_data = dvbdev; | 79 | file->private_data = dvbdev; |
80 | old_fops = file->f_op; | 80 | old_fops = file->f_op; |
81 | file->f_op = fops_get(dvbdev->fops); | 81 | file->f_op = fops_get(dvbdev->fops); |
82 | if (file->f_op == NULL) { | ||
83 | file->f_op = old_fops; | ||
84 | goto fail; | ||
85 | } | ||
82 | if(file->f_op->open) | 86 | if(file->f_op->open) |
83 | err = file->f_op->open(inode,file); | 87 | err = file->f_op->open(inode,file); |
84 | if (err) { | 88 | if (err) { |
@@ -90,6 +94,7 @@ static int dvb_device_open(struct inode *inode, struct file *file) | |||
90 | unlock_kernel(); | 94 | unlock_kernel(); |
91 | return err; | 95 | return err; |
92 | } | 96 | } |
97 | fail: | ||
93 | up_read(&minor_rwsem); | 98 | up_read(&minor_rwsem); |
94 | unlock_kernel(); | 99 | unlock_kernel(); |
95 | return -ENODEV; | 100 | return -ENODEV; |
diff --git a/sound/core/sound.c b/sound/core/sound.c index 44a69bb8d4f0..7872a02f6ca9 100644 --- a/sound/core/sound.c +++ b/sound/core/sound.c | |||
@@ -152,6 +152,10 @@ static int __snd_open(struct inode *inode, struct file *file) | |||
152 | } | 152 | } |
153 | old_fops = file->f_op; | 153 | old_fops = file->f_op; |
154 | file->f_op = fops_get(mptr->f_ops); | 154 | file->f_op = fops_get(mptr->f_ops); |
155 | if (file->f_op == NULL) { | ||
156 | file->f_op = old_fops; | ||
157 | return -ENODEV; | ||
158 | } | ||
155 | if (file->f_op->open) | 159 | if (file->f_op->open) |
156 | err = file->f_op->open(inode, file); | 160 | err = file->f_op->open(inode, file); |
157 | if (err) { | 161 | if (err) { |