vcl: fix ldp getsockopt tcp_info length check 76/41976/3
authorFlorin Coras <[email protected]>
Sat, 7 Dec 2024 22:28:46 +0000 (17:28 -0500)
committerDave Barach <[email protected]>
Sun, 8 Dec 2024 21:32:39 +0000 (21:32 +0000)
netinet/tcp.h and linux/tcp.h have different lenghts but overlap. LDP
uses the former while iperf the latter. Accept both lengths for now as
we do not support exposing tcp metrics via ldp.

Type: improvement

Change-Id: I13a149d68715ed9451773630a3595c09c421aa29
Signed-off-by: Florin Coras <[email protected]>
src/vcl/ldp.c

index e104644..023a0eb 100644 (file)
@@ -2020,10 +2020,14 @@ getsockopt (int fd, int level, int optname,
                             optval, optlen);
              break;
            case TCP_INFO:
-             if (optval && optlen && (*optlen == sizeof (struct tcp_info)))
+             /* Note: tcp_info in netinet/tcp.h and linux/tcp.h have
+              * different lenghts but overlap. Accept both for now */
+             if (optval && optlen)
                {
-                 LDBG (1, "fd %d: vlsh %u SOL_TCP, TCP_INFO, optval %p, "
-                       "optlen %d: #LDP-NOP#", fd, vlsh, optval, *optlen);
+                 LDBG (1,
+                       "fd %d: vlsh %u SOL_TCP, TCP_INFO, optval %p, "
+                       "optlen %d: #LDP-NOP#",
+                       fd, vlsh, optval, *optlen);
                  memset (optval, 0, *optlen);
                  rv = VPPCOM_OK;
                }