|
@@ -101,13 +101,17 @@ iscsi_iser_recv(struct iscsi_conn *conn,
|
|
|
|
|
|
/* verify PDU length */
|
|
|
datalen = ntoh24(hdr->dlength);
|
|
|
- if (datalen != rx_data_len) {
|
|
|
- printk(KERN_ERR "iscsi_iser: datalen %d (hdr) != %d (IB) \n",
|
|
|
- datalen, rx_data_len);
|
|
|
+ if (datalen > rx_data_len || (datalen + 4) < rx_data_len) {
|
|
|
+ iser_err("wrong datalen %d (hdr), %d (IB)\n",
|
|
|
+ datalen, rx_data_len);
|
|
|
rc = ISCSI_ERR_DATALEN;
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
|
+ if (datalen != rx_data_len)
|
|
|
+ iser_dbg("aligned datalen (%d) hdr, %d (IB)\n",
|
|
|
+ datalen, rx_data_len);
|
|
|
+
|
|
|
/* read AHS */
|
|
|
ahslen = hdr->hlength * 4;
|
|
|
|