aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
Diffstat (limited to 'include/net')
-rw-r--r--include/net/mac80211.h25
-rw-r--r--include/net/ndisc.h4
-rw-r--r--include/net/netlink.h11
3 files changed, 33 insertions, 7 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 4a80d74975e8..dae3f9ec1154 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -1594,13 +1594,16 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw);
1594void ieee80211_scan_completed(struct ieee80211_hw *hw); 1594void ieee80211_scan_completed(struct ieee80211_hw *hw);
1595 1595
1596/** 1596/**
1597 * ieee80211_iterate_active_interfaces - iterate active interfaces 1597 * ieee80211_iterate_active_interfaces- iterate active interfaces
1598 * 1598 *
1599 * This function iterates over the interfaces associated with a given 1599 * This function iterates over the interfaces associated with a given
1600 * hardware that are currently active and calls the callback for them. 1600 * hardware that are currently active and calls the callback for them.
1601 * This function allows the iterator function to sleep, when the iterator
1602 * function is atomic @ieee80211_iterate_active_interfaces_atomic can
1603 * be used.
1601 * 1604 *
1602 * @hw: the hardware struct of which the interfaces should be iterated over 1605 * @hw: the hardware struct of which the interfaces should be iterated over
1603 * @iterator: the iterator function to call, cannot sleep 1606 * @iterator: the iterator function to call
1604 * @data: first argument of the iterator function 1607 * @data: first argument of the iterator function
1605 */ 1608 */
1606void ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw, 1609void ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw,
@@ -1609,6 +1612,24 @@ void ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw,
1609 void *data); 1612 void *data);
1610 1613
1611/** 1614/**
1615 * ieee80211_iterate_active_interfaces_atomic - iterate active interfaces
1616 *
1617 * This function iterates over the interfaces associated with a given
1618 * hardware that are currently active and calls the callback for them.
1619 * This function requires the iterator callback function to be atomic,
1620 * if that is not desired, use @ieee80211_iterate_active_interfaces instead.
1621 *
1622 * @hw: the hardware struct of which the interfaces should be iterated over
1623 * @iterator: the iterator function to call, cannot sleep
1624 * @data: first argument of the iterator function
1625 */
1626void ieee80211_iterate_active_interfaces_atomic(struct ieee80211_hw *hw,
1627 void (*iterator)(void *data,
1628 u8 *mac,
1629 struct ieee80211_vif *vif),
1630 void *data);
1631
1632/**
1612 * ieee80211_start_tx_ba_session - Start a tx Block Ack session. 1633 * ieee80211_start_tx_ba_session - Start a tx Block Ack session.
1613 * @hw: pointer as obtained from ieee80211_alloc_hw(). 1634 * @hw: pointer as obtained from ieee80211_alloc_hw().
1614 * @ra: receiver address of the BA session recipient 1635 * @ra: receiver address of the BA session recipient
diff --git a/include/net/ndisc.h b/include/net/ndisc.h
index 9c451ff2f4f4..a01b7c4dc763 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -129,6 +129,10 @@ extern int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl,
129 void __user *buffer, 129 void __user *buffer,
130 size_t *lenp, 130 size_t *lenp,
131 loff_t *ppos); 131 loff_t *ppos);
132int ndisc_ifinfo_sysctl_strategy(ctl_table *ctl, int __user *name,
133 int nlen, void __user *oldval,
134 size_t __user *oldlenp,
135 void __user *newval, size_t newlen);
132#endif 136#endif
133 137
134extern void inet6_ifinfo_notify(int event, 138extern void inet6_ifinfo_notify(int event,
diff --git a/include/net/netlink.h b/include/net/netlink.h
index a5506c42f03c..112dcdf7e34e 100644
--- a/include/net/netlink.h
+++ b/include/net/netlink.h
@@ -772,12 +772,13 @@ static inline int __nla_parse_nested_compat(struct nlattr *tb[], int maxtype,
772 const struct nla_policy *policy, 772 const struct nla_policy *policy,
773 int len) 773 int len)
774{ 774{
775 if (nla_len(nla) < len) 775 int nested_len = nla_len(nla) - NLA_ALIGN(len);
776
777 if (nested_len < 0)
776 return -1; 778 return -1;
777 if (nla_len(nla) >= NLA_ALIGN(len) + sizeof(struct nlattr)) 779 if (nested_len >= nla_attr_size(0))
778 return nla_parse_nested(tb, maxtype, 780 return nla_parse(tb, maxtype, nla_data(nla) + NLA_ALIGN(len),
779 nla_data(nla) + NLA_ALIGN(len), 781 nested_len, policy);
780 policy);
781 memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); 782 memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1));
782 return 0; 783 return 0;
783} 784}