crypto: caam - fix offset field in hw sg entries
authorCristian Stoica <cristian.stoica@freescale.com>
Thu, 19 May 2016 15:11:18 +0000 (18:11 +0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 31 May 2016 08:41:53 +0000 (16:41 +0800)
The offset field is 13 bits wide; make sure we don't overwrite more than
that in the caam hardware scatter gather structure.

Signed-off-by: Cristian Stoica <cristian.stoica@freescale.com>
Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/desc.h
drivers/crypto/caam/sg_sw_sec4.h

index 1e93c6af2275b834f460d7a825bf56d4830946f3..fe30ff69088ceda0431d816499e97893a0da7e34 100644 (file)
@@ -20,7 +20,7 @@
 #define SEC4_SG_BPID_MASK      0x000000ff
 #define SEC4_SG_BPID_SHIFT     16
 #define SEC4_SG_LEN_MASK       0x3fffffff      /* Excludes EXT and FINAL */
-#define SEC4_SG_OFFS_MASK      0x00001fff
+#define SEC4_SG_OFFSET_MASK    0x00001fff
 
 struct sec4_sg_entry {
 #ifdef CONFIG_CRYPTO_DEV_FSL_CAAM_IMX
index 12ec6616e89d130f6b5719acb3c3f054a96018ea..2311341b7356977d7ec1271ee48e8c9ff2a9366e 100644 (file)
@@ -11,12 +11,12 @@ struct sec4_sg_entry;
  * convert single dma address to h/w link table format
  */
 static inline void dma_to_sec4_sg_one(struct sec4_sg_entry *sec4_sg_ptr,
-                                     dma_addr_t dma, u32 len, u32 offset)
+                                     dma_addr_t dma, u32 len, u16 offset)
 {
        sec4_sg_ptr->ptr = dma;
        sec4_sg_ptr->len = len;
        sec4_sg_ptr->buf_pool_id = 0;
-       sec4_sg_ptr->offset = offset;
+       sec4_sg_ptr->offset = offset & SEC4_SG_OFFSET_MASK;
 #ifdef DEBUG
        print_hex_dump(KERN_ERR, "sec4_sg_ptr@: ",
                       DUMP_PREFIX_ADDRESS, 16, 4, sec4_sg_ptr,
@@ -30,7 +30,7 @@ static inline void dma_to_sec4_sg_one(struct sec4_sg_entry *sec4_sg_ptr,
  */
 static inline struct sec4_sg_entry *
 sg_to_sec4_sg(struct scatterlist *sg, int sg_count,
-             struct sec4_sg_entry *sec4_sg_ptr, u32 offset)
+             struct sec4_sg_entry *sec4_sg_ptr, u16 offset)
 {
        while (sg_count) {
                dma_to_sec4_sg_one(sec4_sg_ptr, sg_dma_address(sg),
@@ -48,7 +48,7 @@ sg_to_sec4_sg(struct scatterlist *sg, int sg_count,
  */
 static inline void sg_to_sec4_sg_last(struct scatterlist *sg, int sg_count,
                                      struct sec4_sg_entry *sec4_sg_ptr,
-                                     u32 offset)
+                                     u16 offset)
 {
        sec4_sg_ptr = sg_to_sec4_sg(sg, sg_count, sec4_sg_ptr, offset);
        sec4_sg_ptr->len |= SEC4_SG_LEN_FIN;