On Sun, 2006-08-01 at 18:46 +0100, Patrick McHardy wrote:
[..]
> >>int tcf_action_exec(struct sk_buff *skb, struct tc_action *act,
> >>                     struct tcf_result *res)
> >>{
> >>...
> >>                         ret = a->ops->act(&skb, a, res);
> >>
> >>The caller later continues to use the skb passed to tcf_action_exec
> >>and will crash if it was replaced.
> >>

> I think we discussed it at netconf. 

Ok. 

> Anyway, why do you want to keep this obvious broken behaviour?

I dont wanna keep it if it is broken Patrick;-> It seems to be a big
change at glance and normally i would like to run some serious tests
on something like this (this one you can actually test with a series of
mirred, pedit and gact while tcpdump is running - doesnt matter if
ingress or egress and then watch the hex dump of modified packets)

Ok, so lets go over the steps you described to see if i will make sense
of it.
 
Someone calls:
-> tcf_action_exec(skb ...)
---> ret = a->ops->act(&skb, a, res)
------> one or more actions 

You are saying the user (I assume either caller of tcf_action_exec() or
an action)  will crash if the skb was replaced. So lets start with
actions:

The "enviromental" rules are:   

1) if you steal any packet thou shalt clone it (as in queueing it etc).
2) If you munge any packet thou shalt call skb_expand in the case
someone else is referencing the skb. Then you "own" it. You must also
tell us if it is ok to munge the packet (TC_OK2MUNGE)
3) dropping packets you dont own is a nono. You simply return
TC_ACT_SHOT

The "enviromental" rules for callers of actions (qdiscs etc) are:
thou art responsible for freeing anything returned as being
TC_ACT_SHOT/STOLEN/QUEUED otherwise all is great.

cheers,
jamal

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to