On Sun, Apr 20, 2008 at 11:20:56PM +0300, Sami Liedes wrote:
> 
> The problem is still the same, one grub_strstr() that you missed:
> [...]
> 315
> 316       p = grub_strstr (q, "id = \"") + sizeof ("id = \"") - 1;

Ok, let's see if we get it right this time.  Please, could you test the
attached patch?

-- 
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call… if you are unable to speak?
(as seen on /.)
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -urp ../grub2/disk/lvm.c ./disk/lvm.c
--- ../grub2/disk/lvm.c	2008-04-17 16:08:04.000000000 +0200
+++ ./disk/lvm.c	2008-04-30 23:16:16.000000000 +0200
@@ -313,7 +313,10 @@ grub_lvm_scan_device (const char *name)
   grub_memcpy (vgname, p, vgname_len);
   vgname[vgname_len] = '\0';
 
-  p = grub_strstr (q, "id = \"") + sizeof ("id = \"") - 1;
+  p = grub_strstr (q, "id = \"");
+  if (p == NULL)
+    goto fail3;
+  p += sizeof ("id = \"") - 1;
   grub_memcpy (vg_id, p, GRUB_LVM_ID_STRLEN);
   vg_id[GRUB_LVM_ID_STRLEN] = '\0';
 
@@ -329,16 +332,13 @@ grub_lvm_scan_device (const char *name)
 	 whole volume group structure. */
       vg = grub_malloc (sizeof (*vg));
       if (! vg)
-	{
-	  grub_free (vgname);
-	  goto fail;
-	}
+	goto fail3;
       vg->name = vgname;
       grub_memcpy (vg->id, vg_id, GRUB_LVM_ID_STRLEN+1);
 
       vg->extent_size = grub_lvm_getvalue (&p, "extent_size = ");
       if (p == NULL)
-	goto fail2;
+	goto fail4;
 
       vg->lvs = NULL;
       vg->pvs = NULL;
@@ -390,7 +390,7 @@ grub_lvm_scan_device (const char *name)
 	    pvs_fail:
 	      grub_free (pv->name);
 	      grub_free (pv);
-	      goto fail2;
+	      goto fail4;
 	    }
 	}
 
@@ -510,7 +510,7 @@ grub_lvm_scan_device (const char *name)
 		lvs_segment_fail2:
 		  grub_free (seg->stripes);
 		lvs_segment_fail:
-		  goto fail2;
+		  goto fail4;
 		}
 
 	      lv->number = lv_count++;
@@ -527,7 +527,7 @@ grub_lvm_scan_device (const char *name)
 	    lvs_fail:
 	      grub_free (lv->name);
 	      grub_free (lv);
-	      goto fail2;
+	      goto fail4;
 	    }
 	}
     }
@@ -548,6 +548,10 @@ grub_lvm_scan_device (const char *name)
 	  }
       }
 
+ fail4:
+  grub_free (vg);
+ fail3:
+  grub_free (vgname);
  fail2:
   grub_free (metadatabuf);
  fail:

Reply via email to