Hi Hangbin, [auto build test WARNING on net/master] url: https://github.com/0day-ci/linux/commits/Hangbin-Liu/ipv6-should-not-return-rt-dst-error-if-it-is-prohibit-or-blk-hole-entry/20170721-204554 config: x86_64-randconfig-x003-07211556 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All warnings (new ones prefixed by >>): In file included from include/uapi/linux/stddef.h:1:0, from include/linux/stddef.h:4, from include/uapi/linux/posix_types.h:4, from include/uapi/linux/types.h:13, from include/linux/types.h:5, from include/uapi/linux/capability.h:16, from include/linux/capability.h:15, from net/ipv6/route.c:29: net/ipv6/route.c: In function 'inet6_rtm_getroute': net/ipv6/route.c:3640:38: error: 'struct netns_ipv6' has no member named 'ip6_prohibit_entry'; did you mean 'ip6_null_entry'? if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^ include/linux/compiler.h:156:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ >> net/ipv6/route.c:3640:2: note: in expansion of macro 'if' if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^~ net/ipv6/route.c:3641:21: error: 'struct netns_ipv6' has no member named 'ip6_blk_hole_entry'; did you mean 'ip6_null_entry'? rt != net->ipv6.ip6_blk_hole_entry) { ^ include/linux/compiler.h:156:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ >> net/ipv6/route.c:3640:2: note: in expansion of macro 'if' if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^~ net/ipv6/route.c:3640:38: error: 'struct netns_ipv6' has no member named 'ip6_prohibit_entry'; did you mean 'ip6_null_entry'? if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^ include/linux/compiler.h:156:42: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ >> net/ipv6/route.c:3640:2: note: in expansion of macro 'if' if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^~ net/ipv6/route.c:3641:21: error: 'struct netns_ipv6' has no member named 'ip6_blk_hole_entry'; did you mean 'ip6_null_entry'? rt != net->ipv6.ip6_blk_hole_entry) { ^ include/linux/compiler.h:156:42: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ >> net/ipv6/route.c:3640:2: note: in expansion of macro 'if' if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^~ net/ipv6/route.c:3640:38: error: 'struct netns_ipv6' has no member named 'ip6_prohibit_entry'; did you mean 'ip6_null_entry'? if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^ include/linux/compiler.h:167:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^~~~ >> net/ipv6/route.c:3640:2: note: in expansion of macro 'if' if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^~ net/ipv6/route.c:3641:21: error: 'struct netns_ipv6' has no member named 'ip6_blk_hole_entry'; did you mean 'ip6_null_entry'? rt != net->ipv6.ip6_blk_hole_entry) { ^ include/linux/compiler.h:167:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^~~~ >> net/ipv6/route.c:3640:2: note: in expansion of macro 'if' if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && ^~ net/ipv6/route.c: At top level: include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'strcpy' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:390:2: note: in expansion of macro 'if' if (p_size == (size_t)-1 && q_size == (size_t)-1) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'kmemdup' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:380:2: note: in expansion of macro 'if' if (p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'kmemdup' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:378:2: note: in expansion of macro 'if' if (__builtin_constant_p(size) && p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr_inv' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:369:2: note: in expansion of macro 'if' if (p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr_inv' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:367:2: note: in expansion of macro 'if' if (__builtin_constant_p(size) && p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:358:2: note: in expansion of macro 'if' if (p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:356:2: note: in expansion of macro 'if' if (__builtin_constant_p(size) && p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:348:2: note: in expansion of macro 'if' if (p_size < size || q_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:345:3: note: in expansion of macro 'if' if (q_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:343:3: note: in expansion of macro 'if' if (p_size < size) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static ______f = { \ ^ include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if' #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) ^~~~~~~~~~ include/linux/string.h:342:2: note: in expansion of macro 'if' vim +/if +3640 net/ipv6/route.c 3558 3559 static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, 3560 struct netlink_ext_ack *extack) 3561 { 3562 struct net *net = sock_net(in_skb->sk); 3563 struct nlattr *tb[RTA_MAX+1]; 3564 int err, iif = 0, oif = 0; 3565 struct dst_entry *dst; 3566 struct rt6_info *rt; 3567 struct sk_buff *skb; 3568 struct rtmsg *rtm; 3569 struct flowi6 fl6; 3570 bool fibmatch; 3571 3572 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy, 3573 extack); 3574 if (err < 0) 3575 goto errout; 3576 3577 err = -EINVAL; 3578 memset(&fl6, 0, sizeof(fl6)); 3579 rtm = nlmsg_data(nlh); 3580 fl6.flowlabel = ip6_make_flowinfo(rtm->rtm_tos, 0); 3581 fibmatch = !!(rtm->rtm_flags & RTM_F_FIB_MATCH); 3582 3583 if (tb[RTA_SRC]) { 3584 if (nla_len(tb[RTA_SRC]) < sizeof(struct in6_addr)) 3585 goto errout; 3586 3587 fl6.saddr = *(struct in6_addr *)nla_data(tb[RTA_SRC]); 3588 } 3589 3590 if (tb[RTA_DST]) { 3591 if (nla_len(tb[RTA_DST]) < sizeof(struct in6_addr)) 3592 goto errout; 3593 3594 fl6.daddr = *(struct in6_addr *)nla_data(tb[RTA_DST]); 3595 } 3596 3597 if (tb[RTA_IIF]) 3598 iif = nla_get_u32(tb[RTA_IIF]); 3599 3600 if (tb[RTA_OIF]) 3601 oif = nla_get_u32(tb[RTA_OIF]); 3602 3603 if (tb[RTA_MARK]) 3604 fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]); 3605 3606 if (tb[RTA_UID]) 3607 fl6.flowi6_uid = make_kuid(current_user_ns(), 3608 nla_get_u32(tb[RTA_UID])); 3609 else 3610 fl6.flowi6_uid = iif ? INVALID_UID : current_uid(); 3611 3612 if (iif) { 3613 struct net_device *dev; 3614 int flags = 0; 3615 3616 dev = __dev_get_by_index(net, iif); 3617 if (!dev) { 3618 err = -ENODEV; 3619 goto errout; 3620 } 3621 3622 fl6.flowi6_iif = iif; 3623 3624 if (!ipv6_addr_any(&fl6.saddr)) 3625 flags |= RT6_LOOKUP_F_HAS_SADDR; 3626 3627 if (!fibmatch) 3628 dst = ip6_route_input_lookup(net, dev, &fl6, flags); 3629 } else { 3630 fl6.flowi6_oif = oif; 3631 3632 if (!fibmatch) 3633 dst = ip6_route_output(net, NULL, &fl6); 3634 } 3635 3636 if (fibmatch) 3637 dst = ip6_route_lookup(net, &fl6, 0); 3638 3639 rt = container_of(dst, struct rt6_info, dst); > 3640 if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry && 3641 rt != net->ipv6.ip6_blk_hole_entry) { 3642 err = rt->dst.error; 3643 ip6_rt_put(rt); 3644 goto errout; 3645 } 3646 3647 skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL); 3648 if (!skb) { 3649 ip6_rt_put(rt); 3650 err = -ENOBUFS; 3651 goto errout; 3652 } 3653 3654 skb_dst_set(skb, &rt->dst); 3655 if (fibmatch) 3656 err = rt6_fill_node(net, skb, rt, NULL, NULL, iif, 3657 RTM_NEWROUTE, NETLINK_CB(in_skb).portid, 3658 nlh->nlmsg_seq, 0); 3659 else 3660 err = rt6_fill_node(net, skb, rt, &fl6.daddr, &fl6.saddr, iif, 3661 RTM_NEWROUTE, NETLINK_CB(in_skb).portid, 3662 nlh->nlmsg_seq, 0); 3663 if (err < 0) { 3664 kfree_skb(skb); 3665 goto errout; 3666 } 3667 3668 err = rtnl_unicast(skb, net, NETLINK_CB(in_skb).portid); 3669 errout: 3670 return err; 3671 } 3672 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation