diff options
| -rw-r--r-- | drivers/mtd/ubi/kapi.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/mtd/ubi/kapi.c b/drivers/mtd/ubi/kapi.c index 277786ebaa2c..1361574e2b00 100644 --- a/drivers/mtd/ubi/kapi.c +++ b/drivers/mtd/ubi/kapi.c | |||
| @@ -291,8 +291,7 @@ EXPORT_SYMBOL_GPL(ubi_open_volume_nm); | |||
| 291 | */ | 291 | */ |
| 292 | struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode) | 292 | struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode) |
| 293 | { | 293 | { |
| 294 | int error, ubi_num, vol_id; | 294 | int error, ubi_num, vol_id, mod; |
| 295 | struct ubi_volume_desc *ret; | ||
| 296 | struct inode *inode; | 295 | struct inode *inode; |
| 297 | struct path path; | 296 | struct path path; |
| 298 | 297 | ||
| @@ -306,16 +305,16 @@ struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode) | |||
| 306 | return ERR_PTR(error); | 305 | return ERR_PTR(error); |
| 307 | 306 | ||
| 308 | inode = path.dentry->d_inode; | 307 | inode = path.dentry->d_inode; |
| 308 | mod = inode->i_mode; | ||
| 309 | ubi_num = ubi_major2num(imajor(inode)); | 309 | ubi_num = ubi_major2num(imajor(inode)); |
| 310 | vol_id = iminor(inode) - 1; | 310 | vol_id = iminor(inode) - 1; |
| 311 | path_put(&path); | ||
| 311 | 312 | ||
| 313 | if (!S_ISCHR(mod)) | ||
| 314 | return ERR_PTR(-EINVAL); | ||
| 312 | if (vol_id >= 0 && ubi_num >= 0) | 315 | if (vol_id >= 0 && ubi_num >= 0) |
| 313 | ret = ubi_open_volume(ubi_num, vol_id, mode); | 316 | return ubi_open_volume(ubi_num, vol_id, mode); |
| 314 | else | 317 | return ERR_PTR(-ENODEV); |
| 315 | ret = ERR_PTR(-ENODEV); | ||
| 316 | |||
| 317 | path_put(&path); | ||
| 318 | return ret; | ||
| 319 | } | 318 | } |
| 320 | EXPORT_SYMBOL_GPL(ubi_open_volume_path); | 319 | EXPORT_SYMBOL_GPL(ubi_open_volume_path); |
| 321 | 320 | ||
