Loading...
/* * Copyright (c) 2021 Apple Inc. All rights reserved. * * @Apple_LICENSE_HEADER_START@ * * The contents of this file constitute Original Code as defined in and * are subject to the Apple Public Source License Version 1.1 (the * "License"). You may not use this file except in compliance with the * License. Please obtain a copy of the License at * http://www.apple.com/publicsource and read it before using this file. * * This Original Code and all software distributed under the License are * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the * License for the specific language governing rights and limitations * under the License. * * @APPLE_LICENSE_HEADER_END@ */ #include <os/system_event_log.h> #include <sys/systm.h> #include <sys/sysproto.h> #include <IOKit/IOBSD.h> int sys_record_system_event(__unused struct proc *p, struct record_system_event_args *uap, __unused int *retval) { int error = 0; boolean_t entitled = FALSE; entitled = IOCurrentTaskHasEntitlement(SYSTEM_EVENT_ENTITLEMENT); if (!entitled) { error = EPERM; goto done; } char event[SYSTEM_EVENT_EVENT_MAX] = {0}; char payload[SYSTEM_EVENT_PAYLOAD_MAX] = {0}; size_t bytes_copied; error = copyinstr(uap->event, event, sizeof(event), &bytes_copied); if (error) { goto done; } error = copyinstr(uap->payload, payload, sizeof(payload), &bytes_copied); if (error) { goto done; } record_system_event_no_varargs((uint8_t)(uap->type), (uint8_t)(uap->subsystem), event, payload); done: return error; } |