Skip to content

netfilter: reduce size of hook entry points

Florian Westphal netfilter-devel 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest2 patches 2 repliesIn review

Changes since RFC from the cover letter

- bridge only needs 5, not 6 hooks (BROUTE isn't a real hookpoint)
- Use run-time check to reject register requests for hook types that don't fit the array size.
RFC tried to use BUILD_BUG_ON checks in nf_hook(), but that breaks build on some older gcc releases.

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/2netfilter: reduce size of hook entry point locationsinclude/linux/netfilter.h include/net/netns/netfilter.h net/bridge/br_netfilter_hooks.c +2 more+77 -140 replies
2/2netfilter: reduce hook array sizes to what is neededinclude/linux/netfilter.h include/net/netns/netfilter.h net/netfilter/core.c+42 -51 reply

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH nf-next 0/2] netfilter: reduce size of hook entry points

struct net contains:

struct nf_hook_entries __rcu *hooks[NFPROTO_NUMPROTO][NF_MAX_HOOKS];

where NFPROTO_NUMPROTO = 13 and NF_MAX_HOOKS = 8.

... and that needs a *lot* more space than what we really need. We only need hooks for arp, bridge, ipv4, ipv6 and decnet.

Arp only has 3 hook types, decnet has 7, all others have 5. So replace this with dedicated arrays of the correct size to save some space.

Changes since RFC:
- bridge only needs 5, not 6 hooks (BROUTE isn't a real hookpoint)
- Use run-time check to reject register requests for hook types that don't fit the array size.
RFC tried to use BUILD_BUG_ON checks in nf_hook(), but that breaks build on some older gcc releases.

 include/linux/netfilter.h       |   30 ++++++++++++++++++--
 include/net/netns/netfilter.h   |   15 +++++++++-
 net/bridge/br_netfilter_hooks.c |    2 -
 net/netfilter/core.c            |   60 ++++++++++++++++++++++++++++++++++------
 net/netfilter/nf_queue.c        |   21 ++++++++++++--
 5 files changed, 114 insertions(+), 14 deletions(-)