Blame view

security/keys/compat.c 3.22 KB
2874c5fd2   Thomas Gleixner   treewide: Replace...
1
  // SPDX-License-Identifier: GPL-2.0-or-later
973c9f4f4   David Howells   KEYS: Fix up comm...
2
  /* 32-bit compatibility syscall for 64-bit systems
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
   *
3e30148c3   David Howells   [PATCH] Keys: Mak...
4
   * Copyright (C) 2004-5 Red Hat, Inc. All Rights Reserved.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
   * Written by David Howells (dhowells@redhat.com)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
6
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
9
  #include <linux/syscalls.h>
  #include <linux/keyctl.h>
  #include <linux/compat.h>
ee009e4a0   David Howells   KEYS: Add an iove...
10
  #include <linux/slab.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
  #include "internal.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
  /*
973c9f4f4   David Howells   KEYS: Fix up comm...
13
   * The key control system call, 32-bit compatibility version for 64-bit archs
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14
   */
875ec3da4   Heiko Carstens   security/compat: ...
15
16
  COMPAT_SYSCALL_DEFINE5(keyctl, u32, option,
  		       u32, arg2, u32, arg3, u32, arg4, u32, arg5)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  {
  	switch (option) {
  	case KEYCTL_GET_KEYRING_ID:
  		return keyctl_get_keyring_ID(arg2, arg3);
  
  	case KEYCTL_JOIN_SESSION_KEYRING:
  		return keyctl_join_session_keyring(compat_ptr(arg2));
  
  	case KEYCTL_UPDATE:
  		return keyctl_update_key(arg2, compat_ptr(arg3), arg4);
  
  	case KEYCTL_REVOKE:
  		return keyctl_revoke_key(arg2);
  
  	case KEYCTL_DESCRIBE:
  		return keyctl_describe_key(arg2, compat_ptr(arg3), arg4);
  
  	case KEYCTL_CLEAR:
  		return keyctl_keyring_clear(arg2);
  
  	case KEYCTL_LINK:
  		return keyctl_keyring_link(arg2, arg3);
  
  	case KEYCTL_UNLINK:
  		return keyctl_keyring_unlink(arg2, arg3);
  
  	case KEYCTL_SEARCH:
  		return keyctl_keyring_search(arg2, compat_ptr(arg3),
  					     compat_ptr(arg4), arg5);
  
  	case KEYCTL_READ:
  		return keyctl_read_key(arg2, compat_ptr(arg3), arg4);
  
  	case KEYCTL_CHOWN:
  		return keyctl_chown_key(arg2, arg3, arg4);
  
  	case KEYCTL_SETPERM:
  		return keyctl_setperm_key(arg2, arg3);
  
  	case KEYCTL_INSTANTIATE:
  		return keyctl_instantiate_key(arg2, compat_ptr(arg3), arg4,
  					      arg5);
  
  	case KEYCTL_NEGATE:
  		return keyctl_negate_key(arg2, arg3, arg4);
3e30148c3   David Howells   [PATCH] Keys: Mak...
62
63
  	case KEYCTL_SET_REQKEY_KEYRING:
  		return keyctl_set_reqkey_keyring(arg2);
017679c4d   David Howells   [PATCH] keys: Per...
64
65
  	case KEYCTL_SET_TIMEOUT:
  		return keyctl_set_timeout(arg2, arg3);
b5f545c88   David Howells   [PATCH] keys: Per...
66
67
  	case KEYCTL_ASSUME_AUTHORITY:
  		return keyctl_assume_authority(arg2);
70a5bb72b   David Howells   keys: add keyctl ...
68
69
  	case KEYCTL_GET_SECURITY:
  		return keyctl_get_security(arg2, compat_ptr(arg3), arg4);
ee18d64c1   David Howells   KEYS: Add a keyct...
70
71
  	case KEYCTL_SESSION_TO_PARENT:
  		return keyctl_session_to_parent();
fdd1b9458   David Howells   KEYS: Add a new k...
72
73
  	case KEYCTL_REJECT:
  		return keyctl_reject_key(arg2, arg3, arg4, arg5);
ee009e4a0   David Howells   KEYS: Add an iove...
74
  	case KEYCTL_INSTANTIATE_IOV:
d62653ee8   Greg Kroah-Hartman   Revert "Revert "s...
75
76
  		return keyctl_instantiate_key_iov(arg2, compat_ptr(arg3), arg4,
  						  arg5);
ee009e4a0   David Howells   KEYS: Add an iove...
77

fd75815f7   David Howells   KEYS: Add invalid...
78
79
  	case KEYCTL_INVALIDATE:
  		return keyctl_invalidate_key(arg2);
f36f8c75a   David Howells   KEYS: Add per-use...
80
81
  	case KEYCTL_GET_PERSISTENT:
  		return keyctl_get_persistent(arg2, arg3);
ddbb41148   Mat Martineau   KEYS: Add KEYCTL_...
82
  	case KEYCTL_DH_COMPUTE:
f1c316a3a   Stephan Mueller   KEYS: add SP800-5...
83
84
85
  		return compat_keyctl_dh_compute(compat_ptr(arg2),
  						compat_ptr(arg3),
  						arg4, compat_ptr(arg5));
ddbb41148   Mat Martineau   KEYS: Add KEYCTL_...
86

6563c91fd   Mat Martineau   KEYS: Add KEYCTL_...
87
88
89
  	case KEYCTL_RESTRICT_KEYRING:
  		return keyctl_restrict_keyring(arg2, compat_ptr(arg3),
  					       compat_ptr(arg4));
00d60fd3b   David Howells   KEYS: Provide key...
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  	case KEYCTL_PKEY_QUERY:
  		if (arg3 != 0)
  			return -EINVAL;
  		return keyctl_pkey_query(arg2,
  					 compat_ptr(arg4),
  					 compat_ptr(arg5));
  
  	case KEYCTL_PKEY_ENCRYPT:
  	case KEYCTL_PKEY_DECRYPT:
  	case KEYCTL_PKEY_SIGN:
  		return keyctl_pkey_e_d_s(option,
  					 compat_ptr(arg2), compat_ptr(arg3),
  					 compat_ptr(arg4), compat_ptr(arg5));
  
  	case KEYCTL_PKEY_VERIFY:
  		return keyctl_pkey_verify(compat_ptr(arg2), compat_ptr(arg3),
  					  compat_ptr(arg4), compat_ptr(arg5));
ed0ac5c7e   David Howells   keys: Add a keyct...
107
108
  	case KEYCTL_MOVE:
  		return keyctl_keyring_move(arg2, arg3, arg4, arg5);
45e0f30c3   David Howells   keys: Add capabil...
109
110
  	case KEYCTL_CAPABILITIES:
  		return keyctl_capabilities(compat_ptr(arg2), arg3);
f7e47677e   David Howells   watch_queue: Add ...
111
112
  	case KEYCTL_WATCH_KEY:
  		return keyctl_watch_key(arg2, arg3, arg4);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
113
114
115
  	default:
  		return -EOPNOTSUPP;
  	}
a8b17ed01   David Howells   KEYS: Do some sty...
116
  }