Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/security/keys/compat.c
26378 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/* 32-bit compatibility syscall for 64-bit systems
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
}
133
134