*/
        if (strlen(dev->blk_symlink_name) && try_module_get(THIS_MODULE)) {
                sysfs_remove_link(rnbd_devs_kobj, dev->blk_symlink_name);
+               kfree(dev->blk_symlink_name);
                module_put(THIS_MODULE);
        }
 }
 static int rnbd_clt_add_dev_symlink(struct rnbd_clt_dev *dev)
 {
        struct kobject *gd_kobj = &disk_to_dev(dev->gd)->kobj;
-       int ret;
+       int ret, len;
+
+       len = strlen(dev->pathname) + strlen(dev->sess->sessname) + 2;
+       dev->blk_symlink_name = kzalloc(len, GFP_KERNEL);
+       if (!dev->blk_symlink_name) {
+               rnbd_clt_err(dev, "Failed to allocate memory for blk_symlink_name\n");
+               goto out_err;
+       }
 
        ret = rnbd_clt_get_path_name(dev, dev->blk_symlink_name,
-                                     sizeof(dev->blk_symlink_name));
+                                     len);
        if (ret) {
                rnbd_clt_err(dev, "Failed to get /sys/block symlink path, err: %d\n",
                              ret);
 
        ida_simple_remove(&index_ida, dev->clt_device_id);
        mutex_unlock(&ida_lock);
        kfree(dev->hw_queues);
+       kfree(dev->pathname);
        rnbd_clt_put_sess(dev->sess);
        mutex_destroy(&dev->lock);
        kfree(dev);
                       pathname, sess->sessname, ret);
                goto out_queues;
        }
+
+       dev->pathname = kzalloc(strlen(pathname) + 1, GFP_KERNEL);
+       if (!dev->pathname) {
+               ret = -ENOMEM;
+               goto out_queues;
+       }
+       strlcpy(dev->pathname, pathname, strlen(pathname) + 1);
+
        dev->clt_device_id      = ret;
        dev->sess               = sess;
        dev->access_mode        = access_mode;
-       strlcpy(dev->pathname, pathname, sizeof(dev->pathname));
        mutex_init(&dev->lock);
        refcount_set(&dev->refcount, 1);
        dev->dev_state = DEV_STATE_INIT;
                        continue;
                mutex_lock(&sess->lock);
                list_for_each_entry(dev, &sess->devs_list, list) {
-                       if (!strncmp(dev->pathname, pathname,
-                                    sizeof(dev->pathname))) {
+                       if (strlen(dev->pathname) == strlen(pathname) &&
+                           !strcmp(dev->pathname, pathname)) {
                                found = true;
                                break;
                        }
 
        u32                     clt_device_id;
        struct mutex            lock;
        enum rnbd_clt_dev_state dev_state;
-       char                    pathname[NAME_MAX];
+       char                    *pathname;
        enum rnbd_access_mode   access_mode;
        bool                    read_only;
        bool                    rotational;
        struct list_head        list;
        struct gendisk          *gd;
        struct kobject          kobj;
-       char                    blk_symlink_name[NAME_MAX];
+       char                    *blk_symlink_name;
        refcount_t              refcount;
        struct work_struct      unmap_on_rmmod_work;
 };