mirror of
https://github.com/samba-team/samba.git
synced 2025-02-24 13:57:43 +03:00
dsdb: Correctly handle memory in objectclass_attrs
el->values is caller-provided memory that should be thought of as constant, it should not be assumed to be a talloc context. Otherwise, if the caller gives constant memory or a stack pointer we will get an abort() in talloc when it expects a talloc magic in the memory preceeding the el->values. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14258 Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
parent
d3b385d596
commit
3657bbc211
@ -133,7 +133,16 @@ static int oc_auto_normalise(struct ldb_context *ldb, const struct dsdb_attribut
|
||||
for (i=0; i<el->num_values; i++) {
|
||||
struct ldb_val v;
|
||||
int ret;
|
||||
ret = attr->ldb_schema_attribute->syntax->canonicalise_fn(ldb, el->values, &el->values[i], &v);
|
||||
/*
|
||||
* We use msg->elements (owned by this module due to
|
||||
* ldb_msg_copy_shallow()) as a memory context and
|
||||
* then steal from there to the right spot if we don't
|
||||
* free it.
|
||||
*/
|
||||
ret = attr->ldb_schema_attribute->syntax->canonicalise_fn(ldb,
|
||||
msg->elements,
|
||||
&el->values[i],
|
||||
&v);
|
||||
if (ret != LDB_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
@ -156,6 +165,12 @@ static int oc_auto_normalise(struct ldb_context *ldb, const struct dsdb_attribut
|
||||
}
|
||||
|
||||
el->values[i] = v;
|
||||
|
||||
/*
|
||||
* By now el->values is a talloc pointer under
|
||||
* msg->elements and may now be used
|
||||
*/
|
||||
talloc_steal(el->values, v.data);
|
||||
}
|
||||
return LDB_SUCCESS;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user