Re: [PATCH 1/2] scsi: target: add extract_param_str() helper
Lee Duncan <[email protected]> Wed, 3 Jun 2026 09:30:57 -0700
| Newsgroups | org.kernel.vger.target-devel,org.kernel.vger.linux-scsi |
|---|---|
| Message-ID | <CAPj3X_XbHq3W0yozq6LWMom-m2jcWeGiwK=cbJKyns9UXEFeog@mail.gmail.com> |
On Tue, Jun 2, 2026 at 5:04 AM David Disseldorp <[email protected]> wrote: > > The existing extract_param() helper, detects and strips any hex (0x/0X) > or base64 (0b/0B). This makes sense for some parameters, but not strings > such as CHAP_N. > > Signed-off-by: David Disseldorp <[email protected]> > --- > drivers/target/iscsi/iscsi_target_nego.c | 37 ++++++++++++++++++++++++ > drivers/target/iscsi/iscsi_target_nego.h | 1 + > 2 files changed, 38 insertions(+) > > diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c > index b03ed154ca34e..53b17d3cc86c3 100644 > --- a/drivers/target/iscsi/iscsi_target_nego.c > +++ b/drivers/target/iscsi/iscsi_target_nego.c > @@ -98,6 +98,43 @@ int extract_param( > return 0; > } > > +/* same as extract_param() above, but don't interpret any type-prefix */ > +int extract_param_str( > + const char *in_buf, > + const char *pattern, > + unsigned int max_length, > + char *out_buf) > +{ > + char *ptr; > + int len; > + > + if (!in_buf || !pattern || !out_buf) > + return -EINVAL; > + > + ptr = strstr(in_buf, pattern); > + if (!ptr) > + return -ENOENT; > + > + ptr = strstr(ptr, "="); > + if (!ptr) > + return -EINVAL; > + > + ptr += 1; > + len = strlen_semi(ptr); > + if (len < 0) > + return -EINVAL; > + > + if (len >= max_length) { > + pr_err("Length of input: %d exceeds max_length:" > + " %d\n", len, max_length); > + return -EINVAL; > + } > + memcpy(out_buf, ptr, len); > + out_buf[len] = '\0'; > + > + return 0; > +} > + > static struct iscsi_node_auth *iscsi_get_node_auth(struct iscsit_conn *conn) > { > struct iscsi_portal_group *tpg; > diff --git a/drivers/target/iscsi/iscsi_target_nego.h b/drivers/target/iscsi/iscsi_target_nego.h > index e60a46d348352..6b72edd2aef2e 100644 > --- a/drivers/target/iscsi/iscsi_target_nego.h > +++ b/drivers/target/iscsi/iscsi_target_nego.h > @@ -13,6 +13,7 @@ struct iscsi_np; > extern void convert_null_to_semi(char *, int); > extern int extract_param(const char *, const char *, unsigned int, char *, > unsigned char *); > +extern int extract_param_str(const char *, const char *, unsigned int, char *); > extern int iscsi_target_check_login_request(struct iscsit_conn *, > struct iscsi_login *); > extern int iscsi_target_locate_portal(struct iscsi_np *, struct iscsit_conn *, > -- > 2.51.0 > > Reviewed-by: Lee Duncan <[email protected]>