Browse Source

[SCSI] gdth: fix overlapping snprintf users

Closes-bug: http://bugzilla.kernel.org/show_bug.cgi?id=13438
Closes-bug: http://bugzilla.kernel.org/show_bug.cgi?id=13437
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Alan Cox 16 years ago
parent
commit
238ddbb98c
1 changed files with 3 additions and 2 deletions
  1. 3 2
      drivers/scsi/gdth_proc.c

+ 3 - 2
drivers/scsi/gdth_proc.c

@@ -152,6 +152,7 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
                          struct Scsi_Host *host, gdth_ha_str *ha)
                          struct Scsi_Host *host, gdth_ha_str *ha)
 {
 {
     int size = 0,len = 0;
     int size = 0,len = 0;
+    int hlen;
     off_t begin = 0,pos = 0;
     off_t begin = 0,pos = 0;
     int id, i, j, k, sec, flag;
     int id, i, j, k, sec, flag;
     int no_mdrv = 0, drv_no, is_mirr;
     int no_mdrv = 0, drv_no, is_mirr;
@@ -192,11 +193,11 @@ static int gdth_get_info(char *buffer,char **start,off_t offset,int length,
     if (reserve_list[0] == 0xff)
     if (reserve_list[0] == 0xff)
         strcpy(hrec, "--");
         strcpy(hrec, "--");
     else {
     else {
-        sprintf(hrec, "%d", reserve_list[0]);
+        hlen = sprintf(hrec, "%d", reserve_list[0]);
         for (i = 1;  i < MAX_RES_ARGS; i++) {
         for (i = 1;  i < MAX_RES_ARGS; i++) {
             if (reserve_list[i] == 0xff) 
             if (reserve_list[i] == 0xff) 
                 break;
                 break;
-            sprintf(hrec,"%s,%d", hrec, reserve_list[i]);
+            hlen += snprintf(hrec + hlen , 161 - hlen, ",%d", reserve_list[i]);
         }
         }
     }
     }
     size = sprintf(buffer+len,
     size = sprintf(buffer+len,