}
}
+static void
+keyctl_restrict_keyring(struct tcb *const tcp,
+ const key_serial_t id,
+ const kernel_ulong_t addr1,
+ const kernel_ulong_t addr2)
+{
+ print_keyring_serial_number(id);
+ tprints(", ");
+ printstr(tcp, addr1);
+ tprints(", ");
+ printstr(tcp, addr2);
+}
+
#include "xlat/key_reqkeys.h"
#include "xlat/keyctl_commands.h"
keyctl_dh_compute(tcp, arg2, arg3, arg4);
return 0;
+ case KEYCTL_RESTRICT_KEYRING:
+ keyctl_restrict_keyring(tcp, arg2, arg3, arg4);
+ break;
+
default:
tprintf("%#" PRI_klx ", %#" PRI_klx
", %#" PRI_klx ", %#" PRI_klx,
sizeof(long_type_str), long_desc, NULL, NULL,
sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
+ /* KEYCTL_RESTRICT_KEYRING */
+
+ do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+ sizeof(int32_t), ARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
+ sizeof(char *), ARG_STR(NULL), NULL,
+ sizeof(char *), ARG_STR(NULL), NULL,
+ NULL);
+ do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+ sizeof(int32_t), bogus_key1, NULL, "%d",
+ sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
+ sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
+ NULL);
+ do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+ sizeof(int32_t), bogus_key2, NULL, "%d",
+ sizeof(char *), bogus_str, NULL, ptr_fmt,
+ sizeof(char *), bogus_desc, NULL, ptr_fmt,
+ NULL);
+ do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+ sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
+ sizeof(short_type_str), short_type, NULL, NULL,
+ sizeof(short_desc_str), short_desc, NULL, NULL,
+ NULL);
+ do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
+ sizeof(int32_t), 0, NULL, "%d",
+ sizeof(long_type_str), long_type, NULL, NULL,
+ sizeof(long_type_str), long_desc, NULL, NULL,
+ NULL);
+
buf_in_arg = false;