18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 32-bit compatibility syscall for 64-bit systems 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright (C) 2004-5 Red Hat, Inc. All Rights Reserved. 58c2ecf20Sopenharmony_ci * Written by David Howells (dhowells@redhat.com) 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/syscalls.h> 98c2ecf20Sopenharmony_ci#include <linux/keyctl.h> 108c2ecf20Sopenharmony_ci#include <linux/compat.h> 118c2ecf20Sopenharmony_ci#include <linux/slab.h> 128c2ecf20Sopenharmony_ci#include "internal.h" 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci/* 158c2ecf20Sopenharmony_ci * The key control system call, 32-bit compatibility version for 64-bit archs 168c2ecf20Sopenharmony_ci */ 178c2ecf20Sopenharmony_ciCOMPAT_SYSCALL_DEFINE5(keyctl, u32, option, 188c2ecf20Sopenharmony_ci u32, arg2, u32, arg3, u32, arg4, u32, arg5) 198c2ecf20Sopenharmony_ci{ 208c2ecf20Sopenharmony_ci switch (option) { 218c2ecf20Sopenharmony_ci case KEYCTL_GET_KEYRING_ID: 228c2ecf20Sopenharmony_ci return keyctl_get_keyring_ID(arg2, arg3); 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci case KEYCTL_JOIN_SESSION_KEYRING: 258c2ecf20Sopenharmony_ci return keyctl_join_session_keyring(compat_ptr(arg2)); 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci case KEYCTL_UPDATE: 288c2ecf20Sopenharmony_ci return keyctl_update_key(arg2, compat_ptr(arg3), arg4); 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci case KEYCTL_REVOKE: 318c2ecf20Sopenharmony_ci return keyctl_revoke_key(arg2); 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci case KEYCTL_DESCRIBE: 348c2ecf20Sopenharmony_ci return keyctl_describe_key(arg2, compat_ptr(arg3), arg4); 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci case KEYCTL_CLEAR: 378c2ecf20Sopenharmony_ci return keyctl_keyring_clear(arg2); 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci case KEYCTL_LINK: 408c2ecf20Sopenharmony_ci return keyctl_keyring_link(arg2, arg3); 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci case KEYCTL_UNLINK: 438c2ecf20Sopenharmony_ci return keyctl_keyring_unlink(arg2, arg3); 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci case KEYCTL_SEARCH: 468c2ecf20Sopenharmony_ci return keyctl_keyring_search(arg2, compat_ptr(arg3), 478c2ecf20Sopenharmony_ci compat_ptr(arg4), arg5); 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci case KEYCTL_READ: 508c2ecf20Sopenharmony_ci return keyctl_read_key(arg2, compat_ptr(arg3), arg4); 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci case KEYCTL_CHOWN: 538c2ecf20Sopenharmony_ci return keyctl_chown_key(arg2, arg3, arg4); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci case KEYCTL_SETPERM: 568c2ecf20Sopenharmony_ci return keyctl_setperm_key(arg2, arg3); 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci case KEYCTL_INSTANTIATE: 598c2ecf20Sopenharmony_ci return keyctl_instantiate_key(arg2, compat_ptr(arg3), arg4, 608c2ecf20Sopenharmony_ci arg5); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci case KEYCTL_NEGATE: 638c2ecf20Sopenharmony_ci return keyctl_negate_key(arg2, arg3, arg4); 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci case KEYCTL_SET_REQKEY_KEYRING: 668c2ecf20Sopenharmony_ci return keyctl_set_reqkey_keyring(arg2); 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci case KEYCTL_SET_TIMEOUT: 698c2ecf20Sopenharmony_ci return keyctl_set_timeout(arg2, arg3); 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci case KEYCTL_ASSUME_AUTHORITY: 728c2ecf20Sopenharmony_ci return keyctl_assume_authority(arg2); 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci case KEYCTL_GET_SECURITY: 758c2ecf20Sopenharmony_ci return keyctl_get_security(arg2, compat_ptr(arg3), arg4); 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ci case KEYCTL_SESSION_TO_PARENT: 788c2ecf20Sopenharmony_ci return keyctl_session_to_parent(); 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci case KEYCTL_REJECT: 818c2ecf20Sopenharmony_ci return keyctl_reject_key(arg2, arg3, arg4, arg5); 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci case KEYCTL_INSTANTIATE_IOV: 848c2ecf20Sopenharmony_ci return keyctl_instantiate_key_iov(arg2, compat_ptr(arg3), arg4, 858c2ecf20Sopenharmony_ci arg5); 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci case KEYCTL_INVALIDATE: 888c2ecf20Sopenharmony_ci return keyctl_invalidate_key(arg2); 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci case KEYCTL_GET_PERSISTENT: 918c2ecf20Sopenharmony_ci return keyctl_get_persistent(arg2, arg3); 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci case KEYCTL_DH_COMPUTE: 948c2ecf20Sopenharmony_ci return compat_keyctl_dh_compute(compat_ptr(arg2), 958c2ecf20Sopenharmony_ci compat_ptr(arg3), 968c2ecf20Sopenharmony_ci arg4, compat_ptr(arg5)); 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci case KEYCTL_RESTRICT_KEYRING: 998c2ecf20Sopenharmony_ci return keyctl_restrict_keyring(arg2, compat_ptr(arg3), 1008c2ecf20Sopenharmony_ci compat_ptr(arg4)); 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci case KEYCTL_PKEY_QUERY: 1038c2ecf20Sopenharmony_ci if (arg3 != 0) 1048c2ecf20Sopenharmony_ci return -EINVAL; 1058c2ecf20Sopenharmony_ci return keyctl_pkey_query(arg2, 1068c2ecf20Sopenharmony_ci compat_ptr(arg4), 1078c2ecf20Sopenharmony_ci compat_ptr(arg5)); 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci case KEYCTL_PKEY_ENCRYPT: 1108c2ecf20Sopenharmony_ci case KEYCTL_PKEY_DECRYPT: 1118c2ecf20Sopenharmony_ci case KEYCTL_PKEY_SIGN: 1128c2ecf20Sopenharmony_ci return keyctl_pkey_e_d_s(option, 1138c2ecf20Sopenharmony_ci compat_ptr(arg2), compat_ptr(arg3), 1148c2ecf20Sopenharmony_ci compat_ptr(arg4), compat_ptr(arg5)); 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci case KEYCTL_PKEY_VERIFY: 1178c2ecf20Sopenharmony_ci return keyctl_pkey_verify(compat_ptr(arg2), compat_ptr(arg3), 1188c2ecf20Sopenharmony_ci compat_ptr(arg4), compat_ptr(arg5)); 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci case KEYCTL_MOVE: 1218c2ecf20Sopenharmony_ci return keyctl_keyring_move(arg2, arg3, arg4, arg5); 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci case KEYCTL_CAPABILITIES: 1248c2ecf20Sopenharmony_ci return keyctl_capabilities(compat_ptr(arg2), arg3); 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_ci case KEYCTL_WATCH_KEY: 1278c2ecf20Sopenharmony_ci return keyctl_watch_key(arg2, arg3, arg4); 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ci default: 1308c2ecf20Sopenharmony_ci return -EOPNOTSUPP; 1318c2ecf20Sopenharmony_ci } 1328c2ecf20Sopenharmony_ci} 133