linux-cifs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion
@ 2022-09-11 20:57 Atte Heikkilä
  2022-09-11 20:57 ` [PATCH 2/2] ksmbd-tools: casefold utf-8 share names Atte Heikkilä
  2022-09-12 10:20 ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Namjae Jeon
  0 siblings, 2 replies; 6+ messages in thread
From: Atte Heikkilä @ 2022-09-11 20:57 UTC (permalink / raw)
  To: linux-cifs; +Cc: Atte Heikkilä

strtolower() corrupts all UTF-8 share names that have a byte in the C0
(À ISO8859-1) to DE (Þ ISO8859-1) range, since the non-ASCII part of
ISO8859-1 is incompatible with UTF-8. Prevent this by checking that a
byte is in the ASCII range with isascii(), before the conversion to
lowercase with tolower(). Properly handle case-insensitivity of UTF-8
share names by casefolding them, but fallback to ASCII lowercase
conversion on failure or if CONFIG_UNICODE is not set. Refactor to move
the share name casefolding immediately after the share name extraction.
Also, make the associated constness corrections.

Signed-off-by: Atte Heikkilä <atteh.mailbox@gmail.com>
---
 fs/ksmbd/connection.c        |  8 +++++++
 fs/ksmbd/connection.h        |  1 +
 fs/ksmbd/mgmt/share_config.c | 18 ++++-----------
 fs/ksmbd/mgmt/share_config.h |  2 +-
 fs/ksmbd/mgmt/tree_connect.c |  2 +-
 fs/ksmbd/mgmt/tree_connect.h |  2 +-
 fs/ksmbd/misc.c              | 45 +++++++++++++++++++++++++++++-------
 fs/ksmbd/misc.h              |  2 +-
 fs/ksmbd/smb2pdu.c           |  2 +-
 fs/ksmbd/unicode.h           |  3 ++-
 10 files changed, 57 insertions(+), 28 deletions(-)

diff --git a/fs/ksmbd/connection.c b/fs/ksmbd/connection.c
index 756ad631c019..12be8386446a 100644
--- a/fs/ksmbd/connection.c
+++ b/fs/ksmbd/connection.c
@@ -60,6 +60,12 @@ struct ksmbd_conn *ksmbd_conn_alloc(void)
 	conn->local_nls = load_nls("utf8");
 	if (!conn->local_nls)
 		conn->local_nls = load_nls_default();
+	if (IS_ENABLED(CONFIG_UNICODE))
+		conn->um = utf8_load(UNICODE_AGE(12, 1, 0));
+	else
+		conn->um = ERR_PTR(-EOPNOTSUPP);
+	if (IS_ERR(conn->um))
+		conn->um = NULL;
 	atomic_set(&conn->req_running, 0);
 	atomic_set(&conn->r_count, 0);
 	conn->total_credits = 1;
@@ -350,6 +356,8 @@ int ksmbd_conn_handler_loop(void *p)
 	wait_event(conn->r_count_q, atomic_read(&conn->r_count) == 0);
 
 
+	if (IS_ENABLED(CONFIG_UNICODE))
+		utf8_unload(conn->um);
 	unload_nls(conn->local_nls);
 	if (default_conn_ops.terminate_fn)
 		default_conn_ops.terminate_fn(conn);
diff --git a/fs/ksmbd/connection.h b/fs/ksmbd/connection.h
index e7f7d5707951..41d96f5cef06 100644
--- a/fs/ksmbd/connection.h
+++ b/fs/ksmbd/connection.h
@@ -46,6 +46,7 @@ struct ksmbd_conn {
 	char				*request_buf;
 	struct ksmbd_transport		*transport;
 	struct nls_table		*local_nls;
+	struct unicode_map		*um;
 	struct list_head		conns_list;
 	/* smb session 1 per user */
 	struct xarray			sessions;
diff --git a/fs/ksmbd/mgmt/share_config.c b/fs/ksmbd/mgmt/share_config.c
index c9bca1c2c834..5d039704c23c 100644
--- a/fs/ksmbd/mgmt/share_config.c
+++ b/fs/ksmbd/mgmt/share_config.c
@@ -26,7 +26,7 @@ struct ksmbd_veto_pattern {
 	struct list_head	list;
 };
 
-static unsigned int share_name_hash(char *name)
+static unsigned int share_name_hash(const char *name)
 {
 	return jhash(name, strlen(name), 0);
 }
@@ -72,7 +72,7 @@ __get_share_config(struct ksmbd_share_config *share)
 	return share;
 }
 
-static struct ksmbd_share_config *__share_lookup(char *name)
+static struct ksmbd_share_config *__share_lookup(const char *name)
 {
 	struct ksmbd_share_config *share;
 	unsigned int key = share_name_hash(name);
@@ -119,7 +119,7 @@ static int parse_veto_list(struct ksmbd_share_config *share,
 	return 0;
 }
 
-static struct ksmbd_share_config *share_config_request(char *name)
+static struct ksmbd_share_config *share_config_request(const char *name)
 {
 	struct ksmbd_share_config_response *resp;
 	struct ksmbd_share_config *share = NULL;
@@ -190,20 +190,10 @@ static struct ksmbd_share_config *share_config_request(char *name)
 	return share;
 }
 
-static void strtolower(char *share_name)
-{
-	while (*share_name) {
-		*share_name = tolower(*share_name);
-		share_name++;
-	}
-}
-
-struct ksmbd_share_config *ksmbd_share_config_get(char *name)
+struct ksmbd_share_config *ksmbd_share_config_get(const char *name)
 {
 	struct ksmbd_share_config *share;
 
-	strtolower(name);
-
 	down_read(&shares_table_lock);
 	share = __share_lookup(name);
 	if (share)
diff --git a/fs/ksmbd/mgmt/share_config.h b/fs/ksmbd/mgmt/share_config.h
index 902f2cb1963a..7f7e89ecfe61 100644
--- a/fs/ksmbd/mgmt/share_config.h
+++ b/fs/ksmbd/mgmt/share_config.h
@@ -74,7 +74,7 @@ static inline void ksmbd_share_config_put(struct ksmbd_share_config *share)
 	__ksmbd_share_config_put(share);
 }
 
-struct ksmbd_share_config *ksmbd_share_config_get(char *name);
+struct ksmbd_share_config *ksmbd_share_config_get(const char *name);
 bool ksmbd_share_veto_filename(struct ksmbd_share_config *share,
 			       const char *filename);
 #endif /* __SHARE_CONFIG_MANAGEMENT_H__ */
diff --git a/fs/ksmbd/mgmt/tree_connect.c b/fs/ksmbd/mgmt/tree_connect.c
index 97ab7987df6e..867c0286b901 100644
--- a/fs/ksmbd/mgmt/tree_connect.c
+++ b/fs/ksmbd/mgmt/tree_connect.c
@@ -17,7 +17,7 @@
 
 struct ksmbd_tree_conn_status
 ksmbd_tree_conn_connect(struct ksmbd_conn *conn, struct ksmbd_session *sess,
-			char *share_name)
+			const char *share_name)
 {
 	struct ksmbd_tree_conn_status status = {-ENOENT, NULL};
 	struct ksmbd_tree_connect_response *resp = NULL;
diff --git a/fs/ksmbd/mgmt/tree_connect.h b/fs/ksmbd/mgmt/tree_connect.h
index 71e50271dccf..0f97ddc1e39c 100644
--- a/fs/ksmbd/mgmt/tree_connect.h
+++ b/fs/ksmbd/mgmt/tree_connect.h
@@ -42,7 +42,7 @@ struct ksmbd_session;
 
 struct ksmbd_tree_conn_status
 ksmbd_tree_conn_connect(struct ksmbd_conn *conn, struct ksmbd_session *sess,
-			char *share_name);
+			const char *share_name);
 
 int ksmbd_tree_conn_disconnect(struct ksmbd_session *sess,
 			       struct ksmbd_tree_connect *tree_conn);
diff --git a/fs/ksmbd/misc.c b/fs/ksmbd/misc.c
index df991107ad2c..8316e2bf926d 100644
--- a/fs/ksmbd/misc.c
+++ b/fs/ksmbd/misc.c
@@ -7,6 +7,7 @@
 #include <linux/kernel.h>
 #include <linux/xattr.h>
 #include <linux/fs.h>
+#include <linux/unicode.h>
 
 #include "misc.h"
 #include "smb_common.h"
@@ -226,26 +227,54 @@ void ksmbd_conv_path_to_windows(char *path)
 	strreplace(path, '/', '\\');
 }
 
+static char *casefold_sharename(struct unicode_map *um, const char *name)
+{
+	char *cf_name;
+	int cf_len;
+
+	cf_name = kzalloc(KSMBD_REQ_MAX_SHARE_NAME, GFP_KERNEL);
+	if (!cf_name)
+		return ERR_PTR(-ENOMEM);
+
+	if (IS_ENABLED(CONFIG_UNICODE)) {
+		const struct qstr q_name = {.name = name, .len = strlen(name)};
+
+		if (!um)
+			goto out_ascii;
+
+		cf_len = utf8_casefold(um, &q_name, cf_name,
+				       KSMBD_REQ_MAX_SHARE_NAME);
+		if (cf_len < 0)
+			goto out_ascii;
+
+		return cf_name;
+	}
+
+out_ascii:
+	cf_len = strscpy(cf_name, name, KSMBD_REQ_MAX_SHARE_NAME);
+	if (cf_len < 0)
+		return ERR_PTR(-E2BIG);
+
+	for (; *cf_name; ++cf_name)
+		*cf_name = isascii(*cf_name) ? tolower(*cf_name) : *cf_name;
+	return cf_name - cf_len;
+}
+
 /**
  * ksmbd_extract_sharename() - get share name from tree connect request
  * @treename:	buffer containing tree name and share name
  *
  * Return:      share name on success, otherwise error
  */
-char *ksmbd_extract_sharename(char *treename)
+char *ksmbd_extract_sharename(struct unicode_map *um, const char *treename)
 {
-	char *name = treename;
-	char *dst;
-	char *pos = strrchr(name, '\\');
+	const char *name = treename, *pos = strrchr(name, '\\');
 
 	if (pos)
 		name = (pos + 1);
 
 	/* caller has to free the memory */
-	dst = kstrdup(name, GFP_KERNEL);
-	if (!dst)
-		return ERR_PTR(-ENOMEM);
-	return dst;
+	return casefold_sharename(um, name);
 }
 
 /**
diff --git a/fs/ksmbd/misc.h b/fs/ksmbd/misc.h
index aae2a252945f..fbb7db560a28 100644
--- a/fs/ksmbd/misc.h
+++ b/fs/ksmbd/misc.h
@@ -20,7 +20,7 @@ int get_nlink(struct kstat *st);
 void ksmbd_conv_path_to_unix(char *path);
 void ksmbd_strip_last_slash(char *path);
 void ksmbd_conv_path_to_windows(char *path);
-char *ksmbd_extract_sharename(char *treename);
+char *ksmbd_extract_sharename(struct unicode_map *um, const char *treename);
 char *convert_to_unix_name(struct ksmbd_share_config *share, const char *name);
 
 #define KSMBD_DIR_INFO_ALIGNMENT	8
diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 19412ac701a6..62a8da520810 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -1883,7 +1883,7 @@ int smb2_tree_connect(struct ksmbd_work *work)
 		goto out_err1;
 	}
 
-	name = ksmbd_extract_sharename(treename);
+	name = ksmbd_extract_sharename(conn->um, treename);
 	if (IS_ERR(name)) {
 		status.ret = KSMBD_TREE_CONN_STATUS_ERROR;
 		goto out_err1;
diff --git a/fs/ksmbd/unicode.h b/fs/ksmbd/unicode.h
index 5593024230ae..076f6034a789 100644
--- a/fs/ksmbd/unicode.h
+++ b/fs/ksmbd/unicode.h
@@ -24,6 +24,7 @@
 #include <asm/byteorder.h>
 #include <linux/types.h>
 #include <linux/nls.h>
+#include <linux/unicode.h>
 
 #define  UNIUPR_NOLOWER		/* Example to not expand lower case tables */
 
@@ -69,7 +70,7 @@ char *smb_strndup_from_utf16(const char *src, const int maxlen,
 			     const struct nls_table *codepage);
 int smbConvertToUTF16(__le16 *target, const char *source, int srclen,
 		      const struct nls_table *cp, int mapchars);
-char *ksmbd_extract_sharename(char *treename);
+char *ksmbd_extract_sharename(struct unicode_map *um, const char *treename);
 #endif
 
 /*
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] ksmbd-tools: casefold utf-8 share names
  2022-09-11 20:57 [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Atte Heikkilä
@ 2022-09-11 20:57 ` Atte Heikkilä
  2022-09-12 10:20 ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Namjae Jeon
  1 sibling, 0 replies; 6+ messages in thread
From: Atte Heikkilä @ 2022-09-11 20:57 UTC (permalink / raw)
  To: linux-cifs; +Cc: Atte Heikkilä

Match kernel space behavior regarding case-insensitivity of UTF-8 share
names by first NFD(I) normalizing and then casefolding them. Fallback
to ASCII lowercase conversion on failure.

Signed-off-by: Atte Heikkilä <atteh.mailbox@gmail.com>
---
 addshare/addshare.c        |  6 +++---
 include/management/share.h |  1 +
 lib/config_parser.c        |  2 +-
 lib/management/share.c     | 19 +++++++++++++++++++
 mountd/rpc_srvsvc.c        |  2 +-
 5 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/addshare/addshare.c b/addshare/addshare.c
index f5894c9..be4c67d 100644
--- a/addshare/addshare.c
+++ b/addshare/addshare.c
@@ -123,17 +123,17 @@ int main(int argc, char *argv[])
 		switch (c) {
 		case 'a':
 			g_free(share);
-			share = g_ascii_strdown(optarg, strlen(optarg));
+			share = shm_casefold_share_name(optarg, strlen(optarg));
 			command = command_add_share;
 			break;
 		case 'd':
 			g_free(share);
-			share = g_ascii_strdown(optarg, strlen(optarg));
+			share = shm_casefold_share_name(optarg, strlen(optarg));
 			command = command_del_share;
 			break;
 		case 'u':
 			g_free(share);
-			share = g_ascii_strdown(optarg, strlen(optarg));
+			share = shm_casefold_share_name(optarg, strlen(optarg));
 			command = command_update_share;
 			break;
 		case 'o':
diff --git a/include/management/share.h b/include/management/share.h
index 306cca5..bb3952c 100644
--- a/include/management/share.h
+++ b/include/management/share.h
@@ -141,6 +141,7 @@ static inline int test_share_flag(struct ksmbd_share *share, int flag)
 
 struct ksmbd_share *get_ksmbd_share(struct ksmbd_share *share);
 void put_ksmbd_share(struct ksmbd_share *share);
+char *shm_casefold_share_name(char *name, size_t len);
 struct ksmbd_share *shm_lookup_share(char *name);
 
 struct smbconf_group;
diff --git a/lib/config_parser.c b/lib/config_parser.c
index 2dbc0c7..a1dc85c 100644
--- a/lib/config_parser.c
+++ b/lib/config_parser.c
@@ -93,7 +93,7 @@ static int add_new_group(char *line)
 	while (*end && *end != ']')
 		end = g_utf8_find_next_char(end, NULL);
 
-	name = g_ascii_strdown(begin + 1, end - begin - 1);
+	name = shm_casefold_share_name(begin + 1, end - begin - 1);
 	if (!name)
 		goto out_free;
 
diff --git a/lib/management/share.c b/lib/management/share.c
index 22e6a83..fc09ea8 100644
--- a/lib/management/share.c
+++ b/lib/management/share.c
@@ -236,6 +236,25 @@ int shm_init(void)
 	return 0;
 }
 
+char *shm_casefold_share_name(char *name, size_t len)
+{
+	char *nfdi_name, *nfdicf_name;
+
+	nfdi_name = g_utf8_normalize(name, len, G_NORMALIZE_NFD);
+	if (!nfdi_name)
+		goto out_ascii;
+
+	nfdicf_name = g_utf8_casefold(nfdi_name, strlen(nfdi_name));
+	if (!nfdicf_name)
+		goto out_ascii;
+
+	g_free(nfdi_name);
+	return nfdicf_name;
+out_ascii:
+	g_free(nfdi_name);
+	return g_ascii_strdown(name, len);
+}
+
 static struct ksmbd_share *__shm_lookup_share(char *name)
 {
 	return g_hash_table_lookup(shares_table, name);
diff --git a/mountd/rpc_srvsvc.c b/mountd/rpc_srvsvc.c
index 38b984b..8716c34 100644
--- a/mountd/rpc_srvsvc.c
+++ b/mountd/rpc_srvsvc.c
@@ -171,7 +171,7 @@ static int srvsvc_share_get_info_invoke(struct ksmbd_rpc_pipe *pipe,
 	int ret;
 	gchar *share_name;
 
-	share_name = g_ascii_strdown(STR_VAL(hdr->share_name),
+	share_name = shm_casefold_share_name(STR_VAL(hdr->share_name),
 			strlen(STR_VAL(hdr->share_name)));
 	share = shm_lookup_share(share_name);
 	if (!share)
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion
  2022-09-11 20:57 [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Atte Heikkilä
  2022-09-11 20:57 ` [PATCH 2/2] ksmbd-tools: casefold utf-8 share names Atte Heikkilä
@ 2022-09-12 10:20 ` Namjae Jeon
  2022-09-12 16:14   ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii Atte Heikkilä
  1 sibling, 1 reply; 6+ messages in thread
From: Namjae Jeon @ 2022-09-12 10:20 UTC (permalink / raw)
  To: Atte Heikkilä; +Cc: linux-cifs

2022-09-12 5:57 GMT+09:00, Atte Heikkilä <atteh.mailbox@gmail.com>:
Hi Atte,

[snip]
> +static char *casefold_sharename(struct unicode_map *um, const char *name)
> +{
> +	char *cf_name;
> +	int cf_len;
> +
> +	cf_name = kzalloc(KSMBD_REQ_MAX_SHARE_NAME, GFP_KERNEL);
> +	if (!cf_name)
> +		return ERR_PTR(-ENOMEM);
> +
> +	if (IS_ENABLED(CONFIG_UNICODE)) {
> +		const struct qstr q_name = {.name = name, .len = strlen(name)};
> +
> +		if (!um)
> +			goto out_ascii;
Minor nit, Wouldn't it be simpler to change something like the one below?

+	if (IS_ENABLED(CONFIG_UNICODE) && um) {

Thanks!
> +
> +		cf_len = utf8_casefold(um, &q_name, cf_name,
> +				       KSMBD_REQ_MAX_SHARE_NAME);
> +		if (cf_len < 0)
> +			goto out_ascii;
> +
> +		return cf_name;
> +	}
> +
> +out_ascii:
> +	cf_len = strscpy(cf_name, name, KSMBD_REQ_MAX_SHARE_NAME);
> +	if (cf_len < 0)
> +		return ERR_PTR(-E2BIG);
> +
> +	for (; *cf_name; ++cf_name)
> +		*cf_name = isascii(*cf_name) ? tolower(*cf_name) : *cf_name;
> +	return cf_name - cf_len;
> +}
> +

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii
  2022-09-12 10:20 ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Namjae Jeon
@ 2022-09-12 16:14   ` Atte Heikkilä
  2022-09-13 14:04     ` Namjae Jeon
  0 siblings, 1 reply; 6+ messages in thread
From: Atte Heikkilä @ 2022-09-12 16:14 UTC (permalink / raw)
  To: linkinjeon; +Cc: atteh.mailbox, linux-cifs

On Mon, 12 Sep 2022 19:20:54 +0900, Namjae Jeon wrote:
>2022-09-12 5:57 GMT+09:00, Atte Heikkilä <atteh.mailbox@gmail.com>:
>Hi Atte,
>
>[snip]
>> +static char *casefold_sharename(struct unicode_map *um, const char *name>)
>> +{
>> +	char *cf_name;
>> +	int cf_len;
>> +
>> +	cf_name = kzalloc(KSMBD_REQ_MAX_SHARE_NAME, GFP_KERNEL);
>> +	if (!cf_name)
>> +		return ERR_PTR(-ENOMEM);
>> +
>> +	if (IS_ENABLED(CONFIG_UNICODE)) {
>> +		const struct qstr q_name = {.name = name, .len = strlen(name)};
>> +
>> +		if (!um)
>> +			goto out_ascii;
>Minor nit, Wouldn't it be simpler to change something like the one below?
>
>+	if (IS_ENABLED(CONFIG_UNICODE) && um) {

This mailing list already has a v2 patch series. Please, reply to that one.
As for your suggestion, I thought to keep the statements separate since the
block with the IS_ENABLED() macro is optimized away when CONFIG_UNICODE is
not set. I understand that the behavior is the same with your suggestion.

Thank you.

>
>Thanks!
>> +
>> +		cf_len = utf8_casefold(um, &q_name, cf_name,
>> +				       KSMBD_REQ_MAX_SHARE_NAME);
>> +		if (cf_len < 0)
>> +			goto out_ascii;
>> +
>> +		return cf_name;
>> +	}
>> +
>> +out_ascii:
>> +	cf_len = strscpy(cf_name, name, KSMBD_REQ_MAX_SHARE_NAME);
>> +	if (cf_len < 0)
>> +		return ERR_PTR(-E2BIG);
>> +
>> +	for (; *cf_name; ++cf_name)
>> +		*cf_name = isascii(*cf_name) ? tolower(*cf_name) : *cf_name;
>> +	return cf_name - cf_len;
>> +}
>> +

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii
  2022-09-12 16:14   ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii Atte Heikkilä
@ 2022-09-13 14:04     ` Namjae Jeon
  2022-09-13 17:44       ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Atte Heikkilä
  0 siblings, 1 reply; 6+ messages in thread
From: Namjae Jeon @ 2022-09-13 14:04 UTC (permalink / raw)
  To: Atte Heikkilä; +Cc: linux-cifs

2022-09-13 1:14 GMT+09:00, Atte Heikkilä <atteh.mailbox@gmail.com>:
> On Mon, 12 Sep 2022 19:20:54 +0900, Namjae Jeon wrote:
>>2022-09-12 5:57 GMT+09:00, Atte Heikkilä <atteh.mailbox@gmail.com>:
>>Hi Atte,
>>
>>[snip]
>>> +static char *casefold_sharename(struct unicode_map *um, const char
>>> *name>)
>>> +{
>>> +	char *cf_name;
>>> +	int cf_len;
>>> +
>>> +	cf_name = kzalloc(KSMBD_REQ_MAX_SHARE_NAME, GFP_KERNEL);
>>> +	if (!cf_name)
>>> +		return ERR_PTR(-ENOMEM);
>>> +
>>> +	if (IS_ENABLED(CONFIG_UNICODE)) {
>>> +		const struct qstr q_name = {.name = name, .len = strlen(name)};
>>> +
>>> +		if (!um)
>>> +			goto out_ascii;
>>Minor nit, Wouldn't it be simpler to change something like the one below?
>>
>>+	if (IS_ENABLED(CONFIG_UNICODE) && um) {
>
> This mailing list already has a v2 patch series. Please, reply to that one.
Okay, but please add cc me when you send the patch to the list.

> As for your suggestion, I thought to keep the statements separate since the
> block with the IS_ENABLED() macro is optimized away when CONFIG_UNICODE is
> not set. I understand that the behavior is the same with your suggestion.
When CONFIG_UNICODE is not set, um is not checked in my suggestion.
Please tell me why my suggestion is worse. if you are okay, I will
update it directly.(i.e. no need to send v3 patch). and please check
the use of strncasecmp() in __caseless_lookup() also.

And I need to do full test for this patches, I think it will take
about two days.
>
> Thank you.
>
>>
>>Thanks!
>>> +
>>> +		cf_len = utf8_casefold(um, &q_name, cf_name,
>>> +				       KSMBD_REQ_MAX_SHARE_NAME);
>>> +		if (cf_len < 0)
>>> +			goto out_ascii;
>>> +
>>> +		return cf_name;
>>> +	}
>>> +
>>> +out_ascii:
>>> +	cf_len = strscpy(cf_name, name, KSMBD_REQ_MAX_SHARE_NAME);
>>> +	if (cf_len < 0)
>>> +		return ERR_PTR(-E2BIG);
>>> +
>>> +	for (; *cf_name; ++cf_name)
>>> +		*cf_name = isascii(*cf_name) ? tolower(*cf_name) : *cf_name;
>>> +	return cf_name - cf_len;
>>> +}
>>> +
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion
  2022-09-13 14:04     ` Namjae Jeon
@ 2022-09-13 17:44       ` Atte Heikkilä
  0 siblings, 0 replies; 6+ messages in thread
From: Atte Heikkilä @ 2022-09-13 17:44 UTC (permalink / raw)
  To: linkinjeon; +Cc: atteh.mailbox, linux-cifs

On Tue, 13 Sep 2022 23:04:02 +0900, Namjae Jeon wrote:
>2022-09-13 1:14 GMT+09:00, Atte Heikkilä <atteh.mailbox@gmail.com>:
>>
>> This mailing list already has a v2 patch series. Please, reply to that one.
>Okay, but please add cc me when you send the patch to the list.

I sent the v2 patch to the mailing list an hour after the first one:
https://lore.kernel.org/linux-cifs/20220911215542.104935-1-atteh.mailbox@gmail.com/

Please, let's have further discussion as replies to the v2 patch series
and not this one.

>
>> As for your suggestion, I thought to keep the statements separate since the
>> block with the IS_ENABLED() macro is optimized away when CONFIG_UNICODE is
>> not set. I understand that the behavior is the same with your suggestion.
>When CONFIG_UNICODE is not set, um is not checked in my suggestion.

I didn't mean to imply that it was.

>Please tell me why my suggestion is worse. if you are okay, I will
>update it directly.(i.e. no need to send v3 patch).

I didn't mean that your suggestion is worse. Feel free to update it directly
if you'd like.

>and please check the use of strncasecmp() in __caseless_lookup() also.

I thought that the change to utf8_strncasecmp() would be out of place for
this patch series.

>
>And I need to do full test for this patches, I think it will take
>about two days.

Please do not feel inclined to hurry, considering the mistake I managed
to make in the the v1 patch series (this one you're replying to).

>>
>> Thank you.
>>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-09-13 18:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-11 20:57 [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Atte Heikkilä
2022-09-11 20:57 ` [PATCH 2/2] ksmbd-tools: casefold utf-8 share names Atte Heikkilä
2022-09-12 10:20 ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Namjae Jeon
2022-09-12 16:14   ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii Atte Heikkilä
2022-09-13 14:04     ` Namjae Jeon
2022-09-13 17:44       ` [PATCH 1/2] ksmbd: casefold utf-8 share names and fix ascii lowercase conversion Atte Heikkilä

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).