linux/security/keys/compat.c
<<
>>
Prefs
   1/* compat.c: 32-bit compatibility syscall for 64-bit systems
   2 *
   3 * Copyright (C) 2004-5 Red Hat, Inc. All Rights Reserved.
   4 * Written by David Howells (dhowells@redhat.com)
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * as published by the Free Software Foundation; either version
   9 * 2 of the License, or (at your option) any later version.
  10 */
  11
  12#include <linux/syscalls.h>
  13#include <linux/keyctl.h>
  14#include <linux/compat.h>
  15#include "internal.h"
  16
  17/*****************************************************************************/
  18/*
  19 * the key control system call, 32-bit compatibility version for 64-bit archs
  20 * - this should only be called if the 64-bit arch uses weird pointers in
  21 *   32-bit mode or doesn't guarantee that the top 32-bits of the argument
  22 *   registers on taking a 32-bit syscall are zero
  23 * - if you can, you should call sys_keyctl directly
  24 */
  25asmlinkage long compat_sys_keyctl(u32 option,
  26                                  u32 arg2, u32 arg3, u32 arg4, u32 arg5)
  27{
  28        switch (option) {
  29        case KEYCTL_GET_KEYRING_ID:
  30                return keyctl_get_keyring_ID(arg2, arg3);
  31
  32        case KEYCTL_JOIN_SESSION_KEYRING:
  33                return keyctl_join_session_keyring(compat_ptr(arg2));
  34
  35        case KEYCTL_UPDATE:
  36                return keyctl_update_key(arg2, compat_ptr(arg3), arg4);
  37
  38        case KEYCTL_REVOKE:
  39                return keyctl_revoke_key(arg2);
  40
  41        case KEYCTL_DESCRIBE:
  42                return keyctl_describe_key(arg2, compat_ptr(arg3), arg4);
  43
  44        case KEYCTL_CLEAR:
  45                return keyctl_keyring_clear(arg2);
  46
  47        case KEYCTL_LINK:
  48                return keyctl_keyring_link(arg2, arg3);
  49
  50        case KEYCTL_UNLINK:
  51                return keyctl_keyring_unlink(arg2, arg3);
  52
  53        case KEYCTL_SEARCH:
  54                return keyctl_keyring_search(arg2, compat_ptr(arg3),
  55                                             compat_ptr(arg4), arg5);
  56
  57        case KEYCTL_READ:
  58                return keyctl_read_key(arg2, compat_ptr(arg3), arg4);
  59
  60        case KEYCTL_CHOWN:
  61                return keyctl_chown_key(arg2, arg3, arg4);
  62
  63        case KEYCTL_SETPERM:
  64                return keyctl_setperm_key(arg2, arg3);
  65
  66        case KEYCTL_INSTANTIATE:
  67                return keyctl_instantiate_key(arg2, compat_ptr(arg3), arg4,
  68                                              arg5);
  69
  70        case KEYCTL_NEGATE:
  71                return keyctl_negate_key(arg2, arg3, arg4);
  72
  73        case KEYCTL_SET_REQKEY_KEYRING:
  74                return keyctl_set_reqkey_keyring(arg2);
  75
  76        case KEYCTL_SET_TIMEOUT:
  77                return keyctl_set_timeout(arg2, arg3);
  78
  79        case KEYCTL_ASSUME_AUTHORITY:
  80                return keyctl_assume_authority(arg2);
  81
  82        case KEYCTL_GET_SECURITY:
  83                return keyctl_get_security(arg2, compat_ptr(arg3), arg4);
  84
  85        default:
  86                return -EOPNOTSUPP;
  87        }
  88
  89} /* end compat_sys_keyctl() */
  90