summaryrefslogtreecommitdiff
path: root/na/kernel/uaccess.cc
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-07-10 11:31:46 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-07-10 11:31:46 +0800
commite90b72ec3082588b296956730bd2930cf8d5d671 (patch)
tree36ff6916af9b4176ea5a9662219d11e721f0b691 /na/kernel/uaccess.cc
parent1767d390fbf3d0c65389de46caf0b6d43ef3b6ad (diff)
downloadlume-e90b72ec3082588b296956730bd2930cf8d5d671.tar.gz
lume-e90b72ec3082588b296956730bd2930cf8d5d671.tar.xz
refactor: promote new architecture to repository root
Archive the deprecated implementation under lume-legacy, make the new kernel the default root-level build, and update repository entry points without changing kernel behavior.
Diffstat (limited to 'na/kernel/uaccess.cc')
-rw-r--r--na/kernel/uaccess.cc53
1 files changed, 0 insertions, 53 deletions
diff --git a/na/kernel/uaccess.cc b/na/kernel/uaccess.cc
deleted file mode 100644
index 14c5fb7..0000000
--- a/na/kernel/uaccess.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* Copyright (C) 2026 Richard Qin */
-
-/*
- * User-Kernel Memory Copy — Phase 3 (Exception Tables)
- *
- * Validates user pointers by checking they fall within user address space
- * (below KERNEL_VA_BASE). Uses assembly-level safe copy functions that
- * integrate with the kernel's Exception Table mechanism.
- *
- * Reference: docs/specs/syscall.md §8
- */
-
-#include <lume/uaccess.h>
-#include <lume/task.h>
-#include <lume/errno.h>
-#include <lume/config.h>
-#include <lume/mm_layout.h>
-
-extern "C" int __uaccess_memcpy(void* dst, const void* src, uint64 len);
-extern "C" int64 __uaccess_strncpy(char* dst, const char* src, uint64 max_len);
-
-int copy_from_user(void* kernel_dst, uint64 user_src, uint64 len)
-{
- if (len == 0) return 0;
- if (!is_user_range(user_src, len)) return -EFAULT;
-
- return __uaccess_memcpy(kernel_dst, reinterpret_cast<const void*>(user_src), len);
-}
-
-int copy_to_user(uint64 user_dst, const void* kernel_src, uint64 len)
-{
- if (len == 0) return 0;
- if (!is_user_range(user_dst, len)) return -EFAULT;
-
- return __uaccess_memcpy(reinterpret_cast<void*>(user_dst), kernel_src, len);
-}
-
-int64 strncpy_from_user(char* kernel_dst, uint64 user_src, uint64 max_len)
-{
- if (!is_user_range(user_src, 1)) return -EFAULT;
-
- /* We must also check that the string does not cross into kernel space.
- This is safely handled by the assembly routine which will fault if it hits
- an unmapped page. However, to strictly respect kKernelVaBase, we should
- restrict max_len to the distance to kKernelVaBase. */
- uint64 max_allowed = kKernelVaBase - user_src;
- if (max_len > max_allowed) {
- max_len = max_allowed;
- }
-
- return __uaccess_strncpy(kernel_dst, reinterpret_cast<const char*>(user_src), max_len);
-}