@ -1515,7 +1515,8 @@ static const struct rtnl_link_ops *linkinfo_to_kind_ops(const struct nlattr *nla
const struct rtnl_link_ops * ops = NULL ;
struct nlattr * linfo [ IFLA_INFO_MAX + 1 ] ;
if ( nla_parse_nested ( linfo , IFLA_INFO_MAX , nla , ifla_info_policy ) < 0 )
if ( nla_parse_nested ( linfo , IFLA_INFO_MAX , nla ,
ifla_info_policy , NULL ) < 0 )
return NULL ;
if ( linfo [ IFLA_INFO_KIND ] ) {
@ -1592,8 +1593,8 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
hdrlen = nlmsg_len ( cb - > nlh ) < sizeof ( struct ifinfomsg ) ?
sizeof ( struct rtgenmsg ) : sizeof ( struct ifinfomsg ) ;
if ( nlmsg_parse ( cb - > nlh , hdrlen , tb , IFLA_MAX , ifla_policy ) > = 0 ) {
if ( nlmsg_parse ( cb - > nlh , hdrlen , tb , IFLA_MAX ,
ifla_policy , NULL ) > = 0 ) {
if ( tb [ IFLA_EXT_MASK ] )
ext_filter_mask = nla_get_u32 ( tb [ IFLA_EXT_MASK ] ) ;
@ -1640,9 +1641,10 @@ out:
return skb - > len ;
}
int rtnl_nla_parse_ifla ( struct nlattr * * tb , const struct nlattr * head , int len )
int rtnl_nla_parse_ifla ( struct nlattr * * tb , const struct nlattr * head , int len ,
struct netlink_ext_ack * exterr )
{
return nla_parse ( tb , IFLA_MAX , head , len , ifla_policy ) ;
return nla_parse ( tb , IFLA_MAX , head , len , ifla_policy , exterr ) ;
}
EXPORT_SYMBOL ( rtnl_nla_parse_ifla ) ;
@ -2078,7 +2080,7 @@ static int do_setlink(const struct sk_buff *skb,
goto errout ;
}
err = nla_parse_nested ( vfinfo , IFLA_VF_MAX , attr ,
ifla_vf_policy ) ;
ifla_vf_policy , NULL ) ;
if ( err < 0 )
goto errout ;
err = do_setvfinfo ( dev , vfinfo ) ;
@ -2106,7 +2108,7 @@ static int do_setlink(const struct sk_buff *skb,
goto errout ;
}
err = nla_parse_nested ( port , IFLA_PORT_MAX , attr ,
ifla_port_policy ) ;
ifla_port_policy , NULL ) ;
if ( err < 0 )
goto errout ;
if ( ! port [ IFLA_PORT_VF ] ) {
@ -2126,7 +2128,8 @@ static int do_setlink(const struct sk_buff *skb,
struct nlattr * port [ IFLA_PORT_MAX + 1 ] ;
err = nla_parse_nested ( port , IFLA_PORT_MAX ,
tb [ IFLA_PORT_SELF ] , ifla_port_policy ) ;
tb [ IFLA_PORT_SELF ] , ifla_port_policy ,
NULL ) ;
if ( err < 0 )
goto errout ;
@ -2170,7 +2173,7 @@ static int do_setlink(const struct sk_buff *skb,
u32 xdp_flags = 0 ;
err = nla_parse_nested ( xdp , IFLA_XDP_MAX , tb [ IFLA_XDP ] ,
ifla_xdp_policy ) ;
ifla_xdp_policy , NULL ) ;
if ( err < 0 )
goto errout ;
@ -2219,7 +2222,7 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
struct nlattr * tb [ IFLA_MAX + 1 ] ;
char ifname [ IFNAMSIZ ] ;
err = nlmsg_parse ( nlh , sizeof ( * ifm ) , tb , IFLA_MAX , ifla_policy ) ;
err = nlmsg_parse ( nlh , sizeof ( * ifm ) , tb , IFLA_MAX , ifla_policy , NULL ) ;
if ( err < 0 )
goto errout ;
@ -2312,7 +2315,7 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
struct nlattr * tb [ IFLA_MAX + 1 ] ;
int err ;
err = nlmsg_parse ( nlh , sizeof ( * ifm ) , tb , IFLA_MAX , ifla_policy ) ;
err = nlmsg_parse ( nlh , sizeof ( * ifm ) , tb , IFLA_MAX , ifla_policy , NULL ) ;
if ( err < 0 )
return err ;
@ -2441,7 +2444,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh)
# ifdef CONFIG_MODULES
replay :
# endif
err = nlmsg_parse ( nlh , sizeof ( * ifm ) , tb , IFLA_MAX , ifla_policy ) ;
err = nlmsg_parse ( nlh , sizeof ( * ifm ) , tb , IFLA_MAX , ifla_policy , NULL ) ;
if ( err < 0 )
return err ;
@ -2472,7 +2475,8 @@ replay:
if ( tb [ IFLA_LINKINFO ] ) {
err = nla_parse_nested ( linkinfo , IFLA_INFO_MAX ,
tb [ IFLA_LINKINFO ] , ifla_info_policy ) ;
tb [ IFLA_LINKINFO ] , ifla_info_policy ,
NULL ) ;
if ( err < 0 )
return err ;
} else
@ -2497,7 +2501,7 @@ replay:
if ( ops - > maxtype & & linkinfo [ IFLA_INFO_DATA ] ) {
err = nla_parse_nested ( attr , ops - > maxtype ,
linkinfo [ IFLA_INFO_DATA ] ,
ops - > policy ) ;
ops - > policy , NULL ) ;
if ( err < 0 )
return err ;
data = attr ;
@ -2515,7 +2519,8 @@ replay:
err = nla_parse_nested ( slave_attr ,
m_ops - > slave_maxtype ,
linkinfo [ IFLA_INFO_SLAVE_DATA ] ,
m_ops - > slave_policy ) ;
m_ops - > slave_policy ,
NULL ) ;
if ( err < 0 )
return err ;
slave_data = slave_attr ;
@ -2684,7 +2689,7 @@ static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh)
int err ;
u32 ext_filter_mask = 0 ;
err = nlmsg_parse ( nlh , sizeof ( * ifm ) , tb , IFLA_MAX , ifla_policy ) ;
err = nlmsg_parse ( nlh , sizeof ( * ifm ) , tb , IFLA_MAX , ifla_policy , NULL ) ;
if ( err < 0 )
return err ;
@ -2734,7 +2739,7 @@ static u16 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh)
hdrlen = nlmsg_len ( nlh ) < sizeof ( struct ifinfomsg ) ?
sizeof ( struct rtgenmsg ) : sizeof ( struct ifinfomsg ) ;
if ( nlmsg_parse ( nlh , hdrlen , tb , IFLA_MAX , ifla_policy ) > = 0 ) {
if ( nlmsg_parse ( nlh , hdrlen , tb , IFLA_MAX , ifla_policy , NULL ) > = 0 ) {
if ( tb [ IFLA_EXT_MASK ] )
ext_filter_mask = nla_get_u32 ( tb [ IFLA_EXT_MASK ] ) ;
}
@ -2965,7 +2970,7 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
u16 vid ;
int err ;
err = nlmsg_parse ( nlh , sizeof ( * ndm ) , tb , NDA_MAX , NULL ) ;
err = nlmsg_parse ( nlh , sizeof ( * ndm ) , tb , NDA_MAX , NULL , NULL ) ;
if ( err < 0 )
return err ;
@ -3068,7 +3073,7 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
if ( ! netlink_capable ( skb , CAP_NET_ADMIN ) )
return - EPERM ;
err = nlmsg_parse ( nlh , sizeof ( * ndm ) , tb , NDA_MAX , NULL ) ;
err = nlmsg_parse ( nlh , sizeof ( * ndm ) , tb , NDA_MAX , NULL , NULL ) ;
if ( err < 0 )
return err ;
@ -3203,8 +3208,8 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
int err = 0 ;
int fidx = 0 ;
if ( nlmsg_parse ( cb - > nlh , sizeof ( struct ifinfomsg ) , tb , IFLA_MAX ,
ifla_policy ) = = 0 ) {
if ( nlmsg_parse ( cb - > nlh , sizeof ( struct ifinfomsg ) , tb ,
IFLA_MAX , ifla_policy , NULL ) = = 0 ) {
if ( tb [ IFLA_MASTER ] )
br_idx = nla_get_u32 ( tb [ IFLA_MASTER ] ) ;
}