Commit 9ecf07a1 authored by Mathias Krause's avatar Mathias Krause Committed by David S. Miller

neigh: sysctl - simplify address calculation of gc_* variables

The code in neigh_sysctl_register() relies on a specific layout of
struct neigh_table, namely that the 'gc_*' variables are directly
following the 'parms' member in a specific order. The code, though,
expresses this in the most ugly way.

Get rid of the ugly casts and use the 'tbl' pointer to get a handle to
the table. This way we can refer to the 'gc_*' variables directly.

Similarly seen in the grsecurity patch, written by Brad Spengler.
Signed-off-by: default avatarMathias Krause <minipli@googlemail.com>
Cc: Brad Spengler <spender@grsecurity.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8f2e5ae4
...@@ -203,7 +203,6 @@ struct neigh_table { ...@@ -203,7 +203,6 @@ struct neigh_table {
void (*proxy_redo)(struct sk_buff *skb); void (*proxy_redo)(struct sk_buff *skb);
char *id; char *id;
struct neigh_parms parms; struct neigh_parms parms;
/* HACK. gc_* should follow parms without a gap! */
int gc_interval; int gc_interval;
int gc_thresh1; int gc_thresh1;
int gc_thresh2; int gc_thresh2;
......
...@@ -3059,11 +3059,12 @@ int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p, ...@@ -3059,11 +3059,12 @@ int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
memset(&t->neigh_vars[NEIGH_VAR_GC_INTERVAL], 0, memset(&t->neigh_vars[NEIGH_VAR_GC_INTERVAL], 0,
sizeof(t->neigh_vars[NEIGH_VAR_GC_INTERVAL])); sizeof(t->neigh_vars[NEIGH_VAR_GC_INTERVAL]));
} else { } else {
struct neigh_table *tbl = p->tbl;
dev_name_source = "default"; dev_name_source = "default";
t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = (int *)(p + 1); t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = &tbl->gc_interval;
t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = (int *)(p + 1) + 1; t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = &tbl->gc_thresh1;
t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = (int *)(p + 1) + 2; t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = &tbl->gc_thresh2;
t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = (int *)(p + 1) + 3; t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = &tbl->gc_thresh3;
} }
if (handler) { if (handler) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment