Control: tags -1 + moreinfo On 2021-03-20 15:27:28 +0100, Salvatore Bonaccorso wrote: > 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.
Please remove the moreinfo tag once ACKed by Hilko. Cheers > > 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@ -- Sebastian Ramacher
signature.asc
Description: PGP signature