• M
    virCgroupController: Check the enum fits into 'int' · 771e6e5a
    Michal Privoznik 提交于
    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: NMichal Privoznik <mprivozn@redhat.com>
    771e6e5a
vircgroup.h 10.6 KB