[EMAIL PROTECTED] wrote: > Hello again, > I am trying to trace the root-cause of a failure to execute > "callback_func(rt_socket_context(sock), callback_arg);" > source file: af_packet.c > RTNET v0.7 > > Through the use of my solution/tool I am working on, and some debug > messages, I have reached the conclusion that this only happens when > "ifindex != 0" and as a result the socketbuffer memory is de-allocated > (kfree_rtskb(skb)). > > callback_func fails to execute because ifindex seems not to have been > initialized and prints a random value.
Right on the first invocation or only after some rounds? Is it cleanly
reproducible?
> Now this means that in ifindex=sock->prot.packet.ifindex,
> sock->prot.packet.ifindex is not initialized either, maybe due to the
> uncommon (hardcore would be more precise) way of typecasting
> "rtpacket_type pt" and initializing "sock"...here take a look:
>
> struct rtsocket *sock = (struct rtsocket *)(((u8 *)pt) -
> ((u8 *)&(struct rtsocket *)0)->prot.socket));
This translates to
struct rtsocket *sock = container_of(pt, struct rtsocket,
prot.packet.packet_type);
as applied some months ago between 0.9.1 and 0.9.2. Anyway, I do not see
a problem here.
>
> and it all comes down to "pt"...what goes so wrong with "pt" to
> (indirectly)contain a non-initialized pointer to ifindex???
Also initialisation happens before registration of the protocol with the
core. I rather suspect that /something/ overwrites the sock structure
during runtime (assuming that your application does not bind to a
specific interface or does this only correctly).
>
> Thank you even reading through this mumbo-jumbo!
>
If you could draft some test code for it, this may help to reproduce it
here - or at least test if later version are suffering from the same
issue. Even if this is an "ancient" version, I prefer to understand what
went wrong there to exclude that some bug just got hidden by recent changes.
Jan
signature.asc
Description: OpenPGP digital signature

