... | ... | ||
---|---|---|---|
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 |