tags 432052 +pending
thanks
I found the problem. It was actually a big blkid_set_tag() which
failed to clear dev->bid_type when it should have. Thanks for the bug
report; the details you gave were very helpful in figuring out what
was going on.
This is a pretty serious bug, so I'll be doing an upload very quickly
to address this problem.
- Ted
commit 5aa195991dfa4ced7031360445901a68b58bd9a8
Author: Theodore Ts'o <[EMAIL PROTECTED]>
Date: Sat Jul 7 18:32:26 2007 -0400
Fix bug which could cause libblkid to loop forever
When revalidating a partition where there is obsolete information in
/etc/blkid.tab, we end up freeing a the type tag without clearing
dev->bid_type, causing blkid_verify() to loop forever.
Addresses-Debian-Bug: #432052
Signed-off-by: "Theodore Ts'o" <[EMAIL PROTECTED]>
diff --git a/lib/blkid/tag.c b/lib/blkid/tag.c
index 57277cd..44dd86d 100644
--- a/lib/blkid/tag.c
+++ b/lib/blkid/tag.c
@@ -132,6 +132,7 @@ int blkid_set_tag(blkid_dev dev, const char *name,
{
blkid_tag t = 0, head = 0;
char *val = 0;
+ char **dev_var = 0;
if (!dev || !name)
return -BLKID_ERR_PARAM;
@@ -139,6 +140,18 @@ int blkid_set_tag(blkid_dev dev, const char *name,
if (!(val = blkid_strndup(value, vlength)) && value)
return -BLKID_ERR_MEM;
+ /*
+ * Certain common tags are linked directly to the device struct
+ * We need to know what they are before we do anything else because
+ * the function name parameter might get freed later on.
+ */
+ if (!strcmp(name, "TYPE"))
+ dev_var = &dev->bid_type;
+ else if (!strcmp(name, "LABEL"))
+ dev_var = &dev->bid_label;
+ else if (!strcmp(name, "UUID"))
+ dev_var = &dev->bid_uuid;
+
t = blkid_find_tag_dev(dev, name);
if (!value) {
if (t)
@@ -182,12 +195,8 @@ int blkid_set_tag(blkid_dev dev, const char *name,
}
/* Link common tags directly to the device struct */
- if (!strcmp(name, "TYPE"))
- dev->bid_type = val;
- else if (!strcmp(name, "LABEL"))
- dev->bid_label = val;
- else if (!strcmp(name, "UUID"))
- dev->bid_uuid = val;
+ if (dev_var)
+ *dev_var = val;
if (dev->bid_cache)
dev->bid_cache->bic_flags |= BLKID_BIC_FL_CHANGED;
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]