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

Commit c80c238a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull networking fixes from David Miller:

 1) The bnx2x can hang if you give it a GSO packet with a segment size
    which is too big for the hardware, detect and drop in this case.
    From Daniel Axtens.

 2) Fix some overflows and pointer leaks in xtables, from Dmitry Vyukov.

 3) Missing RCU locking in igmp, from Eric Dumazet.

 4) Fix RX checksum handling on r8152, it can only checksum UDP and TCP
    packets. From Hayes Wang.

 5) Minor pacing tweak to TCP BBR congestion control, from Neal
    Cardwell.

 6) Missing RCU annotations in cls_u32, from Paolo Abeni.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (30 commits)
  Revert "defer call to mem_cgroup_sk_alloc()"
  soreuseport: fix mem leak in reuseport_add_sock()
  net: qlge: use memmove instead of skb_copy_to_linear_data
  net: qed: use correct strncpy() size
  net: cxgb4: avoid memcpy beyond end of source buffer
  cls_u32: add missing RCU annotation.
  r8152: set rx mode early when linking on
  r8152: fix wrong checksum status for received IPv4 packets
  nfp: fix TLV offset calculation
  net: pxa168_eth: add netconsole support
  net: igmp: add a missing rcu locking section
  ibmvnic: fix firmware version when no firmware level has been provided by the VIOS server
  vmxnet3: remove redundant initialization of pointer 'rq'
  lan78xx: remove redundant initialization of pointer 'phydev'
  net: jme: remove unused initialization of 'rxdesc'
  rtnetlink: remove check for IFLA_IF_NETNSID
  rocker: fix possible null pointer dereference in rocker_router_fib_event_work
  inet: Avoid unitialized variable warning in inet_unhash()
  net: bridge: Fix uninitialized error in br_fdb_sync_static()
  openvswitch: Remove padding from packet before L3+ conntrack processing
  ...
parents 6ec4de89 edbe69ef
Loading
Loading
Loading
Loading
+18 −0
Original line number Original line Diff line number Diff line
@@ -12934,6 +12934,24 @@ static netdev_features_t bnx2x_features_check(struct sk_buff *skb,
					      struct net_device *dev,
					      struct net_device *dev,
					      netdev_features_t features)
					      netdev_features_t features)
{
{
	/*
	 * A skb with gso_size + header length > 9700 will cause a
	 * firmware panic. Drop GSO support.
	 *
	 * Eventually the upper layer should not pass these packets down.
	 *
	 * For speed, if the gso_size is <= 9000, assume there will
	 * not be 700 bytes of headers and pass it through. Only do a
	 * full (slow) validation if the gso_size is > 9000.
	 *
	 * (Due to the way SKB_BY_FRAGS works this will also do a full
	 * validation in that case.)
	 */
	if (unlikely(skb_is_gso(skb) &&
		     (skb_shinfo(skb)->gso_size > 9000) &&
		     !skb_gso_validate_mac_len(skb, 9700)))
		features &= ~NETIF_F_GSO_MASK;

	features = vlan_features_check(skb, features);
	features = vlan_features_check(skb, features);
	return vxlan_features_check(skb, features);
	return vxlan_features_check(skb, features);
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -355,7 +355,7 @@ struct cxgb4_lld_info {
};
};


struct cxgb4_uld_info {
struct cxgb4_uld_info {
	const char *name;
	char name[IFNAMSIZ];
	void *handle;
	void *handle;
	unsigned int nrxq;
	unsigned int nrxq;
	unsigned int rxq_size;
	unsigned int rxq_size;
+1 −2
Original line number Original line Diff line number Diff line
@@ -991,9 +991,8 @@ static u32 be_xmit_enqueue(struct be_adapter *adapter, struct be_tx_obj *txo,
{
{
	u32 i, copied = 0, wrb_cnt = skb_wrb_cnt(skb);
	u32 i, copied = 0, wrb_cnt = skb_wrb_cnt(skb);
	struct device *dev = &adapter->pdev->dev;
	struct device *dev = &adapter->pdev->dev;
	struct be_queue_info *txq = &txo->q;
	bool map_single = false;
	bool map_single = false;
	u32 head = txq->head;
	u32 head;
	dma_addr_t busaddr;
	dma_addr_t busaddr;
	int len;
	int len;


+5 −1
Original line number Original line Diff line number Diff line
@@ -3305,7 +3305,11 @@ static void handle_vpd_rsp(union ibmvnic_crq *crq,
	 */
	 */
	substr = strnstr(adapter->vpd->buff, "RM", adapter->vpd->len);
	substr = strnstr(adapter->vpd->buff, "RM", adapter->vpd->len);
	if (!substr) {
	if (!substr) {
		dev_info(dev, "No FW level provided by VPD\n");
		dev_info(dev, "Warning - No FW level has been provided in the VPD buffer by the VIOS Server\n");
		ptr = strncpy((char *)adapter->fw_version, "N/A",
			      3 * sizeof(char));
		if (!ptr)
			dev_err(dev, "Failed to inform that firmware version is unavailable to the adapter\n");
		goto complete;
		goto complete;
	}
	}


+1 −1
Original line number Original line Diff line number Diff line
@@ -1071,7 +1071,7 @@ static int
jme_process_receive(struct jme_adapter *jme, int limit)
jme_process_receive(struct jme_adapter *jme, int limit)
{
{
	struct jme_ring *rxring = &(jme->rxring[0]);
	struct jme_ring *rxring = &(jme->rxring[0]);
	struct rxdesc *rxdesc = rxring->desc;
	struct rxdesc *rxdesc;
	int i, j, ccnt, desccnt, mask = jme->rx_ring_mask;
	int i, j, ccnt, desccnt, mask = jme->rx_ring_mask;


	if (unlikely(!atomic_dec_and_test(&jme->rx_cleaning)))
	if (unlikely(!atomic_dec_and_test(&jme->rx_cleaning)))
Loading