diff options
-rw-r--r-- | drivers/atm/ambassador.c | 1 | ||||
-rw-r--r-- | drivers/net/can/usb/peak_usb/pcan_usb.c | 8 | ||||
-rw-r--r-- | drivers/net/can/usb/peak_usb/pcan_usb_pro.c | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c | 2 | ||||
-rw-r--r-- | drivers/net/team/team.c | 4 | ||||
-rw-r--r-- | drivers/net/usb/qmi_wwan.c | 1 | ||||
-rw-r--r-- | drivers/vhost/vhost.c | 2 | ||||
-rw-r--r-- | net/can/bcm.c | 3 | ||||
-rw-r--r-- | net/ipv4/icmp.c | 3 | ||||
-rw-r--r-- | net/ipv4/ipmr.c | 4 | ||||
-rw-r--r-- | net/irda/irttp.c | 1 | ||||
-rw-r--r-- | net/netfilter/ipset/ip_set_hash_netiface.c | 2 | ||||
-rw-r--r-- | net/openvswitch/flow.c | 14 | ||||
-rw-r--r-- | net/openvswitch/vport-netdev.c | 2 | ||||
-rw-r--r-- | net/sctp/chunk.c | 20 | ||||
-rw-r--r-- | net/sctp/socket.c | 4 | ||||
-rw-r--r-- | net/sctp/transport.c | 2 |
17 files changed, 53 insertions, 28 deletions
diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c index 89b30f32ba68..ff7bb8a42ed6 100644 --- a/drivers/atm/ambassador.c +++ b/drivers/atm/ambassador.c | |||
@@ -1961,6 +1961,7 @@ static int __devinit ucode_init (loader_block * lb, amb_dev * dev) { | |||
1961 | res = loader_verify(lb, dev, rec); | 1961 | res = loader_verify(lb, dev, rec); |
1962 | if (res) | 1962 | if (res) |
1963 | break; | 1963 | break; |
1964 | rec = ihex_next_binrec(rec); | ||
1964 | } | 1965 | } |
1965 | release_firmware(fw); | 1966 | release_firmware(fw); |
1966 | if (!res) | 1967 | if (!res) |
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c index 86f26a1ede4c..25723d8ee201 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c | |||
@@ -519,8 +519,10 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, | |||
519 | mc->pdev->dev.can.state = new_state; | 519 | mc->pdev->dev.can.state = new_state; |
520 | 520 | ||
521 | if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) { | 521 | if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) { |
522 | struct skb_shared_hwtstamps *hwts = skb_hwtstamps(skb); | ||
523 | |||
522 | peak_usb_get_ts_tv(&mc->pdev->time_ref, mc->ts16, &tv); | 524 | peak_usb_get_ts_tv(&mc->pdev->time_ref, mc->ts16, &tv); |
523 | skb->tstamp = timeval_to_ktime(tv); | 525 | hwts->hwtstamp = timeval_to_ktime(tv); |
524 | } | 526 | } |
525 | 527 | ||
526 | netif_rx(skb); | 528 | netif_rx(skb); |
@@ -605,6 +607,7 @@ static int pcan_usb_decode_data(struct pcan_usb_msg_context *mc, u8 status_len) | |||
605 | struct sk_buff *skb; | 607 | struct sk_buff *skb; |
606 | struct can_frame *cf; | 608 | struct can_frame *cf; |
607 | struct timeval tv; | 609 | struct timeval tv; |
610 | struct skb_shared_hwtstamps *hwts; | ||
608 | 611 | ||
609 | skb = alloc_can_skb(mc->netdev, &cf); | 612 | skb = alloc_can_skb(mc->netdev, &cf); |
610 | if (!skb) | 613 | if (!skb) |
@@ -652,7 +655,8 @@ static int pcan_usb_decode_data(struct pcan_usb_msg_context *mc, u8 status_len) | |||
652 | 655 | ||
653 | /* convert timestamp into kernel time */ | 656 | /* convert timestamp into kernel time */ |
654 | peak_usb_get_ts_tv(&mc->pdev->time_ref, mc->ts16, &tv); | 657 | peak_usb_get_ts_tv(&mc->pdev->time_ref, mc->ts16, &tv); |
655 | skb->tstamp = timeval_to_ktime(tv); | 658 | hwts = skb_hwtstamps(skb); |
659 | hwts->hwtstamp = timeval_to_ktime(tv); | ||
656 | 660 | ||
657 | /* push the skb */ | 661 | /* push the skb */ |
658 | netif_rx(skb); | 662 | netif_rx(skb); |
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c index e1626d92511a..30d79bfa5b10 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c | |||
@@ -532,6 +532,7 @@ static int pcan_usb_pro_handle_canmsg(struct pcan_usb_pro_interface *usb_if, | |||
532 | struct can_frame *can_frame; | 532 | struct can_frame *can_frame; |
533 | struct sk_buff *skb; | 533 | struct sk_buff *skb; |
534 | struct timeval tv; | 534 | struct timeval tv; |
535 | struct skb_shared_hwtstamps *hwts; | ||
535 | 536 | ||
536 | skb = alloc_can_skb(netdev, &can_frame); | 537 | skb = alloc_can_skb(netdev, &can_frame); |
537 | if (!skb) | 538 | if (!skb) |
@@ -549,7 +550,8 @@ static int pcan_usb_pro_handle_canmsg(struct pcan_usb_pro_interface *usb_if, | |||
549 | memcpy(can_frame->data, rx->data, can_frame->can_dlc); | 550 | memcpy(can_frame->data, rx->data, can_frame->can_dlc); |
550 | 551 | ||
551 | peak_usb_get_ts_tv(&usb_if->time_ref, le32_to_cpu(rx->ts32), &tv); | 552 | peak_usb_get_ts_tv(&usb_if->time_ref, le32_to_cpu(rx->ts32), &tv); |
552 | skb->tstamp = timeval_to_ktime(tv); | 553 | hwts = skb_hwtstamps(skb); |
554 | hwts->hwtstamp = timeval_to_ktime(tv); | ||
553 | 555 | ||
554 | netif_rx(skb); | 556 | netif_rx(skb); |
555 | netdev->stats.rx_packets++; | 557 | netdev->stats.rx_packets++; |
@@ -570,6 +572,7 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if, | |||
570 | u8 err_mask = 0; | 572 | u8 err_mask = 0; |
571 | struct sk_buff *skb; | 573 | struct sk_buff *skb; |
572 | struct timeval tv; | 574 | struct timeval tv; |
575 | struct skb_shared_hwtstamps *hwts; | ||
573 | 576 | ||
574 | /* nothing should be sent while in BUS_OFF state */ | 577 | /* nothing should be sent while in BUS_OFF state */ |
575 | if (dev->can.state == CAN_STATE_BUS_OFF) | 578 | if (dev->can.state == CAN_STATE_BUS_OFF) |
@@ -664,7 +667,8 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if, | |||
664 | dev->can.state = new_state; | 667 | dev->can.state = new_state; |
665 | 668 | ||
666 | peak_usb_get_ts_tv(&usb_if->time_ref, le32_to_cpu(er->ts32), &tv); | 669 | peak_usb_get_ts_tv(&usb_if->time_ref, le32_to_cpu(er->ts32), &tv); |
667 | skb->tstamp = timeval_to_ktime(tv); | 670 | hwts = skb_hwtstamps(skb); |
671 | hwts->hwtstamp = timeval_to_ktime(tv); | ||
668 | netif_rx(skb); | 672 | netif_rx(skb); |
669 | netdev->stats.rx_packets++; | 673 | netdev->stats.rx_packets++; |
670 | netdev->stats.rx_bytes += can_frame->can_dlc; | 674 | netdev->stats.rx_bytes += can_frame->can_dlc; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c index 5d36795877cb..b799ab12a291 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c | |||
@@ -237,7 +237,7 @@ static int mlx4_en_dcbnl_ieee_setmaxrate(struct net_device *dev, | |||
237 | if (err) | 237 | if (err) |
238 | return err; | 238 | return err; |
239 | 239 | ||
240 | memcpy(priv->maxrate, tmp, sizeof(*priv->maxrate)); | 240 | memcpy(priv->maxrate, tmp, sizeof(priv->maxrate)); |
241 | 241 | ||
242 | return 0; | 242 | return 0; |
243 | } | 243 | } |
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index d44cca327588..ad86660fb8f9 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1794,10 +1794,12 @@ static void team_setup(struct net_device *dev) | |||
1794 | 1794 | ||
1795 | dev->features |= NETIF_F_LLTX; | 1795 | dev->features |= NETIF_F_LLTX; |
1796 | dev->features |= NETIF_F_GRO; | 1796 | dev->features |= NETIF_F_GRO; |
1797 | dev->hw_features = NETIF_F_HW_VLAN_TX | | 1797 | dev->hw_features = TEAM_VLAN_FEATURES | |
1798 | NETIF_F_HW_VLAN_TX | | ||
1798 | NETIF_F_HW_VLAN_RX | | 1799 | NETIF_F_HW_VLAN_RX | |
1799 | NETIF_F_HW_VLAN_FILTER; | 1800 | NETIF_F_HW_VLAN_FILTER; |
1800 | 1801 | ||
1802 | dev->hw_features &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_HW_CSUM); | ||
1801 | dev->features |= dev->hw_features; | 1803 | dev->features |= dev->hw_features; |
1802 | } | 1804 | } |
1803 | 1805 | ||
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 3b566fa0f8e6..1ea91f4237f0 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c | |||
@@ -385,6 +385,7 @@ static const struct usb_device_id products[] = { | |||
385 | }, | 385 | }, |
386 | 386 | ||
387 | /* 3. Combined interface devices matching on interface number */ | 387 | /* 3. Combined interface devices matching on interface number */ |
388 | {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */ | ||
388 | {QMI_FIXED_INTF(0x19d2, 0x0002, 1)}, | 389 | {QMI_FIXED_INTF(0x19d2, 0x0002, 1)}, |
389 | {QMI_FIXED_INTF(0x19d2, 0x0012, 1)}, | 390 | {QMI_FIXED_INTF(0x19d2, 0x0012, 1)}, |
390 | {QMI_FIXED_INTF(0x19d2, 0x0017, 3)}, | 391 | {QMI_FIXED_INTF(0x19d2, 0x0017, 3)}, |
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index 99ac2cb08b43..dedaf81d8f36 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c | |||
@@ -1076,7 +1076,7 @@ static int translate_desc(struct vhost_dev *dev, u64 addr, u32 len, | |||
1076 | } | 1076 | } |
1077 | _iov = iov + ret; | 1077 | _iov = iov + ret; |
1078 | size = reg->memory_size - addr + reg->guest_phys_addr; | 1078 | size = reg->memory_size - addr + reg->guest_phys_addr; |
1079 | _iov->iov_len = min((u64)len, size); | 1079 | _iov->iov_len = min((u64)len - s, size); |
1080 | _iov->iov_base = (void __user *)(unsigned long) | 1080 | _iov->iov_base = (void __user *)(unsigned long) |
1081 | (reg->userspace_addr + addr - reg->guest_phys_addr); | 1081 | (reg->userspace_addr + addr - reg->guest_phys_addr); |
1082 | s += size; | 1082 | s += size; |
diff --git a/net/can/bcm.c b/net/can/bcm.c index 6f747582718e..969b7cdff59d 100644 --- a/net/can/bcm.c +++ b/net/can/bcm.c | |||
@@ -1084,6 +1084,9 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg, | |||
1084 | op->sk = sk; | 1084 | op->sk = sk; |
1085 | op->ifindex = ifindex; | 1085 | op->ifindex = ifindex; |
1086 | 1086 | ||
1087 | /* ifindex for timeout events w/o previous frame reception */ | ||
1088 | op->rx_ifindex = ifindex; | ||
1089 | |||
1087 | /* initialize uninitialized (kzalloc) structure */ | 1090 | /* initialize uninitialized (kzalloc) structure */ |
1088 | hrtimer_init(&op->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); | 1091 | hrtimer_init(&op->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
1089 | op->timer.function = bcm_rx_timeout_handler; | 1092 | op->timer.function = bcm_rx_timeout_handler; |
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index f2eccd531746..17ff9fd7cdda 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -257,7 +257,8 @@ static inline bool icmpv4_xrlim_allow(struct net *net, struct rtable *rt, | |||
257 | struct inet_peer *peer = inet_getpeer_v4(net->ipv4.peers, fl4->daddr, 1); | 257 | struct inet_peer *peer = inet_getpeer_v4(net->ipv4.peers, fl4->daddr, 1); |
258 | rc = inet_peer_xrlim_allow(peer, | 258 | rc = inet_peer_xrlim_allow(peer, |
259 | net->ipv4.sysctl_icmp_ratelimit); | 259 | net->ipv4.sysctl_icmp_ratelimit); |
260 | inet_putpeer(peer); | 260 | if (peer) |
261 | inet_putpeer(peer); | ||
261 | } | 262 | } |
262 | out: | 263 | out: |
263 | return rc; | 264 | return rc; |
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 6168c4dc58b1..3eab2b2ffd34 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
@@ -1318,6 +1318,10 @@ int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsi | |||
1318 | if (get_user(v, (u32 __user *)optval)) | 1318 | if (get_user(v, (u32 __user *)optval)) |
1319 | return -EFAULT; | 1319 | return -EFAULT; |
1320 | 1320 | ||
1321 | /* "pimreg%u" should not exceed 16 bytes (IFNAMSIZ) */ | ||
1322 | if (v != RT_TABLE_DEFAULT && v >= 1000000000) | ||
1323 | return -EINVAL; | ||
1324 | |||
1321 | rtnl_lock(); | 1325 | rtnl_lock(); |
1322 | ret = 0; | 1326 | ret = 0; |
1323 | if (sk == rtnl_dereference(mrt->mroute_sk)) { | 1327 | if (sk == rtnl_dereference(mrt->mroute_sk)) { |
diff --git a/net/irda/irttp.c b/net/irda/irttp.c index 1002e3396f72..ae43c62f9045 100644 --- a/net/irda/irttp.c +++ b/net/irda/irttp.c | |||
@@ -441,6 +441,7 @@ struct tsap_cb *irttp_open_tsap(__u8 stsap_sel, int credit, notify_t *notify) | |||
441 | lsap = irlmp_open_lsap(stsap_sel, &ttp_notify, 0); | 441 | lsap = irlmp_open_lsap(stsap_sel, &ttp_notify, 0); |
442 | if (lsap == NULL) { | 442 | if (lsap == NULL) { |
443 | IRDA_DEBUG(0, "%s: unable to allocate LSAP!!\n", __func__); | 443 | IRDA_DEBUG(0, "%s: unable to allocate LSAP!!\n", __func__); |
444 | __irttp_close_tsap(self); | ||
444 | return NULL; | 445 | return NULL; |
445 | } | 446 | } |
446 | 447 | ||
diff --git a/net/netfilter/ipset/ip_set_hash_netiface.c b/net/netfilter/ipset/ip_set_hash_netiface.c index b9a63381e349..45a101439bc5 100644 --- a/net/netfilter/ipset/ip_set_hash_netiface.c +++ b/net/netfilter/ipset/ip_set_hash_netiface.c | |||
@@ -793,7 +793,7 @@ static struct ip_set_type hash_netiface_type __read_mostly = { | |||
793 | [IPSET_ATTR_IP] = { .type = NLA_NESTED }, | 793 | [IPSET_ATTR_IP] = { .type = NLA_NESTED }, |
794 | [IPSET_ATTR_IP_TO] = { .type = NLA_NESTED }, | 794 | [IPSET_ATTR_IP_TO] = { .type = NLA_NESTED }, |
795 | [IPSET_ATTR_IFACE] = { .type = NLA_NUL_STRING, | 795 | [IPSET_ATTR_IFACE] = { .type = NLA_NUL_STRING, |
796 | .len = IPSET_MAXNAMELEN - 1 }, | 796 | .len = IFNAMSIZ - 1 }, |
797 | [IPSET_ATTR_CADT_FLAGS] = { .type = NLA_U32 }, | 797 | [IPSET_ATTR_CADT_FLAGS] = { .type = NLA_U32 }, |
798 | [IPSET_ATTR_CIDR] = { .type = NLA_U8 }, | 798 | [IPSET_ATTR_CIDR] = { .type = NLA_U8 }, |
799 | [IPSET_ATTR_TIMEOUT] = { .type = NLA_U32 }, | 799 | [IPSET_ATTR_TIMEOUT] = { .type = NLA_U32 }, |
diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c index 98c70630ad06..733cbf49ed1f 100644 --- a/net/openvswitch/flow.c +++ b/net/openvswitch/flow.c | |||
@@ -702,15 +702,11 @@ int ovs_flow_extract(struct sk_buff *skb, u16 in_port, struct sw_flow_key *key, | |||
702 | /* We only match on the lower 8 bits of the opcode. */ | 702 | /* We only match on the lower 8 bits of the opcode. */ |
703 | if (ntohs(arp->ar_op) <= 0xff) | 703 | if (ntohs(arp->ar_op) <= 0xff) |
704 | key->ip.proto = ntohs(arp->ar_op); | 704 | key->ip.proto = ntohs(arp->ar_op); |
705 | 705 | memcpy(&key->ipv4.addr.src, arp->ar_sip, sizeof(key->ipv4.addr.src)); | |
706 | if (key->ip.proto == ARPOP_REQUEST | 706 | memcpy(&key->ipv4.addr.dst, arp->ar_tip, sizeof(key->ipv4.addr.dst)); |
707 | || key->ip.proto == ARPOP_REPLY) { | 707 | memcpy(key->ipv4.arp.sha, arp->ar_sha, ETH_ALEN); |
708 | memcpy(&key->ipv4.addr.src, arp->ar_sip, sizeof(key->ipv4.addr.src)); | 708 | memcpy(key->ipv4.arp.tha, arp->ar_tha, ETH_ALEN); |
709 | memcpy(&key->ipv4.addr.dst, arp->ar_tip, sizeof(key->ipv4.addr.dst)); | 709 | key_len = SW_FLOW_KEY_OFFSET(ipv4.arp); |
710 | memcpy(key->ipv4.arp.sha, arp->ar_sha, ETH_ALEN); | ||
711 | memcpy(key->ipv4.arp.tha, arp->ar_tha, ETH_ALEN); | ||
712 | key_len = SW_FLOW_KEY_OFFSET(ipv4.arp); | ||
713 | } | ||
714 | } | 710 | } |
715 | } else if (key->eth.type == htons(ETH_P_IPV6)) { | 711 | } else if (key->eth.type == htons(ETH_P_IPV6)) { |
716 | int nh_len; /* IPv6 Header + Extensions */ | 712 | int nh_len; /* IPv6 Header + Extensions */ |
diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c index 3c1e58ba714b..a9033481fa5e 100644 --- a/net/openvswitch/vport-netdev.c +++ b/net/openvswitch/vport-netdev.c | |||
@@ -158,7 +158,7 @@ static int netdev_send(struct vport *vport, struct sk_buff *skb) | |||
158 | 158 | ||
159 | if (unlikely(packet_length(skb) > mtu && !skb_is_gso(skb))) { | 159 | if (unlikely(packet_length(skb) > mtu && !skb_is_gso(skb))) { |
160 | net_warn_ratelimited("%s: dropped over-mtu packet: %d > %d\n", | 160 | net_warn_ratelimited("%s: dropped over-mtu packet: %d > %d\n", |
161 | ovs_dp_name(vport->dp), | 161 | netdev_vport->dev->name, |
162 | packet_length(skb), mtu); | 162 | packet_length(skb), mtu); |
163 | goto error; | 163 | goto error; |
164 | } | 164 | } |
diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c index 7c2df9c33df3..69ce21e3716f 100644 --- a/net/sctp/chunk.c +++ b/net/sctp/chunk.c | |||
@@ -183,7 +183,7 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, | |||
183 | 183 | ||
184 | msg = sctp_datamsg_new(GFP_KERNEL); | 184 | msg = sctp_datamsg_new(GFP_KERNEL); |
185 | if (!msg) | 185 | if (!msg) |
186 | return NULL; | 186 | return ERR_PTR(-ENOMEM); |
187 | 187 | ||
188 | /* Note: Calculate this outside of the loop, so that all fragments | 188 | /* Note: Calculate this outside of the loop, so that all fragments |
189 | * have the same expiration. | 189 | * have the same expiration. |
@@ -280,11 +280,14 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, | |||
280 | 280 | ||
281 | chunk = sctp_make_datafrag_empty(asoc, sinfo, len, frag, 0); | 281 | chunk = sctp_make_datafrag_empty(asoc, sinfo, len, frag, 0); |
282 | 282 | ||
283 | if (!chunk) | 283 | if (!chunk) { |
284 | err = -ENOMEM; | ||
284 | goto errout; | 285 | goto errout; |
286 | } | ||
287 | |||
285 | err = sctp_user_addto_chunk(chunk, offset, len, msgh->msg_iov); | 288 | err = sctp_user_addto_chunk(chunk, offset, len, msgh->msg_iov); |
286 | if (err < 0) | 289 | if (err < 0) |
287 | goto errout; | 290 | goto errout_chunk_free; |
288 | 291 | ||
289 | offset += len; | 292 | offset += len; |
290 | 293 | ||
@@ -315,8 +318,10 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, | |||
315 | 318 | ||
316 | chunk = sctp_make_datafrag_empty(asoc, sinfo, over, frag, 0); | 319 | chunk = sctp_make_datafrag_empty(asoc, sinfo, over, frag, 0); |
317 | 320 | ||
318 | if (!chunk) | 321 | if (!chunk) { |
322 | err = -ENOMEM; | ||
319 | goto errout; | 323 | goto errout; |
324 | } | ||
320 | 325 | ||
321 | err = sctp_user_addto_chunk(chunk, offset, over,msgh->msg_iov); | 326 | err = sctp_user_addto_chunk(chunk, offset, over,msgh->msg_iov); |
322 | 327 | ||
@@ -324,7 +329,7 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, | |||
324 | __skb_pull(chunk->skb, (__u8 *)chunk->chunk_hdr | 329 | __skb_pull(chunk->skb, (__u8 *)chunk->chunk_hdr |
325 | - (__u8 *)chunk->skb->data); | 330 | - (__u8 *)chunk->skb->data); |
326 | if (err < 0) | 331 | if (err < 0) |
327 | goto errout; | 332 | goto errout_chunk_free; |
328 | 333 | ||
329 | sctp_datamsg_assign(msg, chunk); | 334 | sctp_datamsg_assign(msg, chunk); |
330 | list_add_tail(&chunk->frag_list, &msg->chunks); | 335 | list_add_tail(&chunk->frag_list, &msg->chunks); |
@@ -332,6 +337,9 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, | |||
332 | 337 | ||
333 | return msg; | 338 | return msg; |
334 | 339 | ||
340 | errout_chunk_free: | ||
341 | sctp_chunk_free(chunk); | ||
342 | |||
335 | errout: | 343 | errout: |
336 | list_for_each_safe(pos, temp, &msg->chunks) { | 344 | list_for_each_safe(pos, temp, &msg->chunks) { |
337 | list_del_init(pos); | 345 | list_del_init(pos); |
@@ -339,7 +347,7 @@ errout: | |||
339 | sctp_chunk_free(chunk); | 347 | sctp_chunk_free(chunk); |
340 | } | 348 | } |
341 | sctp_datamsg_put(msg); | 349 | sctp_datamsg_put(msg); |
342 | return NULL; | 350 | return ERR_PTR(err); |
343 | } | 351 | } |
344 | 352 | ||
345 | /* Check whether this message has expired. */ | 353 | /* Check whether this message has expired. */ |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index a60d1f8b41c5..406d957d08fb 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
@@ -1915,8 +1915,8 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
1915 | 1915 | ||
1916 | /* Break the message into multiple chunks of maximum size. */ | 1916 | /* Break the message into multiple chunks of maximum size. */ |
1917 | datamsg = sctp_datamsg_from_user(asoc, sinfo, msg, msg_len); | 1917 | datamsg = sctp_datamsg_from_user(asoc, sinfo, msg, msg_len); |
1918 | if (!datamsg) { | 1918 | if (IS_ERR(datamsg)) { |
1919 | err = -ENOMEM; | 1919 | err = PTR_ERR(datamsg); |
1920 | goto out_free; | 1920 | goto out_free; |
1921 | } | 1921 | } |
1922 | 1922 | ||
diff --git a/net/sctp/transport.c b/net/sctp/transport.c index 953c21e4af97..206cf5238fd3 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c | |||
@@ -331,7 +331,7 @@ void sctp_transport_update_rto(struct sctp_transport *tp, __u32 rtt) | |||
331 | * 1/8, rto_alpha would be expressed as 3. | 331 | * 1/8, rto_alpha would be expressed as 3. |
332 | */ | 332 | */ |
333 | tp->rttvar = tp->rttvar - (tp->rttvar >> net->sctp.rto_beta) | 333 | tp->rttvar = tp->rttvar - (tp->rttvar >> net->sctp.rto_beta) |
334 | + ((abs(tp->srtt - rtt)) >> net->sctp.rto_beta); | 334 | + (((__u32)abs64((__s64)tp->srtt - (__s64)rtt)) >> net->sctp.rto_beta); |
335 | tp->srtt = tp->srtt - (tp->srtt >> net->sctp.rto_alpha) | 335 | tp->srtt = tp->srtt - (tp->srtt >> net->sctp.rto_alpha) |
336 | + (rtt >> net->sctp.rto_alpha); | 336 | + (rtt >> net->sctp.rto_alpha); |
337 | } else { | 337 | } else { |