[libvirt] [PATCH] build: silence false positive clang report

Laine Stump laine at laine.org
Mon Feb 14 21:57:37 UTC 2011


On 02/14/2011 04:37 PM, Eric Blake wrote:
> clang complained that STREQ(group->controllers[i].mountPoint,...)  was
> a NULL dereference when i==VIR_CGROUP_CONTROLLER_CPUSET, because it
> assumes the worst about virCgroupPathOfController.  Marking the
> argument const doesn't yet have an effect, per this clang bug:
> http://llvm.org/bugs/show_bug.cgi?id=7758
>
> So, we use sa_assert, which was designed to shut up false positives
> from tools like clang.
>
> * src/util/cgroup.c (virCgroupMakeGroup): Teach clang that there
> is no NULL dereference.
> ---
>
> I'm including enough context to show the STREQ that clang complained
> about.
>
> And yes, I'm plowing through clang reports right now - there were
> less than 20, so it seemed worth tackling before 0.8.8.
>
> This one is a one-liner fix (tested by re-running clang and no longer
> seeing a false positive, and sa_assert() is a no-op for gcc compilation),
> but I'd rather get an ACK before pushing.
>
>   src/util/cgroup.c |    3 +++
>   1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/src/util/cgroup.c b/src/util/cgroup.c
> index de1fd8e..47c4633 100644
> --- a/src/util/cgroup.c
> +++ b/src/util/cgroup.c
> @@ -496,24 +496,27 @@ static int virCgroupMakeGroup(virCgroupPtr parent, virCgroupPtr group,
>
>       VIR_DEBUG("Make group %s", group->path);
>       for (i = 0 ; i<  VIR_CGROUP_CONTROLLER_LAST ; i++) {
>           char *path = NULL;
>
>           /* Skip over controllers that aren't mounted */
>           if (!group->controllers[i].mountPoint)
>               continue;
>
>           rc = virCgroupPathOfController(group, i, "",&path);
>           if (rc<  0)
>               return rc;
> +        /* As of Feb 2011, clang can't see that the above function
> +         * call did not modify group. */
> +        sa_assert(group->controllers[i].mountPoint);
>
>           VIR_DEBUG("Make controller %s", path);
>           if (access(path, F_OK) != 0) {
>               if (!create ||
>                   mkdir(path, 0755)<  0) {
>                   rc = -errno;
>                   VIR_FREE(path);
>                   break;
>               }
>               if (group->controllers[VIR_CGROUP_CONTROLLER_CPUSET].mountPoint != NULL&&
>                   (i == VIR_CGROUP_CONTROLLER_CPUSET ||
>                    STREQ(group->controllers[i].mountPoint, group->controllers[VIR_CGROUP_CONTROLLER_CPUSET].mountPoint))) {

ACK.




More information about the libvir-list mailing list