Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d230ec72 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull networking fixups from David Miller:
 "Here are the build and merge fixups for the networking stuff"

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:
  phy: micrel.c: Enable ksz9031 energy-detect power-down mode
  netfilter: merge fixup for "nf_tables_netdev: remove redundant ip_hdr assignment"
  netfilter: nft_limit: fix divided by zero panic
  netfilter: fix namespace handling in nf_log_proc_dostring
  netfilter: xt_hashlimit: Fix link error in 32bit arch because of 64bit division
  netfilter: accommodate different kconfig in nf_set_hooks_head
  netfilter: Fix potential null pointer dereference
parents f84d9fa8 af70c1f9
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -439,6 +439,10 @@ static int ksz9021_config_init(struct phy_device *phydev)
#define MII_KSZ9031RN_TX_DATA_PAD_SKEW	6
#define MII_KSZ9031RN_CLK_PAD_SKEW	8

/* MMD Address 0x1C */
#define MII_KSZ9031RN_EDPD		0x23
#define MII_KSZ9031RN_EDPD_ENABLE	BIT(0)

static int ksz9031_extended_write(struct phy_device *phydev,
				  u8 mode, u32 dev_addr, u32 regnum, u16 val)
{
@@ -510,6 +514,18 @@ static int ksz9031_center_flp_timing(struct phy_device *phydev)
	return genphy_restart_aneg(phydev);
}

/* Enable energy-detect power-down mode */
static int ksz9031_enable_edpd(struct phy_device *phydev)
{
	int reg;

	reg = ksz9031_extended_read(phydev, OP_DATA, 0x1C, MII_KSZ9031RN_EDPD);
	if (reg < 0)
		return reg;
	return ksz9031_extended_write(phydev, OP_DATA, 0x1C, MII_KSZ9031RN_EDPD,
				      reg | MII_KSZ9031RN_EDPD_ENABLE);
}

static int ksz9031_config_init(struct phy_device *phydev)
{
	const struct device *dev = &phydev->mdio.dev;
@@ -525,6 +541,11 @@ static int ksz9031_config_init(struct phy_device *phydev)
	};
	static const char *control_skews[2] = {"txen-skew-ps", "rxdv-skew-ps"};
	const struct device *dev_walker;
	int result;

	result = ksz9031_enable_edpd(phydev);
	if (result < 0)
		return result;

	/* The Micrel driver has a deprecated option to place phy OF
	 * properties in the MAC node. Walk up the tree of devices to
+0 −1
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ __nft_set_pktinfo_ipv4_validate(struct nft_pktinfo *pkt,
	if (!iph)
		return -1;

	iph = ip_hdr(skb);
	if (iph->ihl < 5 || iph->version != 4)
		return -1;

+12 −5
Original line number Diff line number Diff line
@@ -90,10 +90,12 @@ static void nf_set_hooks_head(struct net *net, const struct nf_hook_ops *reg,
{
	switch (reg->pf) {
	case NFPROTO_NETDEV:
#ifdef CONFIG_NETFILTER_INGRESS
		/* We already checked in nf_register_net_hook() that this is
		 * used from ingress.
		 */
		rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry);
#endif
		break;
	default:
		rcu_assign_pointer(net->nf.hooks[reg->pf][reg->hooknum],
@@ -107,10 +109,15 @@ int nf_register_net_hook(struct net *net, const struct nf_hook_ops *reg)
	struct nf_hook_entry *hooks_entry;
	struct nf_hook_entry *entry;

	if (reg->pf == NFPROTO_NETDEV &&
	    (reg->hooknum != NF_NETDEV_INGRESS ||
	     !reg->dev || dev_net(reg->dev) != net))
	if (reg->pf == NFPROTO_NETDEV) {
#ifndef CONFIG_NETFILTER_INGRESS
		if (reg->hooknum == NF_NETDEV_INGRESS)
			return -EOPNOTSUPP;
#endif
		if (reg->hooknum != NF_NETDEV_INGRESS ||
		    !reg->dev || dev_net(reg->dev) != net)
			return -EINVAL;
	}

	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
	if (!entry)
@@ -160,7 +167,7 @@ void nf_unregister_net_hook(struct net *net, const struct nf_hook_ops *reg)

	mutex_lock(&nf_hook_mutex);
	hooks_entry = nf_hook_entry_head(net, reg);
	if (hooks_entry->orig_ops == reg) {
	if (hooks_entry && hooks_entry->orig_ops == reg) {
		nf_set_hooks_head(net, reg,
				  nf_entry_dereference(hooks_entry->next));
		goto unlock;
+4 −2
Original line number Diff line number Diff line
@@ -422,7 +422,7 @@ static int nf_log_proc_dostring(struct ctl_table *table, int write,
	char buf[NFLOGGER_NAME_LEN];
	int r = 0;
	int tindex = (unsigned long)table->extra1;
	struct net *net = current->nsproxy->net_ns;
	struct net *net = table->extra2;

	if (write) {
		struct ctl_table tmp = *table;
@@ -476,7 +476,6 @@ static int netfilter_log_sysctl_init(struct net *net)
				 3, "%d", i);
			nf_log_sysctl_table[i].procname	=
				nf_log_sysctl_fnames[i];
			nf_log_sysctl_table[i].data = NULL;
			nf_log_sysctl_table[i].maxlen = NFLOGGER_NAME_LEN;
			nf_log_sysctl_table[i].mode = 0644;
			nf_log_sysctl_table[i].proc_handler =
@@ -486,6 +485,9 @@ static int netfilter_log_sysctl_init(struct net *net)
		}
	}

	for (i = NFPROTO_UNSPEC; i < NFPROTO_NUMPROTO; i++)
		table[i].extra2 = net;

	net->nf.nf_log_dir_header = register_net_sysctl(net,
						"net/netfilter/nf_log",
						table);
+2 −2
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ static int nft_limit_pkts_init(const struct nft_ctx *ctx,
	if (err < 0)
		return err;

	priv->cost = div_u64(priv->limit.nsecs, priv->limit.rate);
	priv->cost = div64_u64(priv->limit.nsecs, priv->limit.rate);
	return 0;
}

@@ -170,7 +170,7 @@ static void nft_limit_pkt_bytes_eval(const struct nft_expr *expr,
				     const struct nft_pktinfo *pkt)
{
	struct nft_limit *priv = nft_expr_priv(expr);
	u64 cost = div_u64(priv->nsecs * pkt->skb->len, priv->rate);
	u64 cost = div64_u64(priv->nsecs * pkt->skb->len, priv->rate);

	if (nft_limit_eval(priv, cost))
		regs->verdict.code = NFT_BREAK;
Loading