chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d39edfc
)
sd-rtnl: message parsing - log when ignoring message attributes
author
Tom Gundersen
<teg@jklm.no>
Mon, 24 Mar 2014 10:58:22 +0000
(11:58 +0100)
committer
Tom Gundersen
<teg@jklm.no>
Mon, 24 Mar 2014 15:59:31 +0000
(16:59 +0100)
src/libsystemd/sd-rtnl/rtnl-message.c
patch
|
blob
|
history
diff --git
a/src/libsystemd/sd-rtnl/rtnl-message.c
b/src/libsystemd/sd-rtnl/rtnl-message.c
index 330f57f64c145812034ce0f55b1706b25a4ccc75..652dc6ee8163927e002f6f7dbc219fa4794066f3 100644
(file)
--- a/
src/libsystemd/sd-rtnl/rtnl-message.c
+++ b/
src/libsystemd/sd-rtnl/rtnl-message.c
@@
-1040,7
+1040,7
@@
int rtnl_message_parse(sd_rtnl_message *m,
int max,
struct rtattr *rta,
unsigned int rt_len) {
int max,
struct rtattr *rta,
unsigned int rt_len) {
-
in
t type;
+
unsigned shor
t type;
size_t *tb;
tb = (size_t *) new0(size_t *, max);
size_t *tb;
tb = (size_t *) new0(size_t *, max);
@@
-1052,8
+1052,15
@@
int rtnl_message_parse(sd_rtnl_message *m,
for (; RTA_OK(rta, rt_len); rta = RTA_NEXT(rta, rt_len)) {
type = rta->rta_type;
for (; RTA_OK(rta, rt_len); rta = RTA_NEXT(rta, rt_len)) {
type = rta->rta_type;
- if (type <= max)
- tb[type] = (uint8_t *) rta - (uint8_t *) m->hdr;
+ if (type > max) {
+ log_debug("rtnl: message parse - ignore out of range attribute type");
+ continue;
+ }
+
+ if (tb[type])
+ log_debug("rtnl: message parse - overwriting repeated attribute");
+
+ tb[type] = (uint8_t *) rta - (uint8_t *) m->hdr;
}
*rta_offset_tb = tb;
}
*rta_offset_tb = tb;