Embedded Linux Kernel Networking issue using skb buffer

Anaysis of the skb buffer shows a headroom of 2 bytes. Sometimes the headroom value of two bytes is zero and sometimes it isn't.

In calling alloc_buffer(), skb_reserve(skb, 2), skb_put() and then csum_and_copy_from_user(), the later sometimes returns -EFAULT (-14) which seems to be bad address and sometimes it succeeds.

I believe the failure is because it sometimes (possibly the first time) expects a specific value in the headroom (the data portion is always the same, it is a ping ICMP message). If anyone understands exactly what the headroom is supposed to contain and from where please advise.

Thank you for your help in advance.