chiark / gitweb /
sd-rtnl: message parsing - log when ignoring message attributes
authorTom Gundersen <teg@jklm.no>
Mon, 24 Mar 2014 10:58:22 +0000 (11:58 +0100)
committerTom Gundersen <teg@jklm.no>
Mon, 24 Mar 2014 15:59:31 +0000 (16:59 +0100)
src/libsystemd/sd-rtnl/rtnl-message.c

index 330f57f64c145812034ce0f55b1706b25a4ccc75..652dc6ee8163927e002f6f7dbc219fa4794066f3 100644 (file)
@@ -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;