uci: reset uci_ptr flags when merging set operations
In some cases, e.g. when subsequently setting multiple empty option values, uci_set() might free the section pointer of the given reused uci_ptr structure without zeroing it, leading to a use-after-free on processing subsequent options. Avoid this issue by clearing the lookup pointer flags in order to prevent uci_set() from incorrectly branching into a uci_delete() operation leading to the freeing of the section member. Ref: http://lists.infradead.org/pipermail/openwrt-devel/2019-October/019592.html Reported-by: Daniel Danzberger <daniel@dd-wrt.com> Suggested-by: Yousong Zhou <yszhou4tech@gmail.com> Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
37aa9196b6
commit
bd0ed25214
1 changed files with 1 additions and 0 deletions
1
uci.c
1
uci.c
|
@ -817,6 +817,7 @@ rpc_uci_merge_set(struct blob_attr *opt, struct uci_ptr *ptr)
|
||||||
struct blob_attr *cur;
|
struct blob_attr *cur;
|
||||||
int rem, rv;
|
int rem, rv;
|
||||||
|
|
||||||
|
ptr->flags = 0;
|
||||||
ptr->o = NULL;
|
ptr->o = NULL;
|
||||||
ptr->option = blobmsg_name(opt);
|
ptr->option = blobmsg_name(opt);
|
||||||
ptr->value = NULL;
|
ptr->value = NULL;
|
||||||
|
|
Loading…
Reference in a new issue