]> Zhao Yanbai Git Server - minix.git/commitdiff
MFS: fixes for defects reported by Coverity
authorThomas Veerman <thomas@minix3.org>
Thu, 26 Jul 2012 15:16:11 +0000 (15:16 +0000)
committerThomas Veerman <thomas@minix3.org>
Mon, 30 Jul 2012 09:44:58 +0000 (09:44 +0000)
.use safe string copy
.fix (potential) int overflow in function return

servers/mfs/path.c
servers/mfs/stadir.c

index 73a080affee5fcd3127289eaea49edf439ace43f..31a49c80b643c0cbcd1846957a83f47a8af24977 100644 (file)
@@ -450,7 +450,7 @@ char string[MFS_NAME_MAX+1];        /* component extracted from 'old_name' */
 
   /* Special case of the string at cp is empty */
   if (len == 0) 
-       strcpy(string, ".");  /* Return "." */
+       strlcpy(string, ".", MFS_NAME_MAX + 1);  /* Return "." */
   else {
        memcpy(string, cp, len);
        string[len]= '\0';
index 24ec94e2acae435cf780cd186b9533777951daa3..5fc84ded0477caf0c802891b6947a2125e4fe8b4 100644 (file)
@@ -18,7 +18,8 @@ static blkcnt_t estimate_blocks(struct inode *rip)
  * indirect blocks is too costly for a stat call, so we disregard holes and
  * return a conservative estimation.
  */
-  unsigned int zone_size, zones, sindirs, dindirs, nr_indirs, sq_indirs;
+  unsigned int zone_size, zones;
+  blkcnt_t sindirs, dindirs, nr_indirs, sq_indirs;
 
   /* Compute the number of zones used by the file. */
   zone_size = rip->i_sp->s_block_size << rip->i_sp->s_log_zone_size;
@@ -26,16 +27,16 @@ static blkcnt_t estimate_blocks(struct inode *rip)
   zones = (rip->i_size + zone_size - 1) / zone_size;
 
   /* Compute the number of indirect blocks needed for that zone count. */
-  nr_indirs = rip->i_nindirs;
+  nr_indirs = (blkcnt_t) rip->i_nindirs;
   sq_indirs = nr_indirs * nr_indirs;
 
-  sindirs = (zones - rip->i_ndzones + nr_indirs - 1) / nr_indirs;
-  dindirs = (sindirs - 1 + sq_indirs - 1) / sq_indirs;
+  sindirs = (blkcnt_t) (zones - rip->i_ndzones + nr_indirs - 1) / nr_indirs;
+  dindirs = (blkcnt_t) (sindirs - 1 + sq_indirs - 1) / sq_indirs;
 
   /* Return the number of 512-byte blocks corresponding to the number of data
    * zones and indirect blocks.
    */
-  return (zones + sindirs + dindirs) * (zone_size / 512);
+  return((blkcnt_t) (zones + sindirs + dindirs) * (zone_size / 512));
 }
 
 /*===========================================================================*