From 6b060c1dc5486cbf51f13d168c442e7df116b26c Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Wed, 16 Jun 2010 22:57:16 +0200 Subject: Use current_euid() and task_pid_nr(current) to get identifiers for owners (for imposed limits). --- ncr.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'ncr.c') diff --git a/ncr.c b/ncr.c index da2144b..c7f5494 100644 --- a/ncr.c +++ b/ncr.c @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include "ncr.h" #include "ncr_int.h" @@ -76,6 +78,12 @@ void ncr_master_key_reset(void) static int ncr_master_key_set(void* __user arg) { struct ncr_master_key_st st; + + if (current_euid() != 0 && !capable(CAP_SYS_ADMIN)) { + err(); + return -EPERM; + } + copy_from_user(&st, arg, sizeof(st)); if (st.key_size > sizeof(master_key.key.secret.data)) { @@ -83,6 +91,10 @@ struct ncr_master_key_st st; return -EINVAL; } + if (master_key.type != NCR_KEY_TYPE_INVALID) { + dprintk(0, KERN_DEBUG, "Master key was previously initialized.\n"); + } + master_key.type = NCR_KEY_TYPE_SECRET; memcpy(master_key.key.secret.data, st.key, st.key_size); @@ -101,7 +113,7 @@ ncr_ioctl(struct ncr_lists* lst, struct file *filp, switch (cmd) { case NCRIO_DATA_INIT: - return ncr_data_init(filp, &lst->data, (void*)arg); + return ncr_data_init(&lst->data, (void*)arg); case NCRIO_DATA_GET: return ncr_data_get(&lst->data, (void*)arg); case NCRIO_DATA_SET: @@ -110,7 +122,7 @@ ncr_ioctl(struct ncr_lists* lst, struct file *filp, return ncr_data_deinit(&lst->data, (void*)arg); case NCRIO_KEY_INIT: - return ncr_key_init(filp, &lst->key, (void*)arg); + return ncr_key_init(&lst->key, (void*)arg); case NCRIO_KEY_DEINIT: return ncr_key_deinit(&lst->key, (void*)arg); case NCRIO_KEY_GENERATE: -- cgit