Whamcloud - gitweb
LU-13950 lnet: do not crash if lnet_sock_getaddr returns error 34/39834/6
authorArtem Blagodarenko <artem.blagodarenko@hpe.com>
Tue, 25 Aug 2020 10:01:11 +0000 (06:01 -0400)
committerOleg Drokin <green@whamcloud.com>
Wed, 2 Jun 2021 17:48:11 +0000 (17:48 +0000)
Some issues with network lead to panic in ksocknal_accept

rc = lnet_sock_getaddr(sock, true, &peer_ip, &peer_port);
LASSERT(rc == 0); /* we succeeded before */

Let's pass this error to the caller.

Change-Id: I34d43c19b4e75422db50e7abb02cac3510882b0d
hpe-bug-id: LUS-9256
Signed-off-by: Artem Blagodarenko <artem.blagodarenko@hpe.com>
Reviewed-on: https://es-gerrit.dev.cray.com/157753
Reviewed-by: Andriy Skulysh <c17819@cray.com>
Reviewed-by: Alexander Zarochentsev <c17826@cray.com>
Tested-by: Alexander Lezhoev <c17454@cray.com>
Reviewed-by: Chris Horn <hornc@cray.com>
Reviewed-on: https://review.whamcloud.com/39834
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/klnds/socklnd/socklnd.c
lnet/lnet/acceptor.c

index 35d12d9..e9053fb 100644 (file)
@@ -743,7 +743,10 @@ ksocknal_accept(struct lnet_ni *ni, struct socket *sock)
        struct sockaddr_storage peer;
 
        rc = lnet_sock_getaddr(sock, true, &peer);
-       LASSERT(rc == 0);               /* we succeeded before */
+       if (rc != 0) {
+               CERROR("Can't determine new connection's address\n");
+               return rc;
+       }
 
        LIBCFS_ALLOC(cr, sizeof(*cr));
        if (cr == NULL) {
index aa8d2e3..f287ae6 100644 (file)
@@ -205,7 +205,10 @@ lnet_accept(struct socket *sock, __u32 magic)
        LASSERT(sizeof(cr) <= 16);              /* not too big for the stack */
 
        rc = lnet_sock_getaddr(sock, true, &peer);
-       LASSERT(rc == 0);                       /* we succeeded before */
+       if (rc != 0) {
+               CERROR("Can't determine new connection's address\n");
+               return rc;
+       }
 
        if (!lnet_accept_magic(magic, LNET_PROTO_ACCEPTOR_MAGIC)) {