cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mon_stat.c (1610B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * The USB Monitor, inspired by Dave Harding's USBMon.
      4 *
      5 * This is the 's' or 'stat' reader which debugs usbmon itself.
      6 * Note that this code blows through locks, so make sure that
      7 * /dbg/usbmon/0s is well protected from non-root users.
      8 *
      9 */
     10
     11#include <linux/kernel.h>
     12#include <linux/slab.h>
     13#include <linux/export.h>
     14#include <linux/usb.h>
     15#include <linux/fs.h>
     16#include <linux/uaccess.h>
     17
     18#include "usb_mon.h"
     19
     20#define STAT_BUF_SIZE  80
     21
     22struct snap {
     23	int slen;
     24	char str[STAT_BUF_SIZE];
     25};
     26
     27static int mon_stat_open(struct inode *inode, struct file *file)
     28{
     29	struct mon_bus *mbus;
     30	struct snap *sp;
     31
     32	sp = kmalloc(sizeof(struct snap), GFP_KERNEL);
     33	if (sp == NULL)
     34		return -ENOMEM;
     35
     36	mbus = inode->i_private;
     37
     38	sp->slen = snprintf(sp->str, STAT_BUF_SIZE,
     39	    "nreaders %d events %u text_lost %u\n",
     40	    mbus->nreaders, mbus->cnt_events, mbus->cnt_text_lost);
     41
     42	file->private_data = sp;
     43	return 0;
     44}
     45
     46static ssize_t mon_stat_read(struct file *file, char __user *buf,
     47				size_t nbytes, loff_t *ppos)
     48{
     49	struct snap *sp = file->private_data;
     50
     51	return simple_read_from_buffer(buf, nbytes, ppos, sp->str, sp->slen);
     52}
     53
     54static int mon_stat_release(struct inode *inode, struct file *file)
     55{
     56	struct snap *sp = file->private_data;
     57	file->private_data = NULL;
     58	kfree(sp);
     59	return 0;
     60}
     61
     62const struct file_operations mon_fops_stat = {
     63	.owner =	THIS_MODULE,
     64	.open =		mon_stat_open,
     65	.llseek =	no_llseek,
     66	.read =		mon_stat_read,
     67	/* .write =	mon_stat_write, */
     68	/* .poll =		mon_stat_poll, */
     69	/* .unlocked_ioctl =	mon_stat_ioctl, */
     70	.release =	mon_stat_release,
     71};