diff options
author | Tom Gundersen <teg@jklm.no> | 2014-03-24 11:58:22 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-03-24 16:59:31 +0100 |
commit | e634cd409669130f77e552d2a57c1fca08738014 (patch) | |
tree | 7e252afaffa3d9c9cb97c0a031a92d9c53523c78 /src | |
parent | d39edfc72f9296078a18014627bf0a2543b60627 (diff) |
sd-rtnl: message parsing - log when ignoring message attributes
Diffstat (limited to 'src')
-rw-r--r-- | src/libsystemd/sd-rtnl/rtnl-message.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/libsystemd/sd-rtnl/rtnl-message.c b/src/libsystemd/sd-rtnl/rtnl-message.c index 330f57f64c..652dc6ee81 100644 --- 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 type; + unsigned short type; 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; - 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; |