瀏覽代碼

增加对read和write的空间校验

fslongjin 2 年之前
父節點
當前提交
7598f63383
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      kernel/syscall/syscall.c

+ 7 - 0
kernel/syscall/syscall.c

@@ -169,6 +169,10 @@ uint64_t sys_read(struct pt_regs *regs)
     void *buf = (void *)regs->r9;
     int64_t count = (int64_t)regs->r10;
 
+    // 校验buf的空间范围
+    if(SYSCALL_FROM_USER(regs) && (!verify_area(buf, count)))    
+        return -EPERM;  
+    
     // kdebug("sys read: fd=%d", fd_num);
 
     // 校验文件描述符范围
@@ -205,6 +209,9 @@ uint64_t sys_write(struct pt_regs *regs)
     void *buf = (void *)regs->r9;
     int64_t count = (int64_t)regs->r10;
 
+    // 校验buf的空间范围
+    if(SYSCALL_FROM_USER(regs) && (!verify_area(buf, count)))    
+        return -EPERM;  
     kdebug("sys write: fd=%d", fd_num);
 
     // 校验文件描述符范围