From d33f44866d8ba73a65571bf0c42d60fd76a39d6b Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Sat, 22 May 2021 00:14:28 +0800 Subject: [PATCH] rbd: Fix the name comparison bug. Checked the definition of strncmp. If substring s1 is found in strnmp(s1, s2, len), then it will return 0. For the len value, it is better to use strcmp. Otherwise, if s1=cluster1, s2=cluster & len=strlen(s2), strncmp will return 0. But they are two different strings. For cluster names, they are different. Signed-off-by: Ziye Yang Change-Id: I15a06184d834cd1567b329d0322cd6bdea6fee4b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7991 Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Changpeng Liu Reviewed-by: Reviewed-by: Aleksey Marchuk Community-CI: Mellanox Build Bot --- module/bdev/rbd/bdev_rbd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/bdev/rbd/bdev_rbd.c b/module/bdev/rbd/bdev_rbd.c index ff981cb4e..c46d3fb22 100644 --- a/module/bdev/rbd/bdev_rbd.c +++ b/module/bdev/rbd/bdev_rbd.c @@ -256,7 +256,7 @@ bdev_rbd_get_cluster(const char *cluster_name, rados_t **cluster) pthread_mutex_lock(&g_map_bdev_rbd_cluster_mutex); STAILQ_FOREACH(entry, &g_map_bdev_rbd_cluster, link) { - if (strncmp(cluster_name, entry->name, strlen(entry->name)) == 0) { + if (strcmp(cluster_name, entry->name) == 0) { entry->ref++; *cluster = &entry->cluster; pthread_mutex_unlock(&g_map_bdev_rbd_cluster_mutex); @@ -692,7 +692,7 @@ bdev_rbd_cluster_dump_entry(const char *cluster_name, struct spdk_json_write_ctx pthread_mutex_lock(&g_map_bdev_rbd_cluster_mutex); STAILQ_FOREACH(entry, &g_map_bdev_rbd_cluster, link) { - if (strncmp(cluster_name, entry->name, strlen(entry->name))) { + if (strcmp(cluster_name, entry->name)) { continue; } if (entry->user_id) { @@ -808,7 +808,7 @@ rbd_register_cluster(const char *name, const char *user_id, const char *const *c pthread_mutex_lock(&g_map_bdev_rbd_cluster_mutex); STAILQ_FOREACH(entry, &g_map_bdev_rbd_cluster, link) { - if (strncmp(name, entry->name, strlen(entry->name)) == 0) { + if (strcmp(name, entry->name) == 0) { SPDK_ERRLOG("Cluster name=%s already exists\n", name); pthread_mutex_unlock(&g_map_bdev_rbd_cluster_mutex); return -1; @@ -907,7 +907,7 @@ bdev_rbd_unregister_cluster(const char *name) pthread_mutex_lock(&g_map_bdev_rbd_cluster_mutex); STAILQ_FOREACH(entry, &g_map_bdev_rbd_cluster, link) { - if (strncmp(name, entry->name, strlen(entry->name)) == 0) { + if (strcmp(name, entry->name) == 0) { if (entry->ref == 0) { STAILQ_REMOVE(&g_map_bdev_rbd_cluster, entry, bdev_rbd_cluster, link); rados_shutdown(entry->cluster);