Commit b7c2d793 authored by Phil Sutter's avatar Phil Sutter Committed by Pablo Neira Ayuso
Browse files

netfilter: nf_tables: Store user-defined hook ifname



Prepare for hooks with NULL ops.dev pointer (due to non-existent device)
and store the interface name and length as specified by the user upon
creation. No functional change intended.

Signed-off-by: default avatarPhil Sutter <phil@nwl.cc>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 2a67414a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1201,6 +1201,8 @@ struct nft_hook {
	struct list_head	list;
	struct nf_hook_ops	ops;
	struct rcu_head		rcu;
	char			ifname[IFNAMSIZ];
	u8			ifnamelen;
};

/**
+7 −3
Original line number Diff line number Diff line
@@ -2276,7 +2276,6 @@ static struct nft_hook *nft_netdev_hook_alloc(struct net *net,
					      const struct nlattr *attr)
{
	struct net_device *dev;
	char ifname[IFNAMSIZ];
	struct nft_hook *hook;
	int err;

@@ -2286,12 +2285,17 @@ static struct nft_hook *nft_netdev_hook_alloc(struct net *net,
		goto err_hook_alloc;
	}

	nla_strscpy(ifname, attr, IFNAMSIZ);
	err = nla_strscpy(hook->ifname, attr, IFNAMSIZ);
	if (err < 0)
		goto err_hook_dev;

	hook->ifnamelen = nla_len(attr);

	/* nf_tables_netdev_event() is called under rtnl_mutex, this is
	 * indirectly serializing all the other holders of the commit_mutex with
	 * the rtnl_mutex.
	 */
	dev = __dev_get_by_name(net, ifname);
	dev = __dev_get_by_name(net, hook->ifname);
	if (!dev) {
		err = -ENOENT;
		goto err_hook_dev;