CC: [email protected]
CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Petr Machata <[email protected]>
CC: Ido Schimmel <[email protected]>

tree:   https://github.com/jpirko/linux_mlxsw gearboxes
head:   d58a6e73f8b9fad6ad13c269b9670388f242de6c
commit: ef1f07a8a52555ed2311efa7c44da698079e6278 [5/72] net: rtnetlink: 
rtnl_fill_statsinfo(): Permit non-EMSGSIZE error returns
:::::: branch date: 29 hours ago
:::::: commit date: 29 hours ago
config: x86_64-randconfig-c007 
(https://download.01.org/0day-ci/archive/20220225/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
d271fc04d5b97b12e6b797c6067d3c96a8d7470e)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # 
https://github.com/jpirko/linux_mlxsw/commit/ef1f07a8a52555ed2311efa7c44da698079e6278
        git remote add jpirko-mlxsw https://github.com/jpirko/linux_mlxsw
        git fetch --no-tags jpirko-mlxsw gearboxes
        git checkout ef1f07a8a52555ed2311efa7c44da698079e6278
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   14 warnings generated.
   net/core/rtnetlink.c:2710:28: warning: Array access (from variable 'ifname') 
results in a null pointer dereference [clang-analyzer-core.NullDereference]
           if (ifm->ifi_index > 0 && ifname[0]) {
                                     ^~~~~~
   net/core/rtnetlink.c:2616:6: note: Assuming 'err' is >= 0
           if (err < 0)
               ^~~~~~~
   net/core/rtnetlink.c:2616:2: note: Taking false branch
           if (err < 0)
           ^
   net/core/rtnetlink.c:2619:6: note: Assuming the condition is false
           if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD] || 
tb[IFLA_TARGET_NETNSID]) {
               ^~~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:2619:6: note: Left side of '||' is false
   net/core/rtnetlink.c:2619:29: note: Assuming the condition is false
           if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD] || 
tb[IFLA_TARGET_NETNSID]) {
                                      ^~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:2619:6: note: Left side of '||' is false
           if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD] || 
tb[IFLA_TARGET_NETNSID]) {
               ^
   net/core/rtnetlink.c:2619:51: note: Assuming the condition is true
           if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD] || 
tb[IFLA_TARGET_NETNSID]) {
                                                            
^~~~~~~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:2619:2: note: Taking true branch
           if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD] || 
tb[IFLA_TARGET_NETNSID]) {
           ^
   net/core/rtnetlink.c:2620:21: note: Assuming 'ifname' is null
                   const char *pat = ifname && ifname[0] ? ifname : NULL;
                                     ^~~~~~
   net/core/rtnetlink.c:2620:28: note: Left side of '&&' is false
                   const char *pat = ifname && ifname[0] ? ifname : NULL;
                                            ^
   net/core/rtnetlink.c:2626:7: note: Calling 'IS_ERR'
                   if (IS_ERR(net)) {
                       ^~~~~~~~~~~
   include/linux/err.h:36:2: note: Returning zero, which participates in a 
condition later
           return IS_ERR_VALUE((unsigned long)ptr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:2626:7: note: Returning from 'IS_ERR'
                   if (IS_ERR(net)) {
                       ^~~~~~~~~~~
   net/core/rtnetlink.c:2626:3: note: Taking false branch
                   if (IS_ERR(net)) {
                   ^
   net/core/rtnetlink.c:2631:7: note: Assuming the condition is false
                   if (tb[IFLA_NEW_IFINDEX])
                       ^~~~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:2631:3: note: Taking false branch
                   if (tb[IFLA_NEW_IFINDEX])
                   ^
   net/core/rtnetlink.c:2638:7: note: Assuming 'err' is 0
                   if (err)
                       ^~~
   net/core/rtnetlink.c:2638:3: note: Taking false branch
                   if (err)
                   ^
   net/core/rtnetlink.c:2643:6: note: Assuming the condition is false
           if (tb[IFLA_MAP]) {
               ^~~~~~~~~~~~
   net/core/rtnetlink.c:2643:2: note: Taking false branch
           if (tb[IFLA_MAP]) {
           ^
   net/core/rtnetlink.c:2672:6: note: Assuming the condition is false
           if (tb[IFLA_ADDRESS]) {
               ^~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:2672:2: note: Taking false branch
           if (tb[IFLA_ADDRESS]) {
           ^
   net/core/rtnetlink.c:2693:6: note: Assuming the condition is false
           if (tb[IFLA_MTU]) {
               ^~~~~~~~~~~~
   net/core/rtnetlink.c:2693:2: note: Taking false branch
           if (tb[IFLA_MTU]) {
           ^
   net/core/rtnetlink.c:2700:6: note: Assuming the condition is false
           if (tb[IFLA_GROUP]) {
               ^~~~~~~~~~~~~~
   net/core/rtnetlink.c:2700:2: note: Taking false branch
           if (tb[IFLA_GROUP]) {
           ^
   net/core/rtnetlink.c:2710:6: note: Assuming field 'ifi_index' is > 0
           if (ifm->ifi_index > 0 && ifname[0]) {
               ^~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:2710:6: note: Left side of '&&' is true
   net/core/rtnetlink.c:2710:28: note: Array access (from variable 'ifname') 
results in a null pointer dereference
           if (ifm->ifi_index > 0 && ifname[0]) {
                                     ^~~~~~
   net/core/rtnetlink.c:2833:2: warning: Value stored to 'err' is never read 
[clang-analyzer-deadcode.DeadStores]
           err = 0;
           ^     ~
   net/core/rtnetlink.c:2833:2: note: Value stored to 'err' is never read
           err = 0;
           ^     ~
   net/core/rtnetlink.c:2868:2: warning: Value stored to 'err' is never read 
[clang-analyzer-deadcode.DeadStores]
           err = 0;
           ^     ~
   net/core/rtnetlink.c:2868:2: note: Value stored to 'err' is never read
           err = 0;
           ^     ~
>> net/core/rtnetlink.c:5311:2: warning: Undefined or garbage value returned to 
>> caller [clang-analyzer-core.uninitialized.UndefReturn]
           return err;
           ^
   net/core/rtnetlink.c:5554:6: note: 'err' is 0
           if (err)
               ^~~
   net/core/rtnetlink.c:5554:2: note: Taking false branch
           if (err)
           ^
   net/core/rtnetlink.c:5558:6: note: Assuming field 'filter_mask' is not equal 
to 0
           if (!ifsm->filter_mask) {
               ^~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:5558:2: note: Taking false branch
           if (!ifsm->filter_mask) {
           ^
   net/core/rtnetlink.c:5565:6: note: Assuming 'err' is 0
           if (err)
               ^~~
   net/core/rtnetlink.c:5565:2: note: Taking false branch
           if (err)
           ^
   net/core/rtnetlink.c:5568:16: note: Assuming the condition is true
           for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
                         ^~~~~~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:5568:2: note: Loop condition is true.  Entering loop 
body
           for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
           ^
   net/core/rtnetlink.c:5571:3: note: Assuming '____ptr' is non-null
                   hlist_for_each_entry(dev, head, index_hlist) {
                   ^
   include/linux/list.h:1003:13: note: expanded from macro 
'hlist_for_each_entry'
           for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:993:5: note: expanded from macro 'hlist_entry_safe'
              ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
              ^~~~~~~
   net/core/rtnetlink.c:5571:3: note: '?' condition is true
                   hlist_for_each_entry(dev, head, index_hlist) {
                   ^
   include/linux/list.h:1003:13: note: expanded from macro 
'hlist_for_each_entry'
           for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
                      ^
   include/linux/list.h:993:5: note: expanded from macro 'hlist_entry_safe'
              ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
              ^
   net/core/rtnetlink.c:5571:3: note: Loop condition is true.  Entering loop 
body
                   hlist_for_each_entry(dev, head, index_hlist) {
                   ^
   include/linux/list.h:1003:2: note: expanded from macro 'hlist_for_each_entry'
           for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
           ^
   net/core/rtnetlink.c:5572:8: note: Assuming 'idx' is >= 's_idx'
                           if (idx < s_idx)
                               ^~~~~~~~~~~
   net/core/rtnetlink.c:5572:4: note: Taking false branch
                           if (idx < s_idx)
                           ^
   net/core/rtnetlink.c:5574:10: note: Calling 'rtnl_fill_statsinfo'
                           err = rtnl_fill_statsinfo(skb, dev, RTM_NEWSTATS,
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/core/rtnetlink.c:5159:2: note: 'err' declared without an initial value
           int err;
           ^~~~~~~
   net/core/rtnetlink.c:5161:2: note: Assuming the condition is false
           ASSERT_RTNL();
           ^
   include/linux/rtnetlink.h:110:12: note: expanded from macro 'ASSERT_RTNL'
           WARN_ONCE(!rtnl_is_locked(), \
                     ^~~~~~~~~~~~~~~~~
   include/asm-generic/bug.h:150:18: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
                           ^~~~~~~~~
   include/linux/once_lite.h:15:27: note: expanded from macro 'DO_ONCE_LITE_IF'
                   bool __ret_do_once = !!(condition);                     \
                                           ^~~~~~~~~
   net/core/rtnetlink.c:5161:2: note: '__ret_do_once' is false
           ASSERT_RTNL();
           ^
   include/linux/rtnetlink.h:110:2: note: expanded from macro 'ASSERT_RTNL'
           WARN_ONCE(!rtnl_is_locked(), \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/once_lite.h:17:16: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                                ^~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   net/core/rtnetlink.c:5161:2: note: Left side of '&&' is false
           ASSERT_RTNL();
           ^
   include/linux/rtnetlink.h:110:2: note: expanded from macro 'ASSERT_RTNL'
           WARN_ONCE(!rtnl_is_locked(), \
           ^
   include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
           ^
   include/linux/once_lite.h:17:30: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \

vim +5311 net/core/rtnetlink.c

a79159c08b5a56 Petr Machata        2022-02-21  5146  
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5147  static int 
rtnl_fill_statsinfo(struct sk_buff *skb, struct net_device *dev,
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5148                            
int type, u32 pid, u32 seq, u32 change,
a79159c08b5a56 Petr Machata        2022-02-21  5149                            
unsigned int flags,
a79159c08b5a56 Petr Machata        2022-02-21  5150                            
const struct rtnl_stats_dump_filters *filters,
33f11b46a4f00f Petr Machata        2022-02-21  5151                            
int *idxattr, int *prividx,
33f11b46a4f00f Petr Machata        2022-02-21  5152                            
struct netlink_ext_ack *extack)
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5153  {
a79159c08b5a56 Petr Machata        2022-02-21  5154     unsigned int 
filter_mask = filters->mask[0];
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5155     struct if_stats_msg 
*ifsm;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5156     struct nlmsghdr *nlh;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5157     struct nlattr *attr;
e8872a25a05efc Nikolay Aleksandrov 2016-04-30  5158     int s_prividx = 
*prividx;
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5159     int err;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5160  
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5161     ASSERT_RTNL();
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5162  
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5163     nlh = nlmsg_put(skb, 
pid, seq, type, sizeof(*ifsm), flags);
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5164     if (!nlh)
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5165             return 
-EMSGSIZE;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5166  
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5167     ifsm = nlmsg_data(nlh);
ce024f42c2e28b Nikolay Aleksandrov 2017-10-03  5168     ifsm->family = 
PF_UNSPEC;
ce024f42c2e28b Nikolay Aleksandrov 2017-10-03  5169     ifsm->pad1 = 0;
ce024f42c2e28b Nikolay Aleksandrov 2017-10-03  5170     ifsm->pad2 = 0;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5171     ifsm->ifindex = 
dev->ifindex;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5172     ifsm->filter_mask = 
filter_mask;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5173  
e8872a25a05efc Nikolay Aleksandrov 2016-04-30  5174     if 
(stats_attr_valid(filter_mask, IFLA_STATS_LINK_64, *idxattr)) {
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5175             struct 
rtnl_link_stats64 *sp;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5176  
58414d32a37e4c Nicolas Dichtel     2016-04-21  5177             attr = 
nla_reserve_64bit(skb, IFLA_STATS_LINK_64,
58414d32a37e4c Nicolas Dichtel     2016-04-21  5178                             
         sizeof(struct rtnl_link_stats64),
58414d32a37e4c Nicolas Dichtel     2016-04-21  5179                             
         IFLA_STATS_UNSPEC);
ef1f07a8a52555 Petr Machata        2022-02-21  5180             if (!attr) {
ef1f07a8a52555 Petr Machata        2022-02-21  5181                     err = 
-EMSGSIZE;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5182                     goto 
nla_put_failure;
ef1f07a8a52555 Petr Machata        2022-02-21  5183             }
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5184  
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5185             sp = 
nla_data(attr);
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5186             
dev_get_stats(dev, sp);
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5187     }
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5188  
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5189     if 
(stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS, *idxattr)) {
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5190             const struct 
rtnl_link_ops *ops = dev->rtnl_link_ops;
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5191  
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5192             if (ops && 
ops->fill_linkxstats) {
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5193                     
*idxattr = IFLA_STATS_LINK_XSTATS;
ae0be8de9a53cd Michal Kubecek      2019-04-26  5194                     attr = 
nla_nest_start_noflag(skb,
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5195                             
                     IFLA_STATS_LINK_XSTATS);
ef1f07a8a52555 Petr Machata        2022-02-21  5196                     if 
(!attr) {
ef1f07a8a52555 Petr Machata        2022-02-21  5197                             
err = -EMSGSIZE;
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5198                             
goto nla_put_failure;
ef1f07a8a52555 Petr Machata        2022-02-21  5199                     }
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5200  
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5201                     err = 
ops->fill_linkxstats(skb, dev, prividx, *idxattr);
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5202                     
nla_nest_end(skb, attr);
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5203                     if (err)
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5204                             
goto nla_put_failure;
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5205                     
*idxattr = 0;
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5206             }
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5207     }
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5208  
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5209     if 
(stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS_SLAVE,
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5210                          
*idxattr)) {
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5211             const struct 
rtnl_link_ops *ops = NULL;
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5212             const struct 
net_device *master;
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5213  
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5214             master = 
netdev_master_upper_dev_get(dev);
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5215             if (master)
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5216                     ops = 
master->rtnl_link_ops;
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5217             if (ops && 
ops->fill_linkxstats) {
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5218                     
*idxattr = IFLA_STATS_LINK_XSTATS_SLAVE;
ae0be8de9a53cd Michal Kubecek      2019-04-26  5219                     attr = 
nla_nest_start_noflag(skb,
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5220                             
                     IFLA_STATS_LINK_XSTATS_SLAVE);
ef1f07a8a52555 Petr Machata        2022-02-21  5221                     if 
(!attr) {
ef1f07a8a52555 Petr Machata        2022-02-21  5222                             
err = -EMSGSIZE;
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5223                             
goto nla_put_failure;
ef1f07a8a52555 Petr Machata        2022-02-21  5224                     }
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5225  
80e73cc563c435 Nikolay Aleksandrov 2016-06-28  5226                     err = 
ops->fill_linkxstats(skb, dev, prividx, *idxattr);
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5227                     
nla_nest_end(skb, attr);
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5228                     if (err)
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5229                             
goto nla_put_failure;
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5230                     
*idxattr = 0;
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5231             }
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5232     }
97a47facf3468f Nikolay Aleksandrov 2016-04-30  5233  
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5234     if 
(stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS,
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5235                          
*idxattr)) {
a79159c08b5a56 Petr Machata        2022-02-21  5236             u32 
off_filter_mask;
a79159c08b5a56 Petr Machata        2022-02-21  5237  
a79159c08b5a56 Petr Machata        2022-02-21  5238             off_filter_mask 
= filters->mask[IFLA_STATS_LINK_OFFLOAD_XSTATS];
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5239             *idxattr = 
IFLA_STATS_LINK_OFFLOAD_XSTATS;
ae0be8de9a53cd Michal Kubecek      2019-04-26  5240             attr = 
nla_nest_start_noflag(skb,
ae0be8de9a53cd Michal Kubecek      2019-04-26  5241                             
             IFLA_STATS_LINK_OFFLOAD_XSTATS);
ef1f07a8a52555 Petr Machata        2022-02-21  5242             if (!attr) {
ef1f07a8a52555 Petr Machata        2022-02-21  5243                     err = 
-EMSGSIZE;
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5244                     goto 
nla_put_failure;
ef1f07a8a52555 Petr Machata        2022-02-21  5245             }
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5246  
a79159c08b5a56 Petr Machata        2022-02-21  5247             err = 
rtnl_offload_xstats_fill(skb, dev, prividx,
33f11b46a4f00f Petr Machata        2022-02-21  5248                             
               off_filter_mask, extack);
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5249             if (err == 
-ENODATA)
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5250                     
nla_nest_cancel(skb, attr);
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5251             else
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5252                     
nla_nest_end(skb, attr);
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5253  
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5254             if (err && err 
!= -ENODATA)
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5255                     goto 
nla_put_failure;
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5256             *idxattr = 0;
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5257     }
69ae6ad2ff3791 Nogah Frankel       2016-09-16  5258  
aefb4d4ad83b60 Robert Shearman     2017-01-16  5259     if 
(stats_attr_valid(filter_mask, IFLA_STATS_AF_SPEC, *idxattr)) {
aefb4d4ad83b60 Robert Shearman     2017-01-16  5260             struct 
rtnl_af_ops *af_ops;
aefb4d4ad83b60 Robert Shearman     2017-01-16  5261  
aefb4d4ad83b60 Robert Shearman     2017-01-16  5262             *idxattr = 
IFLA_STATS_AF_SPEC;
ae0be8de9a53cd Michal Kubecek      2019-04-26  5263             attr = 
nla_nest_start_noflag(skb, IFLA_STATS_AF_SPEC);
ef1f07a8a52555 Petr Machata        2022-02-21  5264             if (!attr) {
ef1f07a8a52555 Petr Machata        2022-02-21  5265                     err = 
-EMSGSIZE;
aefb4d4ad83b60 Robert Shearman     2017-01-16  5266                     goto 
nla_put_failure;
ef1f07a8a52555 Petr Machata        2022-02-21  5267             }
aefb4d4ad83b60 Robert Shearman     2017-01-16  5268  
5fa85a09390c4a Florian Westphal    2017-10-16  5269             rcu_read_lock();
5fa85a09390c4a Florian Westphal    2017-10-16  5270             
list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
aefb4d4ad83b60 Robert Shearman     2017-01-16  5271                     if 
(af_ops->fill_stats_af) {
aefb4d4ad83b60 Robert Shearman     2017-01-16  5272                             
struct nlattr *af;
aefb4d4ad83b60 Robert Shearman     2017-01-16  5273                             
int err;
aefb4d4ad83b60 Robert Shearman     2017-01-16  5274  
ae0be8de9a53cd Michal Kubecek      2019-04-26  5275                             
af = nla_nest_start_noflag(skb,
ae0be8de9a53cd Michal Kubecek      2019-04-26  5276                             
                           af_ops->family);
5fa85a09390c4a Florian Westphal    2017-10-16  5277                             
if (!af) {
5fa85a09390c4a Florian Westphal    2017-10-16  5278                             
        rcu_read_unlock();
aefb4d4ad83b60 Robert Shearman     2017-01-16  5279                             
        goto nla_put_failure;
5fa85a09390c4a Florian Westphal    2017-10-16  5280                             
}
aefb4d4ad83b60 Robert Shearman     2017-01-16  5281                             
err = af_ops->fill_stats_af(skb, dev);
aefb4d4ad83b60 Robert Shearman     2017-01-16  5282  
5fa85a09390c4a Florian Westphal    2017-10-16  5283                             
if (err == -ENODATA) {
aefb4d4ad83b60 Robert Shearman     2017-01-16  5284                             
        nla_nest_cancel(skb, af);
5fa85a09390c4a Florian Westphal    2017-10-16  5285                             
} else if (err < 0) {
5fa85a09390c4a Florian Westphal    2017-10-16  5286                             
        rcu_read_unlock();
aefb4d4ad83b60 Robert Shearman     2017-01-16  5287                             
        goto nla_put_failure;
5fa85a09390c4a Florian Westphal    2017-10-16  5288                             
}
aefb4d4ad83b60 Robert Shearman     2017-01-16  5289  
aefb4d4ad83b60 Robert Shearman     2017-01-16  5290                             
nla_nest_end(skb, af);
aefb4d4ad83b60 Robert Shearman     2017-01-16  5291                     }
aefb4d4ad83b60 Robert Shearman     2017-01-16  5292             }
5fa85a09390c4a Florian Westphal    2017-10-16  5293             
rcu_read_unlock();
aefb4d4ad83b60 Robert Shearman     2017-01-16  5294  
aefb4d4ad83b60 Robert Shearman     2017-01-16  5295             
nla_nest_end(skb, attr);
aefb4d4ad83b60 Robert Shearman     2017-01-16  5296  
aefb4d4ad83b60 Robert Shearman     2017-01-16  5297             *idxattr = 0;
aefb4d4ad83b60 Robert Shearman     2017-01-16  5298     }
aefb4d4ad83b60 Robert Shearman     2017-01-16  5299  
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5300     nlmsg_end(skb, nlh);
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5301  
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5302     return 0;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5303  
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5304  nla_put_failure:
e8872a25a05efc Nikolay Aleksandrov 2016-04-30  5305     /* not a multi message 
or no progress mean a real error */
e8872a25a05efc Nikolay Aleksandrov 2016-04-30  5306     if (!(flags & 
NLM_F_MULTI) || s_prividx == *prividx)
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5307             
nlmsg_cancel(skb, nlh);
e8872a25a05efc Nikolay Aleksandrov 2016-04-30  5308     else
e8872a25a05efc Nikolay Aleksandrov 2016-04-30  5309             nlmsg_end(skb, 
nlh);
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5310  
ef1f07a8a52555 Petr Machata        2022-02-21 @5311     return err;
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5312  }
10c9ead9f3c6bb Roopa Prabhu        2016-04-20  5313  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to