OSDN Git Service

tcm_loop: fixup tpgt string to integer conversion
authorMing Lin <mlin@kernel.org>
Mon, 30 Mar 2015 06:11:30 +0000 (23:11 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Wed, 8 Apr 2015 06:27:58 +0000 (23:27 -0700)
Currently, for example, mkdir "tpgt_xyz" doesn't return error.
mkdir /sys/kernel/config/target/loopback/naa.60014055f195952b/tpgt_xyz

Replace obsoleted simple_strtoul with kstrtoul and check the conversion.

Signed-off-by: Ming Lin <mlin@kernel.org>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/loopback/tcm_loop.c

index 797c731..2114c1d 100644 (file)
@@ -1216,21 +1216,19 @@ static struct se_portal_group *tcm_loop_make_naa_tpg(
        struct tcm_loop_hba *tl_hba = container_of(wwn,
                        struct tcm_loop_hba, tl_hba_wwn);
        struct tcm_loop_tpg *tl_tpg;
-       char *tpgt_str, *end_ptr;
        int ret;
-       unsigned short int tpgt;
+       unsigned long tpgt;
 
-       tpgt_str = strstr(name, "tpgt_");
-       if (!tpgt_str) {
+       if (strstr(name, "tpgt_") != name) {
                pr_err("Unable to locate \"tpgt_#\" directory"
                                " group\n");
                return ERR_PTR(-EINVAL);
        }
-       tpgt_str += 5; /* Skip ahead of "tpgt_" */
-       tpgt = (unsigned short int) simple_strtoul(tpgt_str, &end_ptr, 0);
+       if (kstrtoul(name+5, 10, &tpgt))
+               return ERR_PTR(-EINVAL);
 
        if (tpgt >= TL_TPGS_PER_HBA) {
-               pr_err("Passed tpgt: %hu exceeds TL_TPGS_PER_HBA:"
+               pr_err("Passed tpgt: %lu exceeds TL_TPGS_PER_HBA:"
                                " %u\n", tpgt, TL_TPGS_PER_HBA);
                return ERR_PTR(-EINVAL);
        }
@@ -1247,7 +1245,7 @@ static struct se_portal_group *tcm_loop_make_naa_tpg(
                return ERR_PTR(-ENOMEM);
 
        pr_debug("TCM_Loop_ConfigFS: Allocated Emulated %s"
-               " Target Port %s,t,0x%04x\n", tcm_loop_dump_proto_id(tl_hba),
+               " Target Port %s,t,0x%04lx\n", tcm_loop_dump_proto_id(tl_hba),
                config_item_name(&wwn->wwn_group.cg_item), tpgt);
 
        return &tl_tpg->tl_se_tpg;