Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 612b322a authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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

* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [IPV6]: fix flowlabel seqfile handling
  [IPV6]: return EINVAL for invalid address with flowlabel lease request
  [SCTP]: Remove temporary associations from backlog and hash.
  [SCTP]: Correctly set IP id for SCTP traffic
  [NetLabel]: protect the CIPSOv4 socket option from setsockopt()
  [NETFILTER]: ip_tables: compat code module refcounting fix
  [NETFILTER]: nf_conntrack: add missing unlock in get_next_corpse()
  [NETFILTER]: ip_tables: compat error way cleanup
  [NETFILTER]: Missed and reordered checks in {arp,ip,ip6}_tables
  [NETFILTER]: remove masq/NAT from ip6tables Kconfig help
  [IPV6]: fix lockup via /proc/net/ip6_flowlabel
  [NET]: fix uaccess handling
  [SCTP]: Always linearise packet on input
  [ETH1394]: Fix unaligned accesses.
  [DCCP]: fix printk format warnings
  [NET]: Fix segmentation of linear packets
  [XFRM] xfrm_user: Fix unaligned accesses.
  [APPLETALK]: Fix potential OOPS in atalk_sendmsg().
  [NET] sealevel: uses arp_broken_ops
parents d2c59a22 1b7c2dbc
Loading
Loading
Loading
Loading
+12 −8
Original line number Original line Diff line number Diff line
@@ -64,6 +64,7 @@
#include <linux/ethtool.h>
#include <linux/ethtool.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <asm/delay.h>
#include <asm/delay.h>
#include <asm/unaligned.h>
#include <net/arp.h>
#include <net/arp.h>


#include "config_roms.h"
#include "config_roms.h"
@@ -491,7 +492,7 @@ static void ether1394_reset_priv (struct net_device *dev, int set_mtu)
	int i;
	int i;
	struct eth1394_priv *priv = netdev_priv(dev);
	struct eth1394_priv *priv = netdev_priv(dev);
	struct hpsb_host *host = priv->host;
	struct hpsb_host *host = priv->host;
	u64 guid = *((u64*)&(host->csr.rom->bus_info_data[3]));
	u64 guid = get_unaligned((u64*)&(host->csr.rom->bus_info_data[3]));
	u16 maxpayload = 1 << (host->csr.max_rec + 1);
	u16 maxpayload = 1 << (host->csr.max_rec + 1);
	int max_speed = IEEE1394_SPEED_MAX;
	int max_speed = IEEE1394_SPEED_MAX;


@@ -514,8 +515,8 @@ static void ether1394_reset_priv (struct net_device *dev, int set_mtu)
				      ETHER1394_GASP_OVERHEAD)));
				      ETHER1394_GASP_OVERHEAD)));


		/* Set our hardware address while we're at it */
		/* Set our hardware address while we're at it */
		*(u64*)dev->dev_addr = guid;
		memcpy(dev->dev_addr, &guid, sizeof(u64));
		*(u64*)dev->broadcast = ~0x0ULL;
		memset(dev->broadcast, 0xff, sizeof(u64));
	}
	}


	spin_unlock_irqrestore (&priv->lock, flags);
	spin_unlock_irqrestore (&priv->lock, flags);
@@ -894,6 +895,7 @@ static inline u16 ether1394_parse_encap(struct sk_buff *skb,
		u16 maxpayload;
		u16 maxpayload;
		struct eth1394_node_ref *node;
		struct eth1394_node_ref *node;
		struct eth1394_node_info *node_info;
		struct eth1394_node_info *node_info;
		__be64 guid;


		/* Sanity check. MacOSX seems to be sending us 131 in this
		/* Sanity check. MacOSX seems to be sending us 131 in this
		 * field (atleast on my Panther G5). Not sure why. */
		 * field (atleast on my Panther G5). Not sure why. */
@@ -902,8 +904,9 @@ static inline u16 ether1394_parse_encap(struct sk_buff *skb,


		maxpayload = min(eth1394_speedto_maxpayload[sspd], (u16)(1 << (max_rec + 1)));
		maxpayload = min(eth1394_speedto_maxpayload[sspd], (u16)(1 << (max_rec + 1)));


		guid = get_unaligned(&arp1394->s_uniq_id);
		node = eth1394_find_node_guid(&priv->ip_node_list,
		node = eth1394_find_node_guid(&priv->ip_node_list,
					      be64_to_cpu(arp1394->s_uniq_id));
					      be64_to_cpu(guid));
		if (!node) {
		if (!node) {
			return 0;
			return 0;
		}
		}
@@ -931,10 +934,9 @@ static inline u16 ether1394_parse_encap(struct sk_buff *skb,
		arp_ptr += arp->ar_pln;		/* skip over sender IP addr */
		arp_ptr += arp->ar_pln;		/* skip over sender IP addr */


		if (arp->ar_op == htons(ARPOP_REQUEST))
		if (arp->ar_op == htons(ARPOP_REQUEST))
			/* just set ARP req target unique ID to 0 */
			memset(arp_ptr, 0, sizeof(u64));
			*((u64*)arp_ptr) = 0;
		else
		else
			*((u64*)arp_ptr) = *((u64*)dev->dev_addr);
			memcpy(arp_ptr, dev->dev_addr, sizeof(u64));
	}
	}


	/* Now add the ethernet header. */
	/* Now add the ethernet header. */
@@ -1675,8 +1677,10 @@ static int ether1394_tx (struct sk_buff *skb, struct net_device *dev)
		if (max_payload < dg_size + hdr_type_len[ETH1394_HDR_LF_UF])
		if (max_payload < dg_size + hdr_type_len[ETH1394_HDR_LF_UF])
			priv->bc_dgl++;
			priv->bc_dgl++;
	} else {
	} else {
		__be64 guid = get_unaligned((u64 *)eth->h_dest);

		node = eth1394_find_node_guid(&priv->ip_node_list,
		node = eth1394_find_node_guid(&priv->ip_node_list,
					      be64_to_cpu(*(u64*)eth->h_dest));
					      be64_to_cpu(guid));
		if (!node) {
		if (!node) {
			ret = -EAGAIN;
			ret = -EAGAIN;
			goto fail;
			goto fail;
+1 −1
Original line number Original line Diff line number Diff line
@@ -127,7 +127,7 @@ config LANMEDIA
# There is no way to detect a Sealevel board. Force it modular
# There is no way to detect a Sealevel board. Force it modular
config SEALEVEL_4021
config SEALEVEL_4021
	tristate "Sealevel Systems 4021 support"
	tristate "Sealevel Systems 4021 support"
	depends on WAN && ISA && m && ISA_DMA_API
	depends on WAN && ISA && m && ISA_DMA_API && INET
	help
	help
	  This is a driver for the Sealevel Systems ACB 56 serial I/O adapter.
	  This is a driver for the Sealevel Systems ACB 56 serial I/O adapter.


+0 −2
Original line number Original line Diff line number Diff line
@@ -1584,7 +1584,6 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr


	if (usat->sat_addr.s_net || usat->sat_addr.s_node == ATADDR_ANYNODE) {
	if (usat->sat_addr.s_net || usat->sat_addr.s_node == ATADDR_ANYNODE) {
		rt = atrtr_find(&usat->sat_addr);
		rt = atrtr_find(&usat->sat_addr);
		dev = rt->dev;
	} else {
	} else {
		struct atalk_addr at_hint;
		struct atalk_addr at_hint;


@@ -1592,7 +1591,6 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
		at_hint.s_net  = at->src_net;
		at_hint.s_net  = at->src_net;


		rt = atrtr_find(&at_hint);
		rt = atrtr_find(&at_hint);
		dev = rt->dev;
	}
	}
	if (!rt)
	if (!rt)
		return -ENETUNREACH;
		return -ENETUNREACH;
+4 −5
Original line number Original line Diff line number Diff line
@@ -1946,7 +1946,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
	do {
	do {
		struct sk_buff *nskb;
		struct sk_buff *nskb;
		skb_frag_t *frag;
		skb_frag_t *frag;
		int hsize, nsize;
		int hsize;
		int k;
		int k;
		int size;
		int size;


@@ -1957,11 +1957,10 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
		hsize = skb_headlen(skb) - offset;
		hsize = skb_headlen(skb) - offset;
		if (hsize < 0)
		if (hsize < 0)
			hsize = 0;
			hsize = 0;
		nsize = hsize + doffset;
		if (hsize > len || !sg)
		if (nsize > len + doffset || !sg)
			hsize = len;
			nsize = len + doffset;


		nskb = alloc_skb(nsize + headroom, GFP_ATOMIC);
		nskb = alloc_skb(hsize + doffset + headroom, GFP_ATOMIC);
		if (unlikely(!nskb))
		if (unlikely(!nskb))
			goto err;
			goto err;


+10 −8
Original line number Original line Diff line number Diff line
@@ -352,14 +352,14 @@ static void ccid2_hc_tx_packet_sent(struct sock *sk, int more, int len)


#ifdef CONFIG_IP_DCCP_CCID2_DEBUG
#ifdef CONFIG_IP_DCCP_CCID2_DEBUG
	ccid2_pr_debug("pipe=%d\n", hctx->ccid2hctx_pipe);
	ccid2_pr_debug("pipe=%d\n", hctx->ccid2hctx_pipe);
	ccid2_pr_debug("Sent: seq=%llu\n", seq);
	ccid2_pr_debug("Sent: seq=%llu\n", (unsigned long long)seq);
	do {
	do {
		struct ccid2_seq *seqp = hctx->ccid2hctx_seqt;
		struct ccid2_seq *seqp = hctx->ccid2hctx_seqt;


		while (seqp != hctx->ccid2hctx_seqh) {
		while (seqp != hctx->ccid2hctx_seqh) {
			ccid2_pr_debug("out seq=%llu acked=%d time=%lu\n",
			ccid2_pr_debug("out seq=%llu acked=%d time=%lu\n",
			       	       seqp->ccid2s_seq, seqp->ccid2s_acked,
			       	       (unsigned long long)seqp->ccid2s_seq,
				       seqp->ccid2s_sent);
				       seqp->ccid2s_acked, seqp->ccid2s_sent);
			seqp = seqp->ccid2s_next;
			seqp = seqp->ccid2s_next;
		}
		}
	} while (0);
	} while (0);
@@ -480,7 +480,8 @@ static inline void ccid2_new_ack(struct sock *sk,
		/* first measurement */
		/* first measurement */
		if (hctx->ccid2hctx_srtt == -1) {
		if (hctx->ccid2hctx_srtt == -1) {
			ccid2_pr_debug("R: %lu Time=%lu seq=%llu\n",
			ccid2_pr_debug("R: %lu Time=%lu seq=%llu\n",
			       	       r, jiffies, seqp->ccid2s_seq);
			       	       r, jiffies,
				       (unsigned long long)seqp->ccid2s_seq);
			ccid2_change_srtt(hctx, r);
			ccid2_change_srtt(hctx, r);
			hctx->ccid2hctx_rttvar = r >> 1;
			hctx->ccid2hctx_rttvar = r >> 1;
		} else {
		} else {
@@ -636,8 +637,9 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
			u64 ackno_end_rl;
			u64 ackno_end_rl;


			dccp_set_seqno(&ackno_end_rl, ackno - rl);
			dccp_set_seqno(&ackno_end_rl, ackno - rl);
			ccid2_pr_debug("ackvec start:%llu end:%llu\n", ackno,
			ccid2_pr_debug("ackvec start:%llu end:%llu\n",
				       ackno_end_rl);
				       (unsigned long long)ackno,
				       (unsigned long long)ackno_end_rl);
			/* if the seqno we are analyzing is larger than the
			/* if the seqno we are analyzing is larger than the
			 * current ackno, then move towards the tail of our
			 * current ackno, then move towards the tail of our
			 * seqnos.
			 * seqnos.
@@ -672,7 +674,7 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)


					seqp->ccid2s_acked = 1;
					seqp->ccid2s_acked = 1;
					ccid2_pr_debug("Got ack for %llu\n",
					ccid2_pr_debug("Got ack for %llu\n",
					       	       seqp->ccid2s_seq);
						       (unsigned long long)seqp->ccid2s_seq);
					ccid2_hc_tx_dec_pipe(sk);
					ccid2_hc_tx_dec_pipe(sk);
				}
				}
				if (seqp == hctx->ccid2hctx_seqt) {
				if (seqp == hctx->ccid2hctx_seqt) {
@@ -718,7 +720,7 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
		while (1) {
		while (1) {
			if (!seqp->ccid2s_acked) {
			if (!seqp->ccid2s_acked) {
				ccid2_pr_debug("Packet lost: %llu\n",
				ccid2_pr_debug("Packet lost: %llu\n",
					       seqp->ccid2s_seq);
					       (unsigned long long)seqp->ccid2s_seq);
				/* XXX need to traverse from tail -> head in
				/* XXX need to traverse from tail -> head in
				 * order to detect multiple congestion events in
				 * order to detect multiple congestion events in
				 * one ack vector.
				 * one ack vector.
Loading