len = crypto_akcipher_maxsize(tfm);
        info->key_size = len * 8;
-       info->max_data_size = len;
-       info->max_sig_size = len;
+
+       if (strncmp(pkey->pkey_algo, "ecdsa", 5) == 0) {
+               /*
+                * ECDSA key sizes are much smaller than RSA, and thus could
+                * operate on (hashed) inputs that are larger than key size.
+                * For example SHA384-hashed input used with secp256r1
+                * based keys.  Set max_data_size to be at least as large as
+                * the largest supported hash size (SHA512)
+                */
+               info->max_data_size = 64;
+
+               /*
+                * Verify takes ECDSA-Sig (described in RFC 5480) as input,
+                * which is actually 2 'key_size'-bit integers encoded in
+                * ASN.1.  Account for the ASN.1 encoding overhead here.
+                */
+               info->max_sig_size = 2 * (len + 3) + 2;
+       } else {
+               info->max_data_size = len;
+               info->max_sig_size = len;
+       }
+
        info->max_enc_size = len;
        info->max_dec_size = len;
        info->supported_ops = (KEYCTL_SUPPORTS_ENCRYPT |