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

compat.c (2299B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * 32 bit compatibility code for System V IPC
      4 *
      5 * Copyright (C) 1997,1998	Jakub Jelinek (jj@sunsite.mff.cuni.cz)
      6 * Copyright (C) 1997		David S. Miller (davem@caip.rutgers.edu)
      7 * Copyright (C) 1999		Arun Sharma <arun.sharma@intel.com>
      8 * Copyright (C) 2000		VA Linux Co
      9 * Copyright (C) 2000		Don Dugger <n0ano@valinux.com>
     10 * Copyright (C) 2000           Hewlett-Packard Co.
     11 * Copyright (C) 2000           David Mosberger-Tang <davidm@hpl.hp.com>
     12 * Copyright (C) 2000           Gerhard Tonn (ton@de.ibm.com)
     13 * Copyright (C) 2000-2002      Andi Kleen, SuSE Labs (x86-64 port)
     14 * Copyright (C) 2000		Silicon Graphics, Inc.
     15 * Copyright (C) 2001		IBM
     16 * Copyright (C) 2004		IBM Deutschland Entwicklung GmbH, IBM Corporation
     17 * Copyright (C) 2004		Arnd Bergmann (arnd@arndb.de)
     18 *
     19 * This code is collected from the versions for sparc64, mips64, s390x, ia64,
     20 * ppc64 and x86_64, all of which are based on the original sparc64 version
     21 * by Jakub Jelinek.
     22 *
     23 */
     24#include <linux/compat.h>
     25#include <linux/errno.h>
     26#include <linux/highuid.h>
     27#include <linux/init.h>
     28#include <linux/msg.h>
     29#include <linux/shm.h>
     30#include <linux/syscalls.h>
     31#include <linux/ptrace.h>
     32
     33#include <linux/mutex.h>
     34#include <linux/uaccess.h>
     35
     36#include "util.h"
     37
     38int get_compat_ipc64_perm(struct ipc64_perm *to,
     39			  struct compat_ipc64_perm __user *from)
     40{
     41	struct compat_ipc64_perm v;
     42	if (copy_from_user(&v, from, sizeof(v)))
     43		return -EFAULT;
     44	to->uid = v.uid;
     45	to->gid = v.gid;
     46	to->mode = v.mode;
     47	return 0;
     48}
     49
     50int get_compat_ipc_perm(struct ipc64_perm *to,
     51			struct compat_ipc_perm __user *from)
     52{
     53	struct compat_ipc_perm v;
     54	if (copy_from_user(&v, from, sizeof(v)))
     55		return -EFAULT;
     56	to->uid = v.uid;
     57	to->gid = v.gid;
     58	to->mode = v.mode;
     59	return 0;
     60}
     61
     62void to_compat_ipc64_perm(struct compat_ipc64_perm *to, struct ipc64_perm *from)
     63{
     64	to->key = from->key;
     65	to->uid = from->uid;
     66	to->gid = from->gid;
     67	to->cuid = from->cuid;
     68	to->cgid = from->cgid;
     69	to->mode = from->mode;
     70	to->seq = from->seq;
     71}
     72
     73void to_compat_ipc_perm(struct compat_ipc_perm *to, struct ipc64_perm *from)
     74{
     75	to->key = from->key;
     76	SET_UID(to->uid, from->uid);
     77	SET_GID(to->gid, from->gid);
     78	SET_UID(to->cuid, from->cuid);
     79	SET_GID(to->cgid, from->cgid);
     80	to->mode = from->mode;
     81	to->seq = from->seq;
     82}