Hi,

The output of the AES-GCM encryption or decryption  is corrupted if the buffer crosses a page boundary.
The culprit appears to be omap_crypto_cleanup(), scatterwalk_map_and_copy should only be called in the OMAP_CRYPTO_DATA_COPIED case.
Currently the copy is also done in the OMAP_CRYPTO_BAD_DATA_LENGTH, resulting in random kernel data in the user output buffer.

With the patch below, the operations are fine.

diff --git a/drivers/crypto/omap-crypto.c b/drivers/crypto/omap-crypto.c                                          
index 2c42e4b..cde56ea 100644                                                                                     
--- a/drivers/crypto/omap-crypto.c                                                                                
+++ b/drivers/crypto/omap-crypto.c                                                                                
@@ -173,7 +173,7 @@ void omap_crypto_cleanup(struct scatterlist *sg, struct scatterlist *orig,
        buf = sg_virt(sg);                                                                                        
        pages = get_order(len);                                                                                   
                                                                                                                  
-       if (orig && (flags & OMAP_CRYPTO_COPY_MASK))                                                              
+       if (orig && (flags & OMAP_CRYPTO_DATA_COPIED))                                                            
                scatterwalk_map_and_copy(buf, orig, offset, len, 1);                                              
                                                                                                                  
        if (flags & OMAP_CRYPTO_DATA_COPIED)