FAILED: patch "[PATCH] RDMA/srp: Accept again source addresses that do not have a" failed to apply to 4.19-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From bcef5b7215681250c4bf8961dfe15e9e4fef97d0 Mon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Wed, 29 May 2019 09:38:31 -0700
Subject: [PATCH] RDMA/srp: Accept again source addresses that do not have a
port number
The function srp_parse_in() is used both for parsing source address specifications and for target address specifications. Target addresses must have a port number. Having to specify a port number for source addresses is inconvenient. Make sure that srp_parse_in() supports again parsing addresses with no port number.
drivers/infiniband/ulp/srp/ib_srp.c +15 -6
@@ -3481,13 +3481,14 @@ static const match_table_t srp_opt_tokens = {* @net: [in] Network namespace. * @sa: [out] Address family, IP address and port number. * @addr_port_str: [in] IP address and port number. +* @has_port: [out] Whether or not @addr_port_str includes a port number. * * Parse the following address formats: * - IPv4: <ip_address>:<port>, e.g. 1.2.3.4:5. * - IPv6: \[<ipv6_address>\]:<port>, e.g. [1::2:3%4]:5. */ static int srp_parse_in (struct net *net,struct sockaddr_storage *sa, -const char *addr_port_str) +const char *addr_port_str,bool *has_port) {char *addr_end, *addr =kstrdup (addr_port_str,GFP_KERNEL );char *port_str;
@@ -3496,9 +3497,12 @@ static int srp_parse_in(struct net *net, struct sockaddr_storage *sa,if (!addr)return -ENOMEM ; port_str =strrchr (addr,':' ); -if (!port_str) -return -EINVAL ; - *port_str++ ='\0' ; +if (port_str &&strchr (port_str,']' )) + port_str =NULL ; +if (port_str) + *port_str++ ='\0' ; +if (has_port) + *has_port = port_str !=NULL ; ret =inet_pton_with_scope (net,AF_INET , addr, port_str, sa);if (ret && addr[0 ]) { addr_end = addr +strlen (addr) -1 ;
@@ -3520,6 +3524,7 @@ static int srp_parse_options(struct net *net, const char *buf,char *p;substring_t args[MAX_OPT_ARGS ];unsigned long long ull; +bool has_port;int opt_mask =0 ;int token;int ret = -EINVAL ;
@@ -3618,7 +3623,8 @@ static int srp_parse_options(struct net *net, const char *buf, ret = -ENOMEM ; goto out; } - ret =srp_parse_in (net, &target->rdma_cm.src.ss, p); + ret =srp_parse_in (net, &target->rdma_cm.src.ss, p, +NULL );if (ret <0 ) {pr_warn ("bad source parameter '%s'\n" , p);kfree (p);
@@ -3634,7 +3640,10 @@ static int srp_parse_options(struct net *net, const char *buf, ret = -ENOMEM ; goto out; } - ret =srp_parse_in (net, &target->rdma_cm.dst.ss, p); + ret =srp_parse_in (net, &target->rdma_cm.dst.ss, p, + &has_port); +if (!has_port) + ret = -EINVAL ;if (ret <0 ) {pr_warn ("bad dest parameter '%s'\n" , p);kfree (p);