summaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorMichael Brown2016-07-04 17:14:22 +0200
committerMichael Brown2016-07-04 17:20:07 +0200
commit55f7a675d61f8b83478e71d4f9efb3a1b789eb08 (patch)
tree1c4b1cadc5da0d7fc283f9007eb9fe6d2d203798 /src/net
parent[downloader] Treat redirection failures as fatal (diff)
downloadipxe-55f7a675d61f8b83478e71d4f9efb3a1b789eb08.tar.gz
ipxe-55f7a675d61f8b83478e71d4f9efb3a1b789eb08.tar.xz
ipxe-55f7a675d61f8b83478e71d4f9efb3a1b789eb08.zip
[iscsi] Treat redirection failures as fatal
Debugged-by: Robin Smidsrød <robin@smidsrod.no> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net')
-rw-r--r--src/net/tcp/iscsi.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/net/tcp/iscsi.c b/src/net/tcp/iscsi.c
index 019a4c14..ec004e4b 100644
--- a/src/net/tcp/iscsi.c
+++ b/src/net/tcp/iscsi.c
@@ -1710,6 +1710,7 @@ static int iscsi_vredirect ( struct iscsi_session *iscsi, int type,
va_list args ) {
va_list tmp;
struct sockaddr *peer;
+ int rc;
/* Intercept redirects to a LOCATION_SOCKET and record the IP
* address for the iBFT. This is a bit of a hack, but avoids
@@ -1725,7 +1726,15 @@ static int iscsi_vredirect ( struct iscsi_session *iscsi, int type,
va_end ( tmp );
}
- return xfer_vreopen ( &iscsi->socket, type, args );
+ /* Redirect to new location */
+ if ( ( rc = xfer_vreopen ( &iscsi->socket, type, args ) ) != 0 )
+ goto err;
+
+ return 0;
+
+ err:
+ iscsi_close ( iscsi, rc );
+ return rc;
}
/** iSCSI socket interface operations */