char *buf)
 {
        int err;
-       ssize_t ret = 0;
        struct hwrng *rng;
 
        err = mutex_lock_interruptible(&rng_mutex);
                return -ERESTARTSYS;
        buf[0] = '\0';
        list_for_each_entry(rng, &rng_list, list) {
-               strncat(buf, rng->name, PAGE_SIZE - ret - 1);
-               ret += strlen(rng->name);
-               strncat(buf, " ", PAGE_SIZE - ret - 1);
-               ret++;
+               strlcat(buf, rng->name, PAGE_SIZE);
+               strlcat(buf, " ", PAGE_SIZE);
        }
-       strncat(buf, "\n", PAGE_SIZE - ret - 1);
-       ret++;
+       strlcat(buf, "\n", PAGE_SIZE);
        mutex_unlock(&rng_mutex);
 
-       return ret;
+       return strlen(buf);
 }
 
 static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR,