bool ok_for_pinctrl;
        unsigned long flags;
 
+       memset(info, 0, sizeof(*info));
        info->line_offset = gpio_chip_hwgpio(desc);
 
        /*
 
        spin_lock_irqsave(&gpio_lock, flags);
 
-       if (desc->name) {
-               strncpy(info->name, desc->name, sizeof(info->name));
-               info->name[sizeof(info->name) - 1] = '\0';
-       } else {
-               info->name[0] = '\0';
-       }
+       if (desc->name)
+               strscpy(info->name, desc->name, sizeof(info->name));
 
-       if (desc->label) {
-               strncpy(info->consumer, desc->label, sizeof(info->consumer));
-               info->consumer[sizeof(info->consumer) - 1] = '\0';
-       } else {
-               info->consumer[0] = '\0';
-       }
+       if (desc->label)
+               strscpy(info->consumer, desc->label, sizeof(info->consumer));
 
        /*
         * Userspace only need to know that the kernel is using this GPIO so
 
                memset(&chipinfo, 0, sizeof(chipinfo));
 
-               strncpy(chipinfo.name, dev_name(&gdev->dev),
+               strscpy(chipinfo.name, dev_name(&gdev->dev),
                        sizeof(chipinfo.name));
-               chipinfo.name[sizeof(chipinfo.name)-1] = '\0';
-               strncpy(chipinfo.label, gdev->label,
+               strscpy(chipinfo.label, gdev->label,
                        sizeof(chipinfo.label));
-               chipinfo.label[sizeof(chipinfo.label)-1] = '\0';
                chipinfo.lines = gdev->ngpio;
                if (copy_to_user(ip, &chipinfo, sizeof(chipinfo)))
                        return -EFAULT;