Fix pointer confusion for nested attribute parsing
authorAndreas Henriksson <andreas@fatal.se>
Thu, 25 Jul 2013 20:26:32 +0000 (22:26 +0200)
committerMarc Fournier <marc.fournier@camptocamp.com>
Fri, 26 Jul 2013 07:36:35 +0000 (09:36 +0200)
A reference to a pointer is passed as data,
the resulting attribute payload should be stored in
the dereferenced location to return it to the caller.

src/netlink.c

index c0b60c2..aaac8c4 100644 (file)
@@ -337,7 +337,7 @@ static int link_filter_cb (const struct nlmsghdr *nlh,
 #if HAVE_TCA_STATS2
 static int qos_attr_cb (const struct nlattr *attr, void *data)
 {
-  struct gnet_stats_basic *bs = *(struct gnet_stats_basic **)data;
+  struct gnet_stats_basic **bs = (struct gnet_stats_basic **)data;
 
   /* skip unsupported attribute in user-space */
   if (mnl_attr_type_valid (attr, TCA_STATS_MAX) < 0)
@@ -345,12 +345,12 @@ static int qos_attr_cb (const struct nlattr *attr, void *data)
 
   if (mnl_attr_get_type (attr) == TCA_STATS_BASIC)
   {
-    if (mnl_attr_validate2 (attr, MNL_TYPE_UNSPEC, sizeof (*bs)) < 0)
+    if (mnl_attr_validate2 (attr, MNL_TYPE_UNSPEC, sizeof (**bs)) < 0)
     {
       ERROR ("netlink plugin: qos_attr_cb: TCA_STATS_BASIC mnl_attr_validate2 failed.");
       return MNL_CB_ERROR;
     }
-    bs = mnl_attr_get_payload (attr);
+    *bs = mnl_attr_get_payload (attr);
     return MNL_CB_STOP;
   }