~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/crypto/asymmetric_keys/x509_loader.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 
  3 #include <linux/kernel.h>
  4 #include <linux/key.h>
  5 #include <keys/asymmetric-type.h>
  6 
  7 int x509_load_certificate_list(const u8 cert_list[],
  8                                const unsigned long list_size,
  9                                const struct key *keyring)
 10 {
 11         key_ref_t key;
 12         const u8 *p, *end;
 13         size_t plen;
 14 
 15         p = cert_list;
 16         end = p + list_size;
 17         while (p < end) {
 18                 /* Each cert begins with an ASN.1 SEQUENCE tag and must be more
 19                  * than 256 bytes in size.
 20                  */
 21                 if (end - p < 4)
 22                         goto dodgy_cert;
 23                 if (p[0] != 0x30 &&
 24                     p[1] != 0x82)
 25                         goto dodgy_cert;
 26                 plen = (p[2] << 8) | p[3];
 27                 plen += 4;
 28                 if (plen > end - p)
 29                         goto dodgy_cert;
 30 
 31                 key = key_create_or_update(make_key_ref(keyring, 1),
 32                                            "asymmetric",
 33                                            NULL,
 34                                            p,
 35                                            plen,
 36                                            ((KEY_POS_ALL & ~KEY_POS_SETATTR) |
 37                                            KEY_USR_VIEW | KEY_USR_READ),
 38                                            KEY_ALLOC_NOT_IN_QUOTA |
 39                                            KEY_ALLOC_BUILT_IN |
 40                                            KEY_ALLOC_BYPASS_RESTRICTION);
 41                 if (IS_ERR(key)) {
 42                         pr_err("Problem loading in-kernel X.509 certificate (%ld)\n",
 43                                PTR_ERR(key));
 44                 } else {
 45                         pr_notice("Loaded X.509 cert '%s'\n",
 46                                   key_ref_to_ptr(key)->description);
 47                         key_ref_put(key);
 48                 }
 49                 p += plen;
 50         }
 51 
 52         return 0;
 53 
 54 dodgy_cert:
 55         pr_err("Problem parsing in-kernel X.509 certificate list\n");
 56         return 0;
 57 }
 58 EXPORT_SYMBOL_GPL(x509_load_certificate_list);
 59 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php