laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/36501?usp=email )


Change subject: libosmosim: class_tables: Resolve conflicting CLA=8x INS=F2 
definitions
......................................................................

libosmosim: class_tables: Resolve conflicting CLA=8x INS=F2 definitions

In their infinite wisdom, GlobalPlatform re-defined the CLA 8x / INS F2 command
alreay specified by ETSI TS 102 221.  This wouldn't be as bads if they
had the same "Case".  However, ETSI has case 2 while GP has case 4.

Lucikly, the P1 coding of ETSI [so far] states all the four upper bits
must be 0, while GP always has one of those bits set.

Before this patch, it is possible that a Modem/Phone will send an 8xF2
command and intends it as a GlobalPlatform command (with Lc > 0 and
command data portion), while this code assumes it is an ETSI UICC
command with Lc=0 and hence no command data portion.  This will make
communication break when using simtrace2 'cardem'.

Change-Id: I8dd317ef8f942542e412b18c834a0467c51291c3
Related: SYS#6865
Related: 
https://lists.osmocom.org/hyperkitty/list/[email protected]/thread/HPRTPGPZITHHASCJISCBAKHGBFZCFANP/
---
M src/sim/class_tables.c
1 file changed, 41 insertions(+), 6 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/01/36501/1

diff --git a/src/sim/class_tables.c b/src/sim/class_tables.c
index 29c1e40..70fb75e 100644
--- a/src/sim/class_tables.c
+++ b/src/sim/class_tables.c
@@ -187,6 +187,16 @@
                default:
                        return 3;
                }
+               break;
+       case 0xF2:
+               /* in their infinite wisdom, GlobalPlatform re-defined the CLA 
8x / INS F2 command, so one can
+                * take a guess if it's GlobalPlatform or ETSI.  Lucikly, the 
P1 coding of ETSI [so far]
+                * states all the four upper bits must be 0, while GP always 
has one of those bits set */
+               if (p1 & 0xF0)
+                       return 4; /* GlobalPlatform v2.2 11.4.2 */
+               else
+                       return 2; /* ETSI TS 102 221 V16.2.0 11.1.2 */
+               break;
        }
        return 0;
 }
@@ -217,7 +227,7 @@
        [0xE2]          = 0x80, /* STORE DATA */
        [0xCA]          = 4,    /* GET DATA */
        [0xCB]          = 4,    /* GET DATA */
-       [0xF2]          = 4,    /* GET STATUS */
+       [0xF2]          = 0x80, /* GET STATUS */
        [0xE6]          = 4,    /* INSTALL */
        [0xE8]          = 4,    /* LOAD */
        [0xD8]          = 4,    /* PUT KEY */
@@ -246,6 +256,12 @@
                .helper         = uicc046_cla_ins_helper,
                .ins_tbl        = uicc_ins_tbl_046,
        }, {
+               /* must be before uicc_ins_tbl_8ce below with same CLA+mask */
+               .cla            = 0x80,
+               .cla_mask       = 0xF0,
+               .helper         = gp_cla_ins_helper,
+               .ins_tbl        = gp_ins_tbl_8ce,
+       }, {
                .cla            = 0x80,
                .cla_mask       = 0xF0,
                .ins_tbl        = uicc_ins_tbl_8ce,
@@ -258,11 +274,6 @@
                .cla_mask       = 0xF0,
                .ins_tbl        = uicc_ins_tbl_8ce,
        }, {
-               .cla            = 0x80,
-               .cla_mask       = 0xF0,
-               .helper         = gp_cla_ins_helper,
-               .ins_tbl        = gp_ins_tbl_8ce,
-       }, {
                .cla            = 0xC0,
                .cla_mask       = 0xF0,
                .helper         = gp_cla_ins_helper,

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/36501?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I8dd317ef8f942542e412b18c834a0467c51291c3
Gerrit-Change-Number: 36501
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <[email protected]>
Gerrit-MessageType: newchange

Reply via email to