History

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: IB/iser: Support iSCSI PDU padding IBiser: Fix wrong mask when sizeof (dma_addr_t) > sizeof (unsigned long) IPoIB: Fix possible NULL dereference in ipoib_start_xmit()

Linus Torvalds committed 15 years ago

Commit fbad8992 parents f6a975c 80b43de4 files · +14 −8Browse files

Unified · Split

4 files
  1. drivers/infiniband/ulp/ipoib/ipoib_main.c +5 −3
  2. drivers/infiniband/ulp/iser/iscsi_iser.c +7 −3
  3. drivers/infiniband/ulp/iser/iscsi_iser.h +1 −1
  4. drivers/infiniband/ulp/iser/iser_initiator.c +1 −1
drivers/infiniband/ulp/ipoib/ipoib_main.c+5−3
@@ -717,11 +717,13 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev) · 716 unmodified lines
717717 {
718718 struct ipoib_dev_priv *priv = netdev_priv(dev);
719719 struct ipoib_neigh *neigh;
720− struct neighbour *n;
720+ struct neighbour *n = NULL;
721721 unsigned long flags;
722722
723− n = dst_get_neighbour(skb_dst(skb));
724− if (likely(skb_dst(skb) && n)) {
723+ if (likely(skb_dst(skb)))
724+ n = dst_get_neighbour(skb_dst(skb));
725+
726+ if (likely(n)) {
725727 if (unlikely(!*to_ipoib_neigh(n))) {
726728 ipoib_path_lookup(skb, dev);
727729 return NETDEV_TX_OK;
drivers/infiniband/ulp/iser/iscsi_iser.c+7−3
@@ -101,13 +101,17 @@ iscsi_iser_recv(struct iscsi_conn *conn, · 100 unmodified lines
101101
102102 /* verify PDU length */
103103 datalen = ntoh24(hdr->dlength);
104− if (datalen != rx_data_len) {
105− printk(KERN_ERR "iscsi_iser: datalen %d (hdr) != %d (IB) \n",
106− datalen, rx_data_len);
104+ if (datalen > rx_data_len || (datalen + 4) < rx_data_len) {
105+ iser_err("wrong datalen %d (hdr), %d (IB)\n",
106+ datalen, rx_data_len);
107107 rc = ISCSI_ERR_DATALEN;
108108 goto error;
109109 }
110110
111+ if (datalen != rx_data_len)
112+ iser_dbg("aligned datalen (%d) hdr, %d (IB)\n",
113+ datalen, rx_data_len);
114+
111115 /* read AHS */
112116 ahslen = hdr->hlength * 4;
113117
drivers/infiniband/ulp/iser/iscsi_iser.h+1−1
@@ -89,7 +89,7 @@ · 88 unmodified lines
8989 } while (0)
9090
9191 #define SHIFT_4K 12
92−#define SIZE_4K (1UL << SHIFT_4K)
92+#define SIZE_4K (1ULL << SHIFT_4K)
9393 #define MASK_4K (~(SIZE_4K-1))
9494
9595 /* support up to 512KB in one RDMA */
drivers/infiniband/ulp/iser/iser_initiator.c+1−1
@@ -412,7 +412,7 @@ int iser_send_control(struct iscsi_conn *conn, · 411 unmodified lines
412412 memcpy(iser_conn->ib_conn->login_buf, task->data,
413413 task->data_count);
414414 tx_dsg->addr = iser_conn->ib_conn->login_dma;
415− tx_dsg->length = data_seg_len;
415+ tx_dsg->length = task->data_count;
416416 tx_dsg->lkey = device->mr->lkey;
417417 mdesc->num_sge = 2;
418418 }