Skip to content

Commit dcf6774

Browse files
Florian Westphalummakynes
authored andcommitted
netfilter: helper: add build-time asserts for helper data size
add a 32 byte scratch area in the helper struct instead of relying on variable sized helpers plus compile-time asserts to let us know if 32 bytes aren't enough anymore. Not having variable sized helpers will later allow to add BUILD_BUG_ON for the total size of conntrack extensions -- the helper extension is the only one that doesn't have a fixed size. The (useless!) NF_CT_HELPER_BUILD_BUG_ON(0); are added so that in case someone adds a new helper and copy-pastes from one that doesn't store private data at least some indication that this macro should be used somehow is there... Signed-off-by: Florian Westphal <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 906535b commit dcf6774

File tree

9 files changed

+20
-1
lines changed

9 files changed

+20
-1
lines changed

include/net/netfilter/nf_conntrack_helper.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,12 @@ struct nf_conn_help {
6666
u8 expecting[NF_CT_MAX_EXPECT_CLASSES];
6767

6868
/* private helper information. */
69-
char data[];
69+
char data[32] __aligned(8);
7070
};
7171

72+
#define NF_CT_HELPER_BUILD_BUG_ON(structsize) \
73+
BUILD_BUG_ON((structsize) > FIELD_SIZEOF(struct nf_conn_help, data))
74+
7275
struct nf_conntrack_helper *__nf_conntrack_helper_find(const char *name,
7376
u16 l3num, u8 protonum);
7477

net/netfilter/nf_conntrack_amanda.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ static int __init nf_conntrack_amanda_init(void)
207207
{
208208
int ret, i;
209209

210+
NF_CT_HELPER_BUILD_BUG_ON(0);
211+
210212
for (i = 0; i < ARRAY_SIZE(search); i++) {
211213
search[i].ts = textsearch_prepare(ts_algo, search[i].string,
212214
search[i].len,

net/netfilter/nf_conntrack_ftp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,8 @@ static int __init nf_conntrack_ftp_init(void)
577577
{
578578
int i, ret = 0;
579579

580+
NF_CT_HELPER_BUILD_BUG_ON(sizeof(struct nf_ct_ftp_master));
581+
580582
ftp_buffer = kmalloc(65536, GFP_KERNEL);
581583
if (!ftp_buffer)
582584
return -ENOMEM;

net/netfilter/nf_conntrack_h323_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1836,6 +1836,8 @@ static int __init nf_conntrack_h323_init(void)
18361836
{
18371837
int ret;
18381838

1839+
NF_CT_HELPER_BUILD_BUG_ON(sizeof(struct nf_ct_h323_master));
1840+
18391841
h323_buffer = kmalloc(65536, GFP_KERNEL);
18401842
if (!h323_buffer)
18411843
return -ENOMEM;

net/netfilter/nf_conntrack_netbios_ns.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ static struct nf_conntrack_helper helper __read_mostly = {
5858

5959
static int __init nf_conntrack_netbios_ns_init(void)
6060
{
61+
NF_CT_HELPER_BUILD_BUG_ON(0);
62+
6163
exp_policy.timeout = timeout;
6264
return nf_conntrack_helper_register(&helper);
6365
}

net/netfilter/nf_conntrack_pptp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,8 @@ static struct nf_conntrack_helper pptp __read_mostly = {
607607

608608
static int __init nf_conntrack_pptp_init(void)
609609
{
610+
NF_CT_HELPER_BUILD_BUG_ON(sizeof(struct nf_ct_pptp_master));
611+
610612
return nf_conntrack_helper_register(&pptp);
611613
}
612614

net/netfilter/nf_conntrack_sane.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ static int __init nf_conntrack_sane_init(void)
184184
{
185185
int i, ret = 0;
186186

187+
NF_CT_HELPER_BUILD_BUG_ON(sizeof(struct nf_ct_sane_master));
188+
187189
sane_buffer = kmalloc(65536, GFP_KERNEL);
188190
if (!sane_buffer)
189191
return -ENOMEM;

net/netfilter/nf_conntrack_sip.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1622,6 +1622,8 @@ static int __init nf_conntrack_sip_init(void)
16221622
{
16231623
int i, ret;
16241624

1625+
NF_CT_HELPER_BUILD_BUG_ON(sizeof(struct nf_ct_sip_master));
1626+
16251627
if (ports_c == 0)
16261628
ports[ports_c++] = SIP_PORT;
16271629

net/netfilter/nf_conntrack_tftp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ static int __init nf_conntrack_tftp_init(void)
113113
{
114114
int i, ret;
115115

116+
NF_CT_HELPER_BUILD_BUG_ON(0);
117+
116118
if (ports_c == 0)
117119
ports[ports_c++] = TFTP_PORT;
118120

0 commit comments

Comments
 (0)