From: Jakub Kicinski Date: Wed, 18 Aug 2021 21:29:46 +0000 (-0700) Subject: ss: fix fallback to procfs for raw sockets X-Git-Tag: v5.14.0~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=85b0e73c7714d33e94e3d289c49c4e0f35497071;p=thirdparty%2Fiproute2.git ss: fix fallback to procfs for raw sockets Jonas reports that ss -awp does not display any RAW sockets on a Knoppix 4.4 kernel. sockdiag_send() diverts to tcpdiag_send() to try the older netlink interface. tcpdiag_send() works for TCP and DCCP but not other protocols. Instead of rejecting unsupported protocols (and missing RAW and SCTP) match on supported ones. Link: https://lore.kernel.org/netdev/20210815231738.7b42bad4@mmluhan/ Reported-and-tested-by: Jonas Bechtel Fixes: 41fe6c34de50 ("ss: Add inet raw sockets information gathering via netlink diag interface") Signed-off-by: Jakub Kicinski Signed-off-by: Stephen Hemminger --- diff --git a/misc/ss.c b/misc/ss.c index 894ad4057..b39f63fe3 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -3404,13 +3404,13 @@ static int tcpdiag_send(int fd, int protocol, struct filter *f) struct iovec iov[3]; int iovlen = 1; - if (protocol == IPPROTO_UDP || protocol == IPPROTO_MPTCP) - return -1; - if (protocol == IPPROTO_TCP) req.nlh.nlmsg_type = TCPDIAG_GETSOCK; - else + else if (protocol == IPPROTO_DCCP) req.nlh.nlmsg_type = DCCPDIAG_GETSOCK; + else + return -1; + if (show_mem) { req.r.idiag_ext |= (1<<(INET_DIAG_MEMINFO-1)); req.r.idiag_ext |= (1<<(INET_DIAG_SKMEMINFO-1));