mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 13:27:06 +09:00
Merge tag 'v4.9.198' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidg12-4.9.y
This is the 4.9.198 stable release
This commit is contained in:
@@ -2228,7 +2228,7 @@ struct rtable *__ip_route_output_key_hash(struct net *net, struct flowi4 *fl4,
|
||||
struct fib_result res;
|
||||
struct rtable *rth;
|
||||
int orig_oif;
|
||||
int err = -ENETUNREACH;
|
||||
int err;
|
||||
|
||||
res.tclassid = 0;
|
||||
res.fi = NULL;
|
||||
@@ -2243,11 +2243,14 @@ struct rtable *__ip_route_output_key_hash(struct net *net, struct flowi4 *fl4,
|
||||
|
||||
rcu_read_lock();
|
||||
if (fl4->saddr) {
|
||||
rth = ERR_PTR(-EINVAL);
|
||||
if (ipv4_is_multicast(fl4->saddr) ||
|
||||
ipv4_is_lbcast(fl4->saddr) ||
|
||||
ipv4_is_zeronet(fl4->saddr))
|
||||
ipv4_is_zeronet(fl4->saddr)) {
|
||||
rth = ERR_PTR(-EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
rth = ERR_PTR(-ENETUNREACH);
|
||||
|
||||
/* I removed check for oif == dev_out->oif here.
|
||||
It was wrong for two reasons:
|
||||
|
||||
@@ -1856,7 +1856,6 @@ static int __net_init sit_init_net(struct net *net)
|
||||
|
||||
err_reg_dev:
|
||||
ipip6_dev_free(sitn->fb_tunnel_dev);
|
||||
free_netdev(sitn->fb_tunnel_dev);
|
||||
err_alloc_dev:
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -490,9 +490,14 @@ static ssize_t ieee80211_if_fmt_aqm(
|
||||
const struct ieee80211_sub_if_data *sdata, char *buf, int buflen)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct txq_info *txqi = to_txq_info(sdata->vif.txq);
|
||||
struct txq_info *txqi;
|
||||
int len;
|
||||
|
||||
if (!sdata->vif.txq)
|
||||
return 0;
|
||||
|
||||
txqi = to_txq_info(sdata->vif.txq);
|
||||
|
||||
spin_lock_bh(&local->fq.lock);
|
||||
rcu_read_lock();
|
||||
|
||||
@@ -657,7 +662,9 @@ static void add_common_files(struct ieee80211_sub_if_data *sdata)
|
||||
DEBUGFS_ADD(rc_rateidx_vht_mcs_mask_5ghz);
|
||||
DEBUGFS_ADD(hw_queues);
|
||||
|
||||
if (sdata->local->ops->wake_tx_queue)
|
||||
if (sdata->local->ops->wake_tx_queue &&
|
||||
sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE &&
|
||||
sdata->vif.type != NL80211_IFTYPE_NAN)
|
||||
DEBUGFS_ADD(aqm);
|
||||
}
|
||||
|
||||
|
||||
@@ -2434,7 +2434,8 @@ struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw,
|
||||
|
||||
rcu_read_lock();
|
||||
ssid = ieee80211_bss_get_ie(cbss, WLAN_EID_SSID);
|
||||
if (WARN_ON_ONCE(ssid == NULL))
|
||||
if (WARN_ONCE(!ssid || ssid[1] > IEEE80211_MAX_SSID_LEN,
|
||||
"invalid SSID element (len=%d)", ssid ? ssid[1] : -1))
|
||||
ssid_len = 0;
|
||||
else
|
||||
ssid_len = ssid[1];
|
||||
@@ -4691,7 +4692,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
rcu_read_lock();
|
||||
ssidie = ieee80211_bss_get_ie(req->bss, WLAN_EID_SSID);
|
||||
if (!ssidie) {
|
||||
if (!ssidie || ssidie[1] > sizeof(assoc_data->ssid)) {
|
||||
rcu_read_unlock();
|
||||
kfree(assoc_data);
|
||||
return -EINVAL;
|
||||
|
||||
@@ -948,10 +948,15 @@ tcf_add_notify(struct net *net, struct nlmsghdr *n, struct list_head *actions,
|
||||
static int tcf_action_add(struct net *net, struct nlattr *nla,
|
||||
struct nlmsghdr *n, u32 portid, int ovr)
|
||||
{
|
||||
int ret = 0;
|
||||
int loop, ret;
|
||||
LIST_HEAD(actions);
|
||||
|
||||
ret = tcf_action_init(net, nla, NULL, NULL, ovr, 0, &actions);
|
||||
for (loop = 0; loop < 10; loop++) {
|
||||
ret = tcf_action_init(net, nla, NULL, NULL, ovr, 0, &actions);
|
||||
if (ret != -EAGAIN)
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -989,10 +994,7 @@ static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n)
|
||||
*/
|
||||
if (n->nlmsg_flags & NLM_F_REPLACE)
|
||||
ovr = 1;
|
||||
replay:
|
||||
ret = tcf_action_add(net, tca[TCA_ACT_TAB], n, portid, ovr);
|
||||
if (ret == -EAGAIN)
|
||||
goto replay;
|
||||
break;
|
||||
case RTM_DELACTION:
|
||||
ret = tca_action_gd(net, tca[TCA_ACT_TAB], n,
|
||||
|
||||
@@ -7911,7 +7911,7 @@ struct proto sctp_prot = {
|
||||
.backlog_rcv = sctp_backlog_rcv,
|
||||
.hash = sctp_hash,
|
||||
.unhash = sctp_unhash,
|
||||
.get_port = sctp_get_port,
|
||||
.no_autobind = true,
|
||||
.obj_size = sizeof(struct sctp_sock),
|
||||
.sysctl_mem = sysctl_sctp_mem,
|
||||
.sysctl_rmem = sysctl_sctp_rmem,
|
||||
@@ -7950,7 +7950,7 @@ struct proto sctpv6_prot = {
|
||||
.backlog_rcv = sctp_backlog_rcv,
|
||||
.hash = sctp_hash,
|
||||
.unhash = sctp_unhash,
|
||||
.get_port = sctp_get_port,
|
||||
.no_autobind = true,
|
||||
.obj_size = sizeof(struct sctp6_sock),
|
||||
.sysctl_mem = sysctl_sctp_mem,
|
||||
.sysctl_rmem = sysctl_sctp_rmem,
|
||||
|
||||
@@ -5358,6 +5358,9 @@ static int nl80211_del_mpath(struct sk_buff *skb, struct genl_info *info)
|
||||
if (!rdev->ops->del_mpath)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return rdev_del_mpath(rdev, dev, dst);
|
||||
}
|
||||
|
||||
|
||||
@@ -224,6 +224,7 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
|
||||
struct iw_point *data, char *ssid)
|
||||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
int ret = 0;
|
||||
|
||||
/* call only for station! */
|
||||
if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION))
|
||||
@@ -241,7 +242,10 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
|
||||
if (ie) {
|
||||
data->flags = 1;
|
||||
data->length = ie[1];
|
||||
memcpy(ssid, ie + 2, data->length);
|
||||
if (data->length > IW_ESSID_MAX_SIZE)
|
||||
ret = -EINVAL;
|
||||
else
|
||||
memcpy(ssid, ie + 2, data->length);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
} else if (wdev->wext.connect.ssid && wdev->wext.connect.ssid_len) {
|
||||
@@ -251,7 +255,7 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
|
||||
}
|
||||
wdev_unlock(wdev);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int cfg80211_mgd_wext_siwap(struct net_device *dev,
|
||||
|
||||
Reference in New Issue
Block a user