Hello community, here is the log from the commit of package fuse-overlayfs for openSUSE:Factory checked in at 2020-01-12 23:17:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fuse-overlayfs (Old) and /work/SRC/openSUSE:Factory/.fuse-overlayfs.new.6675 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fuse-overlayfs" Sun Jan 12 23:17:02 2020 rev:5 rq:762137 version:0.7.3 Changes: -------- --- /work/SRC/openSUSE:Factory/fuse-overlayfs/fuse-overlayfs.changes 2020-01-01 14:56:25.269872264 +0100 +++ /work/SRC/openSUSE:Factory/.fuse-overlayfs.new.6675/fuse-overlayfs.changes 2020-01-12 23:17:44.978668904 +0100 @@ -1,0 +2,9 @@ +Thu Jan 9 11:18:57 UTC 2020 - Sascha Grunert <sgrun...@suse.com> + +- Update to v0.7.3 + - fix build with -fno-common + - fix possible segmentation fault in direct_fsync() + - use the data store to create missing whiteouts + - after a rename, force a directory reload + +------------------------------------------------------------------- Old: ---- fuse-overlayfs-0.7.2.tar.xz New: ---- fuse-overlayfs-0.7.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fuse-overlayfs.spec ++++++ --- /var/tmp/diff_new_pack.KouNrb/_old 2020-01-12 23:17:45.874669235 +0100 +++ /var/tmp/diff_new_pack.KouNrb/_new 2020-01-12 23:17:45.882669239 +0100 @@ -1,7 +1,7 @@ # # spec file for package fuse-overlayfs # -# Copyright (c) 2019 SUSE LLC +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: fuse-overlayfs -Version: 0.7.2 +Version: 0.7.3 Release: 0 Summary: FUSE implementation for overlayfs License: GPL-3.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.KouNrb/_old 2020-01-12 23:17:45.906669248 +0100 +++ /var/tmp/diff_new_pack.KouNrb/_new 2020-01-12 23:17:45.906669248 +0100 @@ -3,8 +3,8 @@ <param name="url">https://github.com/containers/fuse-overlayfs.git</param> <param name="scm">git</param> <param name="filename">fuse-overlayfs</param> - <param name="versionformat">0.7.2</param> - <param name="revision">v0.7.2</param> + <param name="versionformat">0.7.3</param> + <param name="revision">v0.7.3</param> </service> <service name="set_version" mode="disabled"> <param name="basename">fuse-overlayfs</param> ++++++ fuse-overlayfs-0.7.2.tar.xz -> fuse-overlayfs-0.7.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/Dockerfile.static new/fuse-overlayfs-0.7.3/Dockerfile.static --- old/fuse-overlayfs-0.7.2/Dockerfile.static 2019-11-29 14:16:32.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/Dockerfile.static 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -FROM registry.fedoraproject.org/fedora:latest -WORKDIR /build -RUN dnf update -y && \ - dnf install -y git make automake autoconf gcc glibc-static meson ninja-build clang - -RUN git clone https://github.com/libfuse/libfuse && \ - cd libfuse && \ - mkdir build && \ - cd build && \ - LDFLAGS="-lpthread" meson --prefix /usr -D default_library=static .. && \ - ninja && \ - ninja install - -RUN git clone https://github.com/containers/fuse-overlayfs && \ - cd fuse-overlayfs && \ - sh autogen.sh && \ - LIBS="-ldl" LDFLAGS="-static" ./configure --prefix /usr && \ - make && \ - make install -USER 1000 -ENTRYPOINT ["/usr/bin/fuse-overlayfs","-f"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/Dockerfile.static.fedora new/fuse-overlayfs-0.7.3/Dockerfile.static.fedora --- old/fuse-overlayfs-0.7.2/Dockerfile.static.fedora 1970-01-01 01:00:00.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/Dockerfile.static.fedora 2020-01-09 12:06:17.000000000 +0100 @@ -0,0 +1,21 @@ +FROM registry.fedoraproject.org/fedora:latest +WORKDIR /build +RUN dnf update -y && \ + dnf install -y git make automake autoconf gcc glibc-static meson ninja-build clang + +RUN git clone https://github.com/libfuse/libfuse && \ + cd libfuse && \ + mkdir build && \ + cd build && \ + LDFLAGS="-lpthread" meson --prefix /usr -D default_library=static .. && \ + ninja && \ + ninja install + +RUN git clone https://github.com/containers/fuse-overlayfs && \ + cd fuse-overlayfs && \ + sh autogen.sh && \ + LIBS="-ldl" LDFLAGS="-static" ./configure --prefix /usr && \ + make && \ + make install +USER 1000 +ENTRYPOINT ["/usr/bin/fuse-overlayfs","-f"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/Dockerfile.static.ubuntu new/fuse-overlayfs-0.7.3/Dockerfile.static.ubuntu --- old/fuse-overlayfs-0.7.2/Dockerfile.static.ubuntu 1970-01-01 01:00:00.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/Dockerfile.static.ubuntu 2020-01-09 12:06:17.000000000 +0100 @@ -0,0 +1,11 @@ +FROM docker.io/ubuntu:rolling +WORKDIR /build +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libc6-dev gcc g++ make automake autoconf clang pkgconf libfuse3-dev + +RUN cd fuse-overlayfs && \ + sh autogen.sh && \ + LIBS="-ldl" LDFLAGS="-static" ./configure --prefix /usr && \ + make + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/Makefile.am new/fuse-overlayfs-0.7.3/Makefile.am --- old/fuse-overlayfs-0.7.2/Makefile.am 2019-11-29 14:16:32.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/Makefile.am 2020-01-09 12:06:17.000000000 +0100 @@ -4,7 +4,7 @@ ACLOCAL_AMFLAGS = -Im4 -EXTRA_DIST = m4/gnulib-cache.m4 rpm/fuse-overlayfs.spec.template autogen.sh fuse-overlayfs.1.md utils.h NEWS tests/suid-test.c plugin.h plugin-manager.h +EXTRA_DIST = m4/gnulib-cache.m4 rpm/fuse-overlayfs.spec.template autogen.sh fuse-overlayfs.1.md utils.h NEWS tests/suid-test.c plugin.h plugin-manager.h fuse-overlayfs.h fuse_overlayfs_error.h CLEANFILES = fuse-overlayfs.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/NEWS new/fuse-overlayfs-0.7.3/NEWS --- old/fuse-overlayfs-0.7.2/NEWS 2019-11-29 14:16:32.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/NEWS 2020-01-09 12:06:17.000000000 +0100 @@ -1,3 +1,10 @@ +* fuse-overlayfs-0.7.3 + +- fix build with -fno-common +- fix possible segmentation fault in direct_fsync() +- use the data store to create missing whiteouts. +- after a rename, force a directory reload. + * fuse-overlayfs-0.7.2 - drop special handling for security.capability. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/README.md new/fuse-overlayfs-0.7.3/README.md --- old/fuse-overlayfs-0.7.2/README.md 2019-11-29 14:16:32.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/README.md 2020-01-09 12:06:17.000000000 +0100 @@ -43,23 +43,16 @@ * manually create the device with the command `mknod /dev/fuse -m 0666 c 10 229` (see [this code](https://github.com/libfuse/libfuse/blob/f0e08cc700d629da2d46def8b620b0ed858cc0d9/util/install_helper.sh#L35)) -3. Clone this repository, and switch to the top-level folder containing the file `Dockerfile.static`; +3. Clone this repository, and switch to the top-level folder containing the file "`Dockerfile.static.ubuntu`"; 4. Launch the build with the command (note the single dot `.` at the end): ``` -buildah bud --device /dev/fuse -t fuse-overlayfs -f ./Dockerfile.static . +buildah bud -v $PWD:/build/fuse-overlayfs -t fuse-overlayfs -f ./Dockerfile.static.ubuntu . ``` 5. Copy the resulting binary to your host: - * if you have `podman` installed: ``` -podman run --rm --entrypoint="[]" fuse-overlayfs cat /usr/bin/fuse-overlayfs | sudo tee /usr/bin/fuse-overlayfs > /dev/null -``` - * or, if you only have `buildah` installed: -``` -container="$(buildah from fuse-overlayfs)" -buildah run "$container" cat /usr/bin/fuse-overlayfs | sudo tee /usr/bin/fuse-overlayfs > /dev/null -buildah rm "$container" +sudo cp fuse-overlayfs /usr/bin/ ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/configure.ac new/fuse-overlayfs-0.7.3/configure.ac --- old/fuse-overlayfs-0.7.2/configure.ac 2019-11-29 14:16:32.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/configure.ac 2020-01-09 12:06:17.000000000 +0100 @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([fuse-overlayfs], [0.7.2], [giuse...@scrivano.org]) +AC_INIT([fuse-overlayfs], [0.7.3], [giuse...@scrivano.org]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/fuse-overlayfs.h new/fuse-overlayfs-0.7.3/fuse-overlayfs.h --- old/fuse-overlayfs-0.7.2/fuse-overlayfs.h 2019-11-29 14:16:32.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/fuse-overlayfs.h 2020-01-09 12:06:17.000000000 +0100 @@ -134,7 +134,7 @@ }; /* passtrough to the file system. */ -struct data_source direct_access_ds; +extern struct data_source direct_access_ds; # ifndef HAVE_STATX # define STATX_TYPE 0x00000001U /* Want/got stx_mode & S_IFMT */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/main.c new/fuse-overlayfs-0.7.3/main.c --- old/fuse-overlayfs-0.7.2/main.c 2019-11-29 14:16:32.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/main.c 2020-01-09 12:06:17.000000000 +0100 @@ -467,7 +467,7 @@ { if (errno == ENOTSUP) goto create_opq_whiteout; - if (errno != EPERM || fsetxattr (fd, OPAQUE_XATTR, "y", 1, 0) < 0 && errno != ENOTSUP) + if (errno != EPERM || (fsetxattr (fd, OPAQUE_XATTR, "y", 1, 0) < 0 && errno != ENOTSUP)) return -1; } create_opq_whiteout: @@ -698,7 +698,7 @@ static void node_mark_all_free (void *p) { - struct ovl_node *it, *tmp, *n = (struct ovl_node *) p; + struct ovl_node *it, *n = (struct ovl_node *) p; for (it = n->next_link; it; it = it->next_link) it->ino->lookups = 0; @@ -925,7 +925,6 @@ static struct ovl_node * register_inode (struct ovl_data *lo, struct ovl_node *n, mode_t mode) { - int ret; struct ovl_ino key; struct ovl_ino *ino = NULL; @@ -1067,12 +1066,19 @@ new_name = strdup (name); if (new_name == NULL) + { + free (ret); return NULL; + } node_set_name (ret, new_name); ret->path = strdup (path); if (ret->path == NULL) - return NULL; + { + free (new_name); + free (ret); + return NULL; + } ret->whiteout = 1; ret->ino = &dummy_ino; @@ -1381,10 +1387,7 @@ ret = it->ds->file_exists (it, parent_whiteout_path); if (ret < 0 && errno != ENOENT && errno != ENOTDIR) - { - it->ds->closedir (dp); - return NULL; - } + return NULL; if (ret == 0) break; @@ -1524,6 +1527,7 @@ n->last_layer = it; stop_lookup = true; } + it->ds->closedir (dp); } if (get_timeout (lo) > 0) @@ -1719,7 +1723,6 @@ struct ovl_layer *it; struct stat st; bool stop_lookup = false; - struct ovl_layer *upper_layer = get_upper_layer (lo); for (it = lo->layers; it && !stop_lookup; it = it->next) { @@ -1975,28 +1978,19 @@ for (l = get_lower_layers (lo); l; l = l->next) { cleanup_dir DIR *dp = NULL; - cleanup_close int cleanup_fd = -1; - cleanup_fd = l->ds->openat (l, from, O_DIRECTORY, 0755); - if (cleanup_fd < 0) + dp = l->ds->opendir (l, from); + if (dp == NULL) { - if (errno == ENOENT) - continue; if (errno == ENOTDIR) break; - + if (errno == ENOENT) + continue; return -1; } - - dp = fdopendir (cleanup_fd); - if (dp == NULL) - return -1; else { struct dirent *dent; - int fd = cleanup_fd; - - cleanup_fd = -1; /* Now owned by dp. */ for (;;) { @@ -2017,6 +2011,8 @@ continue; if (strcmp (dent->d_name, "..") == 0) continue; + if (has_prefix (dent->d_name, ".wh.")) + continue; node_set_name (&key, (char *) dent->d_name); @@ -2145,7 +2141,7 @@ { cleanup_lock int l = enter_big_lock (); if (UNLIKELY (ovl_debug (req))) - fprintf (stderr, "ovl_readdir(ino=%" PRIu64 ", size=%zu, offset=%llo)\n", ino, size, offset); + fprintf (stderr, "ovl_readdir(ino=%" PRIu64 ", size=%zu, offset=%lo)\n", ino, size, offset); ovl_do_readdir (req, ino, size, offset, fi, 0); } @@ -2155,7 +2151,7 @@ { cleanup_lock int l = enter_big_lock (); if (UNLIKELY (ovl_debug (req))) - fprintf (stderr, "ovl_readdirplus(ino=%" PRIu64 ", size=%zu, offset=%llo)\n", ino, size, offset); + fprintf (stderr, "ovl_readdirplus(ino=%" PRIu64 ", size=%zu, offset=%lo)\n", ino, size, offset); ovl_do_readdir (req, ino, size, offset, fi, 1); } @@ -2165,7 +2161,6 @@ cleanup_lock int l = enter_big_lock (); size_t s; struct ovl_dirp *d = ovl_dirp (fi); - struct ovl_data *lo = ovl_data (req); if (UNLIKELY (ovl_debug (req))) fprintf (stderr, "ovl_releasedir(ino=%" PRIu64 ")\n", ino); @@ -2308,7 +2303,6 @@ ovl_access (fuse_req_t req, fuse_ino_t ino, int mask) { cleanup_lock int l = enter_big_lock (); - int ret; struct ovl_data *lo = ovl_data (req); struct ovl_node *n = do_lookup_file (lo, ino, NULL); @@ -2316,7 +2310,7 @@ fprintf (stderr, "ovl_access(ino=%" PRIu64 ", mask=%d)\n", ino, mask); - if (mask & n->ino->mode == mask) + if ((mask & n->ino->mode) == mask) fuse_reply_err (req, 0); else fuse_reply_err (req, EPERM); @@ -2514,7 +2508,6 @@ ret = TEMP_FAILURE_RETRY (write (dfd, buf + written, nread)); if (ret < 0) return ret; - written += ret; nread -= ret; } while (nread); @@ -2828,9 +2821,7 @@ static int empty_dir (struct ovl_layer *l, const char *path) { - cleanup_dir DIR *dp = NULL; cleanup_close int cleanup_fd = -1; - struct dirent *dent; int ret; cleanup_fd = TEMP_FAILURE_RETRY (openat (l->fd, path, O_DIRECTORY)); @@ -3151,7 +3142,6 @@ bool readonly = (flags & (O_APPEND | O_RDWR | O_WRONLY | O_CREAT | O_TRUNC)) == 0; cleanup_free char *path = NULL; cleanup_close int fd = -1; - const struct fuse_ctx *ctx = fuse_req_ctx (req); uid_t uid; gid_t gid; bool need_delete_whiteout = true; @@ -3382,7 +3372,6 @@ cleanup_lock int l = enter_big_lock (); cleanup_close int fd = -1; struct fuse_entry_param e; - struct ovl_data *lo = ovl_data (req); struct ovl_node *node = NULL; struct stat st; @@ -3884,7 +3873,6 @@ struct ovl_node *pnode, *node, *destnode, *destpnode; struct ovl_data *lo = ovl_data (req); int ret; - int saved_errno; cleanup_close int srcfd = -1; cleanup_close int destfd = -1; struct ovl_node *rm1, *rm2; @@ -4180,6 +4168,8 @@ if (update_paths (node) < 0) goto error; + node->loaded = 0; + ret = 0; goto cleanup; @@ -4588,10 +4578,21 @@ l = enter_big_lock (); node = do_lookup_file (lo, ino, NULL); + if (node == NULL) + { + fuse_reply_err (req, ENOENT); + return; + } /* Skip fsync for lower layers. */ do_fsync = node && node->layer == get_upper_layer (lo); + if (node->layer == NULL) + { + fuse_reply_err (req, ENOENT); + return; + } + if (fd < 0) strcpy (path, node->path); @@ -4721,7 +4722,7 @@ int ret; if (UNLIKELY (ovl_debug (req))) - fprintf (stderr, "ovl_fallocate(ino=%" PRIu64 ", mode=%d, offset=%llo, length=%llu, fi=%p)\n", + fprintf (stderr, "ovl_fallocate(ino=%" PRIu64 ", mode=%d, offset=%lo, length=%lu, fi=%p)\n", ino, mode, offset, length, fi); node = do_lookup_file (lo, ino, NULL); @@ -4772,7 +4773,7 @@ ssize_t ret; if (UNLIKELY (ovl_debug (req))) - fprintf (stderr, "ovl_copy_file_range(ino_in=%" PRIu64 ", off_in=%llo, fi_in=%p), ino_out=%" PRIu64 ", off_out=%llo, fi_out=%p, size=%zu, flags=%d)\n", + fprintf (stderr, "ovl_copy_file_range(ino_in=%" PRIu64 ", off_in=%lo, fi_in=%p, ino_out=%" PRIu64 ", off_out=%lo, fi_out=%p, size=%zu, flags=%d)\n", ino_in, off_in, fi_in, ino_out, off_out, fi_out, len, flags); node = do_lookup_file (lo, ino_in, NULL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fuse-overlayfs-0.7.2/utils.c new/fuse-overlayfs-0.7.3/utils.c --- old/fuse-overlayfs-0.7.2/utils.c 2019-11-29 14:16:32.000000000 +0100 +++ new/fuse-overlayfs-0.7.3/utils.c 2020-01-09 12:06:17.000000000 +0100 @@ -94,8 +94,6 @@ memcpy (current, s3, t); current += t; - - size -= t; } *current = '\0'; @@ -136,8 +134,6 @@ int open_fd_or_get_path (struct ovl_layer *l, const char *path, char *out, int *fd, int flags) { - int ret; - out[0] = '\0'; *fd = l->ds->openat (l, path, O_NONBLOCK|O_NOFOLLOW|flags, 0755);