static size_t strnlen_user_mvcos(size_t count, const char __user *src)
 {
+       size_t done, len, offset, len_str;
        char buf[256];
-       int rc;
-       size_t done, len, len_str;
 
        done = 0;
        do {
-               len = min(count - done, (size_t) 256);
-               rc = uaccess.copy_from_user(len, src + done, buf);
-               if (unlikely(rc == len))
+               offset = (size_t)src & ~PAGE_MASK;
+               len = min(256UL, PAGE_SIZE - offset);
+               len = min(count - done, len);
+               if (copy_from_user_mvcos(len, src, buf))
                        return 0;
-               len -= rc;
                len_str = strnlen(buf, len);
                done += len_str;
+               src += len_str;
        } while ((len_str == len) && (done < count));
        return done + 1;
 }
 static size_t strncpy_from_user_mvcos(size_t count, const char __user *src,
                                      char *dst)
 {
-       int rc;
-       size_t done, len, len_str;
+       size_t done, len, offset, len_str;
 
        done = 0;
        do {
-               len = min(count - done, (size_t) 4096);
-               rc = uaccess.copy_from_user(len, src + done, dst);
-               if (unlikely(rc == len))
+               offset = (size_t)src & ~PAGE_MASK;
+               len = min(count - done, PAGE_SIZE - offset);
+               if (copy_from_user_mvcos(len, src, dst))
                        return -EFAULT;
-               len -= rc;
                len_str = strnlen(dst, len);
                done += len_str;
+               src += len_str;
+               dst += len_str;
        } while ((len_str == len) && (done < count));
        return done;
 }