NetworkPkg/TcpDxe/SockInterface.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-)
if we already established a iSCSI connection from initiator to target
based on IPv4 stack, after using reconnect -r command, we can not rebuild
the session with the windows target, since the server thought the session
is still exist. This issue is caused by wrong place of acquire ownership of
sock lock which lead the iSCSI can not reset the connection correctly.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <lubo.zhang@intel.com>
Cc: Wu Jiaxin <jiaxin.wu@intel.com>
Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
---
NetworkPkg/TcpDxe/SockInterface.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/NetworkPkg/TcpDxe/SockInterface.c b/NetworkPkg/TcpDxe/SockInterface.c
index b4ba40a..0248cdf 100644
--- a/NetworkPkg/TcpDxe/SockInterface.c
+++ b/NetworkPkg/TcpDxe/SockInterface.c
@@ -167,22 +167,10 @@ SockDestroyChild (
ProtoData = (TCP_PROTO_DATA *) Sock->ProtoReserved;
Tcb = ProtoData->TcpPcb;
ASSERT (Tcb != NULL);
- Status = EfiAcquireLockOrFail (&(Sock->Lock));
- if (EFI_ERROR (Status)) {
-
- DEBUG (
- (EFI_D_ERROR,
- "SockDestroyChild: Get the lock to access socket failed with %r\n",
- Status)
- );
-
- return EFI_ACCESS_DENIED;
- }
-
//
// Close the IP protocol.
//
gBS->CloseProtocol (
Tcb->IpInfo->ChildHandle,
@@ -224,10 +212,23 @@ SockDestroyChild (
TcpProtocolGuid,
SockProtocol,
NULL
);
+
+ Status = EfiAcquireLockOrFail (&(Sock->Lock));
+ if (EFI_ERROR (Status)) {
+
+ DEBUG (
+ (EFI_D_ERROR,
+ "SockDestroyChild: Get the lock to access socket failed with %r\n",
+ Status)
+ );
+
+ return EFI_ACCESS_DENIED;
+ }
+
//
// force protocol layer to detach the PCB
//
Status = Sock->ProtoHandler (Sock, SOCK_DETACH, NULL);
--
1.9.5.msysgit.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com> Thanks, Jiaxin > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of > Zhang Lubo > Sent: Friday, April 28, 2017 2:42 PM > To: edk2-devel@lists.01.org > Cc: Ye, Ting <ting.ye@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>; Wu, Jiaxin > <jiaxin.wu@intel.com> > Subject: [edk2] [patch] NetworkPkg: Fix issue the iSCSI client can not send reset > packet. > > if we already established a iSCSI connection from initiator to target > based on IPv4 stack, after using reconnect -r command, we can not rebuild > the session with the windows target, since the server thought the session > is still exist. This issue is caused by wrong place of acquire ownership of > sock lock which lead the iSCSI can not reset the connection correctly. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Zhang Lubo <lubo.zhang@intel.com> > Cc: Wu Jiaxin <jiaxin.wu@intel.com> > Cc: Ye Ting <ting.ye@intel.com> > Cc: Fu Siyuan <siyuan.fu@intel.com> > --- > NetworkPkg/TcpDxe/SockInterface.c | 25 +++++++++++++------------ > 1 file changed, 13 insertions(+), 12 deletions(-) > > diff --git a/NetworkPkg/TcpDxe/SockInterface.c > b/NetworkPkg/TcpDxe/SockInterface.c > index b4ba40a..0248cdf 100644 > --- a/NetworkPkg/TcpDxe/SockInterface.c > +++ b/NetworkPkg/TcpDxe/SockInterface.c > @@ -167,22 +167,10 @@ SockDestroyChild ( > ProtoData = (TCP_PROTO_DATA *) Sock->ProtoReserved; > Tcb = ProtoData->TcpPcb; > > ASSERT (Tcb != NULL); > > - Status = EfiAcquireLockOrFail (&(Sock->Lock)); > - if (EFI_ERROR (Status)) { > - > - DEBUG ( > - (EFI_D_ERROR, > - "SockDestroyChild: Get the lock to access socket failed with %r\n", > - Status) > - ); > - > - return EFI_ACCESS_DENIED; > - } > - > // > // Close the IP protocol. > // > gBS->CloseProtocol ( > Tcb->IpInfo->ChildHandle, > @@ -224,10 +212,23 @@ SockDestroyChild ( > TcpProtocolGuid, > SockProtocol, > NULL > ); > > + > + Status = EfiAcquireLockOrFail (&(Sock->Lock)); > + if (EFI_ERROR (Status)) { > + > + DEBUG ( > + (EFI_D_ERROR, > + "SockDestroyChild: Get the lock to access socket failed with %r\n", > + Status) > + ); > + > + return EFI_ACCESS_DENIED; > + } > + > // > // force protocol layer to detach the PCB > // > Status = Sock->ProtoHandler (Sock, SOCK_DETACH, NULL); > > -- > 1.9.5.msysgit.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Reviewed-by: Ye Ting <ting.ye@intel.com> -----Original Message----- From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Zhang Lubo Sent: Friday, April 28, 2017 2:42 PM To: edk2-devel@lists.01.org Cc: Ye, Ting <ting.ye@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>; Wu, Jiaxin <jiaxin.wu@intel.com> Subject: [edk2] [patch] NetworkPkg: Fix issue the iSCSI client can not send reset packet. if we already established a iSCSI connection from initiator to target based on IPv4 stack, after using reconnect -r command, we can not rebuild the session with the windows target, since the server thought the session is still exist. This issue is caused by wrong place of acquire ownership of sock lock which lead the iSCSI can not reset the connection correctly. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo <lubo.zhang@intel.com> Cc: Wu Jiaxin <jiaxin.wu@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> --- NetworkPkg/TcpDxe/SockInterface.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/NetworkPkg/TcpDxe/SockInterface.c b/NetworkPkg/TcpDxe/SockInterface.c index b4ba40a..0248cdf 100644 --- a/NetworkPkg/TcpDxe/SockInterface.c +++ b/NetworkPkg/TcpDxe/SockInterface.c @@ -167,22 +167,10 @@ SockDestroyChild ( ProtoData = (TCP_PROTO_DATA *) Sock->ProtoReserved; Tcb = ProtoData->TcpPcb; ASSERT (Tcb != NULL); - Status = EfiAcquireLockOrFail (&(Sock->Lock)); - if (EFI_ERROR (Status)) { - - DEBUG ( - (EFI_D_ERROR, - "SockDestroyChild: Get the lock to access socket failed with %r\n", - Status) - ); - - return EFI_ACCESS_DENIED; - } - // // Close the IP protocol. // gBS->CloseProtocol ( Tcb->IpInfo->ChildHandle, @@ -224,10 +212,23 @@ SockDestroyChild ( TcpProtocolGuid, SockProtocol, NULL ); + + Status = EfiAcquireLockOrFail (&(Sock->Lock)); + if (EFI_ERROR (Status)) { + + DEBUG ( + (EFI_D_ERROR, + "SockDestroyChild: Get the lock to access socket failed with %r\n", + Status) + ); + + return EFI_ACCESS_DENIED; + } + // // force protocol layer to detach the PCB // Status = Sock->ProtoHandler (Sock, SOCK_DETACH, NULL); -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
© 2016 - 2024 Red Hat, Inc.