提交 d8d8f6a4 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

...@@ -143,7 +143,7 @@ static inline unsigned int sk_filter_len(struct sk_filter *fp) ...@@ -143,7 +143,7 @@ static inline unsigned int sk_filter_len(struct sk_filter *fp)
struct sk_buff; struct sk_buff;
struct sock; struct sock;
extern int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen); 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_attach_filter(struct sock_fprog *fprog, struct sock *sk);
extern int sk_chk_filter(struct sock_filter *filter, int flen); extern int sk_chk_filter(struct sock_filter *filter, int flen);
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
...@@ -45,6 +45,6 @@ ...@@ -45,6 +45,6 @@
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/types.h> #include <linux/types.h>
extern __u32 in_aton(const char *str); extern __be32 in_aton(const char *str);
#endif #endif
#endif /* _LINUX_INET_H */ #endif /* _LINUX_INET_H */
...@@ -90,14 +90,14 @@ struct iphdr { ...@@ -90,14 +90,14 @@ struct iphdr {
#error "Please fix <asm/byteorder.h>" #error "Please fix <asm/byteorder.h>"
#endif #endif
__u8 tos; __u8 tos;
__u16 tot_len; __be16 tot_len;
__u16 id; __be16 id;
__u16 frag_off; __be16 frag_off;
__u8 ttl; __u8 ttl;
__u8 protocol; __u8 protocol;
__u16 check; __u16 check;
__u32 saddr; __be32 saddr;
__u32 daddr; __be32 daddr;
/*The options start here. */ /*The options start here. */
}; };
......
...@@ -856,7 +856,7 @@ static inline int sk_filter(struct sock *sk, struct sk_buff *skb, int needlock) ...@@ -856,7 +856,7 @@ static inline int sk_filter(struct sock *sk, struct sk_buff *skb, int needlock)
filter = sk->sk_filter; filter = sk->sk_filter;
if (filter) { if (filter) {
int pkt_len = sk_run_filter(skb, filter->insns, unsigned int pkt_len = sk_run_filter(skb, filter->insns,
filter->len); filter->len);
if (!pkt_len) if (!pkt_len)
err = -EPERM; err = -EPERM;
......
...@@ -295,7 +295,7 @@ static inline __be16 br_type_trans(struct sk_buff *skb, struct net_device *dev) ...@@ -295,7 +295,7 @@ static inline __be16 br_type_trans(struct sk_buff *skb, struct net_device *dev)
unsigned char *rawp; unsigned char *rawp;
eth = eth_hdr(skb); eth = eth_hdr(skb);
if (*eth->h_dest & 1) { if (is_multicast_ether_addr(eth->h_dest)) {
if (memcmp(eth->h_dest, dev->broadcast, ETH_ALEN) == 0) if (memcmp(eth->h_dest, dev->broadcast, ETH_ALEN) == 0)
skb->pkt_type = PACKET_BROADCAST; skb->pkt_type = PACKET_BROADCAST;
else else
......
...@@ -68,7 +68,7 @@ int br_handle_frame_finish(struct sk_buff *skb) ...@@ -68,7 +68,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
} }
} }
if (dest[0] & 1) { if (is_multicast_ether_addr(dest)) {
br_flood_forward(br, skb, !passedup); br_flood_forward(br, skb, !passedup);
if (!passedup) if (!passedup)
br_pass_frame_up(br, skb); br_pass_frame_up(br, skb);
......
...@@ -394,7 +394,8 @@ static unsigned int br_nf_pre_routing_ipv6(unsigned int hook, ...@@ -394,7 +394,8 @@ static unsigned int br_nf_pre_routing_ipv6(unsigned int hook,
* target in particular. Save the original destination IP * target in particular. Save the original destination IP
* address to be able to detect DNAT afterwards. */ * address to be able to detect DNAT afterwards. */
static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb, static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
const struct net_device *in, const struct net_device *out, const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *)) int (*okfn)(struct sk_buff *))
{ {
struct iphdr *iph; struct iphdr *iph;
...@@ -412,8 +413,10 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb, ...@@ -412,8 +413,10 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
goto out; goto out;
if (skb->protocol == __constant_htons(ETH_P_8021Q)) { if (skb->protocol == __constant_htons(ETH_P_8021Q)) {
u8 *vhdr = skb->data;
skb_pull(skb, VLAN_HLEN); skb_pull(skb, VLAN_HLEN);
(skb)->nh.raw += VLAN_HLEN; skb_postpull_rcsum(skb, vhdr, VLAN_HLEN);
skb->nh.raw += VLAN_HLEN;
} }
return br_nf_pre_routing_ipv6(hook, skb, in, out, okfn); return br_nf_pre_routing_ipv6(hook, skb, in, out, okfn);
} }
...@@ -429,8 +432,10 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb, ...@@ -429,8 +432,10 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
goto out; goto out;
if (skb->protocol == __constant_htons(ETH_P_8021Q)) { if (skb->protocol == __constant_htons(ETH_P_8021Q)) {
u8 *vhdr = skb->data;
skb_pull(skb, VLAN_HLEN); skb_pull(skb, VLAN_HLEN);
(skb)->nh.raw += VLAN_HLEN; skb_postpull_rcsum(skb, vhdr, VLAN_HLEN);
skb->nh.raw += VLAN_HLEN;
} }
if (!pskb_may_pull(skb, sizeof(struct iphdr))) if (!pskb_may_pull(skb, sizeof(struct iphdr)))
......
...@@ -75,7 +75,7 @@ static inline void *load_pointer(struct sk_buff *skb, int k, ...@@ -75,7 +75,7 @@ static inline void *load_pointer(struct sk_buff *skb, int k,
* len is the number of filter blocks in the array. * len is the number of filter blocks in the array.
*/ */
int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen) unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen)
{ {
struct sock_filter *fentry; /* We walk down these */ struct sock_filter *fentry; /* We walk down these */
void *ptr; void *ptr;
...@@ -241,9 +241,9 @@ int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen) ...@@ -241,9 +241,9 @@ int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen)
A = X; A = X;
continue; continue;
case BPF_RET|BPF_K: case BPF_RET|BPF_K:
return ((unsigned int)fentry->k); return fentry->k;
case BPF_RET|BPF_A: case BPF_RET|BPF_A:
return ((unsigned int)A); return A;
case BPF_ST: case BPF_ST:
mem[fentry->k] = A; mem[fentry->k] = A;
continue; continue;
......
...@@ -473,7 +473,6 @@ static char version[] __initdata = VERSION; ...@@ -473,7 +473,6 @@ static char version[] __initdata = VERSION;
static int pktgen_remove_device(struct pktgen_thread* t, struct pktgen_dev *i); static int pktgen_remove_device(struct pktgen_thread* t, struct pktgen_dev *i);
static int pktgen_add_device(struct pktgen_thread* t, const char* ifname); static int pktgen_add_device(struct pktgen_thread* t, const char* ifname);
static struct pktgen_thread* pktgen_find_thread(const char* name);
static struct pktgen_dev *pktgen_find_dev(struct pktgen_thread* t, const char* ifname); static struct pktgen_dev *pktgen_find_dev(struct pktgen_thread* t, const char* ifname);
static int pktgen_device_event(struct notifier_block *, unsigned long, void *); static int pktgen_device_event(struct notifier_block *, unsigned long, void *);
static void pktgen_run_all_threads(void); static void pktgen_run_all_threads(void);
...@@ -2883,7 +2882,7 @@ static int pktgen_add_device(struct pktgen_thread *t, const char* ifname) ...@@ -2883,7 +2882,7 @@ static int pktgen_add_device(struct pktgen_thread *t, const char* ifname)
return add_dev_to_thread(t, pkt_dev); return add_dev_to_thread(t, pkt_dev);
} }
static struct pktgen_thread *pktgen_find_thread(const char* name) static struct pktgen_thread * __init pktgen_find_thread(const char* name)
{ {
struct pktgen_thread *t = NULL; struct pktgen_thread *t = NULL;
...@@ -2900,7 +2899,7 @@ static struct pktgen_thread *pktgen_find_thread(const char* name) ...@@ -2900,7 +2899,7 @@ static struct pktgen_thread *pktgen_find_thread(const char* name)
return t; return t;
} }
static int pktgen_create_thread(const char* name, int cpu) static int __init pktgen_create_thread(const char* name, int cpu)
{ {
struct pktgen_thread *t = NULL; struct pktgen_thread *t = NULL;
struct proc_dir_entry *pe; struct proc_dir_entry *pe;
......
...@@ -162,7 +162,7 @@ EXPORT_SYMBOL(net_srandom); ...@@ -162,7 +162,7 @@ EXPORT_SYMBOL(net_srandom);
* is otherwise not dependent on the TCP/IP stack. * is otherwise not dependent on the TCP/IP stack.
*/ */
__u32 in_aton(const char *str) __be32 in_aton(const char *str)
{ {
unsigned long l; unsigned long l;
unsigned int val; unsigned int val;
......
...@@ -163,7 +163,7 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) ...@@ -163,7 +163,7 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
skb_pull(skb,ETH_HLEN); skb_pull(skb,ETH_HLEN);
eth = eth_hdr(skb); eth = eth_hdr(skb);
if (*eth->h_dest&1) { if (is_multicast_ether_addr(eth->h_dest)) {
if (!compare_ether_addr(eth->h_dest, dev->broadcast)) if (!compare_ether_addr(eth->h_dest, dev->broadcast))
skb->pkt_type = PACKET_BROADCAST; skb->pkt_type = PACKET_BROADCAST;
else else
......
...@@ -383,7 +383,7 @@ static struct ipq *ip_frag_create(unsigned hash, struct iphdr *iph, u32 user) ...@@ -383,7 +383,7 @@ static struct ipq *ip_frag_create(unsigned hash, struct iphdr *iph, u32 user)
*/ */
static inline struct ipq *ip_find(struct iphdr *iph, u32 user) static inline struct ipq *ip_find(struct iphdr *iph, u32 user)
{ {
__u16 id = iph->id; __be16 id = iph->id;
__u32 saddr = iph->saddr; __u32 saddr = iph->saddr;
__u32 daddr = iph->daddr; __u32 daddr = iph->daddr;
__u8 protocol = iph->protocol; __u8 protocol = iph->protocol;
......
...@@ -418,7 +418,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) ...@@ -418,7 +418,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
struct sk_buff *skb2; struct sk_buff *skb2;
unsigned int mtu, hlen, left, len, ll_rs; unsigned int mtu, hlen, left, len, ll_rs;
int offset; int offset;
int not_last_frag; __be16 not_last_frag;
struct rtable *rt = (struct rtable*)skb->dst; struct rtable *rt = (struct rtable*)skb->dst;
int err = 0; int err = 0;
...@@ -1180,7 +1180,7 @@ int ip_push_pending_frames(struct sock *sk) ...@@ -1180,7 +1180,7 @@ int ip_push_pending_frames(struct sock *sk)
struct ip_options *opt = NULL; struct ip_options *opt = NULL;
struct rtable *rt = inet->cork.rt; struct rtable *rt = inet->cork.rt;
struct iphdr *iph; struct iphdr *iph;
int df = 0; __be16 df = 0;
__u8 ttl; __u8 ttl;
int err = 0; int err = 0;
......
...@@ -322,7 +322,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, ...@@ -322,7 +322,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
struct net_device *tdev; /* Device to other host */ struct net_device *tdev; /* Device to other host */
struct iphdr *old_iph = skb->nh.iph; struct iphdr *old_iph = skb->nh.iph;
u8 tos = old_iph->tos; u8 tos = old_iph->tos;
u16 df = old_iph->frag_off; __be16 df = old_iph->frag_off;
struct iphdr *iph; /* Our new IP header */ struct iphdr *iph; /* Our new IP header */
int max_headroom; /* The extra header space needed */ int max_headroom; /* The extra header space needed */
int mtu; int mtu;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/skbuff.h> #include <linux/skbuff.h>
#include <linux/netfilter.h> #include <linux/netfilter.h>
#include <linux/interrupt.h>
#if defined(CONFIG_IP_NF_CONNTRACK) || defined(CONFIG_IP_NF_CONNTRACK_MODULE) #if defined(CONFIG_IP_NF_CONNTRACK) || defined(CONFIG_IP_NF_CONNTRACK_MODULE)
#include <linux/netfilter_ipv4/ip_conntrack.h> #include <linux/netfilter_ipv4/ip_conntrack.h>
#include <linux/netfilter_ipv4/ip_conntrack_core.h> #include <linux/netfilter_ipv4/ip_conntrack_core.h>
......
...@@ -540,12 +540,7 @@ static struct sock *x25_make_new(struct sock *osk) ...@@ -540,12 +540,7 @@ static struct sock *x25_make_new(struct sock *osk)
sk->sk_state = TCP_ESTABLISHED; sk->sk_state = TCP_ESTABLISHED;
sk->sk_sleep = osk->sk_sleep; sk->sk_sleep = osk->sk_sleep;
sk->sk_backlog_rcv = osk->sk_backlog_rcv; sk->sk_backlog_rcv = osk->sk_backlog_rcv;
sock_copy_flags(sk, osk);
if (sock_flag(osk, SOCK_ZAPPED))
sock_set_flag(sk, SOCK_ZAPPED);
if (sock_flag(osk, SOCK_DBG))
sock_set_flag(sk, SOCK_DBG);
ox25 = x25_sk(osk); ox25 = x25_sk(osk);
x25->t21 = ox25->t21; x25->t21 = ox25->t21;
......
...@@ -802,6 +802,7 @@ static int xfrm_add_policy(struct sk_buff *skb, struct nlmsghdr *nlh, void **xfr ...@@ -802,6 +802,7 @@ static int xfrm_add_policy(struct sk_buff *skb, struct nlmsghdr *nlh, void **xfr
excl = nlh->nlmsg_type == XFRM_MSG_NEWPOLICY; excl = nlh->nlmsg_type == XFRM_MSG_NEWPOLICY;
err = xfrm_policy_insert(p->dir, xp, excl); err = xfrm_policy_insert(p->dir, xp, excl);
if (err) { if (err) {
security_xfrm_policy_free(xp);
kfree(xp); kfree(xp);
return err; return err;
} }
......
...@@ -238,5 +238,4 @@ ...@@ -238,5 +238,4 @@
S_(SECCLASS_NSCD, NSCD__SHMEMHOST, "shmemhost") S_(SECCLASS_NSCD, NSCD__SHMEMHOST, "shmemhost")
S_(SECCLASS_ASSOCIATION, ASSOCIATION__SENDTO, "sendto") S_(SECCLASS_ASSOCIATION, ASSOCIATION__SENDTO, "sendto")
S_(SECCLASS_ASSOCIATION, ASSOCIATION__RECVFROM, "recvfrom") S_(SECCLASS_ASSOCIATION, ASSOCIATION__RECVFROM, "recvfrom")
S_(SECCLASS_ASSOCIATION, ASSOCIATION__RELABELFROM, "relabelfrom") S_(SECCLASS_ASSOCIATION, ASSOCIATION__SETCONTEXT, "setcontext")
S_(SECCLASS_ASSOCIATION, ASSOCIATION__RELABELTO, "relabelto")
...@@ -908,8 +908,7 @@ ...@@ -908,8 +908,7 @@
#define ASSOCIATION__SENDTO 0x00000001UL #define ASSOCIATION__SENDTO 0x00000001UL
#define ASSOCIATION__RECVFROM 0x00000002UL #define ASSOCIATION__RECVFROM 0x00000002UL
#define ASSOCIATION__RELABELFROM 0x00000004UL #define ASSOCIATION__SETCONTEXT 0x00000004UL
#define ASSOCIATION__RELABELTO 0x00000008UL
#define NETLINK_KOBJECT_UEVENT_SOCKET__IOCTL 0x00000001UL #define NETLINK_KOBJECT_UEVENT_SOCKET__IOCTL 0x00000001UL
#define NETLINK_KOBJECT_UEVENT_SOCKET__READ 0x00000002UL #define NETLINK_KOBJECT_UEVENT_SOCKET__READ 0x00000002UL
......
...@@ -137,15 +137,9 @@ static int selinux_xfrm_sec_ctx_alloc(struct xfrm_sec_ctx **ctxp, struct xfrm_us ...@@ -137,15 +137,9 @@ static int selinux_xfrm_sec_ctx_alloc(struct xfrm_sec_ctx **ctxp, struct xfrm_us
* Must be permitted to relabel from default socket type (process type) * Must be permitted to relabel from default socket type (process type)
* to specified context * to specified context
*/ */
rc = avc_has_perm(tsec->sid, tsec->sid,
SECCLASS_ASSOCIATION,
ASSOCIATION__RELABELFROM, NULL);
if (rc)
goto out;
rc = avc_has_perm(tsec->sid, ctx->ctx_sid, rc = avc_has_perm(tsec->sid, ctx->ctx_sid,
SECCLASS_ASSOCIATION, SECCLASS_ASSOCIATION,
ASSOCIATION__RELABELTO, NULL); ASSOCIATION__SETCONTEXT, NULL);
if (rc) if (rc)
goto out; goto out;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册