[systemd-commits] src/udev

Tom Gundersen tomegun at kemper.freedesktop.org
Thu May 21 06:27:33 PDT 2015


 src/udev/net/link-config.c |   11 ++++++-----
 src/udev/net/link-config.h |    4 ++--
 2 files changed, 8 insertions(+), 7 deletions(-)

New commits:
commit dab495dc23bf9a5ba0487a057bb594355555a0e9
Author: Tom Gundersen <teg at jklm.no>
Date:   Thu May 21 15:22:07 2015 +0200

    udev: link-config - fix corruption
    
    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 at intel.com>.

diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
index b3e7d02..ce038ab 100644
--- a/src/udev/net/link-config.c
+++ b/src/udev/net/link-config.c
@@ -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);
 
diff --git a/src/udev/net/link-config.h b/src/udev/net/link-config.h
index 34facde..9875057 100644
--- a/src/udev/net/link-config.h
+++ b/src/udev/net/link-config.h
@@ -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;
 



More information about the systemd-commits mailing list