771e6e5 virCgroupController: Check the enum fits into 'int'

Authored and Committed by mprivozn 9 years ago
    virCgroupController: Check the enum fits into 'int'
    
    Throughout our code, the virCgroupController enum is used in two ways.
    First as an index to an array of cgroup controllers:
    
    struct virCgroup {
        char *path;
    
        struct virCgroupController controllers[VIR_CGROUP_CONTROLLER_LAST];
    };
    
    Second way is that when calling virCgroupNew() a bitmask of the enum
    items can be passed to selectively detect only some controllers. For
    instance:
    
    int
    virCgroupNewVcpu(virCgroupPtr domain,
                     int vcpuid,
                     bool create,
                     virCgroupPtr *group)
    {
        ...
        controllers = ((1 << VIR_CGROUP_CONTROLLER_CPU) |
                       (1 << VIR_CGROUP_CONTROLLER_CPUACCT) |
                       (1 << VIR_CGROUP_CONTROLLER_CPUSET));
    
        if (virCgroupNew(-1, name, domain, controllers, group) < 0)
            goto cleanup;
    }
    
    Even though it's highly unlikely that so many new controllers will be
    invented so that we would overflow when constructing the bitmask, it
    doesn't hurt to check at compile time either.
    
    Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
    
        
file modified
+5 -0