diff options
| author | Hideaki Yoshifuji <yoshfuji@linux-ipv6.org> | 2003-04-13 21:26:37 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2003-04-13 21:26:37 -0700 |
| commit | 102408438600c3ae05e9563f0c995963898117e4 (patch) | |
| tree | a97046378374ac417a6e3f758acd8bb3c5e87f22 /include/net | |
| parent | 6457b195640568e1c1242f04ef5785a256d2cc72 (diff) | |
[IPV6]: Fixed multiple mistake extension header handling.
- double free if sending Parameter Problem message in reassembly code.
- (sometimes) broken checksum
- HbH not producing unknown header; it is only allowed at the beginning of
the exthdrs chain.
- wrong pointer value in Parameter Problem message.
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/protocol.h | 6 | ||||
| -rw-r--r-- | include/net/xfrm.h | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/include/net/protocol.h b/include/net/protocol.h index 6f493c4a23cc..6f0e4234a442 100644 --- a/include/net/protocol.h +++ b/include/net/protocol.h @@ -44,15 +44,17 @@ struct inet_protocol #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) struct inet6_protocol { - int (*handler)(struct sk_buff **skbp); + int (*handler)(struct sk_buff **skb, unsigned int *nhoffp); void (*err_handler)(struct sk_buff *skb, struct inet6_skb_parm *opt, int type, int code, int offset, __u32 info); - int no_policy; + unsigned int flags; /* INET6_PROTO_xxx */ }; +#define INET6_PROTO_NOPOLICY 0x1 +#define INET6_PROTO_FINAL 0x2 #endif /* This is used to register socket interfaces for IP protocols. */ diff --git a/include/net/xfrm.h b/include/net/xfrm.h index be3c652da8c7..6868d7a41bba 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -760,7 +760,7 @@ extern int xfrm4_rcv(struct sk_buff *skb); extern int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type); extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler); extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler); -extern int xfrm6_rcv(struct sk_buff **pskb); +extern int xfrm6_rcv(struct sk_buff **pskb, unsigned int *nhoffp); extern int xfrm6_clear_mutable_options(struct sk_buff *skb, u16 *nh_offset, int dir); extern int xfrm_user_policy(struct sock *sk, int optname, u8 *optval, int optlen); |
