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