diff options
author | Tom Gundersen <teg@jklm.no> | 2015-05-21 15:22:07 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2015-05-21 15:27:24 +0200 |
commit | dab495dc23bf9a5ba0487a057bb594355555a0e9 (patch) | |
tree | 76ce13378476f7bc38026e6d1eba627a2df322a0 | |
parent | 3641cff2f1bce4f8d8a46ab9bb988093d45aa697 (diff) |
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@intel.com>.
-rw-r--r-- | src/udev/net/link-config.c | 11 | ||||
-rw-r--r-- | src/udev/net/link-config.h | 4 |
2 files changed, 8 insertions, 7 deletions
diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index b3e7d02543..ce038abee5 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 34facdeb5d..9875057e84 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; |