mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
netfilter: ctnetlink: remove get_ct indirection
Use nf_ct_get() directly, its a small inline helper without dependencies. Add CONFIG_NF_CONNTRACK guards to elide the relevant part when conntrack isn't available at all. v2: add ifdef guard around nf_ct_get call (kernel test robot) Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
committed by
Pablo Neira Ayuso
parent
a61e4b6076
commit
83ace77f51
@@ -463,8 +463,6 @@ extern struct nf_ct_hook __rcu *nf_ct_hook;
|
|||||||
struct nlattr;
|
struct nlattr;
|
||||||
|
|
||||||
struct nfnl_ct_hook {
|
struct nfnl_ct_hook {
|
||||||
struct nf_conn *(*get_ct)(const struct sk_buff *skb,
|
|
||||||
enum ip_conntrack_info *ctinfo);
|
|
||||||
size_t (*build_size)(const struct nf_conn *ct);
|
size_t (*build_size)(const struct nf_conn *ct);
|
||||||
int (*build)(struct sk_buff *skb, struct nf_conn *ct,
|
int (*build)(struct sk_buff *skb, struct nf_conn *ct,
|
||||||
enum ip_conntrack_info ctinfo,
|
enum ip_conntrack_info ctinfo,
|
||||||
|
@@ -2686,12 +2686,6 @@ ctnetlink_glue_build_size(const struct nf_conn *ct)
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_conn *ctnetlink_glue_get_ct(const struct sk_buff *skb,
|
|
||||||
enum ip_conntrack_info *ctinfo)
|
|
||||||
{
|
|
||||||
return nf_ct_get(skb, ctinfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __ctnetlink_glue_build(struct sk_buff *skb, struct nf_conn *ct)
|
static int __ctnetlink_glue_build(struct sk_buff *skb, struct nf_conn *ct)
|
||||||
{
|
{
|
||||||
const struct nf_conntrack_zone *zone;
|
const struct nf_conntrack_zone *zone;
|
||||||
@@ -2925,7 +2919,6 @@ static void ctnetlink_glue_seqadj(struct sk_buff *skb, struct nf_conn *ct,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct nfnl_ct_hook ctnetlink_glue_hook = {
|
static struct nfnl_ct_hook ctnetlink_glue_hook = {
|
||||||
.get_ct = ctnetlink_glue_get_ct,
|
|
||||||
.build_size = ctnetlink_glue_build_size,
|
.build_size = ctnetlink_glue_build_size,
|
||||||
.build = ctnetlink_glue_build,
|
.build = ctnetlink_glue_build,
|
||||||
.parse = ctnetlink_glue_parse,
|
.parse = ctnetlink_glue_parse,
|
||||||
|
@@ -43,6 +43,10 @@
|
|||||||
#include "../bridge/br_private.h"
|
#include "../bridge/br_private.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||||
|
#include <net/netfilter/nf_conntrack.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define NFULNL_COPY_DISABLED 0xff
|
#define NFULNL_COPY_DISABLED 0xff
|
||||||
#define NFULNL_NLBUFSIZ_DEFAULT NLMSG_GOODSIZE
|
#define NFULNL_NLBUFSIZ_DEFAULT NLMSG_GOODSIZE
|
||||||
#define NFULNL_TIMEOUT_DEFAULT 100 /* every second */
|
#define NFULNL_TIMEOUT_DEFAULT 100 /* every second */
|
||||||
@@ -733,14 +737,16 @@ nfulnl_log_packet(struct net *net,
|
|||||||
size += nla_total_size(sizeof(u_int32_t));
|
size += nla_total_size(sizeof(u_int32_t));
|
||||||
if (inst->flags & NFULNL_CFG_F_SEQ_GLOBAL)
|
if (inst->flags & NFULNL_CFG_F_SEQ_GLOBAL)
|
||||||
size += nla_total_size(sizeof(u_int32_t));
|
size += nla_total_size(sizeof(u_int32_t));
|
||||||
|
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||||
if (inst->flags & NFULNL_CFG_F_CONNTRACK) {
|
if (inst->flags & NFULNL_CFG_F_CONNTRACK) {
|
||||||
nfnl_ct = rcu_dereference(nfnl_ct_hook);
|
nfnl_ct = rcu_dereference(nfnl_ct_hook);
|
||||||
if (nfnl_ct != NULL) {
|
if (nfnl_ct != NULL) {
|
||||||
ct = nfnl_ct->get_ct(skb, &ctinfo);
|
ct = nf_ct_get(skb, &ctinfo);
|
||||||
if (ct != NULL)
|
if (ct != NULL)
|
||||||
size += nfnl_ct->build_size(ct);
|
size += nfnl_ct->build_size(ct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (pf == NFPROTO_NETDEV || pf == NFPROTO_BRIDGE)
|
if (pf == NFPROTO_NETDEV || pf == NFPROTO_BRIDGE)
|
||||||
size += nfulnl_get_bridge_size(skb);
|
size += nfulnl_get_bridge_size(skb);
|
||||||
|
|
||||||
|
@@ -444,13 +444,15 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
|
|||||||
|
|
||||||
nfnl_ct = rcu_dereference(nfnl_ct_hook);
|
nfnl_ct = rcu_dereference(nfnl_ct_hook);
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||||
if (queue->flags & NFQA_CFG_F_CONNTRACK) {
|
if (queue->flags & NFQA_CFG_F_CONNTRACK) {
|
||||||
if (nfnl_ct != NULL) {
|
if (nfnl_ct != NULL) {
|
||||||
ct = nfnl_ct->get_ct(entskb, &ctinfo);
|
ct = nf_ct_get(entskb, &ctinfo);
|
||||||
if (ct != NULL)
|
if (ct != NULL)
|
||||||
size += nfnl_ct->build_size(ct);
|
size += nfnl_ct->build_size(ct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (queue->flags & NFQA_CFG_F_UID_GID) {
|
if (queue->flags & NFQA_CFG_F_UID_GID) {
|
||||||
size += (nla_total_size(sizeof(u_int32_t)) /* uid */
|
size += (nla_total_size(sizeof(u_int32_t)) /* uid */
|
||||||
@@ -1104,9 +1106,10 @@ static struct nf_conn *nfqnl_ct_parse(struct nfnl_ct_hook *nfnl_ct,
|
|||||||
struct nf_queue_entry *entry,
|
struct nf_queue_entry *entry,
|
||||||
enum ip_conntrack_info *ctinfo)
|
enum ip_conntrack_info *ctinfo)
|
||||||
{
|
{
|
||||||
|
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||||
struct nf_conn *ct;
|
struct nf_conn *ct;
|
||||||
|
|
||||||
ct = nfnl_ct->get_ct(entry->skb, ctinfo);
|
ct = nf_ct_get(entry->skb, ctinfo);
|
||||||
if (ct == NULL)
|
if (ct == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@@ -1118,6 +1121,9 @@ static struct nf_conn *nfqnl_ct_parse(struct nfnl_ct_hook *nfnl_ct,
|
|||||||
NETLINK_CB(entry->skb).portid,
|
NETLINK_CB(entry->skb).portid,
|
||||||
nlmsg_report(nlh));
|
nlmsg_report(nlh));
|
||||||
return ct;
|
return ct;
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nfqa_parse_bridge(struct nf_queue_entry *entry,
|
static int nfqa_parse_bridge(struct nf_queue_entry *entry,
|
||||||
|
Reference in New Issue
Block a user