All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] package/opensc: new package
@ 2021-12-13  6:15 José Pekkarinen
  2022-01-05 20:59 ` Thomas Petazzoni
  0 siblings, 1 reply; 5+ messages in thread
From: José Pekkarinen @ 2021-12-13  6:15 UTC (permalink / raw)
  To: buildroot; +Cc: José Pekkarinen

The patch will add opensc package.

Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
---
[ v1 -> v2 ] Fix hash file, and patches messages.

 DEVELOPERS                                    |   1 +
 package/Config.in                             |   1 +
 .../0001-Fix-maybe-uninitialized-errors.patch |  85 ++++++++++
 ...x-strict-aliasing-warnings-as-errors.patch | 154 ++++++++++++++++++
 package/opensc/Config.in                      |  11 ++
 package/opensc/opensc.hash                    |   5 +
 package/opensc/opensc.mk                      |  14 ++
 7 files changed, 271 insertions(+)
 create mode 100644 package/opensc/0001-Fix-maybe-uninitialized-errors.patch
 create mode 100644 package/opensc/0002-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 3023526427..854f6f2084 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1464,6 +1464,7 @@ F:	package/zfs/
 F:	support/testing/tests/package/test_zfs.py
 
 N:	José Pekkarinen <jose.pekkarinen@unikie.com>
+F:	package/opensc/
 F:	package/softhsm2/
 
 N:	Joseph Kogut <joseph.kogut@gmail.com>
diff --git a/package/Config.in b/package/Config.in
index 57208309c4..b5907d7fa3 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1620,6 +1620,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..d63f83ed4a
--- /dev/null
+++ b/package/opensc/0001-Fix-maybe-uninitialized-errors.patch
@@ -0,0 +1,85 @@
+From b74a624f21db3bfd45e0cb6ed017ceda9f29adfc 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
+
+Fix maybe uninitialized errors
+
+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 586475d..32a7674 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 = 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);
+diff --git a/src/pkcs15init/pkcs15-asepcos.c b/src/pkcs15init/pkcs15-asepcos.c
+index d712201..bc0efb5 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 d251495..749b163 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.30.2
+
diff --git a/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch b/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch
new file mode 100644
index 0000000000..3315689793
--- /dev/null
+++ b/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch
@@ -0,0 +1,154 @@
+From 5bb64ae9305bbe20bbf2f95dfdddb0966d7c9a50 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:56:22 +0200
+Subject: [PATCH] Fix strict aliasing warnings as errors
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fix strict aliasing warnings as errors
+
+PR: https://github.com/OpenSC/OpenSC/pull/2466
+
+Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
+---
+ src/libopensc/card-gids.c | 20 ++++++++++++--------
+ src/libopensc/card-gpk.c  | 11 ++++++-----
+ src/tools/gids-tool.c     |  3 ++-
+ 3 files changed, 20 insertions(+), 14 deletions(-)
+
+diff --git a/src/libopensc/card-gids.c b/src/libopensc/card-gids.c
+index f25e37d..17901cd 100644
+--- a/src/libopensc/card-gids.c
++++ b/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, size_t *recordsnum) {
+ // 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* card, sc_cardctl_gids_get_container_t* cont
+ 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 *card, sc_pkcs15_object_t *object) {
+ 	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 *card, sc_pkcs15_object_t *object) {
+ 
+ 	// 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_card_t *card, size_t containernum) {
+ 	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);
+diff --git a/src/libopensc/card-gpk.c b/src/libopensc/card-gpk.c
+index 983ab5b..8afb0ee 100644
+--- a/src/libopensc/card-gpk.c
++++ b/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 short int **pathptr, size_t *pathlen,
+ 
+ 	/* 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, unsigned int fid,
+ 	/* 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, unsigned int fid,
+ 			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 {
+diff --git a/src/tools/gids-tool.c b/src/tools/gids-tool.c
+index 1c9602b..eed4296 100644
+--- a/src/tools/gids-tool.c
++++ b/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));
+-- 
+2.30.2
+
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..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.30.2

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Buildroot] [PATCH] package/opensc: new package
  2021-12-13  6:15 [Buildroot] [PATCH] package/opensc: new package José Pekkarinen
@ 2022-01-05 20:59 ` Thomas Petazzoni
  2022-01-10  5:29   ` José Pekkarinen
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas Petazzoni @ 2022-01-05 20:59 UTC (permalink / raw)
  To: José Pekkarinen; +Cc: buildroot

Hello José,

On Mon, 13 Dec 2021 08:15:51 +0200
José Pekkarinen <jose.pekkarinen@unikie.com> wrote:

> The patch will add opensc package.
> 
> Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>

I'm afraid that when I read the feedback from upstream in your patches,
saying that they introduce memory leaks (and indeed they do), I'm not
really keen on merging this.

However, I saw you told upstream:

  It is a bit of a chiken and egg problem. Buildroot wants me to
  upstream the patches before the package would be accesible to you,
  you want me to give a testing case that doesn't come easy without
  upstreaming the package.

This is not totally correct for two reason:

 * we don't require patches to be accepted upstream, except if we have
   serious doubts about the patches.

 * the package doesn't have to be accepted in Buildroot upstream to
   provide an easy way for the opensc developers to reproduce the
   issue. You can provide a Buildroot branch on a public Git
   repository, with the opensc package, and a very simple
   opensc_demo_defconfig in configs/ that uses some external toolchain
   and builds just opensc to demonstrate the build failure. Then for
   the opensc people, reproducing is as easy as:

   git clone -b <yourbranch> git://your.repository.com
   cd buildroot/
   make opensc_demo_defconfig
   make

Could you resolve the remaining issues and send an updated patch? Also,
please remember to add a version to your patches when submitting, it
really makes things easier.

Best regards,

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] 5+ messages in thread

* Re: [Buildroot] [PATCH] package/opensc: new package
  2022-01-05 20:59 ` Thomas Petazzoni
@ 2022-01-10  5:29   ` José Pekkarinen
  0 siblings, 0 replies; 5+ messages in thread
From: José Pekkarinen @ 2022-01-10  5:29 UTC (permalink / raw)
  To: Thomas Petazzoni; +Cc: buildroot

On Wed, Jan 5, 2022 at 10:59 PM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:
>
> Hello José,
>
> On Mon, 13 Dec 2021 08:15:51 +0200
> José Pekkarinen <jose.pekkarinen@unikie.com> wrote:
>
> > The patch will add opensc package.
> >
> > Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
>
> I'm afraid that when I read the feedback from upstream in your patches,
> saying that they introduce memory leaks (and indeed they do), I'm not
> really keen on merging this.
>
> However, I saw you told upstream:
>
>   It is a bit of a chiken and egg problem. Buildroot wants me to
>   upstream the patches before the package would be accesible to you,
>   you want me to give a testing case that doesn't come easy without
>   upstreaming the package.
>
> This is not totally correct for two reason:
>
>  * we don't require patches to be accepted upstream, except if we have
>    serious doubts about the patches.
>
>  * the package doesn't have to be accepted in Buildroot upstream to
>    provide an easy way for the opensc developers to reproduce the
>    issue. You can provide a Buildroot branch on a public Git
>    repository, with the opensc package, and a very simple
>    opensc_demo_defconfig in configs/ that uses some external toolchain
>    and builds just opensc to demonstrate the build failure. Then for
>    the opensc people, reproducing is as easy as:
>
>    git clone -b <yourbranch> git://your.repository.com
>    cd buildroot/
>    make opensc_demo_defconfig
>    make
>
> Could you resolve the remaining issues and send an updated patch? Also,
> please remember to add a version to your patches when submitting, it
> really makes things easier.
>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, co-owner and CEO, Bootlin
> Embedded Linux and Kernel engineering and training
> https://bootlin.com

    Ack! Thanks for the comments!

    José.
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Buildroot] [PATCH] package/opensc: new package
  2021-12-13  6:11 José Pekkarinen
@ 2021-12-13  6:14 ` José Pekkarinen
  0 siblings, 0 replies; 5+ messages in thread
From: José Pekkarinen @ 2021-12-13  6:14 UTC (permalink / raw)
  To: buildroot

    Please ignore this, as it is not including everything
said in the version log.

    José.

On Mon, Dec 13, 2021 at 8:11 AM José Pekkarinen
<jose.pekkarinen@unikie.com> wrote:
>
> The patch will add opensc package.
>
> Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
> ---
> [ v1 -> v2 ] Fix hash file, and patches messages.
>  DEVELOPERS                                    |   1 +
>  package/Config.in                             |   1 +
>  .../0001-Fix-maybe-uninitialized-errors.patch |  83 ++++++++++
>  ...x-strict-aliasing-warnings-as-errors.patch | 152 ++++++++++++++++++
>  package/opensc/Config.in                      |  11 ++
>  package/opensc/opensc.hash                    |   5 +
>  package/opensc/opensc.mk                      |  14 ++
>  7 files changed, 267 insertions(+)
>  create mode 100644 package/opensc/0001-Fix-maybe-uninitialized-errors.patch
>  create mode 100644 package/opensc/0002-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 3023526427..854f6f2084 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1464,6 +1464,7 @@ F:        package/zfs/
>  F:     support/testing/tests/package/test_zfs.py
>
>  N:     José Pekkarinen <jose.pekkarinen@unikie.com>
> +F:     package/opensc/
>  F:     package/softhsm2/
>
>  N:     Joseph Kogut <joseph.kogut@gmail.com>
> diff --git a/package/Config.in b/package/Config.in
> index 57208309c4..b5907d7fa3 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -1620,6 +1620,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..702de42a40
> --- /dev/null
> +++ b/package/opensc/0001-Fix-maybe-uninitialized-errors.patch
> @@ -0,0 +1,83 @@
> +From b74a624f21db3bfd45e0cb6ed017ceda9f29adfc 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
> +
> +Fix maybe uninitialized errors
> +
> +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 586475d..32a7674 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 = 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);
> +diff --git a/src/pkcs15init/pkcs15-asepcos.c b/src/pkcs15init/pkcs15-asepcos.c
> +index d712201..bc0efb5 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 d251495..749b163 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.30.2
> +
> diff --git a/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch b/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch
> new file mode 100644
> index 0000000000..b71789cc9f
> --- /dev/null
> +++ b/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch
> @@ -0,0 +1,152 @@
> +From 5bb64ae9305bbe20bbf2f95dfdddb0966d7c9a50 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:56:22 +0200
> +Subject: [PATCH] Fix strict aliasing warnings as errors
> +MIME-Version: 1.0
> +Content-Type: text/plain; charset=UTF-8
> +Content-Transfer-Encoding: 8bit
> +
> +Fix strict aliasing warnings as errors
> +
> +Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
> +---
> + src/libopensc/card-gids.c | 20 ++++++++++++--------
> + src/libopensc/card-gpk.c  | 11 ++++++-----
> + src/tools/gids-tool.c     |  3 ++-
> + 3 files changed, 20 insertions(+), 14 deletions(-)
> +
> +diff --git a/src/libopensc/card-gids.c b/src/libopensc/card-gids.c
> +index f25e37d..17901cd 100644
> +--- a/src/libopensc/card-gids.c
> ++++ b/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, size_t *recordsnum) {
> + // 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* card, sc_cardctl_gids_get_container_t* cont
> + 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 *card, sc_pkcs15_object_t *object) {
> +       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 *card, sc_pkcs15_object_t *object) {
> +
> +       // 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_card_t *card, size_t containernum) {
> +       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);
> +diff --git a/src/libopensc/card-gpk.c b/src/libopensc/card-gpk.c
> +index 983ab5b..8afb0ee 100644
> +--- a/src/libopensc/card-gpk.c
> ++++ b/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 short int **pathptr, size_t *pathlen,
> +
> +       /* 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, unsigned int fid,
> +       /* 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, unsigned int fid,
> +                       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 {
> +diff --git a/src/tools/gids-tool.c b/src/tools/gids-tool.c
> +index 1c9602b..eed4296 100644
> +--- a/src/tools/gids-tool.c
> ++++ b/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));
> +--
> +2.30.2
> +
> 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..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.30.2
>


-- 

José.
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Buildroot] [PATCH] package/opensc: new package
@ 2021-12-13  6:11 José Pekkarinen
  2021-12-13  6:14 ` José Pekkarinen
  0 siblings, 1 reply; 5+ messages in thread
From: José Pekkarinen @ 2021-12-13  6:11 UTC (permalink / raw)
  To: buildroot; +Cc: José Pekkarinen

The patch will add opensc package.

Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
---
[ v1 -> v2 ] Fix hash file, and patches messages.
 DEVELOPERS                                    |   1 +
 package/Config.in                             |   1 +
 .../0001-Fix-maybe-uninitialized-errors.patch |  83 ++++++++++
 ...x-strict-aliasing-warnings-as-errors.patch | 152 ++++++++++++++++++
 package/opensc/Config.in                      |  11 ++
 package/opensc/opensc.hash                    |   5 +
 package/opensc/opensc.mk                      |  14 ++
 7 files changed, 267 insertions(+)
 create mode 100644 package/opensc/0001-Fix-maybe-uninitialized-errors.patch
 create mode 100644 package/opensc/0002-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 3023526427..854f6f2084 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1464,6 +1464,7 @@ F:	package/zfs/
 F:	support/testing/tests/package/test_zfs.py
 
 N:	José Pekkarinen <jose.pekkarinen@unikie.com>
+F:	package/opensc/
 F:	package/softhsm2/
 
 N:	Joseph Kogut <joseph.kogut@gmail.com>
diff --git a/package/Config.in b/package/Config.in
index 57208309c4..b5907d7fa3 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1620,6 +1620,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..702de42a40
--- /dev/null
+++ b/package/opensc/0001-Fix-maybe-uninitialized-errors.patch
@@ -0,0 +1,83 @@
+From b74a624f21db3bfd45e0cb6ed017ceda9f29adfc 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
+
+Fix maybe uninitialized errors
+
+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 586475d..32a7674 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 = 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);
+diff --git a/src/pkcs15init/pkcs15-asepcos.c b/src/pkcs15init/pkcs15-asepcos.c
+index d712201..bc0efb5 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 d251495..749b163 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.30.2
+
diff --git a/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch b/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch
new file mode 100644
index 0000000000..b71789cc9f
--- /dev/null
+++ b/package/opensc/0002-Fix-strict-aliasing-warnings-as-errors.patch
@@ -0,0 +1,152 @@
+From 5bb64ae9305bbe20bbf2f95dfdddb0966d7c9a50 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:56:22 +0200
+Subject: [PATCH] Fix strict aliasing warnings as errors
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fix strict aliasing warnings as errors
+
+Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
+---
+ src/libopensc/card-gids.c | 20 ++++++++++++--------
+ src/libopensc/card-gpk.c  | 11 ++++++-----
+ src/tools/gids-tool.c     |  3 ++-
+ 3 files changed, 20 insertions(+), 14 deletions(-)
+
+diff --git a/src/libopensc/card-gids.c b/src/libopensc/card-gids.c
+index f25e37d..17901cd 100644
+--- a/src/libopensc/card-gids.c
++++ b/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, size_t *recordsnum) {
+ // 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* card, sc_cardctl_gids_get_container_t* cont
+ 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 *card, sc_pkcs15_object_t *object) {
+ 	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 *card, sc_pkcs15_object_t *object) {
+ 
+ 	// 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_card_t *card, size_t containernum) {
+ 	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);
+diff --git a/src/libopensc/card-gpk.c b/src/libopensc/card-gpk.c
+index 983ab5b..8afb0ee 100644
+--- a/src/libopensc/card-gpk.c
++++ b/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 short int **pathptr, size_t *pathlen,
+ 
+ 	/* 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, unsigned int fid,
+ 	/* 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, unsigned int fid,
+ 			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 {
+diff --git a/src/tools/gids-tool.c b/src/tools/gids-tool.c
+index 1c9602b..eed4296 100644
+--- a/src/tools/gids-tool.c
++++ b/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));
+-- 
+2.30.2
+
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..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.30.2

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-01-10  5:29 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-13  6:15 [Buildroot] [PATCH] package/opensc: new package José Pekkarinen
2022-01-05 20:59 ` Thomas Petazzoni
2022-01-10  5:29   ` José Pekkarinen
  -- strict thread matches above, loose matches on Subject: below --
2021-12-13  6:11 José Pekkarinen
2021-12-13  6:14 ` 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.