[PATCH] s390: CEX2A crt message length
authorEric Rossman <edrossma@us.ibm.com>
Fri, 24 Mar 2006 11:15:30 +0000 (03:15 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 24 Mar 2006 15:33:18 +0000 (07:33 -0800)
Undetected edge case for CRT messages to CEX2A caused length to be too short,
thus truncating the message.  The solution was to check a different variable
which actually determines which key type is being used.

Increment version number in z90main.c to correct level of 1.3.3, fix copyright
year and add comment about bitlength limit of CEX2A.

Signed-off-by: Eric Rossman <edrossma@us.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/s390/crypto/z90hardware.c
drivers/s390/crypto/z90main.c

index 4141919da8053c56b3db2e446c62fadbba11ed4e..be60795f4a7434a54781c735477e951bc15f13dc 100644 (file)
@@ -2214,7 +2214,7 @@ ICACRT_msg_to_type50CRT_msg(struct ica_rsa_modexpo_crt *icaMsg_p,
                long_len = 128;
        }
 
-       tmp_size = ((mod_len <= 128) ? TYPE50_CRB1_LEN : TYPE50_CRB2_LEN) +
+       tmp_size = ((long_len <= 64) ? TYPE50_CRB1_LEN : TYPE50_CRB2_LEN) +
                    CALLER_HEADER;
 
        memset(z90cMsg_p, 0, tmp_size);
@@ -2479,8 +2479,16 @@ convert_response(unsigned char *response, unsigned char *buffer,
 
        if (reply_code)
                switch (reply_code) {
+               case REP82_ERROR_MACHINE_FAILURE:
+                       if (errh_p->type == TYPE82_RSP_CODE)
+                               PRINTKW("Machine check failure\n");
+                       else
+                               PRINTKW("Module failure\n");
+                       return REC_HARDWAR_ERR;
                case REP82_ERROR_OPERAND_INVALID:
+                       return REC_OPERAND_INV;
                case REP88_ERROR_MESSAGE_MALFORMD:
+                       PRINTKW("Message malformed\n");
                        return REC_OPERAND_INV;
                case REP82_ERROR_OPERAND_SIZE:
                        return REC_OPERAND_SIZE;
index 7d6f19030ef97f013059cb52cb46b275ee92f7d4..977ecd9ba6bde8c83b7d8f96613047a262f7a854 100644 (file)
@@ -1,9 +1,9 @@
 /*
  *  linux/drivers/s390/crypto/z90main.c
  *
- *  z90crypt 1.3.2
+ *  z90crypt 1.3.3
  *
- *  Copyright (C)  2001, 2004 IBM Corporation
+ *  Copyright (C)  2001, 2005 IBM Corporation
  *  Author(s): Robert Burroughs (burrough@us.ibm.com)
  *             Eric Rossman (edrossma@us.ibm.com)
  *
@@ -991,6 +991,7 @@ remove_device(struct device *device_p)
  * PCIXCC_MCL2   512-2048     ----- (applying any GA LIC will make an MCL3 card)
  * PCIXCC_MCL3   -----        128-2048
  * CEX2C         512-2048     128-2048
+ * CEX2A          ??-2048     same (the lower limit is less than 128 bit...)
  *
  * ext_bitlens (extended bitlengths) is a global, since you should not apply an
  * MCL to just one card in a machine. We assume, at first, that all cards have