diff options
Diffstat (limited to 'drivers/net/ifb.c')
-rw-r--r-- | drivers/net/ifb.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c index c8e7c8f6ba3e..f5c3598e59af 100644 --- a/drivers/net/ifb.c +++ b/drivers/net/ifb.c | |||
@@ -221,10 +221,22 @@ static int ifb_open(struct net_device *dev) | |||
221 | return 0; | 221 | return 0; |
222 | } | 222 | } |
223 | 223 | ||
224 | static int ifb_validate(struct nlattr *tb[], struct nlattr *data[]) | ||
225 | { | ||
226 | if (tb[IFLA_ADDRESS]) { | ||
227 | if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) | ||
228 | return -EINVAL; | ||
229 | if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) | ||
230 | return -EADDRNOTAVAIL; | ||
231 | } | ||
232 | return 0; | ||
233 | } | ||
234 | |||
224 | static struct rtnl_link_ops ifb_link_ops __read_mostly = { | 235 | static struct rtnl_link_ops ifb_link_ops __read_mostly = { |
225 | .kind = "ifb", | 236 | .kind = "ifb", |
226 | .priv_size = sizeof(struct ifb_private), | 237 | .priv_size = sizeof(struct ifb_private), |
227 | .setup = ifb_setup, | 238 | .setup = ifb_setup, |
239 | .validate = ifb_validate, | ||
228 | }; | 240 | }; |
229 | 241 | ||
230 | /* Number of ifb devices to be set up by this module. */ | 242 | /* Number of ifb devices to be set up by this module. */ |