]> Zhao Yanbai Git Server - minix.git/commitdiff
Kernel: use okendpt() to resolve stored endpoints
authorDavid van Moolenbroek <david@minix3.org>
Wed, 15 Aug 2012 08:50:30 +0000 (08:50 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Wed, 15 Aug 2012 08:50:30 +0000 (08:50 +0000)
This adds an integrity check at very little cost, and should stop
Coverity from flagging array overruns on the result.

kernel/arch/i386/do_iopenable.c
kernel/arch/i386/do_sdevio.c
kernel/system/do_privctl.c
kernel/system/do_schedule.c
kernel/system/do_umap_remote.c

index 2c27c2de048289e14e5ca3c942a20a8d28dc026c..680be3b86dece337d004058c09692ed9f6f812d8 100644 (file)
@@ -23,7 +23,7 @@ int do_iopenable(struct proc * caller, message * m_ptr)
 
 #if 1 /* ENABLE_USERPRIV && ENABLE_USERIOPL */
   if (m_ptr->IOP_ENDPT == SELF) {
-       proc_nr = _ENDPOINT_P(caller->p_endpoint);
+       okendpt(caller->p_endpoint, &proc_nr);
   } else if(!isokendpt(m_ptr->IOP_ENDPT, &proc_nr))
        return(EINVAL);
   enable_iop(proc_addr(proc_nr));
index d71056bea77ec3fd5451a3cd76da430fa4dd3227..23ea4fa240a926a3f73830fb91e5f34a234d2644 100644 (file)
@@ -54,7 +54,7 @@ int do_sdevio(struct proc * caller, message *m_ptr)
    * that initiated the device I/O. Kernel processes, of course, are denied.
    */
   if (proc_nr_e == SELF)
-       proc_nr = _ENDPOINT_P(caller->p_endpoint);
+       okendpt(caller->p_endpoint, &proc_nr);
   else
        if(!isokendpt(proc_nr_e, &proc_nr))
                return(EINVAL);
index d995986321a9d21128781edccbf922337de02546..d4014dfb9795d25e880c280efdc3ddbc34a1e51c 100644 (file)
@@ -44,7 +44,7 @@ int do_privctl(struct proc * caller, message * m_ptr)
    * forks. 
    */
   if (! (priv(caller)->s_flags & SYS_PROC)) return(EPERM);
-  if(m_ptr->CTL_ENDPT == SELF) proc_nr = _ENDPOINT_P(caller->p_endpoint);
+  if(m_ptr->CTL_ENDPT == SELF) okendpt(caller->p_endpoint, &proc_nr);
   else if(!isokendpt(m_ptr->CTL_ENDPT, &proc_nr)) return(EINVAL);
   rp = proc_addr(proc_nr);
 
index f5cf335a41ab9c565e2da47188215ac05f4a6a4b..799f8064fde84b1a0f959b24a4a29f4e58468849 100644 (file)
@@ -14,7 +14,7 @@ int do_schedule(struct proc * caller, message * m_ptr)
        if (!isokendpt(m_ptr->SCHEDULING_ENDPOINT, &proc_nr))
                return EINVAL;
 
-       p = proc_addr(_ENDPOINT_P(m_ptr->SCHEDULING_ENDPOINT));
+       p = proc_addr(proc_nr);
 
        /* Only this process' scheduler can schedule it */
        if (caller != p->p_scheduler)
index 57dad9af6b383af854d2f58ab41eff99a0108650..9d0b4065e4157107906defc31310d8cb2686c0f7 100644 (file)
@@ -38,7 +38,7 @@ int do_umap_remote(struct proc * caller, message * m_ptr)
 
   /* Verify process number. */
   if (endpt == SELF)
-       proc_nr = _ENDPOINT_P(caller->p_endpoint);
+       okendpt(caller->p_endpoint, &proc_nr);
   else
        if (! isokendpt(endpt, &proc_nr))
                return(EINVAL);