Lines Matching full:new
63 struct aa_proxy *new; in aa_alloc_proxy() local
65 new = kzalloc_obj(struct aa_proxy, gfp); in aa_alloc_proxy()
66 if (new) { in aa_alloc_proxy()
67 kref_init(&new->count.count); in aa_alloc_proxy()
68 new->count.reftype = REF_PROXY; in aa_alloc_proxy()
69 rcu_assign_pointer(new->label, aa_get_label(label)); in aa_alloc_proxy()
71 return new; in aa_alloc_proxy()
75 void __aa_proxy_redirect(struct aa_label *orig, struct aa_label *new) in __aa_proxy_redirect() argument
80 AA_BUG(!new); in __aa_proxy_redirect()
85 rcu_assign_pointer(orig->proxy->label, aa_get_label(new)); in __aa_proxy_redirect()
90 static void __proxy_share(struct aa_label *old, struct aa_label *new) in __proxy_share() argument
92 struct aa_proxy *proxy = new->proxy; in __proxy_share()
94 new->proxy = aa_get_proxy(old->proxy); in __proxy_share()
95 __aa_proxy_redirect(old, new); in __proxy_share()
203 static void accum_label_info(struct aa_label *new) in accum_label_info() argument
208 AA_BUG(!new); in accum_label_info()
211 if (new->size == 1) in accum_label_info()
214 for (i = 0; i < new->size; i++) { in accum_label_info()
215 u |= new->vec[i]->label.flags & (FLAG_DEBUG1 | FLAG_DEBUG2 | in accum_label_info()
217 if (!(u & new->vec[i]->label.flags & FLAG_UNCONFINED)) in accum_label_info()
219 new->mediates |= new->vec[i]->label.mediates; in accum_label_info()
221 new->flags |= u; in accum_label_info()
399 static void label_free_or_put_new(struct aa_label *label, struct aa_label *new) in label_free_or_put_new() argument
401 if (label != new) in label_free_or_put_new()
403 aa_label_free(new); in label_free_or_put_new()
405 aa_put_label(new); in label_free_or_put_new()
428 * @proxy: proxy to use OR null if to allocate a new one
431 * Returns: new label
436 struct aa_label *new; in aa_label_alloc() local
441 new = kzalloc_flex(*new, vec, size + 1, gfp); in aa_label_alloc()
442 AA_DEBUG(DEBUG_LABEL, "%s (%p)\n", __func__, new); in aa_label_alloc()
443 if (!new) in aa_label_alloc()
446 if (!aa_label_init(new, size, gfp)) in aa_label_alloc()
450 proxy = aa_alloc_proxy(new, gfp); in aa_label_alloc()
455 /* just set new's proxy, don't redirect proxy here if it was passed in*/ in aa_label_alloc()
456 new->proxy = proxy; in aa_label_alloc()
458 return new; in aa_label_alloc()
461 kfree(new); in aa_label_alloc()
598 * @new: label to redirect to
603 static bool __label_remove(struct aa_label *label, struct aa_label *new) in __label_remove() argument
611 if (new) in __label_remove()
612 __aa_proxy_redirect(label, new); in __label_remove()
627 * __label_replace - replace @old with @new in label set
629 * @new: label to replace @old with
632 * valid ref count be held on @new
633 * Returns: true if @old was in set and replaced by @new
636 * that @new directly replaces @old position in the set (ie.
639 static bool __label_replace(struct aa_label *old, struct aa_label *new) in __label_replace() argument
645 AA_BUG(!new); in __label_replace()
647 AA_BUG(new->flags & FLAG_IN_TREE); in __label_replace()
653 rb_replace_node(&old->node, &new->node, &ls->root); in __label_replace()
655 new->flags |= FLAG_IN_TREE; in __label_replace()
656 accum_label_info(new); in __label_replace()
666 * @label: new label to insert (NOT NULL)
679 struct rb_node **new, *parent = NULL; in __label_insert() local
687 /* Figure out where to put new node */ in __label_insert()
688 new = &ls->root.rb_node; in __label_insert()
689 while (*new) { in __label_insert()
690 struct aa_label *this = rb_entry(*new, struct aa_label, node); in __label_insert()
693 parent = *new; in __label_insert()
708 new = &((*new)->rb_left); in __label_insert()
710 new = &((*new)->rb_right); in __label_insert()
713 /* Add new node and rebalance tree. */ in __label_insert()
714 rb_link_node(&label->node, parent, new); in __label_insert()
800 * aa_label_replace - replace a label @old with a new version @new
802 * @new: label replacing @old
805 * else @old was not in tree, and @new was not inserted
807 bool aa_label_replace(struct aa_label *old, struct aa_label *new) in aa_label_replace() argument
812 if (name_is_shared(old, new) && labels_ns(old) == labels_ns(new)) { in aa_label_replace()
814 if (old->proxy != new->proxy) in aa_label_replace()
815 __proxy_share(old, new); in aa_label_replace()
817 __aa_proxy_redirect(old, new); in aa_label_replace()
818 res = __label_replace(old, new); in aa_label_replace()
825 res = __label_remove(old, new); in aa_label_replace()
826 if (labels_ns(old) != labels_ns(new)) { in aa_label_replace()
828 ls = labels_set(new); in aa_label_replace()
831 l = __label_insert(ls, new, true); in aa_label_replace()
832 res = (l == new); in aa_label_replace()
873 struct aa_label *new; in vec_create_and_insert_label() local
886 new = aa_label_alloc(len, NULL, gfp); in vec_create_and_insert_label()
887 if (!new) in vec_create_and_insert_label()
891 new->vec[i] = aa_get_profile(vec[i]); in vec_create_and_insert_label()
894 label = __label_insert(ls, new, false); in vec_create_and_insert_label()
896 label_free_or_put_new(label, new); in vec_create_and_insert_label()
1028 * label_merge_insert - create a new label by merging @a and @b
1029 * @new: preallocated label to merge into (NOT NULL)
1035 * Returns: ref counted label either @new if merge is unique
1039 * NOTE: will not use @new if the merge results in @new == @a or @b
1044 static struct aa_label *label_merge_insert(struct aa_label *new, in label_merge_insert() argument
1060 AA_BUG(!new); in label_merge_insert()
1061 AA_BUG(new->size < a->size + b->size); in label_merge_insert()
1066 new->vec[k] = aa_get_newest_profile(next); in label_merge_insert()
1067 AA_BUG(!new->vec[k]->label.proxy); in label_merge_insert()
1068 AA_BUG(!new->vec[k]->label.proxy->label); in label_merge_insert()
1069 if (next->label.proxy != new->vec[k]->label.proxy) in label_merge_insert()
1074 new->vec[k++] = aa_get_profile(next); in label_merge_insert()
1077 new->size = k; in label_merge_insert()
1078 new->vec[k] = NULL; in label_merge_insert()
1081 new->size -= aa_vec_unique(&new->vec[0], new->size, in label_merge_insert()
1084 if (new->size == 1) { in label_merge_insert()
1085 label = aa_get_label(&new->vec[0]->label); in label_merge_insert()
1091 * for new->size == a->size == b->size unless a == b in label_merge_insert()
1098 ls = labels_set(new); in label_merge_insert()
1100 label = __label_insert(labels_set(new), new, false); in label_merge_insert()
1200 * aa_label_merge - attempt to insert new merged label of @a and @b
1208 * Returns: ref counted new label if successful in inserting merge of a & b
1230 struct aa_label *new; in aa_label_merge() local
1238 new = aa_label_alloc(a->size + b->size, NULL, gfp); in aa_label_merge()
1239 if (!new) in aa_label_merge()
1242 label = label_merge_insert(new, a, b); in aa_label_merge()
1243 label_free_or_put_new(label, new); in aa_label_merge()
1898 * if component specified a new ns it becomes the new base in aa_label_strn_parse()
2015 * Returns: new label that is up to date
2025 struct aa_label *new, *tmp; in __label_update() local
2033 new = aa_label_alloc(label->size, label->proxy, GFP_KERNEL); in __label_update()
2034 if (!new) in __label_update()
2045 new->vec[i] = aa_get_newest_profile(label->vec[i]); in __label_update()
2046 AA_BUG(!new->vec[i]); in __label_update()
2047 AA_BUG(!new->vec[i]->label.proxy); in __label_update()
2048 AA_BUG(!new->vec[i]->label.proxy->label); in __label_update()
2049 if (new->vec[i]->label.proxy != label->vec[i]->label.proxy) in __label_update()
2055 new->size -= aa_vec_unique(&new->vec[0], new->size, in __label_update()
2058 if (new->size == 1) { in __label_update()
2059 tmp = aa_get_label(&new->vec[0]->label); in __label_update()
2063 if (labels_set(label) != labels_set(new)) { in __label_update()
2065 tmp = aa_label_insert(labels_set(new), new); in __label_update()
2070 AA_BUG(labels_ns(label) != labels_ns(new)); in __label_update()
2072 tmp = __label_insert(labels_set(label), new, true); in __label_update()
2077 label_free_or_put_new(tmp, new); in __label_update()