This question is i guess is more relevant when we have IP tunnels like GRE etc. When a packet traverses the networking stacks, each stack is allowed to manipulate the sk_buff by using push, pull, trim functions.

Now, if a higher layer protocol stack wants to access information from an already processed lower layer, for example say GRE, is that information guaranteed to be present in the packet ?

An example of such a packet would be: ETH---IP-GRE---IP---My-Proto.