...
...
11
recvmsg() could return prematurely with only part of the PDU.
11
recvmsg() could return prematurely with only part of the PDU.
12
12
13
Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
13
Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
14
Fixes: 3f2304f8c6d6 ("nvme-tcp: add NVMe over TCP host driver")
14
Fixes: 3f2304f8c6d6 ("nvme-tcp: add NVMe over TCP host driver")
15
---
15
---
16
v4: keep recvmsg() error return value
16
v3: fix return value to indicate error
17
v3: fix return value to indicate error
17
v2: add Fixes tag
18
v2: add Fixes tag
18
19
19
drivers/nvme/host/tcp.c | 4 +++-
20
drivers/nvme/host/tcp.c | 5 ++++-
20
1 file changed, 3 insertions(+), 1 deletion(-)
21
1 file changed, 4 insertions(+), 1 deletion(-)
21
22
22
diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
23
diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
23
index XXXXXXX..XXXXXXX 100644
24
index XXXXXXX..XXXXXXX 100644
24
--- a/drivers/nvme/host/tcp.c
25
--- a/drivers/nvme/host/tcp.c
25
+++ b/drivers/nvme/host/tcp.c
26
+++ b/drivers/nvme/host/tcp.c
...
...
34
            iov.iov_len, msg.msg_flags);
35
            iov.iov_len, msg.msg_flags);
35
-    if (ret < 0) {
36
-    if (ret < 0) {
36
+    if (ret < sizeof(*icresp)) {
37
+    if (ret < sizeof(*icresp)) {
37
        pr_warn("queue %d: failed to receive icresp, error %d\n",
38
        pr_warn("queue %d: failed to receive icresp, error %d\n",
38
            nvme_tcp_queue_id(queue), ret);
39
            nvme_tcp_queue_id(queue), ret);
39
+        ret = -ECONNRESET;
40
+        if (ret >= 0)
41
+            ret = -ECONNRESET;
40
        goto free_icresp;
42
        goto free_icresp;
41
    }
43
    }
42
    ret = -ENOTCONN;
44
    ret = -ENOTCONN;
43
    if (nvme_tcp_queue_tls(queue)) {
45
    if (nvme_tcp_queue_tls(queue)) {
44
        ctype = tls_get_record_type(queue->sock->sk,
46
        ctype = tls_get_record_type(queue->sock->sk,
45
--
47
--
46
2.45.2
48
2.45.2
diff view generated by jsdifflib