brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 2e979ee Raw
85 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Creating audit records for mapped devices.4 *5 * Copyright (C) 2021 Fraunhofer AISEC. All rights reserved.6 *7 * Authors: Michael Weiß <michael.weiss@aisec.fraunhofer.de>8 */9 10#include <linux/audit.h>11#include <linux/module.h>12#include <linux/device-mapper.h>13#include <linux/bio.h>14#include <linux/blkdev.h>15 16#include "dm-audit.h"17#include "dm-core.h"18 19static struct audit_buffer *dm_audit_log_start(int audit_type,20					       const char *dm_msg_prefix,21					       const char *op)22{23	struct audit_buffer *ab;24 25	if (audit_enabled == AUDIT_OFF)26		return NULL;27 28	ab = audit_log_start(audit_context(), GFP_KERNEL, audit_type);29	if (unlikely(!ab))30		return NULL;31 32	audit_log_format(ab, "module=%s op=%s", dm_msg_prefix, op);33	return ab;34}35 36void dm_audit_log_ti(int audit_type, const char *dm_msg_prefix, const char *op,37		     struct dm_target *ti, int result)38{39	struct audit_buffer *ab = NULL;40	struct mapped_device *md = dm_table_get_md(ti->table);41	int dev_major = dm_disk(md)->major;42	int dev_minor = dm_disk(md)->first_minor;43 44	switch (audit_type) {45	case AUDIT_DM_CTRL:46		ab = dm_audit_log_start(audit_type, dm_msg_prefix, op);47		if (unlikely(!ab))48			return;49		audit_log_task_info(ab);50		audit_log_format(ab, " dev=%d:%d error_msg='%s'", dev_major,51				 dev_minor, !result ? ti->error : "success");52		break;53	case AUDIT_DM_EVENT:54		ab = dm_audit_log_start(audit_type, dm_msg_prefix, op);55		if (unlikely(!ab))56			return;57		audit_log_format(ab, " dev=%d:%d sector=?", dev_major,58				 dev_minor);59		break;60	default: /* unintended use */61		return;62	}63 64	audit_log_format(ab, " res=%d", result);65	audit_log_end(ab);66}67EXPORT_SYMBOL_GPL(dm_audit_log_ti);68 69void dm_audit_log_bio(const char *dm_msg_prefix, const char *op,70		      struct bio *bio, sector_t sector, int result)71{72	struct audit_buffer *ab;73	int dev_major = MAJOR(bio->bi_bdev->bd_dev);74	int dev_minor = MINOR(bio->bi_bdev->bd_dev);75 76	ab = dm_audit_log_start(AUDIT_DM_EVENT, dm_msg_prefix, op);77	if (unlikely(!ab))78		return;79 80	audit_log_format(ab, " dev=%d:%d sector=%llu res=%d",81			 dev_major, dev_minor, sector, result);82	audit_log_end(ab);83}84EXPORT_SYMBOL_GPL(dm_audit_log_bio);85