OSDN Git Service

IB/srp: Use kstrtoull() instead of simple_strtoull()
authorBart Van Assche <bart.vanassche@wdc.com>
Tue, 16 Jan 2018 18:39:42 +0000 (10:39 -0800)
committerDoug Ledford <dledford@redhat.com>
Thu, 18 Jan 2018 19:49:22 +0000 (14:49 -0500)
Use kstrtoull() since simple_strtoull() is deprecated. This patch
improves error checking but otherwise does not change any functionality.

Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/ulp/srp/ib_srp.c

index 62d8821..39b3e43 100644 (file)
@@ -3111,6 +3111,7 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
        char *options, *sep_opt;
        char *p;
        substring_t args[MAX_OPT_ARGS];
+       unsigned long long ull;
        int opt_mask = 0;
        int token;
        int ret = -EINVAL;
@@ -3135,7 +3136,13 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
                                ret = -ENOMEM;
                                goto out;
                        }
-                       target->id_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
+                       ret = kstrtoull(p, 16, &ull);
+                       if (ret) {
+                               pr_warn("invalid id_ext parameter '%s'\n", p);
+                               kfree(p);
+                               goto out;
+                       }
+                       target->id_ext = cpu_to_be64(ull);
                        kfree(p);
                        break;
 
@@ -3145,7 +3152,13 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
                                ret = -ENOMEM;
                                goto out;
                        }
-                       target->ioc_guid = cpu_to_be64(simple_strtoull(p, NULL, 16));
+                       ret = kstrtoull(p, 16, &ull);
+                       if (ret) {
+                               pr_warn("invalid ioc_guid parameter '%s'\n", p);
+                               kfree(p);
+                               goto out;
+                       }
+                       target->ioc_guid = cpu_to_be64(ull);
                        kfree(p);
                        break;
 
@@ -3181,7 +3194,13 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
                                ret = -ENOMEM;
                                goto out;
                        }
-                       target->service_id = cpu_to_be64(simple_strtoull(p, NULL, 16));
+                       ret = kstrtoull(p, 16, &ull);
+                       if (ret) {
+                               pr_warn("bad service_id parameter '%s'\n", p);
+                               kfree(p);
+                               goto out;
+                       }
+                       target->service_id = cpu_to_be64(ull);
                        kfree(p);
                        break;
 
@@ -3235,7 +3254,13 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
                                ret = -ENOMEM;
                                goto out;
                        }
-                       target->initiator_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
+                       ret = kstrtoull(p, 16, &ull);
+                       if (ret) {
+                               pr_warn("bad initiator_ext value '%s'\n", p);
+                               kfree(p);
+                               goto out;
+                       }
+                       target->initiator_ext = cpu_to_be64(ull);
                        kfree(p);
                        break;