| 1 | |
| 2 | |
| 3 | * 32 bit compatibility code for System V IPC
|
| 4 | *
|
| 5 | * Copyright (C) 1997,1998 Jakub Jelinek ([email protected])
|
| 6 | * Copyright (C) 1997 David S. Miller ([email protected])
|
| 7 | * Copyright (C) 1999 Arun Sharma <[email protected]>
|
| 8 | * Copyright (C) 2000 VA Linux Co
|
| 9 | * Copyright (C) 2000 Don Dugger <[email protected]>
|
| 10 | * Copyright (C) 2000 Hewlett-Packard Co.
|
| 11 | * Copyright (C) 2000 David Mosberger-Tang <[email protected]>
|
| 12 | * Copyright (C) 2000 Gerhard Tonn ([email protected])
|
| 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 ([email protected])
|
| 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 |
|
| 38 | int 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 |
|
| 50 | int 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 |
|
| 62 | void 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 |
|
| 73 | void 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 | }
|