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: Mathias Krause <minipli@googlemail.com> Cc: Brad Spengler <spender@grsecurity.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8f2e5ae40e
commit
9ecf07a1d8
|
@ -203,7 +203,6 @@ struct neigh_table {
|
|||
void (*proxy_redo)(struct sk_buff *skb);
|
||||
char *id;
|
||||
struct neigh_parms parms;
|
||||
/* HACK. gc_* should follow parms without a gap! */
|
||||
int gc_interval;
|
||||
int gc_thresh1;
|
||||
int gc_thresh2;
|
||||
|
|
|
@ -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,
|
||||
sizeof(t->neigh_vars[NEIGH_VAR_GC_INTERVAL]));
|
||||
} else {
|
||||
struct neigh_table *tbl = p->tbl;
|
||||
dev_name_source = "default";
|
||||
t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = (int *)(p + 1);
|
||||
t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = (int *)(p + 1) + 1;
|
||||
t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = (int *)(p + 1) + 2;
|
||||
t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = (int *)(p + 1) + 3;
|
||||
t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = &tbl->gc_interval;
|
||||
t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = &tbl->gc_thresh1;
|
||||
t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = &tbl->gc_thresh2;
|
||||
t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = &tbl->gc_thresh3;
|
||||
}
|
||||
|
||||
if (handler) {
|
||||
|
|
Loading…
Reference in New Issue