Skip to content

Commit a1d768f

Browse files
TaeheeYooummakynes
authored andcommitted
netfilter: ebtables: add ebt_get_target and ebt_get_target_c
ebt_get_target similar to {ip/ip6/arp}t_get_target. and ebt_get_target_c similar to {ip/ip6/arp}t_get_target_c. Signed-off-by: Taehee Yoo <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 4351bef commit a1d768f

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

include/uapi/linux/netfilter_bridge/ebtables.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,12 @@ struct ebt_entry {
191191
unsigned char elems[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
192192
};
193193

194+
static __inline__ struct ebt_entry_target *
195+
ebt_get_target(struct ebt_entry *e)
196+
{
197+
return (void *)e + e->target_offset;
198+
}
199+
194200
/* {g,s}etsockopt numbers */
195201
#define EBT_BASE_CTL 128
196202

net/bridge/netfilter/ebtables.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,12 @@ struct ebt_entry *ebt_next_entry(const struct ebt_entry *entry)
177177
return (void *)entry + entry->next_offset;
178178
}
179179

180+
static inline const struct ebt_entry_target *
181+
ebt_get_target_c(const struct ebt_entry *e)
182+
{
183+
return ebt_get_target((struct ebt_entry *)e);
184+
}
185+
180186
/* Do some firewalling */
181187
unsigned int ebt_do_table(struct sk_buff *skb,
182188
const struct nf_hook_state *state,
@@ -230,8 +236,7 @@ unsigned int ebt_do_table(struct sk_buff *skb,
230236
*/
231237
EBT_WATCHER_ITERATE(point, ebt_do_watcher, skb, &acpar);
232238

233-
t = (struct ebt_entry_target *)
234-
(((char *)point) + point->target_offset);
239+
t = ebt_get_target_c(point);
235240
/* standard target */
236241
if (!t->u.target->target)
237242
verdict = ((struct ebt_standard_target *)t)->verdict;
@@ -637,7 +642,7 @@ ebt_cleanup_entry(struct ebt_entry *e, struct net *net, unsigned int *cnt)
637642
return 1;
638643
EBT_WATCHER_ITERATE(e, ebt_cleanup_watcher, net, NULL);
639644
EBT_MATCH_ITERATE(e, ebt_cleanup_match, net, NULL);
640-
t = (struct ebt_entry_target *)(((char *)e) + e->target_offset);
645+
t = ebt_get_target(e);
641646

642647
par.net = net;
643648
par.target = t->u.target;
@@ -716,7 +721,7 @@ ebt_check_entry(struct ebt_entry *e, struct net *net,
716721
ret = EBT_WATCHER_ITERATE(e, ebt_check_watcher, &tgpar, &j);
717722
if (ret != 0)
718723
goto cleanup_watchers;
719-
t = (struct ebt_entry_target *)(((char *)e) + e->target_offset);
724+
t = ebt_get_target(e);
720725
gap = e->next_offset - e->target_offset;
721726

722727
target = xt_request_find_target(NFPROTO_BRIDGE, t->u.name, 0);
@@ -789,8 +794,7 @@ static int check_chainloops(const struct ebt_entries *chain, struct ebt_cl_stack
789794
if (pos == nentries)
790795
continue;
791796
}
792-
t = (struct ebt_entry_target *)
793-
(((char *)e) + e->target_offset);
797+
t = ebt_get_target_c(e);
794798
if (strcmp(t->u.name, EBT_STANDARD_TARGET))
795799
goto letscontinue;
796800
if (e->target_offset + sizeof(struct ebt_standard_target) >
@@ -1396,7 +1400,7 @@ static inline int ebt_entry_to_user(struct ebt_entry *e, const char *base,
13961400
return -EFAULT;
13971401

13981402
hlp = ubase + (((char *)e + e->target_offset) - base);
1399-
t = (struct ebt_entry_target *)(((char *)e) + e->target_offset);
1403+
t = ebt_get_target_c(e);
14001404

14011405
ret = EBT_MATCH_ITERATE(e, ebt_match_to_user, base, ubase);
14021406
if (ret != 0)
@@ -1737,7 +1741,7 @@ static int compat_copy_entry_to_user(struct ebt_entry *e, void __user **dstptr,
17371741
return ret;
17381742
target_offset = e->target_offset - (origsize - *size);
17391743

1740-
t = (struct ebt_entry_target *) ((char *) e + e->target_offset);
1744+
t = ebt_get_target(e);
17411745

17421746
ret = compat_target_to_user(t, dstptr, size);
17431747
if (ret)
@@ -1785,7 +1789,7 @@ static int compat_calc_entry(const struct ebt_entry *e,
17851789
EBT_MATCH_ITERATE(e, compat_calc_match, &off);
17861790
EBT_WATCHER_ITERATE(e, compat_calc_watcher, &off);
17871791

1788-
t = (const struct ebt_entry_target *) ((char *) e + e->target_offset);
1792+
t = ebt_get_target_c(e);
17891793

17901794
off += xt_compat_target_offset(t->u.target);
17911795
off += ebt_compat_entry_padsize();

0 commit comments

Comments
 (0)