aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/target/target_core_file.c')
-rw-r--r--drivers/target/target_core_file.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
index 190ca8ac249..02f553aef43 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -134,7 +134,7 @@ static struct se_device *fd_create_virtdevice(
134 mm_segment_t old_fs; 134 mm_segment_t old_fs;
135 struct file *file; 135 struct file *file;
136 struct inode *inode = NULL; 136 struct inode *inode = NULL;
137 int dev_flags = 0, flags; 137 int dev_flags = 0, flags, ret = -EINVAL;
138 138
139 memset(&dev_limits, 0, sizeof(struct se_dev_limits)); 139 memset(&dev_limits, 0, sizeof(struct se_dev_limits));
140 140
@@ -146,6 +146,7 @@ static struct se_device *fd_create_virtdevice(
146 if (IS_ERR(dev_p)) { 146 if (IS_ERR(dev_p)) {
147 printk(KERN_ERR "getname(%s) failed: %lu\n", 147 printk(KERN_ERR "getname(%s) failed: %lu\n",
148 fd_dev->fd_dev_name, IS_ERR(dev_p)); 148 fd_dev->fd_dev_name, IS_ERR(dev_p));
149 ret = PTR_ERR(dev_p);
149 goto fail; 150 goto fail;
150 } 151 }
151#if 0 152#if 0
@@ -165,8 +166,12 @@ static struct se_device *fd_create_virtdevice(
165 flags |= O_SYNC; 166 flags |= O_SYNC;
166 167
167 file = filp_open(dev_p, flags, 0600); 168 file = filp_open(dev_p, flags, 0600);
168 169 if (IS_ERR(file)) {
169 if (IS_ERR(file) || !file || !file->f_dentry) { 170 printk(KERN_ERR "filp_open(%s) failed\n", dev_p);
171 ret = PTR_ERR(file);
172 goto fail;
173 }
174 if (!file || !file->f_dentry) {
170 printk(KERN_ERR "filp_open(%s) failed\n", dev_p); 175 printk(KERN_ERR "filp_open(%s) failed\n", dev_p);
171 goto fail; 176 goto fail;
172 } 177 }
@@ -241,7 +246,7 @@ fail:
241 fd_dev->fd_file = NULL; 246 fd_dev->fd_file = NULL;
242 } 247 }
243 putname(dev_p); 248 putname(dev_p);
244 return NULL; 249 return ERR_PTR(ret);
245} 250}
246 251
247/* fd_free_device(): (Part of se_subsystem_api_t template) 252/* fd_free_device(): (Part of se_subsystem_api_t template)
@@ -509,7 +514,7 @@ enum {
509static match_table_t tokens = { 514static match_table_t tokens = {
510 {Opt_fd_dev_name, "fd_dev_name=%s"}, 515 {Opt_fd_dev_name, "fd_dev_name=%s"},
511 {Opt_fd_dev_size, "fd_dev_size=%s"}, 516 {Opt_fd_dev_size, "fd_dev_size=%s"},
512 {Opt_fd_buffered_io, "fd_buffered_id=%d"}, 517 {Opt_fd_buffered_io, "fd_buffered_io=%d"},
513 {Opt_err, NULL} 518 {Opt_err, NULL}
514}; 519};
515 520
@@ -536,15 +541,26 @@ static ssize_t fd_set_configfs_dev_params(
536 token = match_token(ptr, tokens, args); 541 token = match_token(ptr, tokens, args);
537 switch (token) { 542 switch (token) {
538 case Opt_fd_dev_name: 543 case Opt_fd_dev_name:
544 arg_p = match_strdup(&args[0]);
545 if (!arg_p) {
546 ret = -ENOMEM;
547 break;
548 }
539 snprintf(fd_dev->fd_dev_name, FD_MAX_DEV_NAME, 549 snprintf(fd_dev->fd_dev_name, FD_MAX_DEV_NAME,
540 "%s", match_strdup(&args[0])); 550 "%s", arg_p);
551 kfree(arg_p);
541 printk(KERN_INFO "FILEIO: Referencing Path: %s\n", 552 printk(KERN_INFO "FILEIO: Referencing Path: %s\n",
542 fd_dev->fd_dev_name); 553 fd_dev->fd_dev_name);
543 fd_dev->fbd_flags |= FBDF_HAS_PATH; 554 fd_dev->fbd_flags |= FBDF_HAS_PATH;
544 break; 555 break;
545 case Opt_fd_dev_size: 556 case Opt_fd_dev_size:
546 arg_p = match_strdup(&args[0]); 557 arg_p = match_strdup(&args[0]);
558 if (!arg_p) {
559 ret = -ENOMEM;
560 break;
561 }
547 ret = strict_strtoull(arg_p, 0, &fd_dev->fd_dev_size); 562 ret = strict_strtoull(arg_p, 0, &fd_dev->fd_dev_size);
563 kfree(arg_p);
548 if (ret < 0) { 564 if (ret < 0) {
549 printk(KERN_ERR "strict_strtoull() failed for" 565 printk(KERN_ERR "strict_strtoull() failed for"
550 " fd_dev_size=\n"); 566 " fd_dev_size=\n");