* [Buildroot] [PATCH v3] package/opensc: new package
@ 2022-01-13 11:49 José Pekkarinen
2022-01-13 19:54 ` Thomas Petazzoni
0 siblings, 1 reply; 7+ messages in thread
From: José Pekkarinen @ 2022-01-13 11:49 UTC (permalink / raw)
To: buildroot; +Cc: José Pekkarinen
The patch will add package opensc. sourcery-arm
toolchain triggers strict aliasing rules that upstream
finds no easy way to fix. It is disabled for now until
a proper solution is found upstream.
Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
---
[ v1 -> v2 ] Fix hash file, and patches messages.
[ v2 -> v3 ]
- Remove strict aliasing patch
- Add approved patch for maybe uninitialized errors
- Disable sourcery-arm toolchain
DEVELOPERS | 1 +
package/Config.in | 1 +
.../0001-Fix-maybe-uninitialized-errors.patch | 83 +++++++++++++++++++
package/opensc/Config.in | 15 ++++
package/opensc/opensc.hash | 5 ++
package/opensc/opensc.mk | 14 ++++
6 files changed, 119 insertions(+)
create mode 100644 package/opensc/0001-Fix-maybe-uninitialized-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 55f37dfe62..45e7192e65 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1515,6 +1515,7 @@ F: support/testing/tests/package/test_zfs.py
N: José Pekkarinen <jose.pekkarinen@unikie.com>
F: package/alfred/
F: package/bmx7/
+F: package/opensc/
F: package/python-aexpect/
F: package/softhsm2/
F: support/testing/tests/package/sample_python_aexpect.py
diff --git a/package/Config.in b/package/Config.in
index a1924f96df..b40909ef89 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1643,6 +1643,7 @@ menu "Hardware handling"
source "package/mtdev/Config.in"
source "package/ne10/Config.in"
source "package/neardal/Config.in"
+ source "package/opensc/Config.in"
source "package/owfs/Config.in"
source "package/pcsc-lite/Config.in"
source "package/rpi-rgb-led-matrix/Config.in"
diff --git a/package/opensc/0001-Fix-maybe-uninitialized-errors.patch b/package/opensc/0001-Fix-maybe-uninitialized-errors.patch
new file mode 100644
index 0000000000..01b7a39818
--- /dev/null
+++ b/package/opensc/0001-Fix-maybe-uninitialized-errors.patch
@@ -0,0 +1,83 @@
+From bcb39d6f4d2dee6beb035cb2f3618174ec1cb2b0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Pekkarinen?= <jose.pekkarinen@unikie.com>
+Date: Fri, 10 Dec 2021 13:54:26 +0200
+Subject: [PATCH] Fix maybe uninitialized errors
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+PR: https://github.com/OpenSC/OpenSC/pull/2466
+
+Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
+---
+ src/libopensc/pkcs15-coolkey.c | 12 ++++++------
+ src/pkcs15init/pkcs15-asepcos.c | 2 +-
+ src/tools/opensc-explorer.c | 2 +-
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/libopensc/pkcs15-coolkey.c b/src/libopensc/pkcs15-coolkey.c
+index 586475dd..15684cef 100644
+--- a/src/libopensc/pkcs15-coolkey.c
++++ b/src/libopensc/pkcs15-coolkey.c
+@@ -147,9 +147,9 @@ coolkey_find_matching_cert(sc_card_t *card, sc_cardctl_coolkey_object_t *in_obj,
+ 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 = NULL;
++ 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 = NULL;
++ 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);
+diff --git a/src/pkcs15init/pkcs15-asepcos.c b/src/pkcs15init/pkcs15-asepcos.c
+index d7122012..bc0efb5c 100644
+--- a/src/pkcs15init/pkcs15-asepcos.c
++++ b/src/pkcs15init/pkcs15-asepcos.c
+@@ -221,7 +221,7 @@ static int asepcos_do_store_pin(sc_profile_t *profile, sc_card_t *card,
+ {
+ 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;
+diff --git a/src/tools/opensc-explorer.c b/src/tools/opensc-explorer.c
+index 9ec4daa1..04efdf8f 100644
+--- a/src/tools/opensc-explorer.c
++++ b/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];
+
+--
+2.25.1
+
diff --git a/package/opensc/Config.in b/package/opensc/Config.in
new file mode 100644
index 0000000000..5ee52d1de6
--- /dev/null
+++ b/package/opensc/Config.in
@@ -0,0 +1,15 @@
+config BR2_PACKAGE_OPENSC
+ bool "opensc"
+ depends on !BR2_STATIC_LIBS # dlopen()
+ depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
+ 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
+
+comment "opensc needs a toolchain with dynamic library support distinct from sourcery-arm"
+ depends on BR2_STATIC_LIBS || BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
diff --git a/package/opensc/opensc.hash b/package/opensc/opensc.hash
new file mode 100644
index 0000000000..517cfe503a
--- /dev/null
+++ b/package/opensc/opensc.hash
@@ -0,0 +1,5 @@
+# Computed locally 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.25.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Buildroot] [PATCH v3] package/opensc: new package
2022-01-13 11:49 [Buildroot] [PATCH v3] package/opensc: new package José Pekkarinen
@ 2022-01-13 19:54 ` Thomas Petazzoni
2022-01-13 20:22 ` Thomas Petazzoni
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2022-01-13 19:54 UTC (permalink / raw)
To: José Pekkarinen; +Cc: buildroot
Hello José,
On Thu, 13 Jan 2022 13:49:51 +0200
José Pekkarinen <jose.pekkarinen@unikie.com> wrote:
> diff --git a/package/opensc/Config.in b/package/opensc/Config.in
> new file mode 100644
> index 0000000000..5ee52d1de6
> --- /dev/null
> +++ b/package/opensc/Config.in
> @@ -0,0 +1,15 @@
> +config BR2_PACKAGE_OPENSC
> + bool "opensc"
> + depends on !BR2_STATIC_LIBS # dlopen()
> + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
Unfortunately, this is not acceptable. If it breaks with this
particular toolchain, it's also likely to break with other toolchains
that share similar characteristics (gcc version, etc.).
> + select BR2_PACKAGE_PCSC_LITE
> + select BR2_PACKAGE_OPENSSL
> + select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
Why do you force OpenSSL here? Is LibreSSL confirmed to not work with
opensc? If so, please add a comment above this select that explains
what explain is broken.
If you select BR2_PACKAGE_PCSC_LITE, you also need to inherit its
dependencies, i.e:
depends on BR2_TOOLCHAIN_HAS_THREADS
depends on BR2_USE_MMU # fork()
depends on !BR2_STATIC_LIBS
Thanks!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Buildroot] [PATCH v3] package/opensc: new package
2022-01-13 19:54 ` Thomas Petazzoni
@ 2022-01-13 20:22 ` Thomas Petazzoni
0 siblings, 0 replies; 7+ messages in thread
From: Thomas Petazzoni @ 2022-01-13 20:22 UTC (permalink / raw)
To: José Pekkarinen; +Cc: buildroot
Hello,
On Thu, 13 Jan 2022 20:54:37 +0100
Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:
> > + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
>
> Unfortunately, this is not acceptable. If it breaks with this
> particular toolchain, it's also likely to break with other toolchains
> that share similar characteristics (gcc version, etc.).
Just pass --disable-strict in OPENSC_CONF_OPTS, and opensc will nicely
build with the Sourcery toolchain.
> > + select BR2_PACKAGE_PCSC_LITE
> > + select BR2_PACKAGE_OPENSSL
> > + select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
>
> Why do you force OpenSSL here? Is LibreSSL confirmed to not work with
> opensc? If so, please add a comment above this select that explains
> what explain is broken.
I just tested the build with LibreSSL, and it works, so please drop
this BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL. Thanks!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Buildroot] [PATCH v3] package/opensc: new package
2021-11-25 7:22 José Pekkarinen
@ 2021-11-30 13:16 ` José Pekkarinen
0 siblings, 0 replies; 7+ messages in thread
From: José Pekkarinen @ 2021-11-30 13:16 UTC (permalink / raw)
To: buildroot
[-- Attachment #1.1: Type: text/plain, Size: 14917 bytes --]
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
>
>
--
José.
[-- Attachment #1.2: Type: text/html, Size: 18240 bytes --]
[-- Attachment #2: Type: text/plain, Size: 150 bytes --]
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Buildroot] [PATCH v3] package/opensc: new package
2021-11-25 7:27 José Pekkarinen
@ 2021-11-25 7:29 ` José Pekkarinen
0 siblings, 0 replies; 7+ messages in thread
From: José Pekkarinen @ 2021-11-25 7:29 UTC (permalink / raw)
To: José Pekkarinen, buildroot
[-- Attachment #1.1: Type: text/plain, Size: 14978 bytes --]
Hi,
Please ignore this last test, and consider v3 send
few minutes ago. Apologies for the confusion.
José.
On Thu, Nov 25, 2021 at 9:27 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
>
>
--
José.
[-- Attachment #1.2: Type: text/html, Size: 18211 bytes --]
[-- Attachment #2: Type: text/plain, Size: 150 bytes --]
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v3] package/opensc: new package
@ 2021-11-25 7:27 José Pekkarinen
2021-11-25 7:29 ` José Pekkarinen
0 siblings, 1 reply; 7+ messages in thread
From: José Pekkarinen @ 2021-11-25 7:27 UTC (permalink / raw)
To: jose.pekkarinen, buildroot
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
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v3] package/opensc: new package
@ 2021-11-25 7:22 José Pekkarinen
2021-11-30 13:16 ` José Pekkarinen
0 siblings, 1 reply; 7+ messages in thread
From: José Pekkarinen @ 2021-11-25 7:22 UTC (permalink / raw)
To: buildroot; +Cc: José Pekkarinen
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
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-01-13 20:22 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-13 11:49 [Buildroot] [PATCH v3] package/opensc: new package José Pekkarinen
2022-01-13 19:54 ` Thomas Petazzoni
2022-01-13 20:22 ` Thomas Petazzoni
-- strict thread matches above, loose matches on Subject: below --
2021-11-25 7:27 José Pekkarinen
2021-11-25 7:29 ` José Pekkarinen
2021-11-25 7:22 José Pekkarinen
2021-11-30 13:16 ` José Pekkarinen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.