projects
/
project
/
odhcpd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix illegal memory access
[project/odhcpd.git]
/
src
/
config.c
diff --git
a/src/config.c
b/src/config.c
index
baa8579
..
5d29173
100644
(file)
--- a/
src/config.c
+++ b/
src/config.c
@@
-254,10
+254,10
@@
err:
}
}
-int config_parse_interface(
struct blob_attr *b
, const char *name, bool overwrite)
+int config_parse_interface(
void *data, size_t len
, const char *name, bool overwrite)
{
struct blob_attr *tb[IFACE_ATTR_MAX], *c;
{
struct blob_attr *tb[IFACE_ATTR_MAX], *c;
- blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb,
blob_data(b), blob_len(b)
);
+ blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb,
data, len
);
if (tb[IFACE_ATTR_INTERFACE])
name = blobmsg_get_string(tb[IFACE_ATTR_INTERFACE]);
if (tb[IFACE_ATTR_INTERFACE])
name = blobmsg_get_string(tb[IFACE_ATTR_INTERFACE]);
@@
-284,10
+284,12
@@
int config_parse_interface(struct blob_attr *b, const char *name, bool overwrite
else if ((c = tb[IFACE_ATTR_NETWORKID]))
ifname = blobmsg_get_string(c);
else if ((c = tb[IFACE_ATTR_NETWORKID]))
ifname = blobmsg_get_string(c);
- if (!ifname)
+ if (!if
ace->ifname[0] && !if
name)
return -1;
return -1;
- strncpy(iface->ifname, ifname, sizeof(iface->ifname) - 1);
+ if (ifname)
+ strncpy(iface->ifname, ifname, sizeof(iface->ifname) - 1);
+
iface->inuse = true;
if (overwrite)
iface->inuse = true;
if (overwrite)
@@
-481,7
+483,7
@@
static int set_interface(struct uci_section *s)
{
blob_buf_init(&b, 0);
uci_to_blob(&b, s, &interface_attr_list);
{
blob_buf_init(&b, 0);
uci_to_blob(&b, s, &interface_attr_list);
- return config_parse_interface(b
.head
, s->e.name, true);
+ return config_parse_interface(b
lob_data(b.head), blob_len(b.head)
, s->e.name, true);
}
}