]> Zhao Yanbai Git Server - minix.git/commitdiff
VFS: fix new signed/unsigned comparisons
authorThomas Veerman <thomas@minix3.org>
Mon, 2 Apr 2012 15:16:44 +0000 (15:16 +0000)
committerThomas Veerman <thomas@minix3.org>
Fri, 13 Apr 2012 13:00:11 +0000 (13:00 +0000)
servers/vfs/coredump.c
servers/vfs/exec.c
servers/vfs/proto.h
servers/vfs/select.c
servers/vfs/utility.c
servers/vfs/vnode.c

index b3a9737e6f3d8ab661fa7bc2f32047c812155df0..0fa1bc4d6bf2d8e1930e5e14f16e106910aa2ab8 100644 (file)
@@ -297,13 +297,18 @@ static void dump_segments(struct filp *f, Elf_Phdr phdrs[], int phnum)
        len = phdrs[i].p_memsz;
        seg_off = phdrs[i].p_vaddr;
 
-       for (off = 0; off < len; off += CLICK_SIZE) {
+       if (len > LONG_MAX) {
+               printf("VFS: segment too large to dump, truncating\n");
+               len = LONG_MAX;
+       }
+
+       for (off = 0; off < (off_t) len; off += CLICK_SIZE) {
                r = sys_vircopy(fp->fp_endpoint, D,
                        (vir_bytes) (seg_off + off),
                        SELF, D, (vir_bytes) buf,
                        (phys_bytes) CLICK_SIZE);
 
-               write_buf(f, (char *) buf, (off + CLICK_SIZE <= len) ?
+               write_buf(f, (char *) buf, (off + CLICK_SIZE <= (off_t) len) ?
                                        CLICK_SIZE : (len - off));
        }
   }
index de0c22983ab96825eeb0773e9089fc50bdcd6656..0de11270de2a529f4c7e03de43a9a4079ecff3bc 100644 (file)
@@ -523,7 +523,8 @@ int replace
  * pointers are really offsets from the start of stack.
  * Return true iff the operation succeeded.
  */
-  int offset, a0, a1;
+  int offset;
+  vir_bytes a0, a1;
   size_t old_bytes = *stk_bytes;
 
   /* Prepending arg adds at least one string and a zero byte. */
@@ -624,7 +625,8 @@ phys_bytes seg_bytes                /* how much is to be transferred? */
   assert((seg == T)||(seg == D));
 
   /* Make sure that the file is big enough */
-  if (vp->v_size < off+seg_bytes) return(EIO);
+  if (off + seg_bytes > LONG_MAX) return(EIO);
+  if ((unsigned long) vp->v_size < off+seg_bytes) return(EIO);
 
   if (seg == T) {
        /* We have to use a copy loop until safecopies support segments */
index 4091438c20c09f020607da516debbbc156053aed..3689c6c29fd2adb7cb4659ba7cc6a0080968d8fb 100644 (file)
@@ -316,7 +316,7 @@ void vmnt_unmap_by_endpt(endpoint_t proc_e);
 void check_vnode_locks(void);
 void check_vnode_locks_by_me(struct fproc *rfp);
 struct vnode *get_free_vnode(void);
-struct vnode *find_vnode(int fs_e, int numb);
+struct vnode *find_vnode(int fs_e, ino_t inode);
 void init_vnodes(void);
 int is_vnode_locked(struct vnode *vp);
 int lock_vnode(struct vnode *vp, tll_access_t locktype);
index 86dcb68802855cf086e0a1423a75796852b15e71..3b2712f671b79c2b8991352d20aa0539e87a9468 100644 (file)
@@ -145,7 +145,7 @@ int do_select(void)
   /* Verify that file descriptors are okay to select on */
   for (fd = 0; fd < nfds; fd++) {
        struct filp *f;
-       int type, ops;
+       unsigned int type, ops;
 
        /* Because the select() interface implicitly includes file descriptors
         * you might not want to select on, we have to figure out whether we're
@@ -311,7 +311,7 @@ static int is_pipe(struct filp *f)
 static int is_supported_major(struct filp *f)
 {
 /* See if this filp is a handle on a device on which we support select() */
-  int m;
+  unsigned int m;
 
   if (!(f && f->filp_vno)) return(FALSE);
   if ((f->filp_vno->v_mode & I_TYPE) != I_CHAR_SPECIAL) return(FALSE);
index 46a578264dbe1c35c3b5780e41441e90fceb4da7..dc5a55019555f68da0e0f739cca5e3d625067b9c 100644 (file)
@@ -44,7 +44,7 @@ inline int copy_name( size_t len, char *dest)
 
   if (len <= M3_STRING) {
        /* Just copy the path from the message */
-       int count = 0;
+       unsigned int count = 0;
        rpu = &dest[0];
        rpm = job_m_in.pathname;        /* contained in input message */
        for (count = 0; count <= len; count++)
index 4a9b00efdee5bbf6dcb8fd6501c2ebdcea25040b..14539e89a7114006d9d7e0b47703b5a7fdcaf545 100644 (file)
@@ -108,7 +108,7 @@ struct vnode *get_free_vnode()
 /*===========================================================================*
  *                             find_vnode                                   *
  *===========================================================================*/
-struct vnode *find_vnode(int fs_e, int ino)
+struct vnode *find_vnode(int fs_e, ino_t ino)
 {
 /* Find a specified (FS endpoint and inode number) vnode in the
  * vnode table */