[libvirt] [PATCH v2] util: forbid freeing const pointers
Ján Tomko
jtomko at redhat.com
Wed Jul 16 09:06:09 UTC 2014
On 07/15/2014 10:04 PM, Eric Blake wrote:
> Now that we've finally fixed all the violators, it's time to
> enforce that any pointer to a const object is never freed (it
> is aliasing some other memory, where the non-const original
> should be freed instead). Alas, the code still needs a normal
> vs. Coverity version, but at least we are still guaranteeing
> that the macro call evaluates its argument exactly once.
>
> I verified that we still get the following compiler warnings,
> which in turn halts the build thanks to -Werror on gcc (hmm,
> gcc 4.8.3's placement of the ^ for ?: type mismatch is a bit
> off, but that's not our problem):
>
> int oops1 = 0;
> VIR_FREE(oops1);
> const char *oops2 = NULL;
> VIR_FREE(oops2);
> struct blah { int dummy; } oops3;
> VIR_FREE(oops3);
>
> util/virauthconfig.c:159:35: error: pointer/integer type mismatch in conditional expression [-Werror]
> VIR_FREE(oops1);
> ^
> util/virauthconfig.c:161:5: error: passing argument 1 of 'virFree' discards 'const' qualifier from pointer target type [-Werror]
> VIR_FREE(oops2);
> ^
> In file included from util/virauthconfig.c:28:0:
> util/viralloc.h:79:6: note: expected 'void *' but argument is of type 'const void *'
> void virFree(void *ptrptr) ATTRIBUTE_NONNULL(1);
> ^
> util/virauthconfig.c:163:35: error: type mismatch in conditional expression
> VIR_FREE(oops3);
> ^
>
> * src/util/viralloc.h (VIR_FREE): No longer cast away const.
> * src/xenapi/xenapi_utils.c (xenSessionFree): Work around bogus
> header.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>
> v2: this depends on the existing 1/4, while being a replacement
> to all of 2-4/4 at once.
> https://www.redhat.com/archives/libvir-list/2014-July/msg00716.html
>
> src/util/viralloc.h | 11 +++++------
> src/xenapi/xenapi_utils.c | 4 +++-
> 2 files changed, 8 insertions(+), 7 deletions(-)
>
This patch compiles for me with clang 3.4.1 and all the three VIR_FREEs above
cause a warning.
ACK
Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140716/1a822a66/attachment-0001.sig>
More information about the libvir-list
mailing list