mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 14:13:01 -04:00
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (51 commits) [IPV6]: Fix again the fl6_sock_lookup() fixed locking [NETFILTER]: nf_conntrack_tcp: fix connection reopening fix [IPV6]: Fix race in ipv6_flowlabel_opt() when inserting two labels [IPV6]: Lost locking in fl6_sock_lookup [IPV6]: Lost locking when inserting a flowlabel in ipv6_fl_list [NETFILTER]: xt_sctp: fix mistake to pass a pointer where array is required [NET]: Fix OOPS due to missing check in dev_parse_header(). [TCP]: Remove lost_retrans zero seqno special cases [NET]: fix carrier-on bug? [NET]: Fix uninitialised variable in ip_frag_reasm() [IPSEC]: Rename mode to outer_mode and add inner_mode [IPSEC]: Disallow combinations of RO and AH/ESP/IPCOMP [IPSEC]: Use the top IPv4 route's peer instead of the bottom [IPSEC]: Store afinfo pointer in xfrm_mode [IPSEC]: Add missing BEET checks [IPSEC]: Move type and mode map into xfrm_state.c [IPSEC]: Fix length check in xfrm_parse_spi [IPSEC]: Move ip_summed zapping out of xfrm6_rcv_spi [IPSEC]: Get nexthdr from caller in xfrm6_rcv_spi [IPSEC]: Move tunnel parsing for IPv4 out of xfrm4_input ...
This commit is contained in:
commit
a57793651f
56 changed files with 4672 additions and 4764 deletions
|
|
@ -146,6 +146,7 @@ struct sock;
|
|||
|
||||
extern unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen);
|
||||
extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
|
||||
extern int sk_detach_filter(struct sock *sk);
|
||||
extern int sk_chk_filter(struct sock_filter *filter, int flen);
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -827,7 +827,7 @@ static inline int dev_parse_header(const struct sk_buff *skb,
|
|||
{
|
||||
const struct net_device *dev = skb->dev;
|
||||
|
||||
if (!dev->header_ops->parse)
|
||||
if (!dev->header_ops || !dev->header_ops->parse)
|
||||
return 0;
|
||||
return dev->header_ops->parse(skb, haddr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,9 +7,6 @@
|
|||
|
||||
#define XT_SCTP_VALID_FLAGS 0x07
|
||||
|
||||
#define ELEMCOUNT(x) (sizeof(x)/sizeof(x[0]))
|
||||
|
||||
|
||||
struct xt_sctp_flag_info {
|
||||
u_int8_t chunktype;
|
||||
u_int8_t flag;
|
||||
|
|
@ -59,21 +56,21 @@ struct xt_sctp_info {
|
|||
#define SCTP_CHUNKMAP_RESET(chunkmap) \
|
||||
do { \
|
||||
int i; \
|
||||
for (i = 0; i < ELEMCOUNT(chunkmap); i++) \
|
||||
for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \
|
||||
chunkmap[i] = 0; \
|
||||
} while (0)
|
||||
|
||||
#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \
|
||||
do { \
|
||||
int i; \
|
||||
for (i = 0; i < ELEMCOUNT(chunkmap); i++) \
|
||||
for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \
|
||||
chunkmap[i] = ~0; \
|
||||
} while (0)
|
||||
|
||||
#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \
|
||||
do { \
|
||||
int i; \
|
||||
for (i = 0; i < ELEMCOUNT(chunkmap); i++) \
|
||||
for (i = 0; i < ARRAY_SIZE(srcmap); i++) \
|
||||
destmap[i] = srcmap[i]; \
|
||||
} while (0)
|
||||
|
||||
|
|
@ -81,7 +78,7 @@ struct xt_sctp_info {
|
|||
({ \
|
||||
int i; \
|
||||
int flag = 1; \
|
||||
for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \
|
||||
for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \
|
||||
if (chunkmap[i]) { \
|
||||
flag = 0; \
|
||||
break; \
|
||||
|
|
@ -94,7 +91,7 @@ struct xt_sctp_info {
|
|||
({ \
|
||||
int i; \
|
||||
int flag = 1; \
|
||||
for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \
|
||||
for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \
|
||||
if (chunkmap[i] != ~0) { \
|
||||
flag = 0; \
|
||||
break; \
|
||||
|
|
|
|||
|
|
@ -39,8 +39,13 @@ struct inet_frags {
|
|||
struct inet_frags_ctl *ctl;
|
||||
|
||||
unsigned int (*hashfn)(struct inet_frag_queue *);
|
||||
void (*constructor)(struct inet_frag_queue *q,
|
||||
void *arg);
|
||||
void (*destructor)(struct inet_frag_queue *);
|
||||
void (*skb_free)(struct sk_buff *);
|
||||
int (*match)(struct inet_frag_queue *q,
|
||||
void *arg);
|
||||
void (*frag_expire)(unsigned long data);
|
||||
};
|
||||
|
||||
void inet_frags_init(struct inet_frags *);
|
||||
|
|
@ -50,6 +55,8 @@ void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f);
|
|||
void inet_frag_destroy(struct inet_frag_queue *q,
|
||||
struct inet_frags *f, int *work);
|
||||
int inet_frag_evictor(struct inet_frags *f);
|
||||
struct inet_frag_queue *inet_frag_find(struct inet_frags *f, void *key,
|
||||
unsigned int hash);
|
||||
|
||||
static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -377,6 +377,17 @@ static inline int ipv6_prefix_equal(const struct in6_addr *a1,
|
|||
prefixlen);
|
||||
}
|
||||
|
||||
struct inet_frag_queue;
|
||||
|
||||
struct ip6_create_arg {
|
||||
__be32 id;
|
||||
struct in6_addr *src;
|
||||
struct in6_addr *dst;
|
||||
};
|
||||
|
||||
void ip6_frag_init(struct inet_frag_queue *q, void *a);
|
||||
int ip6_frag_match(struct inet_frag_queue *q, void *a);
|
||||
|
||||
static inline int ipv6_addr_any(const struct in6_addr *a)
|
||||
{
|
||||
return ((a->s6_addr32[0] | a->s6_addr32[1] |
|
||||
|
|
|
|||
|
|
@ -904,16 +904,6 @@ static inline int sk_filter(struct sock *sk, struct sk_buff *skb)
|
|||
return err;
|
||||
}
|
||||
|
||||
/**
|
||||
* sk_filter_rcu_free: Free a socket filter
|
||||
* @rcu: rcu_head that contains the sk_filter to free
|
||||
*/
|
||||
static inline void sk_filter_rcu_free(struct rcu_head *rcu)
|
||||
{
|
||||
struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu);
|
||||
kfree(fp);
|
||||
}
|
||||
|
||||
/**
|
||||
* sk_filter_release: Release a socket filter
|
||||
* @sk: socket
|
||||
|
|
@ -922,14 +912,18 @@ static inline void sk_filter_rcu_free(struct rcu_head *rcu)
|
|||
* Remove a filter from a socket and release its resources.
|
||||
*/
|
||||
|
||||
static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp)
|
||||
static inline void sk_filter_release(struct sk_filter *fp)
|
||||
{
|
||||
if (atomic_dec_and_test(&fp->refcnt))
|
||||
kfree(fp);
|
||||
}
|
||||
|
||||
static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
|
||||
{
|
||||
unsigned int size = sk_filter_len(fp);
|
||||
|
||||
atomic_sub(size, &sk->sk_omem_alloc);
|
||||
|
||||
if (atomic_dec_and_test(&fp->refcnt))
|
||||
call_rcu_bh(&fp->rcu, sk_filter_rcu_free);
|
||||
sk_filter_release(fp);
|
||||
}
|
||||
|
||||
static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
|
||||
|
|
|
|||
|
|
@ -186,7 +186,8 @@ struct xfrm_state
|
|||
/* Reference to data common to all the instances of this
|
||||
* transformer. */
|
||||
struct xfrm_type *type;
|
||||
struct xfrm_mode *mode;
|
||||
struct xfrm_mode *inner_mode;
|
||||
struct xfrm_mode *outer_mode;
|
||||
|
||||
/* Security context */
|
||||
struct xfrm_sec_ctx *security;
|
||||
|
|
@ -228,8 +229,6 @@ struct xfrm_type;
|
|||
struct xfrm_dst;
|
||||
struct xfrm_policy_afinfo {
|
||||
unsigned short family;
|
||||
struct xfrm_type *type_map[IPPROTO_MAX];
|
||||
struct xfrm_mode *mode_map[XFRM_MODE_MAX];
|
||||
struct dst_ops *dst_ops;
|
||||
void (*garbage_collect)(void);
|
||||
int (*dst_lookup)(struct xfrm_dst **dst, struct flowi *fl);
|
||||
|
|
@ -255,7 +254,10 @@ extern void km_state_expired(struct xfrm_state *x, int hard, u32 pid);
|
|||
extern int __xfrm_state_delete(struct xfrm_state *x);
|
||||
|
||||
struct xfrm_state_afinfo {
|
||||
unsigned short family;
|
||||
unsigned int family;
|
||||
struct module *owner;
|
||||
struct xfrm_type *type_map[IPPROTO_MAX];
|
||||
struct xfrm_mode *mode_map[XFRM_MODE_MAX];
|
||||
int (*init_flags)(struct xfrm_state *x);
|
||||
void (*init_tempsel)(struct xfrm_state *x, struct flowi *fl,
|
||||
struct xfrm_tmpl *tmpl,
|
||||
|
|
@ -267,8 +269,6 @@ struct xfrm_state_afinfo {
|
|||
|
||||
extern int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
|
||||
extern int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
|
||||
extern struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned short family);
|
||||
extern void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo);
|
||||
|
||||
extern void xfrm_state_delete_tunnel(struct xfrm_state *x);
|
||||
|
||||
|
|
@ -295,8 +295,6 @@ struct xfrm_type
|
|||
|
||||
extern int xfrm_register_type(struct xfrm_type *type, unsigned short family);
|
||||
extern int xfrm_unregister_type(struct xfrm_type *type, unsigned short family);
|
||||
extern struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family);
|
||||
extern void xfrm_put_type(struct xfrm_type *type);
|
||||
|
||||
struct xfrm_mode {
|
||||
int (*input)(struct xfrm_state *x, struct sk_buff *skb);
|
||||
|
|
@ -314,14 +312,19 @@ struct xfrm_mode {
|
|||
*/
|
||||
int (*output)(struct xfrm_state *x,struct sk_buff *skb);
|
||||
|
||||
struct xfrm_state_afinfo *afinfo;
|
||||
struct module *owner;
|
||||
unsigned int encap;
|
||||
int flags;
|
||||
};
|
||||
|
||||
/* Flags for xfrm_mode. */
|
||||
enum {
|
||||
XFRM_MODE_FLAG_TUNNEL = 1,
|
||||
};
|
||||
|
||||
extern int xfrm_register_mode(struct xfrm_mode *mode, int family);
|
||||
extern int xfrm_unregister_mode(struct xfrm_mode *mode, int family);
|
||||
extern struct xfrm_mode *xfrm_get_mode(unsigned int encap, int family);
|
||||
extern void xfrm_put_mode(struct xfrm_mode *mode);
|
||||
|
||||
struct xfrm_tmpl
|
||||
{
|
||||
|
|
@ -1046,11 +1049,19 @@ extern void xfrm_replay_notify(struct xfrm_state *x, int event);
|
|||
extern int xfrm_state_mtu(struct xfrm_state *x, int mtu);
|
||||
extern int xfrm_init_state(struct xfrm_state *x);
|
||||
extern int xfrm_output(struct sk_buff *skb);
|
||||
extern int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
|
||||
int encap_type);
|
||||
extern int xfrm4_rcv(struct sk_buff *skb);
|
||||
|
||||
static inline int xfrm4_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi)
|
||||
{
|
||||
return xfrm4_rcv_encap(skb, nexthdr, spi, 0);
|
||||
}
|
||||
|
||||
extern int xfrm4_output(struct sk_buff *skb);
|
||||
extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short family);
|
||||
extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family);
|
||||
extern int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi);
|
||||
extern int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi);
|
||||
extern int xfrm6_rcv(struct sk_buff *skb);
|
||||
extern int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
|
||||
xfrm_address_t *saddr, u8 proto);
|
||||
|
|
|
|||
Loading…
Reference in a new issue