Message ID | 20211125072240.2932-1-jose.pekkarinen@unikie.com |
---|---|
State | Superseded |
Headers | show |
Series | [v3] package/opensc: new package | expand |
Hi, Any comments in this patch? Thanks! José. On Thu, Nov 25, 2021 at 9:23 AM José Pekkarinen <jose.pekkarinen@unikie.com> wrote: > The patch will add a basic opensc package to build > on buildroot. > > Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com> > --- > [v1 -> v2] Addressed multiple comments from former rev > [v2 -> v3] Fixed warning of missing signed off patch > > DEVELOPERS | 1 + > package/Config.in | 1 + > ...ckage-opensc-fix-maybe-uninitialized.patch | 69 +++++++++ > ...x-strict-aliasing-warnings-as-errors.patch | 132 ++++++++++++++++++ > package/opensc/Config.in | 11 ++ > package/opensc/opensc.hash | 5 + > package/opensc/opensc.mk | 14 ++ > 7 files changed, 233 insertions(+) > create mode 100644 > package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch > create mode 100644 > package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch > create mode 100644 package/opensc/Config.in > create mode 100644 package/opensc/opensc.hash > create mode 100644 package/opensc/opensc.mk > > diff --git a/DEVELOPERS b/DEVELOPERS > index 70262eac8c..d92c38f07d 100644 > --- a/DEVELOPERS > +++ b/DEVELOPERS > @@ -1455,6 +1455,7 @@ F: support/testing/tests/package/test_zfs.py > > N: José Pekkarinen <jose.pekkarinen@unikie.com> > F: package/softhsm2/ > +F: package/opensc/ > > N: Joseph Kogut <joseph.kogut@gmail.com> > F: package/at-spi2-atk/ > diff --git a/package/Config.in b/package/Config.in > index e355ab1987..3cfcf372f3 100644 > --- a/package/Config.in > +++ b/package/Config.in > @@ -1617,6 +1617,7 @@ menu "Hardware handling" > source "package/tslib/Config.in" > source "package/uhd/Config.in" > source "package/urg/Config.in" > + source "package/opensc/Config.in" > endmenu > > menu "Javascript" > diff --git > a/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch > b/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch > new file mode 100644 > index 0000000000..1f6a2e6f42 > --- /dev/null > +++ b/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch > @@ -0,0 +1,69 @@ > +package:opensc: Fix maybe uninitialized issues > + > +This patch will fix some warning treated as errors > +that highlight maybe uninitialized variables. > + > +Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com> > +Index: opensc-0.22.0/src/pkcs15init/pkcs15-asepcos.c > +=================================================================== > +--- opensc-0.22.0.orig/src/pkcs15init/pkcs15-asepcos.c > ++++ opensc-0.22.0/src/pkcs15init/pkcs15-asepcos.c > +@@ -221,7 +221,7 @@ static int asepcos_do_store_pin(sc_profi > + { > + sc_file_t *nfile = NULL; > + u8 buf[64], sbuf[64], *p = buf, *q = sbuf; > +- int r, akn; > ++ int r, akn = 0; > + > + if (auth_info->auth_type != SC_PKCS15_PIN_AUTH_TYPE_PIN) > + return SC_ERROR_OBJECT_NOT_VALID; > +Index: opensc-0.22.0/src/libopensc/pkcs15-coolkey.c > +=================================================================== > +--- opensc-0.22.0.orig/src/libopensc/pkcs15-coolkey.c > ++++ opensc-0.22.0/src/libopensc/pkcs15-coolkey.c > +@@ -147,9 +147,9 @@ coolkey_find_matching_cert(sc_card_t *ca > + static int > + coolkey_get_attribute_ulong(sc_card_t *card, sc_cardctl_coolkey_object_t > *obj, CK_ATTRIBUTE_TYPE type, CK_ULONG *value) > + { > +- const u8 *val; > +- size_t val_len; > +- u8 data_type; > ++ const u8 *val = malloc(sizeof(u8)); > ++ size_t val_len = 0; > ++ u8 data_type = 0; > + int r; > + > + r = coolkey_get_attribute(card, obj, type, &val, &val_len, > &data_type); > +@@ -168,8 +168,8 @@ static int > + coolkey_get_attribute_boolean(sc_card_t *card, > sc_cardctl_coolkey_object_t *obj, CK_ATTRIBUTE_TYPE attr_type) > + { > + int r; > +- const u8 *val; > +- size_t val_len; > ++ const u8 *val = malloc(sizeof(u8)); > ++ size_t val_len = 0; > + > + r = coolkey_get_attribute(card, obj, attr_type, &val, &val_len, > NULL); > + if (r < 0) { > +@@ -186,7 +186,7 @@ static int > + coolkey_get_attribute_bytes(sc_card_t *card, sc_cardctl_coolkey_object_t > *obj, CK_ATTRIBUTE_TYPE type, u8 *data, size_t *data_len, size_t > max_data_len) > + { > + const u8 *val; > +- size_t val_len; > ++ size_t val_len = 0; > + int r; > + > + r = coolkey_get_attribute(card, obj, type, &val, &val_len, NULL); > +Index: opensc-0.22.0/src/tools/opensc-explorer.c > +=================================================================== > +--- opensc-0.22.0.orig/src/tools/opensc-explorer.c > ++++ opensc-0.22.0/src/tools/opensc-explorer.c > +@@ -2472,7 +2472,7 @@ int main(int argc, char *argv[]) > + char *line; > + int cargc; > + char *cargv[260]; > +- int multiple; > ++ int multiple = 0; > + struct command *cmd; > + char prompt[3*SC_MAX_PATH_STRING_SIZE]; > + > diff --git > a/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch > b/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch > new file mode 100644 > index 0000000000..e66fc21657 > --- /dev/null > +++ > b/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch > @@ -0,0 +1,132 @@ > +Index: opensc-0.22.0/src/libopensc/card-gids.c > +=================================================================== > +--- opensc-0.22.0.orig/src/libopensc/card-gids.c > ++++ opensc-0.22.0/src/libopensc/card-gids.c > +@@ -691,7 +691,8 @@ static int gids_finish(sc_card_t *card) > + // the cmap file is used to detect the key algorithm / size > + static int gids_get_crypto_identifier_from_key_ref(sc_card_t *card, > const unsigned char keyref, unsigned char *cryptoidentifier) { > + struct gids_private_data *data = (struct gids_private_data *) > card->drv_data; > +- PCONTAINER_MAP_RECORD records = (PCONTAINER_MAP_RECORD) > data->cmapfile; > ++ PCONTAINER_MAP_RECORD records = > malloc(sizeof(CONTAINER_MAP_RECORD)); > ++ memcpy(records, data->cmapfile, sizeof(CONTAINER_MAP_RECORD)); > + int recordsnum = (int) (data->cmapfilesize / > sizeof(CONTAINER_MAP_RECORD)); > + int index = keyref - GIDS_FIRST_KEY_IDENTIFIER; > + if (index >= recordsnum) { > +@@ -1112,10 +1113,10 @@ gids_get_all_containers(sc_card_t* card, > + // return the detail about a container to emulate a pkcs15 card > + static int > + gids_get_container_detail(sc_card_t* card, > sc_cardctl_gids_get_container_t* container) { > +- PCONTAINER_MAP_RECORD records = NULL; > ++ PCONTAINER_MAP_RECORD records = > malloc(sizeof(CONTAINER_MAP_RECORD)); > + struct gids_private_data *privatedata = (struct gids_private_data > *) card->drv_data; > + size_t recordsnum, num, i; > +- records = (PCONTAINER_MAP_RECORD) privatedata ->cmapfile; > ++ memcpy(records, privatedata->cmapfile, > sizeof(CONTAINER_MAP_RECORD)); > + recordsnum = (privatedata ->cmapfilesize / > sizeof(CONTAINER_MAP_RECORD)); > + > + num = container->containernum ; > +@@ -1158,7 +1159,8 @@ gids_get_container_detail(sc_card_t* car > + static int > + gids_select_key_reference(sc_card_t *card, sc_pkcs15_prkey_info_t* > key_info) { > + struct gids_private_data *data = (struct gids_private_data *) > card->drv_data; > +- PCONTAINER_MAP_RECORD records = (PCONTAINER_MAP_RECORD) > data->cmapfile; > ++ PCONTAINER_MAP_RECORD records = > malloc(sizeof(CONTAINER_MAP_RECORD)); > ++ memcpy(records, data->cmapfile, sizeof(CONTAINER_MAP_RECORD)); > + size_t recordsnum; > + int r; > + char ch_tmp[10]; > +@@ -1302,7 +1304,8 @@ static int gids_create_keyfile(sc_card_t > + struct gids_private_data *data = (struct gids_private_data *) > card->drv_data; > + size_t recordnum; > + size_t containernum = key_info->key_reference - > GIDS_FIRST_KEY_IDENTIFIER; > +- PCONTAINER_MAP_RECORD records = ((PCONTAINER_MAP_RECORD) > cmapbuffer) + containernum; > ++ PCONTAINER_MAP_RECORD records = > malloc(sizeof(CONTAINER_MAP_RECORD)); > ++ memcpy(records, cmapbuffer + containernum, > sizeof(CONTAINER_MAP_RECORD)); > + struct gids_keymap_record* keymaprecord = NULL; > + int i; > + > +@@ -1390,12 +1393,12 @@ static int gids_create_keyfile(sc_card_t > + > + // convert char to wchar > + for(i = 0; i < MAX_CONTAINER_NAME_LEN && object->label[i]; i++) { > +- records->wszGuid[i] = object->label[i]; > ++ records->wszGuid[i] = (unsigned short) object->label[i]; > + } > + > + // TODO: check if a container with the same name already exists > and prevent is creation or change its name > + > +- records->bFlags = CONTAINER_MAP_VALID_CONTAINER; > ++ records->bFlags = (unsigned char) CONTAINER_MAP_VALID_CONTAINER; > + if (recordnum == 0) { > + records->bFlags |= CONTAINER_MAP_DEFAULT_CONTAINER; > + } > +@@ -1638,7 +1641,8 @@ static int gids_delete_container_num(sc_ > + size_t keymaprecordnum = 0; > + struct gids_private_data *data = (struct gids_private_data *) > card->drv_data; > + size_t recordnum; > +- PCONTAINER_MAP_RECORD records = ((PCONTAINER_MAP_RECORD) > cmapbuffer) + containernum; > ++ PCONTAINER_MAP_RECORD records = > malloc(sizeof(CONTAINER_MAP_RECORD)); > ++ memcpy(records, cmapbuffer + containernum, > sizeof(CONTAINER_MAP_RECORD)); > + struct gids_keymap_record* keymaprecord = NULL; > + > + SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE); > +Index: opensc-0.22.0/src/libopensc/card-gpk.c > +=================================================================== > +--- opensc-0.22.0.orig/src/libopensc/card-gpk.c > ++++ opensc-0.22.0/src/libopensc/card-gpk.c > +@@ -228,11 +228,12 @@ static int > + match_path(sc_card_t *card, unsigned short int **pathptr, size_t > *pathlen, > + int need_info) > + { > +- unsigned short int *curptr, *ptr; > ++ u8 *curptr; > ++ unsigned short int *ptr; > + size_t curlen, len; > + size_t i; > + > +- curptr = (unsigned short int *) card->cache.current_path.value; > ++ curptr = (u8 *) card->cache.current_path.value; > + curlen = card->cache.current_path.len; > + ptr = *pathptr; > + len = *pathlen; > +@@ -242,7 +243,7 @@ match_path(sc_card_t *card, unsigned sho > + > + /* Make sure path starts with MF. > + * Note the cached path should always begin with MF. */ > +- if (ptr[0] != GPK_FID_MF || curptr[0] != GPK_FID_MF) > ++ if (ptr[0] != (GPK_FID_MF >> 8) || curptr[0] != (GPK_FID_MF >> 8)) > + return 0; > + > + for (i = 1; i < len && i < curlen; i++) { > +@@ -545,7 +546,7 @@ gpk_select_id(sc_card_t *card, int kind, > + /* Fix up the path cache. > + * NB we never cache the ID of an EF, just the DF path */ > + if (r == 0) { > +- unsigned short int *path; > ++ u8 *path; > + > + switch (kind) { > + case GPK_SEL_MF: > +@@ -555,7 +556,7 @@ gpk_select_id(sc_card_t *card, int kind, > + if (cp->len + 1 > SC_MAX_PATH_SIZE / 2) { > + return SC_ERROR_INTERNAL; > + } > +- path = (unsigned short int *) cp->value; > ++ path = (u8 *) cp->value; > + path[cp->len++] = fid; > + } > + } else { > +Index: opensc-0.22.0/src/tools/gids-tool.c > +=================================================================== > +--- opensc-0.22.0.orig/src/tools/gids-tool.c > ++++ opensc-0.22.0/src/tools/gids-tool.c > +@@ -401,7 +401,8 @@ static int print_info(sc_card_t *card) { > + if (cmapfilesize == sizeof(cmapfile)) { > + printf("Unable to find the container file > (mscp\\cmapfile)\n"); > + } else { > +- PCONTAINER_MAP_RECORD cmaprecords = > (PCONTAINER_MAP_RECORD) cmapfile; > ++ PCONTAINER_MAP_RECORD cmaprecords = > malloc(sizeof(CONTAINER_MAP_RECORD)); > ++ memcpy(cmaprecords, cmapfile, > sizeof(CONTAINER_MAP_RECORD)); > + int cmaprecordnum = (cmapfilesize / > sizeof(CONTAINER_MAP_RECORD)); > + int keymaprecordnum = -1; > + struct gids_keymap_record* keymaprecord = ((struct > gids_keymap_record*)(keymap +1)); > diff --git a/package/opensc/Config.in b/package/opensc/Config.in > new file mode 100644 > index 0000000000..d6b137a87f > --- /dev/null > +++ b/package/opensc/Config.in > @@ -0,0 +1,11 @@ > +config BR2_PACKAGE_OPENSC > + bool "opensc" > + depends on !BR2_STATIC_LIBS # dlopen() > + select BR2_PACKAGE_PCSC_LITE > + select BR2_PACKAGE_OPENSSL > + select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL > + help > + OpenSC provides a set of libraries and utilities to work > + with smart cards. > + > + https://github.com/OpenSC/OpenSC/wiki > diff --git a/package/opensc/opensc.hash b/package/opensc/opensc.hash > new file mode 100644 > index 0000000000..1e3472ba2a > --- /dev/null > +++ b/package/opensc/opensc.hash > @@ -0,0 +1,5 @@ > +# From https://https://github.com/OpenSC/OpenSC/releases/ > +sha256 8d4e5347195ebea332be585df61dcc470331c26969e4b0447c851fb0844c7186 > opensc-0.22.0.tar.gz > + > +# Computed locally > +sha256 376b54d4c5f4aa99421823fa4da93e3ab73096fce2400e89858632aa7da24a14 > COPYING > diff --git a/package/opensc/opensc.mk b/package/opensc/opensc.mk > new file mode 100644 > index 0000000000..7221eee944 > --- /dev/null > +++ b/package/opensc/opensc.mk > @@ -0,0 +1,14 @@ > > +################################################################################ > +# > +# opensc > +# > > +################################################################################ > + > +OPENSC_VERSION = 0.22.0 > +OPENSC_SITE = > https://github.com/OpenSC/OpenSC/releases/download/$(OPENSC_VERSION) > +OPENSC_LICENSE = LGPL-2.1+ > +OPENSC_LICENSE_FILES = COPYING > +OPENSC_DEPENDENCIES = openssl pcsc-lite > +OPENSC_INSTALL_STAGING = YES > + > +$(eval $(autotools-package)) > -- > 2.30.2 > >
diff --git a/DEVELOPERS b/DEVELOPERS index 70262eac8c..d92c38f07d 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -1455,6 +1455,7 @@ F: support/testing/tests/package/test_zfs.py N: José Pekkarinen <jose.pekkarinen@unikie.com> F: package/softhsm2/ +F: package/opensc/ N: Joseph Kogut <joseph.kogut@gmail.com> F: package/at-spi2-atk/ diff --git a/package/Config.in b/package/Config.in index e355ab1987..3cfcf372f3 100644 --- a/package/Config.in +++ b/package/Config.in @@ -1617,6 +1617,7 @@ menu "Hardware handling" source "package/tslib/Config.in" source "package/uhd/Config.in" source "package/urg/Config.in" + source "package/opensc/Config.in" endmenu menu "Javascript" diff --git a/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch b/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch new file mode 100644 index 0000000000..1f6a2e6f42 --- /dev/null +++ b/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch @@ -0,0 +1,69 @@ +package:opensc: Fix maybe uninitialized issues + +This patch will fix some warning treated as errors +that highlight maybe uninitialized variables. + +Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com> +Index: opensc-0.22.0/src/pkcs15init/pkcs15-asepcos.c +=================================================================== +--- opensc-0.22.0.orig/src/pkcs15init/pkcs15-asepcos.c ++++ opensc-0.22.0/src/pkcs15init/pkcs15-asepcos.c +@@ -221,7 +221,7 @@ static int asepcos_do_store_pin(sc_profi + { + sc_file_t *nfile = NULL; + u8 buf[64], sbuf[64], *p = buf, *q = sbuf; +- int r, akn; ++ int r, akn = 0; + + if (auth_info->auth_type != SC_PKCS15_PIN_AUTH_TYPE_PIN) + return SC_ERROR_OBJECT_NOT_VALID; +Index: opensc-0.22.0/src/libopensc/pkcs15-coolkey.c +=================================================================== +--- opensc-0.22.0.orig/src/libopensc/pkcs15-coolkey.c ++++ opensc-0.22.0/src/libopensc/pkcs15-coolkey.c +@@ -147,9 +147,9 @@ coolkey_find_matching_cert(sc_card_t *ca + static int + coolkey_get_attribute_ulong(sc_card_t *card, sc_cardctl_coolkey_object_t *obj, CK_ATTRIBUTE_TYPE type, CK_ULONG *value) + { +- const u8 *val; +- size_t val_len; +- u8 data_type; ++ const u8 *val = malloc(sizeof(u8)); ++ size_t val_len = 0; ++ u8 data_type = 0; + int r; + + r = coolkey_get_attribute(card, obj, type, &val, &val_len, &data_type); +@@ -168,8 +168,8 @@ static int + coolkey_get_attribute_boolean(sc_card_t *card, sc_cardctl_coolkey_object_t *obj, CK_ATTRIBUTE_TYPE attr_type) + { + int r; +- const u8 *val; +- size_t val_len; ++ const u8 *val = malloc(sizeof(u8)); ++ size_t val_len = 0; + + r = coolkey_get_attribute(card, obj, attr_type, &val, &val_len, NULL); + if (r < 0) { +@@ -186,7 +186,7 @@ static int + coolkey_get_attribute_bytes(sc_card_t *card, sc_cardctl_coolkey_object_t *obj, CK_ATTRIBUTE_TYPE type, u8 *data, size_t *data_len, size_t max_data_len) + { + const u8 *val; +- size_t val_len; ++ size_t val_len = 0; + int r; + + r = coolkey_get_attribute(card, obj, type, &val, &val_len, NULL); +Index: opensc-0.22.0/src/tools/opensc-explorer.c +=================================================================== +--- opensc-0.22.0.orig/src/tools/opensc-explorer.c ++++ opensc-0.22.0/src/tools/opensc-explorer.c +@@ -2472,7 +2472,7 @@ int main(int argc, char *argv[]) + char *line; + int cargc; + char *cargv[260]; +- int multiple; ++ int multiple = 0; + struct command *cmd; + char prompt[3*SC_MAX_PATH_STRING_SIZE]; + diff --git a/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch b/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch new file mode 100644 index 0000000000..e66fc21657 --- /dev/null +++ b/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch @@ -0,0 +1,132 @@ +Index: opensc-0.22.0/src/libopensc/card-gids.c +=================================================================== +--- opensc-0.22.0.orig/src/libopensc/card-gids.c ++++ opensc-0.22.0/src/libopensc/card-gids.c +@@ -691,7 +691,8 @@ static int gids_finish(sc_card_t *card) + // the cmap file is used to detect the key algorithm / size + static int gids_get_crypto_identifier_from_key_ref(sc_card_t *card, const unsigned char keyref, unsigned char *cryptoidentifier) { + struct gids_private_data *data = (struct gids_private_data *) card->drv_data; +- PCONTAINER_MAP_RECORD records = (PCONTAINER_MAP_RECORD) data->cmapfile; ++ PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD)); ++ memcpy(records, data->cmapfile, sizeof(CONTAINER_MAP_RECORD)); + int recordsnum = (int) (data->cmapfilesize / sizeof(CONTAINER_MAP_RECORD)); + int index = keyref - GIDS_FIRST_KEY_IDENTIFIER; + if (index >= recordsnum) { +@@ -1112,10 +1113,10 @@ gids_get_all_containers(sc_card_t* card, + // return the detail about a container to emulate a pkcs15 card + static int + gids_get_container_detail(sc_card_t* card, sc_cardctl_gids_get_container_t* container) { +- PCONTAINER_MAP_RECORD records = NULL; ++ PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD)); + struct gids_private_data *privatedata = (struct gids_private_data *) card->drv_data; + size_t recordsnum, num, i; +- records = (PCONTAINER_MAP_RECORD) privatedata ->cmapfile; ++ memcpy(records, privatedata->cmapfile, sizeof(CONTAINER_MAP_RECORD)); + recordsnum = (privatedata ->cmapfilesize / sizeof(CONTAINER_MAP_RECORD)); + + num = container->containernum ; +@@ -1158,7 +1159,8 @@ gids_get_container_detail(sc_card_t* car + static int + gids_select_key_reference(sc_card_t *card, sc_pkcs15_prkey_info_t* key_info) { + struct gids_private_data *data = (struct gids_private_data *) card->drv_data; +- PCONTAINER_MAP_RECORD records = (PCONTAINER_MAP_RECORD) data->cmapfile; ++ PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD)); ++ memcpy(records, data->cmapfile, sizeof(CONTAINER_MAP_RECORD)); + size_t recordsnum; + int r; + char ch_tmp[10]; +@@ -1302,7 +1304,8 @@ static int gids_create_keyfile(sc_card_t + struct gids_private_data *data = (struct gids_private_data *) card->drv_data; + size_t recordnum; + size_t containernum = key_info->key_reference - GIDS_FIRST_KEY_IDENTIFIER; +- PCONTAINER_MAP_RECORD records = ((PCONTAINER_MAP_RECORD) cmapbuffer) + containernum; ++ PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD)); ++ memcpy(records, cmapbuffer + containernum, sizeof(CONTAINER_MAP_RECORD)); + struct gids_keymap_record* keymaprecord = NULL; + int i; + +@@ -1390,12 +1393,12 @@ static int gids_create_keyfile(sc_card_t + + // convert char to wchar + for(i = 0; i < MAX_CONTAINER_NAME_LEN && object->label[i]; i++) { +- records->wszGuid[i] = object->label[i]; ++ records->wszGuid[i] = (unsigned short) object->label[i]; + } + + // TODO: check if a container with the same name already exists and prevent is creation or change its name + +- records->bFlags = CONTAINER_MAP_VALID_CONTAINER; ++ records->bFlags = (unsigned char) CONTAINER_MAP_VALID_CONTAINER; + if (recordnum == 0) { + records->bFlags |= CONTAINER_MAP_DEFAULT_CONTAINER; + } +@@ -1638,7 +1641,8 @@ static int gids_delete_container_num(sc_ + size_t keymaprecordnum = 0; + struct gids_private_data *data = (struct gids_private_data *) card->drv_data; + size_t recordnum; +- PCONTAINER_MAP_RECORD records = ((PCONTAINER_MAP_RECORD) cmapbuffer) + containernum; ++ PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD)); ++ memcpy(records, cmapbuffer + containernum, sizeof(CONTAINER_MAP_RECORD)); + struct gids_keymap_record* keymaprecord = NULL; + + SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE); +Index: opensc-0.22.0/src/libopensc/card-gpk.c +=================================================================== +--- opensc-0.22.0.orig/src/libopensc/card-gpk.c ++++ opensc-0.22.0/src/libopensc/card-gpk.c +@@ -228,11 +228,12 @@ static int + match_path(sc_card_t *card, unsigned short int **pathptr, size_t *pathlen, + int need_info) + { +- unsigned short int *curptr, *ptr; ++ u8 *curptr; ++ unsigned short int *ptr; + size_t curlen, len; + size_t i; + +- curptr = (unsigned short int *) card->cache.current_path.value; ++ curptr = (u8 *) card->cache.current_path.value; + curlen = card->cache.current_path.len; + ptr = *pathptr; + len = *pathlen; +@@ -242,7 +243,7 @@ match_path(sc_card_t *card, unsigned sho + + /* Make sure path starts with MF. + * Note the cached path should always begin with MF. */ +- if (ptr[0] != GPK_FID_MF || curptr[0] != GPK_FID_MF) ++ if (ptr[0] != (GPK_FID_MF >> 8) || curptr[0] != (GPK_FID_MF >> 8)) + return 0; + + for (i = 1; i < len && i < curlen; i++) { +@@ -545,7 +546,7 @@ gpk_select_id(sc_card_t *card, int kind, + /* Fix up the path cache. + * NB we never cache the ID of an EF, just the DF path */ + if (r == 0) { +- unsigned short int *path; ++ u8 *path; + + switch (kind) { + case GPK_SEL_MF: +@@ -555,7 +556,7 @@ gpk_select_id(sc_card_t *card, int kind, + if (cp->len + 1 > SC_MAX_PATH_SIZE / 2) { + return SC_ERROR_INTERNAL; + } +- path = (unsigned short int *) cp->value; ++ path = (u8 *) cp->value; + path[cp->len++] = fid; + } + } else { +Index: opensc-0.22.0/src/tools/gids-tool.c +=================================================================== +--- opensc-0.22.0.orig/src/tools/gids-tool.c ++++ opensc-0.22.0/src/tools/gids-tool.c +@@ -401,7 +401,8 @@ static int print_info(sc_card_t *card) { + if (cmapfilesize == sizeof(cmapfile)) { + printf("Unable to find the container file (mscp\\cmapfile)\n"); + } else { +- PCONTAINER_MAP_RECORD cmaprecords = (PCONTAINER_MAP_RECORD) cmapfile; ++ PCONTAINER_MAP_RECORD cmaprecords = malloc(sizeof(CONTAINER_MAP_RECORD)); ++ memcpy(cmaprecords, cmapfile, sizeof(CONTAINER_MAP_RECORD)); + int cmaprecordnum = (cmapfilesize / sizeof(CONTAINER_MAP_RECORD)); + int keymaprecordnum = -1; + struct gids_keymap_record* keymaprecord = ((struct gids_keymap_record*)(keymap +1)); diff --git a/package/opensc/Config.in b/package/opensc/Config.in new file mode 100644 index 0000000000..d6b137a87f --- /dev/null +++ b/package/opensc/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_OPENSC + bool "opensc" + depends on !BR2_STATIC_LIBS # dlopen() + select BR2_PACKAGE_PCSC_LITE + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL + help + OpenSC provides a set of libraries and utilities to work + with smart cards. + + https://github.com/OpenSC/OpenSC/wiki diff --git a/package/opensc/opensc.hash b/package/opensc/opensc.hash new file mode 100644 index 0000000000..1e3472ba2a --- /dev/null +++ b/package/opensc/opensc.hash @@ -0,0 +1,5 @@ +# From https://https://github.com/OpenSC/OpenSC/releases/ +sha256 8d4e5347195ebea332be585df61dcc470331c26969e4b0447c851fb0844c7186 opensc-0.22.0.tar.gz + +# Computed locally +sha256 376b54d4c5f4aa99421823fa4da93e3ab73096fce2400e89858632aa7da24a14 COPYING diff --git a/package/opensc/opensc.mk b/package/opensc/opensc.mk new file mode 100644 index 0000000000..7221eee944 --- /dev/null +++ b/package/opensc/opensc.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# opensc +# +################################################################################ + +OPENSC_VERSION = 0.22.0 +OPENSC_SITE = https://github.com/OpenSC/OpenSC/releases/download/$(OPENSC_VERSION) +OPENSC_LICENSE = LGPL-2.1+ +OPENSC_LICENSE_FILES = COPYING +OPENSC_DEPENDENCIES = openssl pcsc-lite +OPENSC_INSTALL_STAGING = YES + +$(eval $(autotools-package))
The patch will add a basic opensc package to build on buildroot. Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com> --- [v1 -> v2] Addressed multiple comments from former rev [v2 -> v3] Fixed warning of missing signed off patch DEVELOPERS | 1 + package/Config.in | 1 + ...ckage-opensc-fix-maybe-uninitialized.patch | 69 +++++++++ ...x-strict-aliasing-warnings-as-errors.patch | 132 ++++++++++++++++++ package/opensc/Config.in | 11 ++ package/opensc/opensc.hash | 5 + package/opensc/opensc.mk | 14 ++ 7 files changed, 233 insertions(+) create mode 100644 package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch create mode 100644 package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch create mode 100644 package/opensc/Config.in create mode 100644 package/opensc/opensc.hash create mode 100644 package/opensc/opensc.mk