opt->pcrinfo_len = strlen(args[0].from) / 2;
                        if (opt->pcrinfo_len > MAX_PCRINFO_SIZE)
                                return -EINVAL;
-                       hex2bin(opt->pcrinfo, args[0].from, opt->pcrinfo_len);
+                       res = hex2bin(opt->pcrinfo, args[0].from,
+                                     opt->pcrinfo_len);
+                       if (res < 0)
+                               return -EINVAL;
                        break;
                case Opt_keyhandle:
                        res = strict_strtoul(args[0].from, 16, &handle);
                case Opt_keyauth:
                        if (strlen(args[0].from) != 2 * SHA1_DIGEST_SIZE)
                                return -EINVAL;
-                       hex2bin(opt->keyauth, args[0].from, SHA1_DIGEST_SIZE);
+                       res = hex2bin(opt->keyauth, args[0].from,
+                                     SHA1_DIGEST_SIZE);
+                       if (res < 0)
+                               return -EINVAL;
                        break;
                case Opt_blobauth:
                        if (strlen(args[0].from) != 2 * SHA1_DIGEST_SIZE)
                                return -EINVAL;
-                       hex2bin(opt->blobauth, args[0].from, SHA1_DIGEST_SIZE);
+                       res = hex2bin(opt->blobauth, args[0].from,
+                                     SHA1_DIGEST_SIZE);
+                       if (res < 0)
+                               return -EINVAL;
                        break;
                case Opt_migratable:
                        if (*args[0].from == '0')
                p->blob_len = strlen(c) / 2;
                if (p->blob_len > MAX_BLOB_SIZE)
                        return -EINVAL;
-               hex2bin(p->blob, c, p->blob_len);
+               ret = hex2bin(p->blob, c, p->blob_len);
+               if (ret < 0)
+                       return -EINVAL;
                ret = getoptions(datablob, p, o);
                if (ret < 0)
                        return ret;