mirror of
https://passt.top/passt
synced 2025-05-23 01:35:35 +02:00
tcp: Correct error code handling from tcp_flow_repair_socket()
There are two small bugs in error returns from tcp_low_repair_socket(), which is supposed to return a negative errno code: 1) On bind() failures, wedirectly pass on the return code from bind(), which is just 0 or -1, instead of an error code. 2) In the caller, tcp_flow_migrate_target() we call strerror_() directly on the negative error code, but strerror() requires a positive error code. Correct both of these. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
83f95ade5b
commit
4b8660b3d5
1 changed files with 3 additions and 2 deletions
5
tcp.c
5
tcp.c
|
@ -3285,7 +3285,8 @@ int tcp_flow_repair_socket(struct ctx *c, struct tcp_tap_conn *conn)
|
|||
|
||||
tcp_sock_set_nodelay(s);
|
||||
|
||||
if ((rc = bind(s, &a.sa, sizeof(a)))) {
|
||||
if (bind(s, &a.sa, sizeof(a))) {
|
||||
rc = -errno;
|
||||
err_perror("Failed to bind socket for migrated flow");
|
||||
goto err;
|
||||
}
|
||||
|
@ -3380,7 +3381,7 @@ int tcp_flow_migrate_target(struct ctx *c, int fd)
|
|||
conn->seq_init_from_tap = ntohl(t.seq_init_from_tap);
|
||||
|
||||
if ((rc = tcp_flow_repair_socket(c, conn))) {
|
||||
flow_err(flow, "Can't set up socket: %s, drop", strerror_(rc));
|
||||
flow_err(flow, "Can't set up socket: %s, drop", strerror_(-rc));
|
||||
flow_alloc_cancel(flow);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue