Hello community, here is the log from the commit of package slirp4netns for openSUSE:Factory checked in at 2019-12-23 22:41:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/slirp4netns (Old) and /work/SRC/openSUSE:Factory/.slirp4netns.new.6675 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "slirp4netns" Mon Dec 23 22:41:16 2019 rev:8 rq:757696 version:0.4.3 Changes: -------- --- /work/SRC/openSUSE:Factory/slirp4netns/slirp4netns.changes 2019-10-25 18:38:26.099687805 +0200 +++ /work/SRC/openSUSE:Factory/.slirp4netns.new.6675/slirp4netns.changes 2019-12-23 22:43:21.981974470 +0100 @@ -1,0 +2,10 @@ +Wed Dec 18 08:10:07 UTC 2019 - Sascha Grunert <[email protected]> + +- Update to 0.4.3 + * api: raise an error if the socket path is too long + * libslirp: update to v4.1.0: Including the fix for libslirp + sends RST to app in response to arriving FIN when containerized + socket is shutdown() with SHUT_WR + * Fix create_sandbox error + +------------------------------------------------------------------- Old: ---- slirp4netns-0.4.2.tar.xz New: ---- slirp4netns-0.4.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ slirp4netns.spec ++++++ --- /var/tmp/diff_new_pack.UwtqNY/_old 2019-12-23 22:43:22.681974774 +0100 +++ /var/tmp/diff_new_pack.UwtqNY/_new 2019-12-23 22:43:22.685974775 +0100 @@ -1,7 +1,7 @@ # # spec file for package slirp4netns # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 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: slirp4netns -Version: 0.4.2 +Version: 0.4.3 Release: 0 Summary: User-mode networking for unprivileged network namespaces License: GPL-2.0-only AND MIT AND BSD-2-Clause ++++++ _service ++++++ --- /var/tmp/diff_new_pack.UwtqNY/_old 2019-12-23 22:43:22.721974791 +0100 +++ /var/tmp/diff_new_pack.UwtqNY/_new 2019-12-23 22:43:22.721974791 +0100 @@ -4,8 +4,8 @@ <param name="url">https://github.com/rootless-containers/slirp4netns.git</param> <param name="scm">git</param> <param name="filename">slirp4netns</param> -<param name="versionformat">0.4.2</param> -<param name="revision">v0.4.2</param> +<param name="versionformat">0.4.3</param> +<param name="revision">v0.4.3</param> </service> <service name="recompress" mode="disabled"> ++++++ slirp4netns-0.4.2.tar.xz -> slirp4netns-0.4.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/.github/workflows/main.yaml new/slirp4netns-0.4.3/.github/workflows/main.yaml --- old/slirp4netns-0.4.2/.github/workflows/main.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/slirp4netns-0.4.3/.github/workflows/main.yaml 2019-12-18 03:34:42.000000000 +0100 @@ -0,0 +1,24 @@ +name: Main +on: [push, pull_request] +jobs: + test-main: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - run: docker build -t slirp4netns-tests -f Dockerfile.tests . + - run: docker run --rm --privileged slirp4netns-tests + test-build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - run: DOCKER_BUILDKIT=1 docker build -f Dockerfile.buildtests . + artifact: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - run: DOCKER_BUILDKIT=1 docker build -o /tmp/artifact --target artifact -f Dockerfile.buildtests . + - run: (cd /tmp/artifact; sha256sum *) + - uses: actions/upload-artifact@v1 + with: + name: slirp4netns-x86_64 + path: /tmp/artifact/slirp4netns diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/.github/workflows/release.yaml new/slirp4netns-0.4.3/.github/workflows/release.yaml --- old/slirp4netns-0.4.2/.github/workflows/release.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/slirp4netns-0.4.3/.github/workflows/release.yaml 2019-12-18 03:34:42.000000000 +0100 @@ -0,0 +1,29 @@ +name: Release +on: + push: + tags: + - 'v*' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - run: DOCKER_BUILDKIT=1 docker build -o /tmp/artifact --target artifact -f Dockerfile.buildtests . + - run: (cd /tmp/artifact; sha256sum *) + - uses: actions/create-release@v1 + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: true + - uses: actions/[email protected] + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: /tmp/artifact/slirp4netns + asset_name: slirp4netns-x86_64 + asset_content_type: application/octet-stream diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/.travis.yml new/slirp4netns-0.4.3/.travis.yml --- old/slirp4netns-0.4.2/.travis.yml 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/.travis.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -dist: trusty -sudo: required - -services: - - docker - -script: - - docker build -t slirp4netns-tests -f Dockerfile.tests . - - docker run --security-opt seccomp="unconfined" --rm -v /dev:/dev slirp4netns-tests - - docker build -q -f Dockerfile.buildtests . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/Dockerfile.buildtests new/slirp4netns-0.4.3/Dockerfile.buildtests --- old/slirp4netns-0.4.2/Dockerfile.buildtests 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/Dockerfile.buildtests 2019-12-18 03:34:42.000000000 +0100 @@ -44,6 +44,10 @@ FROM buildtest-opensuse151-common AS buildtest-opensuse151-dynamic RUN ./configure && make && cp -f slirp4netns / +# artifact for GitHub actions +FROM scratch AS artifact +COPY --from=buildtest-alpine310-static /slirp4netns /slirp4netns + FROM scratch AS buildtest-final-stage COPY --from=buildtest-alpine310-static /slirp4netns /buildtest-alpine310-static COPY --from=buildtest-ubuntu1804-dynamic /slirp4netns /buildtest-ubuntu1804-dynamic diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/MAINTAINERS new/slirp4netns-0.4.3/MAINTAINERS --- old/slirp4netns-0.4.2/MAINTAINERS 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/MAINTAINERS 2019-12-18 03:34:42.000000000 +0100 @@ -2,8 +2,22 @@ [Org] -# Approvers (aka Core Maintainers) approve pull requests. +# Approvers (aka Core Maintainers) approve pull requests and ship releases. # GitHub Team: rootless-containers/slirp4netns-approvers +# +# An approver may approve PRs and ship releases without waiting for LGTMs from other approvers. +# However, the approver should try to get LGTMs from other approvers for significant changes. +# +# Release guide (since v0.4.3): +# 1. Bump up the version string to `vX.Y.Z` (or `vX.Y.Z-beta.W`) in `configure.ac`. +# 2. `git commit -a -s -m vX.Y.Z` +# 3. Bump up the version string to `vX.Y.Z+dev` (or `vX.Y.Z-beta.W`+dev) in `configure.ac`. +# 4. `git commit -a -s -m vX.Y.Z+dev` +# 5. Open a PR and merge it. +# 6. Create a tag `v.X.Y.Z` for the `vX.Y.Z` commit, and push the tag to the upstream: `git push upstream vX.Y.Z` +# 7. GitHub Actions automatically ships a draft release with a statically compiled binary: https://github.com/rootless-containers/slirp4netns/releases +# If it fails, check the GitHub Actions log: https://github.com/rootless-containers/slirp4netns/actions?query=workflow%3ARelease +# 8. Add release notes to the draft release and ship the release. [Org.Approvers] people = [ "akihirosuda", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/api.c new/slirp4netns-0.4.3/api.c --- old/slirp4netns-0.4.2/api.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/api.c 2019-12-18 03:34:42.000000000 +0100 @@ -21,6 +21,11 @@ } memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; + if (strlen(api_socket) >= sizeof(addr.sun_path)) { + fprintf(stderr, "the specified API socket path is too long (>= %lu)\n", + sizeof(addr.sun_path)); + return -1; + } strncpy(addr.sun_path, api_socket, sizeof(addr.sun_path) - 1); if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("api_bindlisten: bind"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/configure.ac new/slirp4netns-0.4.3/configure.ac --- old/slirp4netns-0.4.2/configure.ac 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/configure.ac 2019-12-18 03:34:42.000000000 +0100 @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([slirp4netns], [0.4.2], [https://github.com/rootless-containers/slirp4netns/issues]) +AC_INIT([slirp4netns], [0.4.3], [https://github.com/rootless-containers/slirp4netns/issues]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/sandbox.c new/slirp4netns-0.4.3/sandbox.c --- old/slirp4netns-0.4.2/sandbox.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/sandbox.c 2019-12-18 03:34:42.000000000 +0100 @@ -134,8 +134,8 @@ ret = mount("tmpfs", "/", "tmpfs", MS_REMOUNT | MS_RDONLY, "size=0k"); if (ret < 0) { - fprintf(stderr, "cannot mount tmpfs on /tmp\n"); - return ret; + fprintf(stderr, "cannot remount / as read-only\n"); + /* error is negligible (#163) */ } ret = prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/tests/test-slirp4netns-api-socket.sh new/slirp4netns-0.4.3/tests/test-slirp4netns-api-socket.sh --- old/slirp4netns-0.4.2/tests/test-slirp4netns-api-socket.sh 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/tests/test-slirp4netns-api-socket.sh 2019-12-18 03:34:42.000000000 +0100 @@ -10,6 +10,15 @@ tmpdir=$(mktemp -d /tmp/slirp4netns-bench.XXXXXXXXXX) apisocket=${tmpdir}/slirp4netns.sock +apisocketlongpath=${tmpdir}/slirp4netns-TOO-LONG-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.sock + +if slirp4netns -c $child --api-socket $apisocketlongpath tun11; then + echo "expected failure with apisocket path too long" >&2 + kill -9 $child + rm -rf $tmpdir + exit 1 +fi + slirp4netns -c $child --api-socket $apisocket tun11 & slirp_pid=$! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/README.md new/slirp4netns-0.4.3/vendor/README.md --- old/slirp4netns-0.4.2/vendor/README.md 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/README.md 2019-12-18 03:34:42.000000000 +0100 @@ -1,7 +1,7 @@ # DO NOT EDIT MANUALLY Vendored components: -* libslirp: https://gitlab.freedesktop.org/slirp/libslirp.git (`d203c81bc6c861e1671122c3194c21d1a6763641`) +* libslirp: https://gitlab.freedesktop.org/slirp/libslirp.git (`6651ba26c4e94f64d6448a2db4991269ce553bd9`) * parson: https://github.com/kgabis/parson.git (`c5bb9557fe98367aa8e041c65863909f12ee76b2`) Please do not edit the contents under this directory manually. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/arp_table.c new/slirp4netns-0.4.3/vendor/libslirp/src/arp_table.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/arp_table.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/arp_table.c 2019-12-18 03:34:42.000000000 +0100 @@ -71,7 +71,7 @@ DEBUG_ARG("ip = %s", inet_ntoa((struct in_addr){ .s_addr = ip_addr })); /* If broadcast address */ - if (ip_addr == 0xffffffff || ip_addr == broadcast_addr) { + if (ip_addr == 0 || ip_addr == 0xffffffff || ip_addr == broadcast_addr) { /* return Ethernet broadcast address */ memset(out_ethaddr, 0xff, ETH_ALEN); return 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/dnssearch.c new/slirp4netns-0.4.3/vendor/libslirp/src/dnssearch.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/dnssearch.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/dnssearch.c 2019-12-18 03:34:42.000000000 +0100 @@ -238,13 +238,8 @@ size_t i, num_domains, memreq = 0; uint8_t *result = NULL, *outptr; CompactDomain *domains = NULL; - const char **nameptr = names; - while (*nameptr != NULL) { - nameptr++; - } - - num_domains = nameptr - names; + num_domains = g_strv_length((GStrv)names); if (num_domains == 0) { return -2; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/libslirp-version.h new/slirp4netns-0.4.3/vendor/libslirp/src/libslirp-version.h --- old/slirp4netns-0.4.2/vendor/libslirp/src/libslirp-version.h 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/libslirp-version.h 2019-12-18 03:34:42.000000000 +0100 @@ -7,7 +7,7 @@ #endif #define SLIRP_MAJOR_VERSION 4 -#define SLIRP_MINOR_VERSION 0 +#define SLIRP_MINOR_VERSION 1 #define SLIRP_MICRO_VERSION 0 #define SLIRP_CHECK_VERSION(major,minor,micro) \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/misc.c new/slirp4netns-0.4.3/vendor/libslirp/src/misc.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/misc.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/misc.c 2019-12-18 03:34:42.000000000 +0100 @@ -168,7 +168,8 @@ int fork_exec(struct socket *so, const char *ex) { GError *err = NULL; - char **argv; + gint argc = 0; + gchar **argv = NULL; int opt, sp[2]; DEBUG_CALL("fork_exec"); @@ -179,7 +180,12 @@ return 0; } - argv = g_strsplit(ex, " ", -1); + if (!g_shell_parse_argv(ex, &argc, &argv, &err)) { + g_critical("fork_exec invalid command: %s\nerror: %s", ex, err->message); + g_error_free(err); + return 0; + } + g_spawn_async_with_fds(NULL /* cwd */, argv, NULL /* env */, G_SPAWN_SEARCH_PATH, fork_exec_child_setup, NULL /* data */, NULL /* child_pid */, sp[1], sp[1], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/sbuf.c new/slirp4netns-0.4.3/vendor/libslirp/src/sbuf.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/sbuf.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/sbuf.c 2019-12-18 03:34:42.000000000 +0100 @@ -9,19 +9,17 @@ void sbfree(struct sbuf *sb) { - free(sb->sb_data); + g_free(sb->sb_data); } -bool sbdrop(struct sbuf *sb, int num) +bool sbdrop(struct sbuf *sb, size_t num) { int limit = sb->sb_datalen / 2; - /* - * We can only drop how much we have - * This should never succeed - */ + g_warn_if_fail(num <= sb->sb_cc); if (num > sb->sb_cc) num = sb->sb_cc; + sb->sb_cc -= num; sb->sb_rptr += num; if (sb->sb_rptr >= sb->sb_data + sb->sb_datalen) @@ -34,27 +32,11 @@ return false; } -void sbreserve(struct sbuf *sb, int size) +void sbreserve(struct sbuf *sb, size_t size) { - if (sb->sb_data) { - /* Already alloced, realloc if necessary */ - if (sb->sb_datalen != size) { - sb->sb_wptr = sb->sb_rptr = sb->sb_data = - (char *)realloc(sb->sb_data, size); - sb->sb_cc = 0; - if (sb->sb_wptr) - sb->sb_datalen = size; - else - sb->sb_datalen = 0; - } - } else { - sb->sb_wptr = sb->sb_rptr = sb->sb_data = (char *)malloc(size); - sb->sb_cc = 0; - if (sb->sb_wptr) - sb->sb_datalen = size; - else - sb->sb_datalen = 0; - } + sb->sb_wptr = sb->sb_rptr = sb->sb_data = g_realloc(sb->sb_data, size); + sb->sb_cc = 0; + sb->sb_datalen = size; } /* @@ -161,17 +143,17 @@ * Don't update the sbuf rptr, this will be * done in sbdrop when the data is acked */ -void sbcopy(struct sbuf *sb, int off, int len, char *to) +void sbcopy(struct sbuf *sb, size_t off, size_t len, char *to) { char *from; + g_assert(len + off <= sb->sb_cc); + from = sb->sb_rptr + off; if (from >= sb->sb_data + sb->sb_datalen) from -= sb->sb_datalen; if (from < sb->sb_wptr) { - if (len > sb->sb_cc) - len = sb->sb_cc; memcpy(to, from, len); } else { /* re-use off */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/sbuf.h new/slirp4netns-0.4.3/vendor/libslirp/src/sbuf.h --- old/slirp4netns-0.4.2/vendor/libslirp/src/sbuf.h 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/sbuf.h 2019-12-18 03:34:42.000000000 +0100 @@ -18,10 +18,10 @@ char *sb_data; /* Actual data */ }; -void sbfree(struct sbuf *); -bool sbdrop(struct sbuf *, int); -void sbreserve(struct sbuf *, int); -void sbappend(struct socket *, struct mbuf *); -void sbcopy(struct sbuf *, int, int, char *); +void sbfree(struct sbuf *sb); +bool sbdrop(struct sbuf *sb, size_t len); +void sbreserve(struct sbuf *sb, size_t size); +void sbappend(struct socket *sb, struct mbuf *mb); +void sbcopy(struct sbuf *sb, size_t off, size_t len, char *p); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/slirp.c new/slirp4netns-0.4.3/vendor/libslirp/src/slirp.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/slirp.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/slirp.c 2019-12-18 03:34:42.000000000 +0100 @@ -845,11 +845,6 @@ { const struct ip *iph = (const struct ip *)ifm->m_data; - if (iph->ip_dst.s_addr == 0) { - /* 0.0.0.0 can not be a destination address, something went wrong, - * avoid making it worse */ - return 1; - } if (!arp_table_search(slirp, iph->ip_dst.s_addr, ethaddr)) { uint8_t arp_req[ETH_HLEN + sizeof(struct slirp_arphdr)]; struct ethhdr *reh = (struct ethhdr *)arp_req; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/slirp.h new/slirp4netns-0.4.3/vendor/libslirp/src/slirp.h --- old/slirp4netns-0.4.2/vendor/libslirp/src/slirp.h 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/slirp.h 2019-12-18 03:34:42.000000000 +0100 @@ -266,7 +266,7 @@ void tcp_sockclosed(struct tcpcb *); int tcp_fconnect(struct socket *, unsigned short af); void tcp_connect(struct socket *); -int tcp_attach(struct socket *); +void tcp_attach(struct socket *); uint8_t tcp_tos(struct socket *); int tcp_emu(struct socket *, struct mbuf *); int tcp_ctl(struct socket *); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/socket.c new/slirp4netns-0.4.3/vendor/libslirp/src/socket.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/socket.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/socket.c 2019-12-18 03:34:42.000000000 +0100 @@ -95,7 +95,7 @@ remque(so); /* crashes if so is not in a queue */ if (so->so_tcpcb) { - free(so->so_tcpcb); + g_free(so->so_tcpcb); } g_free(so); } @@ -195,7 +195,9 @@ err = errno; if (nn == 0) { - if (getpeername(so->s, paddr, &alen) < 0) { + int shutdown_wr = so->so_state & SS_FCANTSENDMORE; + + if (!shutdown_wr && getpeername(so->s, paddr, &alen) < 0) { err = errno; } else { getsockopt(so->s, SOL_SOCKET, SO_ERROR, &err, &elen); @@ -844,6 +846,9 @@ } else { sin->sin_addr = loopback_addr; } + } else if (!slirp->disable_host_loopback && so->so_faddr.s_addr == 0xffffffff) { + /* Receive broadcast as well */ + sin->sin_addr = loopback_addr; } break; case AF_INET6: @@ -863,6 +868,9 @@ } else { sin6->sin6_addr = in6addr_loopback; } + } else if (!slirp->disable_host_loopback + && in6_equal(&so->so_faddr6, &(struct in6_addr) ALLNODES_MULTICAST)) { + sin6->sin6_addr = in6addr_loopback; } break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/state.c new/slirp4netns-0.4.3/vendor/libslirp/src/state.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/state.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/state.c 2019-12-18 03:34:42.000000000 +0100 @@ -107,9 +107,6 @@ /* Allocate the buffer space used by the field after the tmp */ sbreserve(tmp->parent, tmp->parent->sb_datalen); - if (tmp->parent->sb_datalen != requested_len) { - return -ENOMEM; - } if (tmp->woff >= requested_len || tmp->roff >= requested_len) { g_critical("invalid sbuf offsets r/w=%u/%u len=%u", tmp->roff, tmp->woff, requested_len); @@ -159,9 +156,8 @@ static int slirp_socket_pre_load(void *opaque) { struct socket *so = opaque; - if (tcp_attach(so) < 0) { - return -ENOMEM; - } + + tcp_attach(so); /* Older versions don't load these fields */ so->so_ffamily = AF_INET; so->so_lfamily = AF_INET; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/tcp_input.c new/slirp4netns-0.4.3/vendor/libslirp/src/tcp_input.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/tcp_input.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/tcp_input.c 2019-12-18 03:34:42.000000000 +0100 @@ -408,10 +408,7 @@ goto dropwithreset; so = socreate(slirp); - if (tcp_attach(so) < 0) { - g_free(so); /* Not sofree (if it failed, it's not insqued) */ - goto dropwithreset; - } + tcp_attach(so); sbreserve(&so->so_snd, TCP_SNDSPACE); sbreserve(&so->so_rcv, TCP_RCVSPACE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/tcp_subr.c new/slirp4netns-0.4.3/vendor/libslirp/src/tcp_subr.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/tcp_subr.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/tcp_subr.c 2019-12-18 03:34:42.000000000 +0100 @@ -255,11 +255,7 @@ { register struct tcpcb *tp; - tp = (struct tcpcb *)malloc(sizeof(*tp)); - if (tp == NULL) - return ((struct tcpcb *)0); - - memset((char *)tp, 0, sizeof(struct tcpcb)); + tp = g_new0(struct tcpcb, 1); tp->seg_next = tp->seg_prev = (struct tcpiphdr *)tp; /* * 40: length of IPv4 header (20) + TCP header (20) @@ -336,7 +332,7 @@ remque(tcpiphdr2qlink(tcpiphdr_prev(t))); m_free(m); } - free(tp); + g_free(tp); so->so_tcpcb = NULL; /* clobber input socket cache if we're closing the cached connection */ if (so == slirp->tcp_last_so) @@ -377,8 +373,8 @@ case TCPS_LISTEN: case TCPS_SYN_SENT: tp->t_state = TCPS_CLOSED; - tp = tcp_close(tp); - break; + tcp_close(tp); + return; case TCPS_SYN_RECEIVED: case TCPS_ESTABLISHED: @@ -474,10 +470,7 @@ so = inso; } else { so = socreate(slirp); - if (tcp_attach(so) < 0) { - g_free(so); /* NOT sofree */ - return; - } + tcp_attach(so); so->lhost = inso->lhost; so->so_ffamily = inso->so_ffamily; } @@ -528,14 +521,10 @@ /* * Attach a TCPCB to a socket. */ -int tcp_attach(struct socket *so) +void tcp_attach(struct socket *so) { - if ((so->so_tcpcb = tcp_newtcpcb(so)) == NULL) - return -1; - + so->so_tcpcb = tcp_newtcpcb(so); insque(so, &so->slirp->tcb); - - return 0; } /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor/libslirp/src/vmstate.c new/slirp4netns-0.4.3/vendor/libslirp/src/vmstate.c --- old/slirp4netns-0.4.2/vendor/libslirp/src/vmstate.c 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor/libslirp/src/vmstate.c 2019-12-18 03:34:42.000000000 +0100 @@ -321,7 +321,6 @@ } for (i = 0; i < n_elems; i++) { void *curr_elem = first_elem + size * i; - ret = 0; if (field->flags & VMS_ARRAY_OF_POINTER) { assert(curr_elem); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/slirp4netns-0.4.2/vendor.sh new/slirp4netns-0.4.3/vendor.sh --- old/slirp4netns-0.4.2/vendor.sh 2019-10-18 15:04:32.000000000 +0200 +++ new/slirp4netns-0.4.3/vendor.sh 2019-12-18 03:34:42.000000000 +0100 @@ -1,7 +1,7 @@ #!/bin/bash set -eux -o pipefail -# Aug 26, 2019 -LIBSLIRP_COMMIT=d203c81bc6c861e1671122c3194c21d1a6763641 +# Dec 4, 2019 (v4.1.0) +LIBSLIRP_COMMIT=6651ba26c4e94f64d6448a2db4991269ce553bd9 LIBSLIRP_REPO=https://gitlab.freedesktop.org/slirp/libslirp.git # Jul 12, 2019
