Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock X-Debbugs-Cc: car...@debian.org,ben...@debian.org
Hi Release team [Disclaimer, not the maintainer requesting the unblock, but I'm CC'ing Hilko to confirm]. Please unblock package libnbd [ Reason ] The new upstream version uploaded libnbd/1.6.2-1 contains as fix for CVE-2021-20286. I was announced as https://listman.redhat.com/archives/libguestfs/2021-March/msg00092.html . An isolated fix was https://gitlab.com/nbdkit/libnbd/-/commit/2216190ecbbd853648df6a3280c17b345b0907a0 . The request is done to have bullseye without this CVE open. [ Impact ] Denial of service. [ Tests ] I have not performed tests specific to the version update 1.6.1 to 1.6.2. [ Risks ] Arguably there is a new upstream version, but the attached debdiff collects all the changes additionally done. Again, Hilko is CC'ed to confirm if this is safe for bullseye. [ Checklist ] [ ] all changes are documented in the d/changelog [ ] I reviewed all changes and I approve them [x] attach debdiff against the package in testing [ Other info ] It should propably have an explicit acknowledgment for the unblock from Hilko. unblock libnbd/1.6.2-1 Regards, Salvatore
diff -Nru libnbd-1.6.1/Makefile.in libnbd-1.6.2/Makefile.in --- libnbd-1.6.1/Makefile.in 2021-01-20 14:12:55.000000000 +0100 +++ libnbd-1.6.2/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -204,7 +204,8 @@ $(srcdir)/podwrapper.pl.in $(srcdir)/run.in \ $(top_srcdir)/common-rules.mk \ $(top_srcdir)/lib/local/libnbd.pc.in COPYING.LIB README TODO \ - compile config.guess config.sub install-sh ltmain.sh missing + compile config.guess config.sub depcomp install-sh ltmain.sh \ + missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -412,6 +413,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/bash/Makefile.in libnbd-1.6.2/bash/Makefile.in --- libnbd-1.6.1/bash/Makefile.in 2021-01-20 14:12:55.000000000 +0100 +++ libnbd-1.6.2/bash/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -380,6 +380,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/common/include/Makefile.in libnbd-1.6.2/common/include/Makefile.in --- libnbd-1.6.1/common/include/Makefile.in 2021-01-20 14:12:55.000000000 +0100 +++ libnbd-1.6.2/common/include/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -346,6 +346,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/common/utils/Makefile.in libnbd-1.6.2/common/utils/Makefile.in --- libnbd-1.6.1/common/utils/Makefile.in 2021-01-20 14:12:55.000000000 +0100 +++ libnbd-1.6.2/common/utils/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -397,6 +397,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/configure libnbd-1.6.2/configure --- libnbd-1.6.1/configure 2021-01-20 14:12:55.000000000 +0100 +++ libnbd-1.6.2/configure 2021-03-02 22:35:29.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libnbd 1.6.1. +# Generated by GNU Autoconf 2.69 for libnbd 1.6.2. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='libnbd' PACKAGE_TARNAME='libnbd' -PACKAGE_VERSION='1.6.1' -PACKAGE_STRING='libnbd 1.6.1' +PACKAGE_VERSION='1.6.2' +PACKAGE_STRING='libnbd 1.6.2' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -821,6 +821,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -934,6 +935,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1186,6 +1188,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1323,7 +1334,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1436,7 +1447,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libnbd 1.6.1 to adapt to many kinds of systems. +\`configure' configures libnbd 1.6.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1476,6 +1487,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1506,7 +1518,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libnbd 1.6.1:";; + short | recursive ) echo "Configuration of libnbd 1.6.2:";; esac cat <<\_ACEOF @@ -1657,7 +1669,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libnbd configure 1.6.1 +libnbd configure 1.6.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2189,7 +2201,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libnbd $as_me 1.6.1, which was +It was created by libnbd $as_me 1.6.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4626,7 +4638,7 @@ # Define the identity of the package. PACKAGE='libnbd' - VERSION='1.6.1' + VERSION='1.6.2' cat >>confdefs.h <<_ACEOF @@ -20813,7 +20825,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libnbd $as_me 1.6.1, which was +This file was extended by libnbd $as_me 1.6.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20879,7 +20891,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libnbd config.status 1.6.1 +libnbd config.status 1.6.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru libnbd-1.6.1/configure.ac libnbd-1.6.2/configure.ac --- libnbd-1.6.1/configure.ac 2021-01-20 14:12:43.000000000 +0100 +++ libnbd-1.6.2/configure.ac 2021-03-02 22:35:15.000000000 +0100 @@ -15,7 +15,7 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -AC_INIT([libnbd],[1.6.1]) +AC_INIT([libnbd],[1.6.2]) AC_CONFIG_MACRO_DIR([m4]) m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],[], diff -Nru libnbd-1.6.1/copy/Makefile.in libnbd-1.6.2/copy/Makefile.in --- libnbd-1.6.1/copy/Makefile.in 2021-01-20 14:12:55.000000000 +0100 +++ libnbd-1.6.2/copy/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -663,6 +663,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/copy/main.c libnbd-1.6.2/copy/main.c --- libnbd-1.6.1/copy/main.c 2020-12-05 17:32:32.000000000 +0100 +++ libnbd-1.6.2/copy/main.c 2021-03-02 22:32:34.000000000 +0100 @@ -392,12 +392,18 @@ !nbd_can_meta_context (src.u.nbd.handles.ptr[0], "base:allocation")) extents = false; + /* Always set the progress bar to 0% at the start of the copy. */ + progress_bar (0, 1); + /* Start copying. */ if (synchronous) synch_copying (); else multi_thread_copying (); + /* Always set the progress bar to 100% at the end of the copy. */ + progress_bar (1, 1); + /* Shut down the source side. */ src.ops->close (&src); diff -Nru libnbd-1.6.1/copy/multi-thread-copying.c libnbd-1.6.2/copy/multi-thread-copying.c --- libnbd-1.6.1/copy/multi-thread-copying.c 2021-01-20 14:12:05.000000000 +0100 +++ libnbd-1.6.2/copy/multi-thread-copying.c 2021-03-02 22:33:05.000000000 +0100 @@ -122,9 +122,6 @@ } } - /* Set the progress bar to 100/100 to indicate we're done. */ - progress_bar (1, 1); - free (workers); } diff -Nru libnbd-1.6.1/copy/nbd-ops.c libnbd-1.6.2/copy/nbd-ops.c --- libnbd-1.6.1/copy/nbd-ops.c 2020-12-05 17:32:32.000000000 +0100 +++ libnbd-1.6.2/copy/nbd-ops.c 2021-03-02 22:33:31.000000000 +0100 @@ -268,6 +268,7 @@ ret->size = 0; while (count > 0) { + const uint64_t old_offset = offset; size_t i; exts.size = 0; @@ -283,28 +284,11 @@ exit (EXIT_FAILURE); } - /* The server should always make progress. */ - if (exts.size == 0) { - fprintf (stderr, "%s: NBD server is broken: it is not returning extent information.\nTry nbdcopy --no-extents as a workaround.\n", - rw->name); - exit (EXIT_FAILURE); - } - - /* Copy the extents returned into the final list (ret). This is - * complicated because the extents returned by the server may - * begin earlier and begin or end later than the requested size. - */ + /* Copy the extents returned into the final list (ret). */ for (i = 0; i < exts.size; ++i) { uint64_t d; - if (exts.ptr[i].offset + exts.ptr[i].length <= offset) - continue; - if (exts.ptr[i].offset < offset) { - d = offset - exts.ptr[i].offset; - exts.ptr[i].offset += d; - exts.ptr[i].length -= d; - assert (exts.ptr[i].offset == offset); - } + assert (exts.ptr[i].offset == offset); if (exts.ptr[i].offset + exts.ptr[i].length > offset + count) { d = exts.ptr[i].offset + exts.ptr[i].length - offset - count; exts.ptr[i].length -= d; @@ -320,6 +304,13 @@ offset += exts.ptr[i].length; count -= exts.ptr[i].length; } + + /* The server should always make progress. */ + if (offset == old_offset) { + fprintf (stderr, "%s: NBD server is broken: it is not returning extent information.\nTry nbdcopy --no-extents as a workaround.\n", + rw->name); + exit (EXIT_FAILURE); + } } free (exts.ptr); diff -Nru libnbd-1.6.1/copy/nbdcopy.pod libnbd-1.6.2/copy/nbdcopy.pod --- libnbd-1.6.1/copy/nbdcopy.pod 2021-01-20 14:12:18.000000000 +0100 +++ libnbd-1.6.2/copy/nbdcopy.pod 2021-03-02 22:33:24.000000000 +0100 @@ -83,7 +83,7 @@ Normally nbdcopy tries to create sparse output (with holes) if the destination supports that. It does this in two ways: either using -extent informtation from the source to copy holes (see +extent information from the source to copy holes (see I<--no-extents>), or by detecting runs of zeroes (see I<-S>). If you use I<--allocated> then nbdcopy creates a fully allocated, non-sparse output on the destination. diff -Nru libnbd-1.6.1/copy/progress.c libnbd-1.6.2/copy/progress.c --- libnbd-1.6.1/copy/progress.c 2020-12-05 16:26:34.000000000 +0100 +++ libnbd-1.6.2/copy/progress.c 2021-03-02 22:30:57.000000000 +0100 @@ -35,8 +35,15 @@ static void do_progress_bar (off_t pos, int64_t size) { - static const char *spinner[] = { "◐", "◓", "◑", "◒" }; static int tty = -1; + + /* Note the spinner is covered with the cursor which usually makes + * it appear inverse video. + */ + static const char *spinner[] = { "▝", "▐", "▗", "▃", "▖", "▍", "▘", "▀" }; + static const char *spinner_100 = "█"; + static int spinpos = 0; + double frac = (double) pos / size; char msg[80]; size_t n, i; @@ -50,14 +57,18 @@ if (frac < 0) frac = 0; else if (frac > 1) frac = 1; if (frac == 1) { - snprintf (msg, sizeof msg, "● 100%% [****************************************]\n"); + snprintf (msg, sizeof msg, + "%s 100%% [****************************************]\n", + spinner_100); progress = false; /* Don't print any more progress bar messages. */ } else { - snprintf (msg, sizeof msg, "%s %3d%% [----------------------------------------]\r", - spinner[(int)(4*frac)], (int)(100*frac)); + snprintf (msg, sizeof msg, + "%s %3d%% [----------------------------------------]\r", + spinner[spinpos], (int)(100*frac)); n = strcspn (msg, "-"); for (i = 0; i < 40*frac; ++i) msg[n+i] = '*'; + spinpos = (spinpos+1) % (sizeof spinner / sizeof spinner[0]); } #pragma GCC diagnostic push diff -Nru libnbd-1.6.1/copy/synch-copying.c libnbd-1.6.2/copy/synch-copying.c --- libnbd-1.6.1/copy/synch-copying.c 2020-12-05 16:26:34.000000000 +0100 +++ libnbd-1.6.2/copy/synch-copying.c 2021-03-02 22:33:05.000000000 +0100 @@ -99,7 +99,4 @@ free (exts.ptr); } /* while */ } - - /* Always set the progress bar to 100% at the end of the copy. */ - progress_bar (1, 1); } diff -Nru libnbd-1.6.1/debian/changelog libnbd-1.6.2/debian/changelog --- libnbd-1.6.1/debian/changelog 2021-02-10 00:20:57.000000000 +0100 +++ libnbd-1.6.2/debian/changelog 2021-03-03 09:36:41.000000000 +0100 @@ -1,3 +1,9 @@ +libnbd (1.6.2-1) unstable; urgency=medium + + * New upstream version 1.6.2 + + -- Hilko Bengen <ben...@debian.org> Wed, 03 Mar 2021 09:36:41 +0100 + libnbd (1.6.1-1) unstable; urgency=medium * New upstream version 1.6.1 diff -Nru libnbd-1.6.1/docs/Makefile.in libnbd-1.6.2/docs/Makefile.in --- libnbd-1.6.1/docs/Makefile.in 2021-01-20 14:12:55.000000000 +0100 +++ libnbd-1.6.2/docs/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -388,6 +388,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/docs/libnbd.pod libnbd-1.6.2/docs/libnbd.pod --- libnbd-1.6.1/docs/libnbd.pod 2020-12-12 23:21:56.000000000 +0100 +++ libnbd-1.6.2/docs/libnbd.pod 2021-03-02 22:31:24.000000000 +0100 @@ -402,8 +402,7 @@ libnbd supports the L<NBD URI specification|https://github.com/NetworkBlockDevice/nbd/blob/master/doc/uri.md>. -The URIs that libnbd currently supports is documented in -L<nbd_connect_uri(3)>. +The format of URIs is documented in L<nbd_connect_uri(3)>. You can connect to a URI as in these examples (using the high level API): @@ -869,6 +868,11 @@ cc prog.c -o prog `pkg-config libnbd --cflags --libs` +To compile an external project against a built copy of the libnbd +source tree which hasn't been installed, see the F<./run> script. + +=head2 Autoconf projects + External projects which use autoconf and need to check if libnbd is installed should use the C<PKG_CHECK_MODULES> macro in F<configure.ac> like this: @@ -878,6 +882,8 @@ This will define C<@LIBNBD_CFLAGS@> and C<@LIBNBD_LIBS@> which you will need to add to your F<Makefile.am>. +=head2 CMake projects + For CMake projects use: find_package(PkgConfig REQUIRED) @@ -886,8 +892,12 @@ target_include_directories(prog PUBLIC ${LIBNBD_INCLUDE_DIRS}) target_compile_options(prog PUBLIC ${LIBNBD_CFLAGS_OTHER}) -To compile an external project against a built copy of the libnbd -source tree which hasn't been installed, see the F<./run> script. +=head2 Meson projects + +For meson projects use: + + nbd_dep = dependency('libnbd') + executable('prog', 'prog.c', dependencies : [nbd_dep]) =head1 ENVIRONMENT VARIABLES diff -Nru libnbd-1.6.1/examples/Makefile.in libnbd-1.6.2/examples/Makefile.in --- libnbd-1.6.1/examples/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/examples/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -555,6 +555,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/fuse/Makefile.in libnbd-1.6.2/fuse/Makefile.in --- libnbd-1.6.1/fuse/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/fuse/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -629,6 +629,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/fuzzing/Makefile.in libnbd-1.6.2/fuzzing/Makefile.in --- libnbd-1.6.1/fuzzing/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/fuzzing/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -416,6 +416,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/generator/Makefile.in libnbd-1.6.2/generator/Makefile.in --- libnbd-1.6.1/generator/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/generator/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -346,6 +346,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/generator/states-connect.c libnbd-1.6.2/generator/states-connect.c --- libnbd-1.6.1/generator/states-connect.c 2020-11-28 21:25:58.000000000 +0100 +++ libnbd-1.6.2/generator/states-connect.c 2021-03-02 22:31:33.000000000 +0100 @@ -47,11 +47,12 @@ STATE_MACHINE { CONNECT.START: - int fd; + sa_family_t family; + int fd, r; assert (!h->sock); - fd = socket (h->connaddr.ss_family, - SOCK_STREAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0); + family = h->connaddr.ss_family; + fd = socket (family, SOCK_STREAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0); if (fd == -1) { SET_NEXT_STATE (%.DEAD); set_error (errno, "socket"); @@ -65,14 +66,28 @@ disable_nagle (fd); - if (connect (fd, (struct sockaddr *) &h->connaddr, - h->connaddrlen) == -1) { - if (errno != EINPROGRESS) { - SET_NEXT_STATE (%.DEAD); - set_error (errno, "connect"); - return 0; - } + r = connect (fd, (struct sockaddr *) &h->connaddr, h->connaddrlen); + if (r == 0 || (r == -1 && errno == EINPROGRESS)) + return 0; + assert (r == -1); +#ifdef __linux__ + if (errno == EAGAIN && family == AF_UNIX) { + /* This can happen on Linux when connecting to a Unix domain + * socket, if the server's backlog is full. Unfortunately there + * is nothing good we can do on the client side when this happens + * since any solution would involve sleeping or busy-waiting. The + * only solution is on the server side, increasing the backlog. + * But at least improve the error message. + * https://bugzilla.redhat.com/1925045 + */ + SET_NEXT_STATE (%.DEAD); + set_error (errno, "connect: server backlog overflowed, " + "see https://bugzilla.redhat.com/1925045"); + return 0; } +#endif + SET_NEXT_STATE (%.DEAD); + set_error (errno, "connect"); return 0; CONNECT.CONNECTING: diff -Nru libnbd-1.6.1/golang/Makefile.in libnbd-1.6.2/golang/Makefile.in --- libnbd-1.6.1/golang/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/golang/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -558,6 +558,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/golang/examples/Makefile.in libnbd-1.6.2/golang/examples/Makefile.in --- libnbd-1.6.1/golang/examples/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/golang/examples/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -348,6 +348,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/include/Makefile.in libnbd-1.6.2/include/Makefile.in --- libnbd-1.6.1/include/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/include/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -395,6 +395,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/info/Makefile.in libnbd-1.6.2/info/Makefile.in --- libnbd-1.6.1/info/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/info/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -633,6 +633,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/info/nbdinfo.c libnbd-1.6.2/info/nbdinfo.c --- libnbd-1.6.1/info/nbdinfo.c 2020-11-28 21:25:58.000000000 +0100 +++ libnbd-1.6.2/info/nbdinfo.c 2021-03-02 22:34:33.000000000 +0100 @@ -1,5 +1,5 @@ /* NBD client library in userspace - * Copyright (C) 2020 Red Hat Inc. + * Copyright (C) 2020-2021 Red Hat Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -416,13 +416,16 @@ /* Collect the metadata we are going to display. If opt_info works, * great; if not (such as for legacy newstyle), we have to go all - * the way with opt_go. + * the way with opt_go. If we fail to connect (such as a server + * advertising something it later refuses to serve), return rather + * than exit, to allow output on the rest of the list. */ if (nbd_aio_is_negotiating (nbd) && nbd_opt_info (nbd) == -1 && nbd_opt_go (nbd) == -1) { - fprintf (stderr, "%s: %s\n", progname, nbd_get_error ()); - exit (EXIT_FAILURE); + fprintf (stderr, "%s: %s: %s\n", progname, nbd_get_export_name (nbd), + nbd_get_error ()); + return; } size = nbd_get_size (nbd); if (size == -1) { diff -Nru libnbd-1.6.1/interop/Makefile.in libnbd-1.6.2/interop/Makefile.in --- libnbd-1.6.1/interop/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/interop/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -928,6 +928,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/lib/Makefile.in libnbd-1.6.2/lib/Makefile.in --- libnbd-1.6.1/lib/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/lib/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -456,6 +456,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/lib/opt.c libnbd-1.6.2/lib/opt.c --- libnbd-1.6.1/lib/opt.c 2020-11-28 21:25:58.000000000 +0100 +++ libnbd-1.6.2/lib/opt.c 2021-03-02 22:34:45.000000000 +0100 @@ -1,5 +1,5 @@ /* NBD client library in userspace - * Copyright (C) 2020 Red Hat Inc. + * Copyright (C) 2020-2021 Red Hat Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -83,7 +83,8 @@ r = wait_for_option (h); if (r == 0 && err) { - assert (nbd_internal_is_state_negotiating (get_next_state (h))); + assert (nbd_internal_is_state_negotiating (get_next_state (h)) || + nbd_internal_is_state_dead (get_next_state (h))); set_error (err, "server replied with error to opt_go request"); return -1; } @@ -105,7 +106,8 @@ r = wait_for_option (h); if (r == 0 && err) { - assert (nbd_internal_is_state_negotiating (get_next_state (h))); + assert (nbd_internal_is_state_negotiating (get_next_state (h)) || + nbd_internal_is_state_dead (get_next_state (h))); set_error (err, "server replied with error to opt_info request"); return -1; } diff -Nru libnbd-1.6.1/lib/states.c libnbd-1.6.2/lib/states.c --- libnbd-1.6.1/lib/states.c 2021-01-20 14:13:27.000000000 +0100 +++ libnbd-1.6.2/lib/states.c 2021-03-02 22:36:05.000000000 +0100 @@ -799,11 +799,12 @@ { #line 49 "generator/states-connect.c" - int fd; + sa_family_t family; + int fd, r; assert (!h->sock); - fd = socket (h->connaddr.ss_family, - SOCK_STREAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0); + family = h->connaddr.ss_family; + fd = socket (family, SOCK_STREAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0); if (fd == -1) { SET_NEXT_STATE (STATE_DEAD); set_error (errno, "socket"); @@ -817,14 +818,28 @@ disable_nagle (fd); - if (connect (fd, (struct sockaddr *) &h->connaddr, - h->connaddrlen) == -1) { - if (errno != EINPROGRESS) { - SET_NEXT_STATE (STATE_DEAD); - set_error (errno, "connect"); - return 0; - } + r = connect (fd, (struct sockaddr *) &h->connaddr, h->connaddrlen); + if (r == 0 || (r == -1 && errno == EINPROGRESS)) + return 0; + assert (r == -1); +#ifdef __linux__ + if (errno == EAGAIN && family == AF_UNIX) { + /* This can happen on Linux when connecting to a Unix domain + * socket, if the server's backlog is full. Unfortunately there + * is nothing good we can do on the client side when this happens + * since any solution would involve sleeping or busy-waiting. The + * only solution is on the server side, increasing the backlog. + * But at least improve the error message. + * https://bugzilla.redhat.com/1925045 + */ + SET_NEXT_STATE (STATE_DEAD); + set_error (errno, "connect: server backlog overflowed, " + "see https://bugzilla.redhat.com/1925045"); + return 0; } +#endif + SET_NEXT_STATE (STATE_DEAD); + set_error (errno, "connect"); return 0; } @@ -851,7 +866,7 @@ enum state *next_state, bool *blocked) { -#line 78 "generator/states-connect.c" +#line 93 "generator/states-connect.c" int status; socklen_t len = sizeof status; @@ -897,7 +912,7 @@ enum state *next_state, bool *blocked) { -#line 99 "generator/states-connect.c" +#line 114 "generator/states-connect.c" int r; @@ -957,7 +972,7 @@ enum state *next_state, bool *blocked) { -#line 134 "generator/states-connect.c" +#line 149 "generator/states-connect.c" int fd; @@ -1025,7 +1040,7 @@ enum state *next_state, bool *blocked) { -#line 177 "generator/states-connect.c" +#line 192 "generator/states-connect.c" int status; socklen_t len = sizeof status; @@ -1070,7 +1085,7 @@ enum state *next_state, bool *blocked) { -#line 197 "generator/states-connect.c" +#line 212 "generator/states-connect.c" if (h->sock) { h->sock->ops->close (h->sock); @@ -1105,7 +1120,7 @@ enum state *next_state, bool *blocked) { -#line 207 "generator/states-connect.c" +#line 222 "generator/states-connect.c" int sv[2]; pid_t pid; diff -Nru libnbd-1.6.1/ocaml/Makefile.in libnbd-1.6.2/ocaml/Makefile.in --- libnbd-1.6.1/ocaml/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/ocaml/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -469,6 +469,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/ocaml/examples/Makefile.in libnbd-1.6.2/ocaml/examples/Makefile.in --- libnbd-1.6.1/ocaml/examples/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/ocaml/examples/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -349,6 +349,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/ocaml/tests/Makefile.in libnbd-1.6.2/ocaml/tests/Makefile.in --- libnbd-1.6.1/ocaml/tests/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/ocaml/tests/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -598,6 +598,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/python/Makefile.in libnbd-1.6.2/python/Makefile.in --- libnbd-1.6.1/python/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/python/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -622,6 +622,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/sh/Makefile.in libnbd-1.6.2/sh/Makefile.in --- libnbd-1.6.1/sh/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/sh/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -571,6 +571,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/tests/Makefile.in libnbd-1.6.2/tests/Makefile.in --- libnbd-1.6.1/tests/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/tests/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -1474,6 +1474,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff -Nru libnbd-1.6.1/valgrind/Makefile.in libnbd-1.6.2/valgrind/Makefile.in --- libnbd-1.6.1/valgrind/Makefile.in 2021-01-20 14:12:56.000000000 +0100 +++ libnbd-1.6.2/valgrind/Makefile.in 2021-03-02 22:35:29.000000000 +0100 @@ -348,6 +348,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@