On Thu, 2017-02-16 at 19:43 +0200, Sagi Grimberg wrote:
> Signed-off-by: Sagi Grimberg <s...@grimberg.me>
> ---
>  drivers/target/iscsi/iscsi_target_configfs.c | 46 
> ++++++++--------------------
>  1 file changed, 12 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/target/iscsi/iscsi_target_configfs.c 
> b/drivers/target/iscsi/iscsi_target_configfs.c
> index bf40f03755dd..f30c27b83c5e 100644
> --- a/drivers/target/iscsi/iscsi_target_configfs.c
> +++ b/drivers/target/iscsi/iscsi_target_configfs.c
> @@ -167,10 +167,7 @@ static struct se_tpg_np *lio_target_call_addnptotpg(
>       struct iscsi_portal_group *tpg;
>       struct iscsi_tpg_np *tpg_np;
>       char *str, *str2, *ip_str, *port_str;
> -     struct sockaddr_storage sockaddr;
> -     struct sockaddr_in *sock_in;
> -     struct sockaddr_in6 *sock_in6;
> -     unsigned long port;
> +     struct sockaddr_storage sockaddr = { };
>       int ret;
>       char buf[MAX_PORTAL_LEN + 1];
>  
> @@ -182,21 +179,19 @@ static struct se_tpg_np *lio_target_call_addnptotpg(
>       memset(buf, 0, MAX_PORTAL_LEN + 1);
>       snprintf(buf, MAX_PORTAL_LEN + 1, "%s", name);
>  
> -     memset(&sockaddr, 0, sizeof(struct sockaddr_storage));
> -
>       str = strstr(buf, "[");
>       if (str) {
> -             const char *end;
> -
>               str2 = strstr(str, "]");
>               if (!str2) {
>                       pr_err("Unable to locate trailing \"]\""
>                               " in IPv6 iSCSI network portal address\n");
>                       return ERR_PTR(-EINVAL);
>               }
> -             str++; /* Skip over leading "[" */
> +
> +             ip_str = str + 1; /* Skip over leading "[" */
>               *str2 = '\0'; /* Terminate the unbracketed IPv6 address */
>               str2++; /* Skip over the \0 */
> +
>               port_str = strstr(str2, ":");
>               if (!port_str) {
>                       pr_err("Unable to locate \":port\""
> @@ -205,23 +200,8 @@ static struct se_tpg_np *lio_target_call_addnptotpg(
>               }
>               *port_str = '\0'; /* Terminate string for IP */
>               port_str++; /* Skip over ":" */
> -
> -             ret = kstrtoul(port_str, 0, &port);
> -             if (ret < 0) {
> -                     pr_err("kstrtoul() failed for port_str: %d\n", ret);
> -                     return ERR_PTR(ret);
> -             }
> -             sock_in6 = (struct sockaddr_in6 *)&sockaddr;
> -             sock_in6->sin6_family = AF_INET6;
> -             sock_in6->sin6_port = htons((unsigned short)port);
> -             ret = in6_pton(str, -1,
> -                             (void *)&sock_in6->sin6_addr.in6_u, -1, &end);
> -             if (ret <= 0) {
> -                     pr_err("in6_pton returned: %d\n", ret);
> -                     return ERR_PTR(-EINVAL);
> -             }
>       } else {
> -             str = ip_str = &buf[0];
> +             ip_str = &buf[0];
>               port_str = strstr(ip_str, ":");
>               if (!port_str) {
>                       pr_err("Unable to locate \":port\""
> @@ -230,17 +210,15 @@ static struct se_tpg_np *lio_target_call_addnptotpg(
>               }
>               *port_str = '\0'; /* Terminate string for IP */
>               port_str++; /* Skip over ":" */
> +     }
>  
> -             ret = kstrtoul(port_str, 0, &port);
> -             if (ret < 0) {
> -                     pr_err("kstrtoul() failed for port_str: %d\n", ret);
> -                     return ERR_PTR(ret);
> -             }
> -             sock_in = (struct sockaddr_in *)&sockaddr;
> -             sock_in->sin_family = AF_INET;
> -             sock_in->sin_port = htons((unsigned short)port);
> -             sock_in->sin_addr.s_addr = in_aton(ip_str);
> +     ret = inet_pton_with_scope(&init_net, AF_UNSPEC, ip_str,
> +                     port_str, &sockaddr);
> +     if (ret) {
> +             pr_err("malformed ip/port passed: %s\n", name);
> +             return ERR_PTR(ret);
>       }
> +
>       tpg = container_of(se_tpg, struct iscsi_portal_group, tpg_se_tpg);
>       ret = iscsit_get_tpg(tpg);
>       if (ret < 0)

A nice cleanup.

Acked-by: Nicholas Bellinger <n...@linux-iscsi.org>

Reply via email to