16cd6a6acSopenharmony_ci#include <unistd.h> 26cd6a6acSopenharmony_ci#include <sys/types.h> 36cd6a6acSopenharmony_ci#include <fcntl.h> 46cd6a6acSopenharmony_ci#include <stdlib.h> 56cd6a6acSopenharmony_ci#include <errno.h> 66cd6a6acSopenharmony_ci#include <string.h> 76cd6a6acSopenharmony_ci#include "selinux_internal.h" 86cd6a6acSopenharmony_ci#include "policy.h" 96cd6a6acSopenharmony_ci#include <stdio.h> 106cd6a6acSopenharmony_ci#include <limits.h> 116cd6a6acSopenharmony_ci 126cd6a6acSopenharmony_ciint security_get_checkreqprot(void) 136cd6a6acSopenharmony_ci{ 146cd6a6acSopenharmony_ci int fd, ret, checkreqprot = 0; 156cd6a6acSopenharmony_ci char path[PATH_MAX]; 166cd6a6acSopenharmony_ci char buf[20]; 176cd6a6acSopenharmony_ci 186cd6a6acSopenharmony_ci if (!selinux_mnt) { 196cd6a6acSopenharmony_ci errno = ENOENT; 206cd6a6acSopenharmony_ci return -1; 216cd6a6acSopenharmony_ci } 226cd6a6acSopenharmony_ci 236cd6a6acSopenharmony_ci snprintf(path, sizeof(path), "%s/checkreqprot", selinux_mnt); 246cd6a6acSopenharmony_ci fd = open(path, O_RDONLY | O_CLOEXEC); 256cd6a6acSopenharmony_ci if (fd < 0) 266cd6a6acSopenharmony_ci return -1; 276cd6a6acSopenharmony_ci 286cd6a6acSopenharmony_ci memset(buf, 0, sizeof(buf)); 296cd6a6acSopenharmony_ci ret = read(fd, buf, sizeof(buf) - 1); 306cd6a6acSopenharmony_ci close(fd); 316cd6a6acSopenharmony_ci if (ret < 0) 326cd6a6acSopenharmony_ci return -1; 336cd6a6acSopenharmony_ci 346cd6a6acSopenharmony_ci if (sscanf(buf, "%d", &checkreqprot) != 1) 356cd6a6acSopenharmony_ci return -1; 366cd6a6acSopenharmony_ci 376cd6a6acSopenharmony_ci return checkreqprot; 386cd6a6acSopenharmony_ci} 396cd6a6acSopenharmony_ci 40