]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: link-config - fix corruption
authorTom Gundersen <teg@jklm.no>
Thu, 21 May 2015 13:22:07 +0000 (15:22 +0200)
committerTom Gundersen <teg@jklm.no>
Thu, 21 May 2015 13:27:24 +0000 (15:27 +0200)
The parser used for MTU and Speed expects them to be size_t, not unsigned int.

This caused a corruption in the rest of the structure.

Reported by David O Neill <david.m.oneill@intel.com>.

src/udev/net/link-config.c
src/udev/net/link-config.h

index b3e7d02543938e2d15953c3d7d8f5ce44483d551..ce038abee555cdb75b8273f77fcf3c398a0dba10 100644 (file)
@@ -174,6 +174,9 @@ static int load_link(link_config_ctx *ctx, const char *filename) {
         else
                 log_debug("Parsed configuration file %s", filename);
 
+        if (link->mtu > UINT_MAX || link->speed > UINT_MAX)
+                return -ERANGE;
+
         link->filename = strdup(filename);
 
         LIST_PREPEND(links, ctx->links, link);
@@ -376,10 +379,9 @@ int link_config_apply(link_config_ctx *ctx, link_config *config,
         if (!old_name)
                 return -EINVAL;
 
-        r = ethtool_set_speed(&ctx->ethtool_fd, old_name, config->speed / 1024,
-                              config->duplex);
+        r = ethtool_set_speed(&ctx->ethtool_fd, old_name, config->speed / 1024, config->duplex);
         if (r < 0)
-                log_warning_errno(r, "Could not set speed or duplex of %s to %u Mbps (%s): %m",
+                log_warning_errno(r, "Could not set speed or duplex of %s to %zu Mbps (%s): %m",
                                   old_name, config->speed / 1024,
                                   duplex_to_string(config->duplex));
 
@@ -458,8 +460,7 @@ int link_config_apply(link_config_ctx *ctx, link_config *config,
                         mac = config->mac;
         }
 
-        r = rtnl_set_link_properties(&ctx->rtnl, ifindex, config->alias, mac,
-                                     config->mtu);
+        r = rtnl_set_link_properties(&ctx->rtnl, ifindex, config->alias, mac, config->mtu);
         if (r < 0)
                 return log_warning_errno(r, "Could not set Alias, MACAddress or MTU on %s: %m", old_name);
 
index 34facdeb5de6239aa712f3f769ab5449358a5794..9875057e84705e99d06aac4439b49bb42005d830 100644 (file)
@@ -66,8 +66,8 @@ struct link_config {
         NamePolicy *name_policy;
         char *name;
         char *alias;
-        unsigned int mtu;
-        unsigned int speed;
+        size_t mtu;
+        size_t speed;
         Duplex duplex;
         WakeOnLan wol;