1335354Sasomers/*- 2335354Sasomers * Copyright (c) 2018 Aniket Pandey 3335354Sasomers * 4335354Sasomers * Redistribution and use in source and binary forms, with or without 5335354Sasomers * modification, are permitted provided that the following conditions 6335354Sasomers * are met: 7335354Sasomers * 1. Redistributions of source code must retain the above copyright 8335354Sasomers * notice, this list of conditions and the following disclaimer. 9335354Sasomers * 2. Redistributions in binary form must reproduce the above copyright 10335354Sasomers * notice, this list of conditions and the following disclaimer in the 11335354Sasomers * documentation and/or other materials provided with the distribution. 12335354Sasomers * 13335354Sasomers * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14335354Sasomers * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15335354Sasomers * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16335354Sasomers * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17335354Sasomers * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18335354Sasomers * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19335354Sasomers * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 20335354Sasomers * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21335354Sasomers * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22335354Sasomers * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23335354Sasomers * SUCH DAMAGE. 24335354Sasomers * 25335354Sasomers * $FreeBSD: stable/11/tests/sys/audit/ioctl.c 339090 2018-10-02 17:27:10Z asomers $ 26335354Sasomers */ 27335354Sasomers 28335354Sasomers#include <sys/ioctl.h> 29335354Sasomers 30335354Sasomers#include <bsm/libbsm.h> 31335354Sasomers#include <security/audit/audit_ioctl.h> 32335354Sasomers 33335354Sasomers#include <atf-c.h> 34335354Sasomers#include <fcntl.h> 35335354Sasomers#include <unistd.h> 36335354Sasomers 37335354Sasomers#include "utils.h" 38335354Sasomers 39335354Sasomersstatic int filedesc; 40335354Sasomersstatic char ioregex[80]; 41335354Sasomersstatic const char *auclass = "io"; 42335354Sasomersstatic struct pollfd fds[1]; 43335354Sasomersstatic unsigned long request = AUDITPIPE_FLUSH; 44335354Sasomers 45335354Sasomers 46335354SasomersATF_TC_WITH_CLEANUP(ioctl_success); 47335354SasomersATF_TC_HEAD(ioctl_success, tc) 48335354Sasomers{ 49335354Sasomers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 50335354Sasomers "ioctl(2) call"); 51335354Sasomers} 52335354Sasomers 53335354SasomersATF_TC_BODY(ioctl_success, tc) 54335354Sasomers{ 55335354Sasomers /* auditpipe(4) supports quite a few ioctls */ 56335354Sasomers ATF_REQUIRE((filedesc = open("/dev/auditpipe", O_RDONLY)) != -1); 57335354Sasomers /* Prepare the regex to be checked in the audit record */ 58335354Sasomers snprintf(ioregex, sizeof(ioregex), 59335354Sasomers "ioctl.*%#lx.*%#x.*return,success", request, filedesc); 60335354Sasomers 61335354Sasomers FILE *pipefd = setup(fds, auclass); 62335354Sasomers ATF_REQUIRE(ioctl(filedesc, request) != -1); 63335354Sasomers check_audit(fds, ioregex, pipefd); 64335354Sasomers close(filedesc); 65335354Sasomers} 66335354Sasomers 67335354SasomersATF_TC_CLEANUP(ioctl_success, tc) 68335354Sasomers{ 69335354Sasomers cleanup(); 70335354Sasomers} 71335354Sasomers 72335354Sasomers 73335354SasomersATF_TC_WITH_CLEANUP(ioctl_failure); 74335354SasomersATF_TC_HEAD(ioctl_failure, tc) 75335354Sasomers{ 76335354Sasomers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 77335354Sasomers "ioctl(2) call"); 78335354Sasomers} 79335354Sasomers 80335354SasomersATF_TC_BODY(ioctl_failure, tc) 81335354Sasomers{ 82335354Sasomers snprintf(ioregex, sizeof(ioregex), 83335354Sasomers "ioctl.*%#lx.*return,failure : Bad file descriptor", request); 84335354Sasomers 85335354Sasomers FILE *pipefd = setup(fds, auclass); 86335354Sasomers /* Failure reason: Invalid file descriptor */ 87335354Sasomers ATF_REQUIRE_EQ(-1, ioctl(-1, request)); 88335354Sasomers check_audit(fds, ioregex, pipefd); 89335354Sasomers} 90335354Sasomers 91335354SasomersATF_TC_CLEANUP(ioctl_failure, tc) 92335354Sasomers{ 93335354Sasomers cleanup(); 94335354Sasomers} 95335354Sasomers 96335354Sasomers 97335354SasomersATF_TP_ADD_TCS(tp) 98335354Sasomers{ 99335354Sasomers ATF_TP_ADD_TC(tp, ioctl_success); 100335354Sasomers ATF_TP_ADD_TC(tp, ioctl_failure); 101335354Sasomers 102335354Sasomers return (atf_no_error()); 103335354Sasomers} 104