]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[xfer] Send intf_close() if redirection fails
authorMichael Brown <mcb30@ipxe.org>
Mon, 4 Jul 2016 15:10:45 +0000 (16:10 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 4 Jul 2016 15:14:46 +0000 (16:14 +0100)
A redirection failure is fatal, but provides no opportunity for the
caller of xfer_[v]redirect() to report the failure since the interface
will already have been disconnected.  Fix by sending intf_close() from
within the default xfer_vredirect() handler.

Debugged-by: Robin Smidsrød <robin@smidsrod.no>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/xfer.c

index 112fee1bf91fef75a247195059d32fb98433536f..3a2f174d062931a7971b20c029c18bb28d2041e2 100644 (file)
@@ -81,12 +81,17 @@ int xfer_vredirect ( struct interface *intf, int type, va_list args ) {
                 * xfer_vreopen(), we create a temporary interface in
                 * order to be able to send xfer_window_changed() to
                 * the parent.
+                *
+                * If redirection fails, then send intf_close() to the
+                * parent interface.
                 */
                intf_plug ( &tmp, dest );
                rc = xfer_vreopen ( dest, type, args );
                if ( rc == 0 ) {
                        xfer_window_changed ( dest );
                        xfer_window_changed ( &tmp );
+               } else {
+                       intf_close ( &tmp, rc );
                }
                intf_unplug ( &tmp );
        }