Commit 7e972668 authored by John Johansen's avatar John Johansen Committed by Tim Gardner

Revert "UBUNTU: SAUCE: fixup: cleanup return handling of labels"

BugLink: http://bugs.launchpad.net/bugs/1379535

This reverts commit 90517b72df39a6cdf78d8bc50045c533d3844f73.
Signed-off-by: default avatarTim Gardner <tim.gardner@canonical.com>
parent 130e293d
...@@ -970,6 +970,9 @@ static struct aa_label *__label_merge_insert(struct aa_labelset *ls, ...@@ -970,6 +970,9 @@ static struct aa_label *__label_merge_insert(struct aa_labelset *ls,
AA_BUG(!l); AA_BUG(!l);
AA_BUG(l->size < a->size + b->size); AA_BUG(l->size < a->size + b->size);
if (a == b)
return aa_get_label(a);
label_for_each_in_merge(i, a, b, next) { label_for_each_in_merge(i, a, b, next) {
if (PROFILE_INVALID(next)) { if (PROFILE_INVALID(next)) {
l->ent[k] = aa_get_newest_profile(next); l->ent[k] = aa_get_newest_profile(next);
...@@ -1152,6 +1155,12 @@ struct aa_label *aa_label_merge(struct aa_label *a, struct aa_label *b, ...@@ -1152,6 +1155,12 @@ struct aa_label *aa_label_merge(struct aa_label *a, struct aa_label *b,
write_lock_irqsave(&ls->lock, flags); write_lock_irqsave(&ls->lock, flags);
label = __label_merge_insert(ls, new, a, b); label = __label_merge_insert(ls, new, a, b);
write_unlock_irqrestore(&ls->lock, flags); write_unlock_irqrestore(&ls->lock, flags);
if (label != new) {
/* new may not be fully setup so no put_label */
aa_label_free(new);
new = NULL;
}
aa_put_label(new); aa_put_label(new);
out: out:
aa_put_label(a); aa_put_label(a);
...@@ -1191,6 +1200,11 @@ struct aa_label *aa_label_vec_merge(struct aa_profile **vec, int len, ...@@ -1191,6 +1200,11 @@ struct aa_label *aa_label_vec_merge(struct aa_profile **vec, int len,
write_lock_irqsave(&ls->lock, flags); write_lock_irqsave(&ls->lock, flags);
label = __aa_label_insert(ls, new, false); label = __aa_label_insert(ls, new, false);
write_unlock_irqrestore(&ls->lock, flags); write_unlock_irqrestore(&ls->lock, flags);
if (label != new)
/* not fully constructed don't put */
aa_label_free(new);
else
/* extra ref */
aa_put_label(new); aa_put_label(new);
return label; return label;
...@@ -1838,22 +1852,38 @@ static struct aa_label *__label_update(struct aa_label *label) ...@@ -1838,22 +1852,38 @@ static struct aa_label *__label_update(struct aa_label *label)
/* updated label invalidated by being removed/renamed from labelset */ /* updated label invalidated by being removed/renamed from labelset */
if (invcount) { if (invcount) {
l->size -= aa_sort_and_merge_profiles(l->size, &l->ent[0]); l->size -= aa_sort_and_merge_profiles(l->size, &l->ent[0]);
if (labels_set(label) != labels_set(l)) { if (labels_set(label) == labels_set(l)) {
goto insert;
} else {
aa_label_remove(labels_set(label), label); aa_label_remove(labels_set(label), label);
write_unlock_irqrestore(&ls->lock, flags); goto other_ls_insert;
tmp = aa_label_insert(labels_set(l), l);
goto out;
} }
} else } else {
AA_BUG(labels_ns(label) != labels_ns(l)); AA_BUG(labels_ns(label) != labels_ns(l));
goto insert;
}
insert:
tmp = __aa_label_insert(labels_set(label), l, true); tmp = __aa_label_insert(labels_set(label), l, true);
if (tmp != l) {
aa_label_free(l);
l = tmp;
} else
aa_put_label(l); /* extr ref */
write_unlock_irqrestore(&ls->lock, flags); write_unlock_irqrestore(&ls->lock, flags);
out: return l;
other_ls_insert:
write_unlock_irqrestore(&ls->lock, flags);
tmp = aa_label_insert(labels_set(l), l);
if (tmp != l) {
aa_put_label(l); aa_put_label(l);
l = tmp;
} else
aa_put_label(l); /* extra ref */
return tmp; return l;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment