diff --git a/cipher/cipher-gcm.c b/cipher/cipher-gcm.c
index a9c48551..08af44fa 100644
--- a/cipher/cipher-gcm.c
+++ b/cipher/cipher-gcm.c
@@ -977,6 +977,8 @@ _gcry_cipher_gcm_encrypt (gcry_cipher_hd_t c,
       || c->u_mode.gcm.ghash_data_finalized
       || !c->u_mode.gcm.ghash_fn)
     return GPG_ERR_INV_STATE;
+  if (!c->marks.iv && c->aead.geniv_method == 0)
+    return GPG_ERR_INV_STATE;
 
   if (!c->marks.iv)
     _gcry_cipher_gcm_setiv_zero (c);
@@ -1017,6 +1019,8 @@ _gcry_cipher_gcm_decrypt (gcry_cipher_hd_t c,
       || c->u_mode.gcm.ghash_data_finalized
       || !c->u_mode.gcm.ghash_fn)
     return GPG_ERR_INV_STATE;
+  if (!c->marks.iv && c->aead.geniv_method == 0)
+    return GPG_ERR_INV_STATE;
 
   if (!c->marks.iv)
     _gcry_cipher_gcm_setiv_zero (c);
@@ -1052,6 +1056,8 @@ _gcry_cipher_gcm_authenticate (gcry_cipher_hd_t c,
       || c->u_mode.gcm.ghash_data_finalized
       || !c->u_mode.gcm.ghash_fn)
     return GPG_ERR_INV_STATE;
+  if (!c->marks.iv && c->aead.geniv_method == 0)
+    return GPG_ERR_INV_STATE;
 
   if (!c->marks.iv)
     _gcry_cipher_gcm_setiv_zero (c);
