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
