len -= hdrlen; 
int ipv6_skip_exthdr(const struct sk_buff *skb, int start, u8 *nexthdrp, int len){	u8 nexthdr = *nexthdrp;	while (ipv6_ext_hdr(nexthdr)) {		struct ipv6_opt_hdr _hdr, *hp;		int hdrlen;		if (len < (int)sizeof(struct ipv6_opt_hdr))			return -1;		if (nexthdr == NEXTHDR_NONE)			return -1;		hp = skb_header_pointer(skb, start, sizeof(_hdr), &_hdr);		if (hp == NULL)			BUG();		if (nexthdr == NEXTHDR_FRAGMENT) {			unsigned short _frag_off, *fp;			fp = skb_header_pointer(skb,						start+offsetof(struct frag_hdr,							       frag_off),						sizeof(_frag_off),						&_frag_off);			if (fp == NULL)				return -1;			if (ntohs(*fp) & ~0x7)				break;			hdrlen = 8;		} else if (nexthdr == NEXTHDR_AUTH)			hdrlen = (hp->hdrlen+2)<<2; 		else			hdrlen = ipv6_optlen(hp); 		nexthdr = hp->nexthdr;		len -= hdrlen;		start += hdrlen;	}	*nexthdrp = nexthdr;	return start;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d3d077cd4f1154e63a9858e47fe3fb1ad0c03e5/exthdrs_core.c/buggy/net/ipv6/exthdrs_core.c