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