From: Tom Gundersen Date: Sun, 27 Oct 2013 22:09:05 +0000 (+0100) Subject: udev: link-config - sanity check the ifname and mac address X-Git-Tag: v209~1771 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=2a73e0d39a9bec82c3800071e375d27164727e71;ds=sidebyside udev: link-config - sanity check the ifname and mac address --- diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index 902ed0955..bb0640589 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -20,6 +20,7 @@ ***/ #include +#include #include "link-config.h" @@ -252,6 +253,8 @@ int link_config_get(link_config_ctx *ctx, struct udev_device *device, link_confi static int rtnl_set_properties(sd_rtnl *rtnl, int ifindex, const char *name, const char *mac, unsigned int mtu) { _cleanup_sd_rtnl_message_unref_ sd_rtnl_message *message; + char new_name[IFNAMSIZ]; + struct ether_addr new_mac; bool need_update; int r; @@ -263,7 +266,8 @@ static int rtnl_set_properties(sd_rtnl *rtnl, int ifindex, const char *name, con return r; if (name) { - r = sd_rtnl_message_append(message, IFLA_IFNAME, name); + strscpy(new_name, IFNAMSIZ, name); + r = sd_rtnl_message_append(message, IFLA_IFNAME, new_name); if (r < 0) return r; @@ -271,7 +275,16 @@ static int rtnl_set_properties(sd_rtnl *rtnl, int ifindex, const char *name, con } if (mac) { - r = sd_rtnl_message_append(message, IFLA_ADDRESS, ether_aton(mac)); + r = sscanf(mac, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", + &new_mac.ether_addr_octet[0], + &new_mac.ether_addr_octet[1], + &new_mac.ether_addr_octet[2], + &new_mac.ether_addr_octet[3], + &new_mac.ether_addr_octet[4], + &new_mac.ether_addr_octet[5]); + if (r != 6) + return -EINVAL; + r = sd_rtnl_message_append(message, IFLA_ADDRESS, &new_mac); if (r < 0) return r;