diff options
author | John Levon <john.levon@nutanix.com> | 2022-05-12 16:53:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-12 16:53:05 +0100 |
commit | ffdd1d68d9a8975f20d73637e4ff39bb64d00efb (patch) | |
tree | dea91978d255e8f640fb94a980fa69701c0cdfc2 | |
parent | 294aa666fe09a8b6ca133201c7593c54d3cab6e8 (diff) | |
download | libvfio-user-ffdd1d68d9a8975f20d73637e4ff39bb64d00efb.zip libvfio-user-ffdd1d68d9a8975f20d73637e4ff39bb64d00efb.tar.gz libvfio-user-ffdd1d68d9a8975f20d73637e4ff39bb64d00efb.tar.bz2 |
run scan-build in CI (#680)
Yet another static analyzer pass, this one is used by SPDK, and as it
did detect some minor issues, it's worth running.
Signed-off-by: John Levon <john.levon@nutanix.com>
Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
-rwxr-xr-x | .github/workflows/pull_request.sh | 18 | ||||
-rw-r--r-- | .github/workflows/pull_request.yml | 19 | ||||
-rw-r--r-- | lib/libvfio-user.c | 2 | ||||
-rw-r--r-- | lib/tran_pipe.c | 4 | ||||
-rw-r--r-- | samples/client.c | 22 | ||||
-rw-r--r-- | test/unit-tests.c | 2 |
6 files changed, 40 insertions, 27 deletions
diff --git a/.github/workflows/pull_request.sh b/.github/workflows/pull_request.sh index 20b8ace..b972bda 100755 --- a/.github/workflows/pull_request.sh +++ b/.github/workflows/pull_request.sh @@ -1,5 +1,7 @@ #!/bin/sh +# NB: we can't use "meson compile -v", as centos 7 doesn't support that option. + set -e set -v @@ -8,23 +10,29 @@ test -z "$BUILD" && BUILD=build rm -rf $BUILD # ASAN build with clang -CC=clang meson $BUILD/asan -Db_sanitize=address -Db_lundef=false +CC=clang meson setup $BUILD/asan -Db_sanitize=address -Db_lundef=false ninja -C $BUILD/asan -v meson test -C $BUILD/asan --suite style --print-errorlogs meson test -C $BUILD/asan --no-suite style --print-errorlogs +# analyzer build +meson setup $BUILD/scan-build -Dtran-pipe=true +# no "meson scan-build" for some reason +ninja -C $BUILD/scan-build -v scan-build -v +meson test -C $BUILD/scan-build --no-suite style --print-errorlogs + # debug build with clang -CC=clang meson build/clang-debug -Dtran-pipe=true +CC=clang meson setup build/clang-debug -Dtran-pipe=true ninja -C $BUILD/clang-debug -v meson test -C $BUILD/clang-debug --no-suite style --print-errorlogs # release build with clang -CC=clang meson build/clang-release -Dtran-pipe=true -Dbuildtype=release +CC=clang meson setup build/clang-release -Dtran-pipe=true -Dbuildtype=release ninja -C $BUILD/clang-release -v meson test -C $BUILD/clang-release --no-suite style --print-errorlogs # debug build with gcc -CC=gcc meson build/gcc-debug -Dtran-pipe=true +CC=gcc meson setup build/gcc-debug -Dtran-pipe=true ninja -C $BUILD/gcc-debug -v meson test -C $BUILD/gcc-debug --no-suite style --print-errorlogs @@ -34,6 +42,6 @@ meson test -C $BUILD/gcc-debug --suite pyunit --setup pyvalgrind --print-errorlo DESTDIR=tmp.install meson install -C $BUILD/gcc-debug # release build with gcc -CC=gcc meson build/gcc-release -Dtran-pipe=true -Dbuildtype=release +CC=gcc meson setup build/gcc-release -Dtran-pipe=true -Dbuildtype=release ninja -C $BUILD/gcc-release -v meson test -C $BUILD/gcc-release --no-suite style --print-errorlogs diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index e905dd5..2b3b910 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -9,9 +9,9 @@ jobs: - name: pre-push run: | sudo apt-get update - sudo apt-get -y install libjson-c-dev libcmocka-dev clang valgrind \ - python3-pytest debianutils flake8 meson \ - ninja-build + sudo apt-get -y install libjson-c-dev libcmocka-dev clang \ + clang-tools valgrind python3-pytest debianutils flake8 meson \ + ninja-build ./.github/workflows/pull_request.sh ubuntu-22: timeout-minutes: 10 @@ -21,9 +21,9 @@ jobs: - name: pre-push run: | sudo apt-get update - sudo apt-get -y install libjson-c-dev libcmocka-dev clang valgrind \ - python3-pytest debianutils flake8 meson \ - ninja-build + sudo apt-get -y install libjson-c-dev libcmocka-dev clang \ + clang-tools valgrind python3-pytest debianutils flake8 meson \ + ninja-build ./.github/workflows/pull_request.sh centos-7: timeout-minutes: 10 @@ -35,7 +35,7 @@ jobs: run: | # NB: no working flake8 yum -y install make gcc-4.8.5 epel-release pciutils - yum -y install clang json-c-devel libcmocka-devel \ + yum -y install clang clang-analyzer json-c-devel libcmocka-devel \ valgrind python36-pytest which ninja-build meson ./.github/workflows/pull_request.sh fedora-35: @@ -47,6 +47,7 @@ jobs: - name: pre-push run: | dnf -y install --releasever=35 \ - gcc make clang json-c-devel libcmocka-devel pciutils diffutils \ - valgrind python3-pytest python3-flake8 which meson ninja-build + gcc make clang clang-analyzer json-c-devel libcmocka-devel pciutils \ + diffutils valgrind python3-pytest python3-flake8 which \ + meson ninja-build ./.github/workflows/pull_request.sh diff --git a/lib/libvfio-user.c b/lib/libvfio-user.c index 5b95865..fd2465d 100644 --- a/lib/libvfio-user.c +++ b/lib/libvfio-user.c @@ -469,7 +469,7 @@ vfu_create_ioeventfd(vfu_ctx_t *vfu_ctx, uint32_t region_idx, int fd, size_t offset, uint32_t size, uint32_t flags, uint64_t datamatch) { - vfu_reg_info_t *vfu_reg = &vfu_ctx->reg_info[region_idx]; + vfu_reg_info_t *vfu_reg; assert(vfu_ctx != NULL); assert(fd >= 0); diff --git a/lib/tran_pipe.c b/lib/tran_pipe.c index 34dd075..dea2c3c 100644 --- a/lib/tran_pipe.c +++ b/lib/tran_pipe.c @@ -73,6 +73,10 @@ tran_pipe_send_iovec(int fd, uint16_t msg_id, bool is_reply, ret = writev(fd, iovecs, nr_iovecs); + /* Quieten static analysis. */ + iovecs[0].iov_base = NULL; + iovecs[0].iov_len = 0; + if (ret == -1) { /* Treat a failed write due to EPIPE the same as a short write. */ if (errno == EPIPE) { diff --git a/samples/client.c b/samples/client.c index 9f4a42b..492dd18 100644 --- a/samples/client.c +++ b/samples/client.c @@ -78,20 +78,20 @@ vfu_log(UNUSED vfu_ctx_t *vfu_ctx, UNUSED int level, static int init_sock(const char *path) { - int ret, sock; - struct sockaddr_un addr = {.sun_family = AF_UNIX}; + struct sockaddr_un addr = {.sun_family = AF_UNIX}; + int sock; - /* TODO path should be defined elsewhere */ - ret = snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", path); + /* TODO path should be defined elsewhere */ + snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", path); - if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - err(EXIT_FAILURE, "failed to open socket %s", path); - } + if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + err(EXIT_FAILURE, "failed to open socket %s", path); + } - if ((ret = connect(sock, (struct sockaddr*)&addr, sizeof(addr))) == -1) { - err(EXIT_FAILURE, "failed to connect server"); - } - return sock; + if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) { + err(EXIT_FAILURE, "failed to connect server"); + } + return sock; } static void diff --git a/test/unit-tests.c b/test/unit-tests.c index 81288e2..7d5297e 100644 --- a/test/unit-tests.c +++ b/test/unit-tests.c @@ -314,8 +314,8 @@ static void test_dma_addr_to_sg(void **state UNUSED) { dma_memory_region_t *r, *r1; + struct iovec iov[2] = { }; dma_sg_t sg[2]; - struct iovec iov[2]; int ret; vfu_ctx.dma->nregions = 1; |