Merge 531754952f
("netfilter: nf_tables: prevent nf_skb_duplicated corruption") into android12-5.10-lts
Steps on the way to 5.10.227 Change-Id: Ib618ae4b21061bc48e1a821a0bdb35811495f7b2 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
6f91c0260d
@ -1311,16 +1311,13 @@ mcr20a_probe(struct spi_device *spi)
|
||||
irq_type = IRQF_TRIGGER_FALLING;
|
||||
|
||||
ret = devm_request_irq(&spi->dev, spi->irq, mcr20a_irq_isr,
|
||||
irq_type, dev_name(&spi->dev), lp);
|
||||
irq_type | IRQF_NO_AUTOEN, dev_name(&spi->dev), lp);
|
||||
if (ret) {
|
||||
dev_err(&spi->dev, "could not request_irq for mcr20a\n");
|
||||
ret = -ENODEV;
|
||||
goto free_dev;
|
||||
}
|
||||
|
||||
/* disable_irq by default and wait for starting hardware */
|
||||
disable_irq(spi->irq);
|
||||
|
||||
ret = ieee802154_register_hw(hw);
|
||||
if (ret) {
|
||||
dev_crit(&spi->dev, "ieee802154_register_hw failed\n");
|
||||
|
@ -1602,7 +1602,7 @@ enum nft_flowtable_flags {
|
||||
*
|
||||
* @NFTA_FLOWTABLE_TABLE: name of the table containing the expression (NLA_STRING)
|
||||
* @NFTA_FLOWTABLE_NAME: name of this flow table (NLA_STRING)
|
||||
* @NFTA_FLOWTABLE_HOOK: netfilter hook configuration(NLA_U32)
|
||||
* @NFTA_FLOWTABLE_HOOK: netfilter hook configuration (NLA_NESTED)
|
||||
* @NFTA_FLOWTABLE_USE: number of references to this flow table (NLA_U32)
|
||||
* @NFTA_FLOWTABLE_HANDLE: object handle (NLA_U64)
|
||||
* @NFTA_FLOWTABLE_FLAGS: flags (NLA_U32)
|
||||
|
@ -52,8 +52,9 @@ void nf_dup_ipv4(struct net *net, struct sk_buff *skb, unsigned int hooknum,
|
||||
{
|
||||
struct iphdr *iph;
|
||||
|
||||
local_bh_disable();
|
||||
if (this_cpu_read(nf_skb_duplicated))
|
||||
return;
|
||||
goto out;
|
||||
/*
|
||||
* Copy the skb, and route the copy. Will later return %XT_CONTINUE for
|
||||
* the original skb, which should continue on its way as if nothing has
|
||||
@ -61,7 +62,7 @@ void nf_dup_ipv4(struct net *net, struct sk_buff *skb, unsigned int hooknum,
|
||||
*/
|
||||
skb = pskb_copy(skb, GFP_ATOMIC);
|
||||
if (skb == NULL)
|
||||
return;
|
||||
goto out;
|
||||
|
||||
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||
/* Avoid counting cloned packets towards the original connection. */
|
||||
@ -90,6 +91,8 @@ void nf_dup_ipv4(struct net *net, struct sk_buff *skb, unsigned int hooknum,
|
||||
} else {
|
||||
kfree_skb(skb);
|
||||
}
|
||||
out:
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_dup_ipv4);
|
||||
|
||||
|
@ -47,11 +47,12 @@ static bool nf_dup_ipv6_route(struct net *net, struct sk_buff *skb,
|
||||
void nf_dup_ipv6(struct net *net, struct sk_buff *skb, unsigned int hooknum,
|
||||
const struct in6_addr *gw, int oif)
|
||||
{
|
||||
local_bh_disable();
|
||||
if (this_cpu_read(nf_skb_duplicated))
|
||||
return;
|
||||
goto out;
|
||||
skb = pskb_copy(skb, GFP_ATOMIC);
|
||||
if (skb == NULL)
|
||||
return;
|
||||
goto out;
|
||||
|
||||
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||
nf_reset_ct(skb);
|
||||
@ -69,6 +70,8 @@ void nf_dup_ipv6(struct net *net, struct sk_buff *skb, unsigned int hooknum,
|
||||
} else {
|
||||
kfree_skb(skb);
|
||||
}
|
||||
out:
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_dup_ipv6);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user