Browse Source

修正sys_select函数对nfds的处理

shaojinchun 4 years ago
parent
commit
d7a9921ad5
1 changed files with 36 additions and 12 deletions
  1. 36 12
      components/lwp/lwp_syscall.c

+ 36 - 12
components/lwp/lwp_syscall.c

@@ -417,46 +417,70 @@ int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, s
 
 
     if (readfds)
     if (readfds)
     {
     {
-        if (!lwp_data_access_ok(&lwp_self()->mmu_info, (void*)readfds, nfds * sizeof *readfds))
+        if (!lwp_data_access_ok(&lwp_self()->mmu_info, (void*)readfds, sizeof *readfds))
+        {
             return -1;
             return -1;
-        kreadfds = (fd_set *)kmem_get(nfds * sizeof *kreadfds);
+        }
+        kreadfds = (fd_set *)kmem_get(sizeof *kreadfds);
         if (!kreadfds)
         if (!kreadfds)
+        {
             goto quit;
             goto quit;
-        lwp_data_get(&lwp_self()->mmu_info, kreadfds, readfds, nfds * sizeof *kreadfds);
+        }
+        lwp_data_get(&lwp_self()->mmu_info, kreadfds, readfds, sizeof *kreadfds);
     }
     }
     if (writefds)
     if (writefds)
     {
     {
-        if (!lwp_data_access_ok(&lwp_self()->mmu_info, (void*)writefds, nfds * sizeof *writefds))
+        if (!lwp_data_access_ok(&lwp_self()->mmu_info, (void*)writefds, sizeof *writefds))
+        {
             return -1;
             return -1;
-        kwritefds = (fd_set *)kmem_get(nfds * sizeof *kwritefds);
+        }
+        kwritefds = (fd_set *)kmem_get(sizeof *kwritefds);
         if (!kwritefds)
         if (!kwritefds)
+        {
             goto quit;
             goto quit;
-        lwp_data_get(&lwp_self()->mmu_info, kwritefds, writefds, nfds * sizeof *kwritefds);
+        }
+        lwp_data_get(&lwp_self()->mmu_info, kwritefds, writefds, sizeof *kwritefds);
     }
     }
     if (exceptfds)
     if (exceptfds)
     {
     {
-        if (!lwp_data_access_ok(&lwp_self()->mmu_info, (void*)exceptfds, nfds * sizeof *exceptfds))
+        if (!lwp_data_access_ok(&lwp_self()->mmu_info, (void*)exceptfds, sizeof *exceptfds))
+        {
             return -1;
             return -1;
-        kexceptfds = (fd_set *)kmem_get(nfds * sizeof *kexceptfds);
+        }
+        kexceptfds = (fd_set *)kmem_get(sizeof *kexceptfds);
         if (!kexceptfds)
         if (!kexceptfds)
+        {
             goto quit;
             goto quit;
-        lwp_data_get(&lwp_self()->mmu_info, kexceptfds, exceptfds, nfds * sizeof *kexceptfds);
+        }
+        lwp_data_get(&lwp_self()->mmu_info, kexceptfds, exceptfds, sizeof *kexceptfds);
     }
     }
 
 
     ret = select(nfds, kreadfds, kwritefds, kexceptfds, timeout);
     ret = select(nfds, kreadfds, kwritefds, kexceptfds, timeout);
     if (kreadfds)
     if (kreadfds)
-        lwp_data_put(&lwp_self()->mmu_info, readfds, kreadfds, nfds * sizeof *kreadfds);
+    {
+        lwp_data_put(&lwp_self()->mmu_info, readfds, kreadfds, sizeof *kreadfds);
+    }
     if (kwritefds)
     if (kwritefds)
-        lwp_data_put(&lwp_self()->mmu_info, writefds, kwritefds, nfds * sizeof *kwritefds);
+    {
+        lwp_data_put(&lwp_self()->mmu_info, writefds, kwritefds, sizeof *kwritefds);
+    }
     if (kexceptfds)
     if (kexceptfds)
-        lwp_data_put(&lwp_self()->mmu_info, exceptfds, kexceptfds, nfds * sizeof *kexceptfds);
+    {
+        lwp_data_put(&lwp_self()->mmu_info, exceptfds, kexceptfds, sizeof *kexceptfds);
+    }
 quit:
 quit:
     if (kreadfds)
     if (kreadfds)
+    {
         kmem_put(kreadfds);
         kmem_put(kreadfds);
+    }
     if (kwritefds)
     if (kwritefds)
+    {
         kmem_put(kwritefds);
         kmem_put(kwritefds);
+    }
     if (kexceptfds)
     if (kexceptfds)
+    {
         kmem_put(kexceptfds);
         kmem_put(kexceptfds);
+    }
     return ret;
     return ret;
 #else
 #else
     return select(nfds, readfds, writefds, exceptfds, timeout);
     return select(nfds, readfds, writefds, exceptfds, timeout);