]> Zhao Yanbai Git Server - minix.git/commitdiff
vfs: who_p fix 50/550/3
authorBen Gras <ben@minix3.org>
Mon, 13 May 2013 19:06:12 +0000 (19:06 +0000)
committerBen Gras <ben@minix3.org>
Fri, 31 May 2013 09:28:38 +0000 (09:28 +0000)
Change-Id: I0e04b6460907f5e67f6c90b2038d296d66b9a414

servers/vfs/main.c

index d18cb752f234368a3a7ff91bfc00db0541ef4548..0bf2624f35c63440fb78d4cd71f88ead9d1fadac 100644 (file)
@@ -761,14 +761,15 @@ static void get_work()
        if (proc_p < 0 || proc_p >= NR_PROCS) fp = NULL;
        else fp = &fproc[proc_p];
 
-       if (m_in.m_type == EDEADSRCDST) return; /* Failed 'sendrec' */
+       if (m_in.m_type == EDEADSRCDST) {
+               printf("VFS: failed sendrec\n");
+               return; /* Failed 'sendrec' */
+       }
 
        /* Negative who_p is never used to access the fproc array. Negative
         * numbers (kernel tasks) are treated in a special way.
         */
-       if (who_p >= (int)(sizeof(fproc) / sizeof(struct fproc)))
-               panic("receive process out of range: %d", who_p);
-       if (who_p >= 0 && fproc[who_p].fp_endpoint == NONE) {
+       if (fp && fp->fp_endpoint == NONE) {
                printf("VFS: ignoring request from %d: NONE endpoint %d (%d)\n",
                        m_in.m_source, who_p, m_in.m_type);
                continue;
@@ -777,14 +778,13 @@ static void get_work()
        /* Internal consistency check; our mental image of process numbers and
         * endpoints must match with how the rest of the system thinks of them.
         */
-       if (who_p >= 0 && fproc[who_p].fp_endpoint != who_e) {
+       if (fp && fp->fp_endpoint != who_e) {
                if (fproc[who_p].fp_endpoint == NONE)
                        printf("slot unknown even\n");
 
-               printf("VFS: receive endpoint inconsistent (source %d, who_p "
+               panic("VFS: receive endpoint inconsistent (source %d, who_p "
                        "%d, stored ep %d, who_e %d).\n", m_in.m_source, who_p,
                        fproc[who_p].fp_endpoint, who_e);
-               panic("VFS: inconsistent endpoint ");
        }
 
        return;