Coverage Report

Created: 2025-08-29 06:31

/src/selinux/libsepol/src/polcaps.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Policy capability support functions
3
 */
4
5
#include <string.h>
6
#include <sepol/policydb/polcaps.h>
7
8
static const char * const polcap_names[POLICYDB_CAP_MAX + 1] = {
9
  [POLICYDB_CAP_NETPEER]        = "network_peer_controls",
10
  [POLICYDB_CAP_OPENPERM]       = "open_perms",
11
  [POLICYDB_CAP_EXTSOCKCLASS]     = "extended_socket_class",
12
  [POLICYDB_CAP_ALWAYSNETWORK]      = "always_check_network",
13
  [POLICYDB_CAP_CGROUPSECLABEL]     = "cgroup_seclabel",
14
  [POLICYDB_CAP_NNP_NOSUID_TRANSITION]    = "nnp_nosuid_transition",
15
  [POLICYDB_CAP_GENFS_SECLABEL_SYMLINKS]    = "genfs_seclabel_symlinks",
16
  [POLICYDB_CAP_IOCTL_SKIP_CLOEXEC]   = "ioctl_skip_cloexec",
17
  [POLICYDB_CAP_USERSPACE_INITIAL_CONTEXT]  = "userspace_initial_context",
18
  [POLICYDB_CAP_NETLINK_XPERM]      = "netlink_xperm",
19
  [POLICYDB_CAP_NETIF_WILDCARD]     = "netif_wildcard",
20
  [POLICYDB_CAP_GENFS_SECLABEL_WILDCARD]    = "genfs_seclabel_wildcard",
21
};
22
23
int sepol_polcap_getnum(const char *name)
24
469
{
25
469
  int capnum;
26
27
3.38k
  for (capnum = 0; capnum <= POLICYDB_CAP_MAX; capnum++) {
28
3.26k
    if (polcap_names[capnum] == NULL)
29
0
      continue;
30
3.26k
    if (strcasecmp(polcap_names[capnum], name) == 0)
31
354
      return capnum;
32
3.26k
  }
33
115
  return -1;
34
469
}
35
36
const char *sepol_polcap_getname(unsigned int capnum)
37
0
{
38
0
  if (capnum > POLICYDB_CAP_MAX)
39
0
    return NULL;
40
41
0
  return polcap_names[capnum];
42
0
}