@@ -2195,6 +2195,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2195
2195
if (tb [IFLA_VF_MAC ]) {
2196
2196
struct ifla_vf_mac * ivm = nla_data (tb [IFLA_VF_MAC ]);
2197
2197
2198
+ if (ivm -> vf >= INT_MAX )
2199
+ return - EINVAL ;
2198
2200
err = - EOPNOTSUPP ;
2199
2201
if (ops -> ndo_set_vf_mac )
2200
2202
err = ops -> ndo_set_vf_mac (dev , ivm -> vf ,
@@ -2206,6 +2208,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2206
2208
if (tb [IFLA_VF_VLAN ]) {
2207
2209
struct ifla_vf_vlan * ivv = nla_data (tb [IFLA_VF_VLAN ]);
2208
2210
2211
+ if (ivv -> vf >= INT_MAX )
2212
+ return - EINVAL ;
2209
2213
err = - EOPNOTSUPP ;
2210
2214
if (ops -> ndo_set_vf_vlan )
2211
2215
err = ops -> ndo_set_vf_vlan (dev , ivv -> vf , ivv -> vlan ,
@@ -2238,6 +2242,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2238
2242
if (len == 0 )
2239
2243
return - EINVAL ;
2240
2244
2245
+ if (ivvl [0 ]-> vf >= INT_MAX )
2246
+ return - EINVAL ;
2241
2247
err = ops -> ndo_set_vf_vlan (dev , ivvl [0 ]-> vf , ivvl [0 ]-> vlan ,
2242
2248
ivvl [0 ]-> qos , ivvl [0 ]-> vlan_proto );
2243
2249
if (err < 0 )
@@ -2248,6 +2254,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2248
2254
struct ifla_vf_tx_rate * ivt = nla_data (tb [IFLA_VF_TX_RATE ]);
2249
2255
struct ifla_vf_info ivf ;
2250
2256
2257
+ if (ivt -> vf >= INT_MAX )
2258
+ return - EINVAL ;
2251
2259
err = - EOPNOTSUPP ;
2252
2260
if (ops -> ndo_get_vf_config )
2253
2261
err = ops -> ndo_get_vf_config (dev , ivt -> vf , & ivf );
@@ -2266,6 +2274,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2266
2274
if (tb [IFLA_VF_RATE ]) {
2267
2275
struct ifla_vf_rate * ivt = nla_data (tb [IFLA_VF_RATE ]);
2268
2276
2277
+ if (ivt -> vf >= INT_MAX )
2278
+ return - EINVAL ;
2269
2279
err = - EOPNOTSUPP ;
2270
2280
if (ops -> ndo_set_vf_rate )
2271
2281
err = ops -> ndo_set_vf_rate (dev , ivt -> vf ,
@@ -2278,6 +2288,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2278
2288
if (tb [IFLA_VF_SPOOFCHK ]) {
2279
2289
struct ifla_vf_spoofchk * ivs = nla_data (tb [IFLA_VF_SPOOFCHK ]);
2280
2290
2291
+ if (ivs -> vf >= INT_MAX )
2292
+ return - EINVAL ;
2281
2293
err = - EOPNOTSUPP ;
2282
2294
if (ops -> ndo_set_vf_spoofchk )
2283
2295
err = ops -> ndo_set_vf_spoofchk (dev , ivs -> vf ,
@@ -2289,6 +2301,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2289
2301
if (tb [IFLA_VF_LINK_STATE ]) {
2290
2302
struct ifla_vf_link_state * ivl = nla_data (tb [IFLA_VF_LINK_STATE ]);
2291
2303
2304
+ if (ivl -> vf >= INT_MAX )
2305
+ return - EINVAL ;
2292
2306
err = - EOPNOTSUPP ;
2293
2307
if (ops -> ndo_set_vf_link_state )
2294
2308
err = ops -> ndo_set_vf_link_state (dev , ivl -> vf ,
@@ -2302,6 +2316,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2302
2316
2303
2317
err = - EOPNOTSUPP ;
2304
2318
ivrssq_en = nla_data (tb [IFLA_VF_RSS_QUERY_EN ]);
2319
+ if (ivrssq_en -> vf >= INT_MAX )
2320
+ return - EINVAL ;
2305
2321
if (ops -> ndo_set_vf_rss_query_en )
2306
2322
err = ops -> ndo_set_vf_rss_query_en (dev , ivrssq_en -> vf ,
2307
2323
ivrssq_en -> setting );
@@ -2312,6 +2328,8 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2312
2328
if (tb [IFLA_VF_TRUST ]) {
2313
2329
struct ifla_vf_trust * ivt = nla_data (tb [IFLA_VF_TRUST ]);
2314
2330
2331
+ if (ivt -> vf >= INT_MAX )
2332
+ return - EINVAL ;
2315
2333
err = - EOPNOTSUPP ;
2316
2334
if (ops -> ndo_set_vf_trust )
2317
2335
err = ops -> ndo_set_vf_trust (dev , ivt -> vf , ivt -> setting );
@@ -2322,15 +2340,18 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2322
2340
if (tb [IFLA_VF_IB_NODE_GUID ]) {
2323
2341
struct ifla_vf_guid * ivt = nla_data (tb [IFLA_VF_IB_NODE_GUID ]);
2324
2342
2343
+ if (ivt -> vf >= INT_MAX )
2344
+ return - EINVAL ;
2325
2345
if (!ops -> ndo_set_vf_guid )
2326
2346
return - EOPNOTSUPP ;
2327
-
2328
2347
return handle_vf_guid (dev , ivt , IFLA_VF_IB_NODE_GUID );
2329
2348
}
2330
2349
2331
2350
if (tb [IFLA_VF_IB_PORT_GUID ]) {
2332
2351
struct ifla_vf_guid * ivt = nla_data (tb [IFLA_VF_IB_PORT_GUID ]);
2333
2352
2353
+ if (ivt -> vf >= INT_MAX )
2354
+ return - EINVAL ;
2334
2355
if (!ops -> ndo_set_vf_guid )
2335
2356
return - EOPNOTSUPP ;
2336
2357
0 commit comments