[lvm-devel] shared segtypes loading

dustin at v.igoro.us dustin at v.igoro.us
Wed Feb 7 22:15:41 UTC 2007


I'm new to this list, but a longtime user of lvm.  My brief googling for
this problem turned up nothing, but if it has been discussed before,
please tell me to RTFA and I'll look harder.

I believe I may have found a bug in the dynamic loading of segtypes in
toolcontext.c.  I've posted a bunch of details at
  http://bugs.gentoo.org/show_bug.cgi?id=131662
but I'll summarize here to conserve your time.

When segtypes are loaded dynamically, _init_segtypes first adds them to
cmd->segtypes:

        list_add(&cmd->segtypes, &segtype->list);

and then iterates over that same list, looking for a duplicate name:

        list_iterate_safe(sgtl, tmp, &cmd->segtypes) {
                segtype2 = list_item(sgtl, struct segment_type);
                if (!strcmp(segtype2->name, segtype->name)) {
                        log_error("Duplicate segment type %s: "
                                  ...

from my understanding, under any circumstances that this code is executed, at
some point segtype2 == segtype, and thus the strcmp() returns zero.

I fixed this locally with a patch (attached to the above Gentoo ticket) tht
just moves the list_add() below the duplicate check.  This seems effective, but
the would-never-have-worked nature of this bug (and age of the relevant code)
makes me suspect I'm missing something.

Dustin




More information about the lvm-devel mailing list