tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: c3d8f220d01220a5b253e422be407d068dc65511 commit: 19e16d220f0adbf899a652dfb1fde2e3a95153e9 neigh: support smaller retrans_time settting date: 5 months ago config: mips-randconfig-m031-20200823 (attached as .config) compiler: mipsel-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> smatch warnings: net/ipv6/ndisc.c:1362 ndisc_router_discovery() warn: unsigned 'rtime' is never less than zero. # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19e16d220f0adbf899a652dfb1fde2e3a95153e9 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 19e16d220f0adbf899a652dfb1fde2e3a95153e9 vim +/rtime +1362 net/ipv6/ndisc.c 1238 1239 if (in6_dev->if_flags & IF_RS_SENT) { 1240 /* 1241 * flag that an RA was received after an RS was sent 1242 * out on this interface. 1243 */ 1244 in6_dev->if_flags |= IF_RA_RCVD; 1245 } 1246 1247 /* 1248 * Remember the managed/otherconf flags from most recently 1249 * received RA message (RFC 2462) -- yoshfuji 1250 */ 1251 old_if_flags = in6_dev->if_flags; 1252 in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED | 1253 IF_RA_OTHERCONF)) | 1254 (ra_msg->icmph.icmp6_addrconf_managed ? 1255 IF_RA_MANAGED : 0) | 1256 (ra_msg->icmph.icmp6_addrconf_other ? 1257 IF_RA_OTHERCONF : 0); 1258 1259 if (old_if_flags != in6_dev->if_flags) 1260 send_ifinfo_notify = true; 1261 1262 if (!in6_dev->cnf.accept_ra_defrtr) { 1263 ND_PRINTK(2, info, 1264 "RA: %s, defrtr is false for dev: %s\n", 1265 __func__, skb->dev->name); 1266 goto skip_defrtr; 1267 } 1268 1269 /* Do not accept RA with source-addr found on local machine unless 1270 * accept_ra_from_local is set to true. 1271 */ 1272 net = dev_net(in6_dev->dev); 1273 if (!in6_dev->cnf.accept_ra_from_local && 1274 ipv6_chk_addr(net, &ipv6_hdr(skb)->saddr, in6_dev->dev, 0)) { 1275 ND_PRINTK(2, info, 1276 "RA from local address detected on dev: %s: default router ignored\n", 1277 skb->dev->name); 1278 goto skip_defrtr; 1279 } 1280 1281 lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime); 1282 1283 #ifdef CONFIG_IPV6_ROUTER_PREF 1284 pref = ra_msg->icmph.icmp6_router_pref; 1285 /* 10b is handled as if it were 00b (medium) */ 1286 if (pref == ICMPV6_ROUTER_PREF_INVALID || 1287 !in6_dev->cnf.accept_ra_rtr_pref) 1288 pref = ICMPV6_ROUTER_PREF_MEDIUM; 1289 #endif 1290 /* routes added from RAs do not use nexthop objects */ 1291 rt = rt6_get_dflt_router(net, &ipv6_hdr(skb)->saddr, skb->dev); 1292 if (rt) { 1293 neigh = ip6_neigh_lookup(&rt->fib6_nh->fib_nh_gw6, 1294 rt->fib6_nh->fib_nh_dev, NULL, 1295 &ipv6_hdr(skb)->saddr); 1296 if (!neigh) { 1297 ND_PRINTK(0, err, 1298 "RA: %s got default router without neighbour\n", 1299 __func__); 1300 fib6_info_release(rt); 1301 return; 1302 } 1303 } 1304 if (rt && lifetime == 0) { 1305 ip6_del_rt(net, rt); 1306 rt = NULL; 1307 } 1308 1309 ND_PRINTK(3, info, "RA: rt: %p lifetime: %d, for dev: %s\n", 1310 rt, lifetime, skb->dev->name); 1311 if (!rt && lifetime) { 1312 ND_PRINTK(3, info, "RA: adding default router\n"); 1313 1314 rt = rt6_add_dflt_router(net, &ipv6_hdr(skb)->saddr, 1315 skb->dev, pref); 1316 if (!rt) { 1317 ND_PRINTK(0, err, 1318 "RA: %s failed to add default route\n", 1319 __func__); 1320 return; 1321 } 1322 1323 neigh = ip6_neigh_lookup(&rt->fib6_nh->fib_nh_gw6, 1324 rt->fib6_nh->fib_nh_dev, NULL, 1325 &ipv6_hdr(skb)->saddr); 1326 if (!neigh) { 1327 ND_PRINTK(0, err, 1328 "RA: %s got default router without neighbour\n", 1329 __func__); 1330 fib6_info_release(rt); 1331 return; 1332 } 1333 neigh->flags |= NTF_ROUTER; 1334 } else if (rt) { 1335 rt->fib6_flags = (rt->fib6_flags & ~RTF_PREF_MASK) | RTF_PREF(pref); 1336 } 1337 1338 if (rt) 1339 fib6_set_expires(rt, jiffies + (HZ * lifetime)); 1340 if (in6_dev->cnf.accept_ra_min_hop_limit < 256 && 1341 ra_msg->icmph.icmp6_hop_limit) { 1342 if (in6_dev->cnf.accept_ra_min_hop_limit <= ra_msg->icmph.icmp6_hop_limit) { 1343 in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit; 1344 fib6_metric_set(rt, RTAX_HOPLIMIT, 1345 ra_msg->icmph.icmp6_hop_limit); 1346 } else { 1347 ND_PRINTK(2, warn, "RA: Got route advertisement with lower hop_limit than minimum\n"); 1348 } 1349 } 1350 1351 skip_defrtr: 1352 1353 /* 1354 * Update Reachable Time and Retrans Timer 1355 */ 1356 1357 if (in6_dev->nd_parms) { 1358 unsigned long rtime = ntohl(ra_msg->retrans_timer); 1359 1360 if (rtime && rtime/1000 < MAX_SCHEDULE_TIMEOUT/HZ) { 1361 rtime = (rtime*HZ)/1000; > 1362 if (rtime < HZ/100) 1363 rtime = HZ/100; 1364 NEIGH_VAR_SET(in6_dev->nd_parms, RETRANS_TIME, rtime); 1365 in6_dev->tstamp = jiffies; 1366 send_ifinfo_notify = true; 1367 } 1368 1369 rtime = ntohl(ra_msg->reachable_time); 1370 if (rtime && rtime/1000 < MAX_SCHEDULE_TIMEOUT/(3*HZ)) { 1371 rtime = (rtime*HZ)/1000; 1372 1373 if (rtime < HZ/10) 1374 rtime = HZ/10; 1375 1376 if (rtime != NEIGH_VAR(in6_dev->nd_parms, BASE_REACHABLE_TIME)) { 1377 NEIGH_VAR_SET(in6_dev->nd_parms, 1378 BASE_REACHABLE_TIME, rtime); 1379 NEIGH_VAR_SET(in6_dev->nd_parms, 1380 GC_STALETIME, 3 * rtime); 1381 in6_dev->nd_parms->reachable_time = neigh_rand_reach_time(rtime); 1382 in6_dev->tstamp = jiffies; 1383 send_ifinfo_notify = true; 1384 } 1385 } 1386 } 1387 1388 /* 1389 * Send a notify if RA changed managed/otherconf flags or timer settings 1390 */ 1391 if (send_ifinfo_notify) 1392 inet6_ifinfo_notify(RTM_NEWLINK, in6_dev); 1393 1394 skip_linkparms: 1395 1396 /* 1397 * Process options. 1398 */ 1399 1400 if (!neigh) 1401 neigh = __neigh_lookup(&nd_tbl, &ipv6_hdr(skb)->saddr, 1402 skb->dev, 1); 1403 if (neigh) { 1404 u8 *lladdr = NULL; 1405 if (ndopts.nd_opts_src_lladdr) { 1406 lladdr = ndisc_opt_addr_data(ndopts.nd_opts_src_lladdr, 1407 skb->dev); 1408 if (!lladdr) { 1409 ND_PRINTK(2, warn, 1410 "RA: invalid link-layer address length\n"); 1411 goto out; 1412 } 1413 } 1414 ndisc_update(skb->dev, neigh, lladdr, NUD_STALE, 1415 NEIGH_UPDATE_F_WEAK_OVERRIDE| 1416 NEIGH_UPDATE_F_OVERRIDE| 1417 NEIGH_UPDATE_F_OVERRIDE_ISROUTER| 1418 NEIGH_UPDATE_F_ISROUTER, 1419 NDISC_ROUTER_ADVERTISEMENT, &ndopts); 1420 } 1421 1422 if (!ipv6_accept_ra(in6_dev)) { 1423 ND_PRINTK(2, info, 1424 "RA: %s, accept_ra is false for dev: %s\n", 1425 __func__, skb->dev->name); 1426 goto out; 1427 } 1428 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
.config.gz
Description: application/gzip