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

flock.c (1008B)


      1// SPDX-License-Identifier: LGPL-2.1
      2
      3#include "trace/beauty/beauty.h"
      4#include <linux/kernel.h>
      5#include <uapi/linux/fcntl.h>
      6
      7#ifndef LOCK_MAND
      8#define LOCK_MAND	 32
      9#endif
     10
     11#ifndef LOCK_READ
     12#define LOCK_READ	 64
     13#endif
     14
     15#ifndef LOCK_WRITE
     16#define LOCK_WRITE	128
     17#endif
     18
     19#ifndef LOCK_RW
     20#define LOCK_RW		192
     21#endif
     22
     23size_t syscall_arg__scnprintf_flock(char *bf, size_t size, struct syscall_arg *arg)
     24{
     25	bool show_prefix = arg->show_string_prefix;
     26	const char *prefix = "LOCK_";
     27	int printed = 0, op = arg->val;
     28
     29	if (op == 0)
     30		return scnprintf(bf, size, "NONE");
     31#define	P_CMD(cmd) \
     32	if ((op & LOCK_##cmd) == LOCK_##cmd) { \
     33		printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #cmd); \
     34		op &= ~LOCK_##cmd; \
     35	}
     36
     37	P_CMD(SH);
     38	P_CMD(EX);
     39	P_CMD(NB);
     40	P_CMD(UN);
     41	P_CMD(MAND);
     42	P_CMD(RW);
     43	P_CMD(READ);
     44	P_CMD(WRITE);
     45#undef P_OP
     46
     47	if (op)
     48		printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", op);
     49
     50	return printed;
     51}