| 1 | |
| 2 | |
| 3 | *
|
| 4 | * Copyright (C) 2004-5 Red Hat, Inc. All Rights Reserved.
|
| 5 | * Written by David Howells ([email protected])
|
| 6 |
|
| 7 |
|
| 8 | #include <linux/syscalls.h>
|
| 9 | #include <linux/keyctl.h>
|
| 10 | #include <linux/compat.h>
|
| 11 | #include <linux/slab.h>
|
| 12 | #include "internal.h"
|
| 13 |
|
| 14 | |
| 15 | * The key control system call, 32-bit compatibility version for 64-bit archs
|
| 16 |
|
| 17 | COMPAT_SYSCALL_DEFINE5(keyctl, u32, option,
|
| 18 | u32, arg2, u32, arg3, u32, arg4, u32, arg5)
|
| 19 | {
|
| 20 | switch (option) {
|
| 21 | case KEYCTL_GET_KEYRING_ID:
|
| 22 | return keyctl_get_keyring_ID(arg2, arg3);
|
| 23 |
|
| 24 | case KEYCTL_JOIN_SESSION_KEYRING:
|
| 25 | return keyctl_join_session_keyring(compat_ptr(arg2));
|
| 26 |
|
| 27 | case KEYCTL_UPDATE:
|
| 28 | return keyctl_update_key(arg2, compat_ptr(arg3), arg4);
|
| 29 |
|
| 30 | case KEYCTL_REVOKE:
|
| 31 | return keyctl_revoke_key(arg2);
|
| 32 |
|
| 33 | case KEYCTL_DESCRIBE:
|
| 34 | return keyctl_describe_key(arg2, compat_ptr(arg3), arg4);
|
| 35 |
|
| 36 | case KEYCTL_CLEAR:
|
| 37 | return keyctl_keyring_clear(arg2);
|
| 38 |
|
| 39 | case KEYCTL_LINK:
|
| 40 | return keyctl_keyring_link(arg2, arg3);
|
| 41 |
|
| 42 | case KEYCTL_UNLINK:
|
| 43 | return keyctl_keyring_unlink(arg2, arg3);
|
| 44 |
|
| 45 | case KEYCTL_SEARCH:
|
| 46 | return keyctl_keyring_search(arg2, compat_ptr(arg3),
|
| 47 | compat_ptr(arg4), arg5);
|
| 48 |
|
| 49 | case KEYCTL_READ:
|
| 50 | return keyctl_read_key(arg2, compat_ptr(arg3), arg4);
|
| 51 |
|
| 52 | case KEYCTL_CHOWN:
|
| 53 | return keyctl_chown_key(arg2, arg3, arg4);
|
| 54 |
|
| 55 | case KEYCTL_SETPERM:
|
| 56 | return keyctl_setperm_key(arg2, arg3);
|
| 57 |
|
| 58 | case KEYCTL_INSTANTIATE:
|
| 59 | return keyctl_instantiate_key(arg2, compat_ptr(arg3), arg4,
|
| 60 | arg5);
|
| 61 |
|
| 62 | case KEYCTL_NEGATE:
|
| 63 | return keyctl_negate_key(arg2, arg3, arg4);
|
| 64 |
|
| 65 | case KEYCTL_SET_REQKEY_KEYRING:
|
| 66 | return keyctl_set_reqkey_keyring(arg2);
|
| 67 |
|
| 68 | case KEYCTL_SET_TIMEOUT:
|
| 69 | return keyctl_set_timeout(arg2, arg3);
|
| 70 |
|
| 71 | case KEYCTL_ASSUME_AUTHORITY:
|
| 72 | return keyctl_assume_authority(arg2);
|
| 73 |
|
| 74 | case KEYCTL_GET_SECURITY:
|
| 75 | return keyctl_get_security(arg2, compat_ptr(arg3), arg4);
|
| 76 |
|
| 77 | case KEYCTL_SESSION_TO_PARENT:
|
| 78 | return keyctl_session_to_parent();
|
| 79 |
|
| 80 | case KEYCTL_REJECT:
|
| 81 | return keyctl_reject_key(arg2, arg3, arg4, arg5);
|
| 82 |
|
| 83 | case KEYCTL_INSTANTIATE_IOV:
|
| 84 | return keyctl_instantiate_key_iov(arg2, compat_ptr(arg3), arg4,
|
| 85 | arg5);
|
| 86 |
|
| 87 | case KEYCTL_INVALIDATE:
|
| 88 | return keyctl_invalidate_key(arg2);
|
| 89 |
|
| 90 | case KEYCTL_GET_PERSISTENT:
|
| 91 | return keyctl_get_persistent(arg2, arg3);
|
| 92 |
|
| 93 | case KEYCTL_DH_COMPUTE:
|
| 94 | return compat_keyctl_dh_compute(compat_ptr(arg2),
|
| 95 | compat_ptr(arg3),
|
| 96 | arg4, compat_ptr(arg5));
|
| 97 |
|
| 98 | case KEYCTL_RESTRICT_KEYRING:
|
| 99 | return keyctl_restrict_keyring(arg2, compat_ptr(arg3),
|
| 100 | compat_ptr(arg4));
|
| 101 |
|
| 102 | case KEYCTL_PKEY_QUERY:
|
| 103 | if (arg3 != 0)
|
| 104 | return -EINVAL;
|
| 105 | return keyctl_pkey_query(arg2,
|
| 106 | compat_ptr(arg4),
|
| 107 | compat_ptr(arg5));
|
| 108 |
|
| 109 | case KEYCTL_PKEY_ENCRYPT:
|
| 110 | case KEYCTL_PKEY_DECRYPT:
|
| 111 | case KEYCTL_PKEY_SIGN:
|
| 112 | return keyctl_pkey_e_d_s(option,
|
| 113 | compat_ptr(arg2), compat_ptr(arg3),
|
| 114 | compat_ptr(arg4), compat_ptr(arg5));
|
| 115 |
|
| 116 | case KEYCTL_PKEY_VERIFY:
|
| 117 | return keyctl_pkey_verify(compat_ptr(arg2), compat_ptr(arg3),
|
| 118 | compat_ptr(arg4), compat_ptr(arg5));
|
| 119 |
|
| 120 | case KEYCTL_MOVE:
|
| 121 | return keyctl_keyring_move(arg2, arg3, arg4, arg5);
|
| 122 |
|
| 123 | case KEYCTL_CAPABILITIES:
|
| 124 | return keyctl_capabilities(compat_ptr(arg2), arg3);
|
| 125 |
|
| 126 | case KEYCTL_WATCH_KEY:
|
| 127 | return keyctl_watch_key(arg2, arg3, arg4);
|
| 128 |
|
| 129 | default:
|
| 130 | return -EOPNOTSUPP;
|
| 131 | }
|
| 132 | }
|