bb63fe6fc3
Scan-build has a real issue with reallocs. The original error from latest version of scan-build is rather complicated, but it can be greatly simplified with the following change: > diff --git a/lib/blob/blobstore.c b/lib/blob/blobstore.c > index 7580c9dd2..6a594edf3 100644 > --- a/lib/blob/blobstore.c > +++ b/lib/blob/blobstore.c > @@ -1147,8 +1147,9 @@ > _spdk_blob_persist_clear_clusters_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int > } else if (blob->active.num_clusters != blob->active.cluster_array_size) { > tmp = realloc(blob->active.clusters, sizeof(uint64_t) * blob->active.num_clusters); > assert(tmp != NULL); > - blob->active.clusters = tmp; > - blob->active.cluster_array_size = blob->active.num_clusters; > + ctx->blob->active.clusters = tmp; > + assert(ctx->blob->active.clusters[0] != 14213); > + ctx->blob->active.cluster_array_size = ctx->blob->active.num_clusters; > } > > _spdk_blob_persist_complete(seq, ctx, bserrno); > ``` Scan-build will then complain: blobstore.c:1151:10: warning: Use of memory after it is freed assert(ctx->blob->active.clusters[0] != 14213); Asserting blob == ctx->blob, blob->active.clusters == ctx->..., or even tmp != blob->active.clusters doesn't work, so use the last resort scan-build weapon - #ifdef __clang_analyzer__. The realloc in this case is just down-sizing a buffer to save some memory. For scan-build, just don't do it. This finally silences all scan-build false positives. Change-Id: Ib88ea145370f5035eedd2412e98ee61f96ad1915 Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/462868 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> |
||
---|---|---|
.. | ||
bdev | ||
blob_bs_dev.c | ||
blobstore.c | ||
blobstore.h | ||
Makefile | ||
request.c | ||
request.h | ||
zeroes.c |