keys, trusted: fix: *do not* allow duplicate key options
authorJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Sat, 12 Dec 2015 11:19:52 +0000 (13:19 +0200)
committerJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Sun, 20 Dec 2015 13:27:12 +0000 (15:27 +0200)
The trusted keys option parsing allows specifying the same option
multiple times. The last option value specified is used.

This is problematic because:

* No gain.
* This makes complicated to specify options that are dependent on other
  options.

This patch changes the behavior in a way that option can be specified
only once.

Reported-by: James Morris James Morris <jmorris@namei.org>
Reviewed-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Acked-by: Peter Huewe <peterhuewe@gmx.de>
security/keys/trusted.c

index 903dace..7c183c7 100644 (file)
@@ -736,11 +736,14 @@ static int getoptions(char *c, struct trusted_key_payload *pay,
        int res;
        unsigned long handle;
        unsigned long lock;
+       unsigned long token_mask = 0;
 
        while ((p = strsep(&c, " \t"))) {
                if (*p == '\0' || *p == ' ' || *p == '\t')
                        continue;
                token = match_token(p, key_tokens, args);
+               if (test_and_set_bit(token, &token_mask))
+                       return -EINVAL;
 
                switch (token) {
                case Opt_pcrinfo: