On Tue, Sep 16, 2014 at 08:53:06PM +0100, Martin Townsend wrote:
...
> >I make another c example, hopeful more correct than the last one:
> >
> >char *foo(char *skb)
> >{
> > char *new;
> >
> > if (some_error_before_consume)
> > return ERR_PTR(-EINVAL); /* here we need to do a free(skb)
> > */
> >
> > /* UDP expand */
> > new = expand(skb, 16);
s/16/8 , argl, doesn't matter was only an example. :-)
> > if (!new)
> > return ERR_PTR(-ENOMEM);
> > consume(skb); /* parameter skb becomes dangling pointer */
> > skb = new; /* doesn't rescue it, it is different than skb from
> > caller function
> > at this point, the skb_inout had rescue it, because
> > it was a pointer
> > of pointer */
> >
> > /* IPv6 expand */
> > new = expand(skb, 40);
> > if (!new) /* some error after a consume(skb), will crash at
> > drop_skb label */
> > return ERR_PTR(-ENOMEM);
> > consume(skb);
> > skb = new;
> >
> > return skb;
> >}
> I see the problem now, once the skb has been copied and then an error occurs
> you have to return the error and the skb has been lost. Would using the
> skb->cb to store decompress status get around this problem?
mhhh, complicated... on 802.15.4 6LoWPAN we use the control block
information for fragmentation information. I don't know right now if we
get trouble when we add the "uncompression on the fly when FRAG1 was
received".
What exactly do you mean with "decompress status"?
- Alex
------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce.
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Linux-zigbee-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel