summaryrefslogtreecommitdiffstats
path: root/debian/patches/upstream
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 21:14:40 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 21:14:40 +0000
commitf342a2a222c9bf49a51d66c4a48fdfd0db50272a (patch)
treefe21ed89618a4eaf167e97bbc92cee48ec8d0420 /debian/patches/upstream
parentAdding debian version 2.40-1. (diff)
downloadutil-linux-f342a2a222c9bf49a51d66c4a48fdfd0db50272a.tar.xz
util-linux-f342a2a222c9bf49a51d66c4a48fdfd0db50272a.zip
Adding debian version 2.40-2.debian/2.40-2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/patches/upstream')
-rw-r--r--debian/patches/upstream/lsfd-add-LSFD_DEBUG-env-var-for-debugging.patch231
-rw-r--r--debian/patches/upstream/tests-test_mkfds-sockdiag-verify-the-recived-message.patch56
2 files changed, 287 insertions, 0 deletions
diff --git a/debian/patches/upstream/lsfd-add-LSFD_DEBUG-env-var-for-debugging.patch b/debian/patches/upstream/lsfd-add-LSFD_DEBUG-env-var-for-debugging.patch
new file mode 100644
index 0000000..32a1687
--- /dev/null
+++ b/debian/patches/upstream/lsfd-add-LSFD_DEBUG-env-var-for-debugging.patch
@@ -0,0 +1,231 @@
+From: Masatake YAMATO <yamato@redhat.com>
+Date: Sat, 30 Mar 2024 18:47:03 +0900
+Subject: lsfd: add LSFD_DEBUG env var for debugging
+
+Signed-off-by: Masatake YAMATO <yamato@redhat.com>
+---
+ misc-utils/lsfd-sock-xinfo.c | 51 ++++++++++++++++++++++++++++++++++++++------
+ misc-utils/lsfd.c | 10 +++++++++
+ misc-utils/lsfd.h | 15 +++++++++++++
+ 3 files changed, 70 insertions(+), 6 deletions(-)
+
+diff --git a/misc-utils/lsfd-sock-xinfo.c b/misc-utils/lsfd-sock-xinfo.c
+index a293806..71be41a 100644
+--- a/misc-utils/lsfd-sock-xinfo.c
++++ b/misc-utils/lsfd-sock-xinfo.c
+@@ -179,9 +179,12 @@ static void load_sock_xinfo_no_nsswitch(struct netns *nsobj)
+ load_xinfo_from_proc_packet(netns);
+
+ diagsd = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_SOCK_DIAG);
++ DBG(ENDPOINTS, ul_debug("made a diagnose socket [fd=%d; %s]", diagsd,
++ (diagsd >= 0)? "successful": strerror(errno)));
+ if (diagsd >= 0) {
+ load_xinfo_from_diag_unix(diagsd, netns);
+ close(diagsd);
++ DBG(ENDPOINTS, ul_debug("close the diagnose socket"));
+ }
+
+ if (nsobj)
+@@ -337,6 +340,7 @@ static void send_diag_request(int diagsd, void *req, size_t req_size,
+ bool (*cb)(ino_t, size_t, void *),
+ ino_t netns)
+ {
++ int r;
+ struct sockaddr_nl nladdr = {
+ .nl_family = AF_NETLINK,
+ };
+@@ -361,30 +365,45 @@ static void send_diag_request(int diagsd, void *req, size_t req_size,
+
+ __attribute__((aligned(sizeof(void *)))) uint8_t buf[8192];
+
+- if (sendmsg(diagsd, &mhd, 0) < 0)
++ r = sendmsg(diagsd, &mhd, 0);
++ DBG(ENDPOINTS, ul_debug("sendmsg [rc=%d; %s]",
++ r, (r >= 0)? "successful": strerror(errno)));
++ if (r < 0)
+ return;
+
+ for (;;) {
+ const struct nlmsghdr *h;
+- int r = recvfrom(diagsd, buf, sizeof(buf), 0, NULL, NULL);
++ r = recvfrom(diagsd, buf, sizeof(buf), 0, NULL, NULL);
++ DBG(ENDPOINTS, ul_debug("recvfrom [rc=%d; %s]",
++ r, (r >= 0)? "successful": strerror(errno)));
+ if (r < 0)
+ return;
+
+ h = (void *) buf;
++ DBG(ENDPOINTS, ul_debug(" OK: %d", NLMSG_OK(h, (size_t)r)));
+ if (!NLMSG_OK(h, (size_t)r))
+ return;
+
+ for (; NLMSG_OK(h, (size_t)r); h = NLMSG_NEXT(h, r)) {
+- if (h->nlmsg_type == NLMSG_DONE)
++ if (h->nlmsg_type == NLMSG_DONE) {
++ DBG(ENDPOINTS, ul_debug(" DONE"));
+ return;
+- if (h->nlmsg_type == NLMSG_ERROR)
++ }
++ if (h->nlmsg_type == NLMSG_ERROR) {
++ struct nlmsgerr *e = (struct nlmsgerr *)NLMSG_DATA(h);
++ DBG(ENDPOINTS, ul_debug(" ERROR: %s",
++ strerror(- e->error)));
+ return;
++ }
+
+ if (h->nlmsg_type == SOCK_DIAG_BY_FAMILY) {
++ DBG(ENDPOINTS, ul_debug(" FAMILY"));
+ if (!cb(netns, h->nlmsg_len, NLMSG_DATA(h)))
+ return;
+ }
++ DBG(ENDPOINTS, ul_debug(" NEXT"));
+ }
++ DBG(ENDPOINTS, ul_debug(" OK: 0"));
+ }
+ }
+
+@@ -639,6 +658,8 @@ static void load_xinfo_from_proc_unix(ino_t netns_inode)
+ FILE *unix_fp;
+
+ unix_fp = fopen("/proc/net/unix", "r");
++ DBG(ENDPOINTS, ul_debug("open /proc/net/unix [fp=%p; %s]", unix_fp,
++ unix_fp? "successful": strerror(errno)));
+ if (!unix_fp)
+ return;
+
+@@ -655,13 +676,18 @@ static void load_xinfo_from_proc_unix(ino_t netns_inode)
+ unsigned long inode;
+ struct unix_xinfo *ux;
+ char path[UNIX_LINE_LEN + 1] = { 0 };
++ int r;
+
++ DBG(ENDPOINTS, ul_debug(" line: %s", line));
+
+- if (sscanf(line, "%*x: %*x %*x %" SCNx64 " %x %x %lu %"
++ r = sscanf(line, "%*x: %*x %*x %" SCNx64 " %x %x %lu %"
+ stringify_value(UNIX_LINE_LEN) "[^\n]",
+- &flags, &type, &st, &inode, path) < 4)
++ &flags, &type, &st, &inode, path);
++ DBG(ENDPOINTS, ul_debug(" scanf: %d", r));
++ if (r < 4)
+ continue;
+
++ DBG(ENDPOINTS, ul_debug(" inode: %lu", inode));
+ if (inode == 0)
+ continue;
+
+@@ -675,10 +701,12 @@ static void load_xinfo_from_proc_unix(ino_t netns_inode)
+ ux->st = st;
+ xstrncpy(ux->path, path, sizeof(ux->path));
+
++ DBG(ENDPOINTS, ul_debug(" path: %s", ux->path));
+ add_sock_info(&ux->sock);
+ }
+
+ out:
++ DBG(ENDPOINTS, ul_debug("close /proc/net/unix"));
+ fclose(unix_fp);
+ }
+
+@@ -712,6 +740,9 @@ static bool handle_diag_unix(ino_t netns __attribute__((__unused__)),
+
+ if (diag->udiag_family != AF_UNIX)
+ return false;
++ DBG(ENDPOINTS, ul_debug(" UNIX"));
++ DBG(ENDPOINTS, ul_debug(" LEN: %zu (>= %zu)", nlmsg_len,
++ (size_t)(NLMSG_LENGTH(sizeof(*diag)))));
+
+ if (nlmsg_len < NLMSG_LENGTH(sizeof(*diag)))
+ return false;
+@@ -719,21 +750,29 @@ static bool handle_diag_unix(ino_t netns __attribute__((__unused__)),
+ inode = (ino_t)diag->udiag_ino;
+ xinfo = get_sock_xinfo(inode);
+
++ DBG(ENDPOINTS, ul_debug(" inode: %llu", (unsigned long long)inode));
++ DBG(ENDPOINTS, ul_debug(" xinfo: %p", xinfo));
++
+ if (xinfo == NULL)
+ /* The socket is found in the diag response
+ but not in the proc fs. */
+ return true;
+
++ DBG(ENDPOINTS, ul_debug(" xinfo->class == &unix_xinfo_class: %d",
++ xinfo->class == &unix_xinfo_class));
+ if (xinfo->class != &unix_xinfo_class)
+ return true;
+ unix_xinfo = (struct unix_xinfo *)xinfo;
+
+ rta_len = nlmsg_len - NLMSG_LENGTH(sizeof(*diag));
++ DBG(ENDPOINTS, ul_debug(" rta_len: %zu", rta_len));
+ for (struct rtattr *attr = (struct rtattr *)(diag + 1);
+ RTA_OK(attr, rta_len);
+ attr = RTA_NEXT(attr, rta_len)) {
+ size_t len = RTA_PAYLOAD(attr);
+
++ DBG(ENDPOINTS, ul_debug(" len = %2zu, type: %d",
++ rta_len, attr->rta_type));
+ switch (attr->rta_type) {
+ case UNIX_DIAG_NAME:
+ unix_refill_name(xinfo, RTA_DATA(attr), len);
+diff --git a/misc-utils/lsfd.c b/misc-utils/lsfd.c
+index 771daef..4786d1d 100644
+--- a/misc-utils/lsfd.c
++++ b/misc-utils/lsfd.c
+@@ -84,6 +84,14 @@ static int kcmp(pid_t pid1 __attribute__((__unused__)),
+
+ #include "lsfd.h"
+
++UL_DEBUG_DEFINE_MASK(lsfd);
++UL_DEBUG_DEFINE_MASKNAMES(lsfd) = UL_DEBUG_EMPTY_MASKNAMES;
++
++static void lsfd_init_debug(void)
++{
++ __UL_INIT_DEBUG_FROM_ENV(lsfd, LSFD_DEBUG_, 0, LSFD_DEBUG);
++}
++
+ /*
+ * /proc/$pid/mountinfo entries
+ */
+@@ -2271,6 +2279,8 @@ int main(int argc, char *argv[])
+ { NULL, 0, NULL, 0 },
+ };
+
++ lsfd_init_debug();
++
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+diff --git a/misc-utils/lsfd.h b/misc-utils/lsfd.h
+index 1859dc7..e646758 100644
+--- a/misc-utils/lsfd.h
++++ b/misc-utils/lsfd.h
+@@ -28,7 +28,11 @@
+ #include <sys/stat.h>
+ #include <dirent.h>
+ #include <inttypes.h>
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
+
++#include "debug.h"
+ #include "libsmartcols.h"
+ #include "list.h"
+ #include "nls.h"
+@@ -36,6 +40,17 @@
+ #include "strutils.h"
+ #include "xalloc.h"
+
++/*
++ * debug
++ */
++UL_DEBUG_DECLARE_MASK(lsfd);
++
++#define LSFD_DEBUG_INIT (1 << 1)
++#define LSFD_DEBUG_ENDPOINTS (1 << 2)
++#define LSFD_DEBUG_ALL 0xFFFF
++
++#define DBG(m, x) __UL_DBG(lsfd, LSFD_DEBUG_, m, x)
++
+ /*
+ * column IDs
+ */
diff --git a/debian/patches/upstream/tests-test_mkfds-sockdiag-verify-the-recived-message.patch b/debian/patches/upstream/tests-test_mkfds-sockdiag-verify-the-recived-message.patch
new file mode 100644
index 0000000..efd9063
--- /dev/null
+++ b/debian/patches/upstream/tests-test_mkfds-sockdiag-verify-the-recived-message.patch
@@ -0,0 +1,56 @@
+From: Masatake YAMATO <yamato@redhat.com>
+Date: Tue, 2 Apr 2024 06:34:40 +0900
+Subject: tests: (test_mkfds::sockdiag) verify the recived message
+
+Signed-off-by: Masatake YAMATO <yamato@redhat.com>
+---
+ tests/helpers/test_mkfds.c | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+diff --git a/tests/helpers/test_mkfds.c b/tests/helpers/test_mkfds.c
+index 39427ba..4b138c2 100644
+--- a/tests/helpers/test_mkfds.c
++++ b/tests/helpers/test_mkfds.c
+@@ -3200,6 +3200,25 @@ static int send_diag_request(int diagsd, void *req, size_t req_size)
+ return 0;
+ }
+
++static int recv_diag_request(int diagsd)
++{
++ __attribute__((aligned(sizeof(void *)))) uint8_t buf[8192];
++ const struct nlmsghdr *h;
++ int r = recvfrom(diagsd, buf, sizeof(buf), 0, NULL, NULL);;
++ if (r < 0)
++ return errno;
++
++ h = (void *)buf;
++ if (!NLMSG_OK(h, (size_t)r))
++ return -1;
++
++ if (h->nlmsg_type == NLMSG_ERROR) {
++ struct nlmsgerr *e = (struct nlmsgerr *)NLMSG_DATA(h);
++ return - e->error;
++ }
++ return 0;
++}
++
+ static void *make_sockdiag(const struct factory *factory, struct fdesc fdescs[],
+ int argc, char ** argv)
+ {
+@@ -3243,6 +3262,16 @@ static void *make_sockdiag(const struct factory *factory, struct fdesc fdescs[],
+ err(EXIT_FAILURE, "failed in sendmsg()");
+ }
+
++ e = recv_diag_request(diagsd);
++ if (e != 0) {
++ close (diagsd);
++ if (e == ENOENT)
++ err(EXIT_ENOENT, "failed in recvfrom()");
++ if (e > 0)
++ err(EXIT_FAILURE, "failed in recvfrom()");
++ if (e < 0)
++ errx(EXIT_FAILURE, "failed in recvfrom() => -1");
++ }
+
+ if (diagsd != fdescs[0].fd) {
+ if (dup2(diagsd, fdescs[0].fd) < 0) {