* [Buildroot] [PATCH 1/1] package/freeipmi: fix static build with openipmi
@ 2022-01-29 11:07 Fabrice Fontaine
2022-01-30 17:07 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 2+ messages in thread
From: Fabrice Fontaine @ 2022-01-29 11:07 UTC (permalink / raw)
To: buildroot; +Cc: Fabrice Fontaine
Fix the following static build failure with openipmi raised since commit
8f6b346a34bdb344c4a001d8bd66f5e973013c17:
/home/peko/autobuild/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-musleabihf/10.3.0/../../../../arm-buildroot-linux-musleabihf/bin/ld: /home/peko/autobuild/instance-0/output-1/host/arm-buildroot-linux-musleabihf/sysroot/usr/lib/libfreeipmi.a(libfreeipmi_la-ipmi-md5.o): in function `md5_init':
ipmi-md5.c:(.text+0xa7c): multiple definition of `md5_init'; ../lib/.libs/libipmitool.a(md5.o):md5.c:(.text+0xab0): first defined here
Fixes:
- http://autobuild.buildroot.org/results/01b22faf08a798ecc5d5465e1c0c13fa024f1096
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
...-rename-md2-and-md5-functions-macros.patch | 695 ++++++++++++++++++
1 file changed, 695 insertions(+)
create mode 100644 package/freeipmi/0001-libfreeipmi-rename-md2-and-md5-functions-macros.patch
diff --git a/package/freeipmi/0001-libfreeipmi-rename-md2-and-md5-functions-macros.patch b/package/freeipmi/0001-libfreeipmi-rename-md2-and-md5-functions-macros.patch
new file mode 100644
index 0000000000..0de5b29c9c
--- /dev/null
+++ b/package/freeipmi/0001-libfreeipmi-rename-md2-and-md5-functions-macros.patch
@@ -0,0 +1,695 @@
+From 50eeda7f14c4eaa56aa86ba570a47557456544f2 Mon Sep 17 00:00:00 2001
+From: Albert Chu <chu11@llnl.gov>
+Date: Wed, 19 Jan 2022 11:55:55 -0800
+Subject: [PATCH] libfreeipmi: rename md2 and md5 functions / macros
+
+Static compilation with libfreeipmi can lead to problems if
+other software has similarly named md2/md5 functions
+(such as md5_init()). Prefix all macros and functions with
+'ipmi_' as needed. Update all callers accordingly.
+
+[Retrieved from:
+https://github.com/chu11/freeipmi-mirror/commit/50eeda7f14c4eaa56aa86ba570a47557456544f2]
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ ChangeLog | 11 ++
+ libfreeipmi/interface/ipmi-lan-interface.c | 48 +++----
+ .../interface/ipmi-rmcpplus-interface.c | 2 +-
+ libfreeipmi/libcommon/ipmi-md2.c | 72 +++++------
+ libfreeipmi/libcommon/ipmi-md2.h | 30 ++---
+ libfreeipmi/libcommon/ipmi-md5.c | 64 +++++-----
+ libfreeipmi/libcommon/ipmi-md5.h | 18 +--
+ libfreeipmi/util/ipmi-lan-util.c | 120 +++++++++---------
+ 8 files changed, 188 insertions(+), 177 deletions(-)
+
+diff --git a/ChangeLog b/ChangeLog
+index 883a195cf..60bf8c323 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,3 +1,14 @@
++2021-01-19 Albert Chu <chu11@llnl.gov>
++
++ * libfreeipmi/libcommon/ipmi-md2.h,
++ libfreeipmi/libcommon/ipmi-md2.c,
++ libfreeipmi/libcommon/ipmi-md5.h,
++ libfreeipmi/libcommon/ipmi-md5.c: Static compilation with
++ libfreeipmi can lead to problems if other software has similarly
++ named md2/md5 functions (such as md5_init()). Prefix all macros
++ and functions with 'ipmi_' as needed. Update all callers
++ accordingly.
++
+ 2022-01-18 Fabrice Fontaine <fontaine.fabrice@gmail.com>
+
+ * configure.ac: use pkg-config to find gcrypt
+diff --git a/libfreeipmi/interface/ipmi-lan-interface.c b/libfreeipmi/interface/ipmi-lan-interface.c
+index 20099d770..658be53e1 100644
+--- a/libfreeipmi/interface/ipmi-lan-interface.c
++++ b/libfreeipmi/interface/ipmi-lan-interface.c
+@@ -533,37 +533,37 @@ assemble_ipmi_lan_pkt (fiid_obj_t obj_rmcp_hdr,
+
+ if (authentication_type == IPMI_AUTHENTICATION_TYPE_MD2)
+ {
+- md2_t ctx;
+- uint8_t digest[MD2_DIGEST_LENGTH];
++ ipmi_md2_t ctx;
++ uint8_t digest[IPMI_MD2_DIGEST_LENGTH];
+
+- assert (IPMI_1_5_MAX_PASSWORD_LENGTH == MD2_DIGEST_LENGTH);
++ assert (IPMI_1_5_MAX_PASSWORD_LENGTH == IPMI_MD2_DIGEST_LENGTH);
+
+- md2_init (&ctx);
+- md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md2_update_data (&ctx, session_id_buf, session_id_len);
+- md2_update_data (&ctx, msg_data_ptr, msg_data_count);
+- md2_update_data (&ctx, session_sequence_number_buf, session_sequence_number_len);
+- md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md2_finish (&ctx, digest, MD2_DIGEST_LENGTH);
+- md2_init (&ctx);
++ ipmi_md2_init (&ctx);
++ ipmi_md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md2_update_data (&ctx, session_id_buf, session_id_len);
++ ipmi_md2_update_data (&ctx, msg_data_ptr, msg_data_count);
++ ipmi_md2_update_data (&ctx, session_sequence_number_buf, session_sequence_number_len);
++ ipmi_md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md2_finish (&ctx, digest, IPMI_MD2_DIGEST_LENGTH);
++ ipmi_md2_init (&ctx);
+
+ memcpy (authentication_code_field_ptr, digest, IPMI_1_5_MAX_PASSWORD_LENGTH);
+ }
+ else if (authentication_type == IPMI_AUTHENTICATION_TYPE_MD5)
+ {
+- md5_t ctx;
+- uint8_t digest[MD5_DIGEST_LENGTH];
+-
+- assert (IPMI_1_5_MAX_PASSWORD_LENGTH == MD5_DIGEST_LENGTH);
+-
+- md5_init (&ctx);
+- md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md5_update_data (&ctx, session_id_buf, session_id_len);
+- md5_update_data (&ctx, msg_data_ptr, msg_data_count);
+- md5_update_data (&ctx, session_sequence_number_buf, session_sequence_number_len);
+- md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md5_finish (&ctx, digest, MD5_DIGEST_LENGTH);
+- md5_init (&ctx);
++ ipmi_md5_t ctx;
++ uint8_t digest[IPMI_MD5_DIGEST_LENGTH];
++
++ assert (IPMI_1_5_MAX_PASSWORD_LENGTH == IPMI_MD5_DIGEST_LENGTH);
++
++ ipmi_md5_init (&ctx);
++ ipmi_md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md5_update_data (&ctx, session_id_buf, session_id_len);
++ ipmi_md5_update_data (&ctx, msg_data_ptr, msg_data_count);
++ ipmi_md5_update_data (&ctx, session_sequence_number_buf, session_sequence_number_len);
++ ipmi_md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md5_finish (&ctx, digest, IPMI_MD5_DIGEST_LENGTH);
++ ipmi_md5_init (&ctx);
+
+ memcpy (authentication_code_field_ptr, digest, IPMI_1_5_MAX_PASSWORD_LENGTH);
+ }
+diff --git a/libfreeipmi/interface/ipmi-rmcpplus-interface.c b/libfreeipmi/interface/ipmi-rmcpplus-interface.c
+index 1f462da7e..d1fd0753a 100644
+--- a/libfreeipmi/interface/ipmi-rmcpplus-interface.c
++++ b/libfreeipmi/interface/ipmi-rmcpplus-interface.c
+@@ -1134,7 +1134,7 @@ _construct_session_trlr_authentication_code (uint8_t integrity_algorithm,
+ {
+ hash_algorithm = IPMI_CRYPT_HASH_MD5;
+ hash_flags = 0;
+- expected_digest_len = MD5_DIGEST_LENGTH;
++ expected_digest_len = IPMI_MD5_DIGEST_LENGTH;
+ copy_digest_len = IPMI_MD5_128_AUTHENTICATION_CODE_LENGTH;
+ }
+ else /* IPMI_INTEGRITY_ALGORITHM_HMAC_SHA256_128 */
+diff --git a/libfreeipmi/libcommon/ipmi-md2.c b/libfreeipmi/libcommon/ipmi-md2.c
+index 6e9386be7..076b555bd 100644
+--- a/libfreeipmi/libcommon/ipmi-md2.c
++++ b/libfreeipmi/libcommon/ipmi-md2.c
+@@ -101,15 +101,15 @@ static unsigned char S[256] =
+ 0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14
+ };
+
+-#define L ctx->l
+-#define X ctx->x
+-#define C ctx->c
+-#define M ctx->m
+-#define Mlen ctx->mlen
+-#define MD2_MAGIC 0xf00fd00d
++#define L ctx->l
++#define X ctx->x
++#define C ctx->c
++#define M ctx->m
++#define Mlen ctx->mlen
++#define IPMI_MD2_MAGIC 0xf00fd00d
+
+ int
+-md2_init (md2_t *ctx)
++ipmi_md2_init (ipmi_md2_t *ctx)
+ {
+
+ if (ctx == NULL)
+@@ -118,26 +118,26 @@ md2_init (md2_t *ctx)
+ return (-1);
+ }
+
+- ctx->magic = MD2_MAGIC;
++ ctx->magic = IPMI_MD2_MAGIC;
+
+ L = 0;
+ Mlen = 0;
+- memset (X, '\0', MD2_BUFFER_LENGTH);
+- memset (C, '\0', MD2_CHKSUM_LENGTH);
+- memset (M, '\0', MD2_BLOCK_LENGTH);
++ memset (X, '\0', IPMI_MD2_BUFFER_LENGTH);
++ memset (C, '\0', IPMI_MD2_CHKSUM_LENGTH);
++ memset (M, '\0', IPMI_MD2_BLOCK_LENGTH);
+
+ return (0);
+ }
+
+ static void
+-_md2_update_digest_and_checksum (md2_t *ctx)
++_ipmi_md2_update_digest_and_checksum (ipmi_md2_t *ctx)
+ {
+ unsigned int j, k;
+ uint8_t c, t;
+
+ /* Update X */
+
+- for (j = 0; j < MD2_BLOCK_LENGTH; j++)
++ for (j = 0; j < IPMI_MD2_BLOCK_LENGTH; j++)
+ {
+ X[16+j] = M[j];
+ X[32+j] = (X[16+j] ^ X[j]);
+@@ -145,9 +145,9 @@ _md2_update_digest_and_checksum (md2_t *ctx)
+
+ t = 0;
+
+- for (j = 0; j < MD2_ROUNDS_LENGTH; j++)
++ for (j = 0; j < IPMI_MD2_ROUNDS_LENGTH; j++)
+ {
+- for (k = 0; k < MD2_BUFFER_LENGTH; k++)
++ for (k = 0; k < IPMI_MD2_BUFFER_LENGTH; k++)
+ {
+ t = X[k] = (X[k] ^ S[t]);
+ }
+@@ -166,7 +166,7 @@ _md2_update_digest_and_checksum (md2_t *ctx)
+ * Set C[j] to C[j] xor S[c xor L].
+ */
+
+- for (j = 0; j < MD2_BLOCK_LENGTH; j++)
++ for (j = 0; j < IPMI_MD2_BLOCK_LENGTH; j++)
+ {
+ c = M[j];
+ C[j] = C[j] ^ S[c ^ L];
+@@ -175,10 +175,10 @@ _md2_update_digest_and_checksum (md2_t *ctx)
+ }
+
+ int
+-md2_update_data (md2_t *ctx, const void *buf, unsigned int buflen)
++ipmi_md2_update_data (ipmi_md2_t *ctx, const void *buf, unsigned int buflen)
+ {
+
+- if (ctx == NULL || ctx->magic != MD2_MAGIC || buf == NULL)
++ if (ctx == NULL || ctx->magic != IPMI_MD2_MAGIC || buf == NULL)
+ {
+ errno = EINVAL;
+ return (-1);
+@@ -187,19 +187,19 @@ md2_update_data (md2_t *ctx, const void *buf, unsigned int buflen)
+ if (buflen == 0)
+ return (0);
+
+- if ((Mlen + buflen) >= MD2_BLOCK_LENGTH)
++ if ((Mlen + buflen) >= IPMI_MD2_BLOCK_LENGTH)
+ {
+ unsigned int bufcount;
+
+- bufcount = (MD2_BLOCK_LENGTH - Mlen);
++ bufcount = (IPMI_MD2_BLOCK_LENGTH - Mlen);
+ memcpy (M + Mlen, buf, bufcount);
+- _md2_update_digest_and_checksum (ctx);
++ _ipmi_md2_update_digest_and_checksum (ctx);
+
+- while ((buflen - bufcount) >= MD2_BLOCK_LENGTH)
++ while ((buflen - bufcount) >= IPMI_MD2_BLOCK_LENGTH)
+ {
+- memcpy (M, buf + bufcount, MD2_BLOCK_LENGTH);
+- bufcount += MD2_BLOCK_LENGTH;
+- _md2_update_digest_and_checksum (ctx);
++ memcpy (M, buf + bufcount, IPMI_MD2_BLOCK_LENGTH);
++ bufcount += IPMI_MD2_BLOCK_LENGTH;
++ _ipmi_md2_update_digest_and_checksum (ctx);
+ }
+
+ Mlen = buflen - bufcount;
+@@ -217,33 +217,33 @@ md2_update_data (md2_t *ctx, const void *buf, unsigned int buflen)
+ }
+
+ static void
+-_md2_append_padding_and_checksum (md2_t *ctx)
++_ipmi_md2_append_padding_and_checksum (ipmi_md2_t *ctx)
+ {
+ unsigned int padlen;
+ int padindex;
+
+- padlen = MD2_PADDING_LENGTH - Mlen;
++ padlen = IPMI_MD2_PADDING_LENGTH - Mlen;
+ padindex = padlen - 1;
+
+- md2_update_data (ctx, padding[padindex], padlen);
++ ipmi_md2_update_data (ctx, padding[padindex], padlen);
+
+- md2_update_data (ctx, C, MD2_CHKSUM_LENGTH);
++ ipmi_md2_update_data (ctx, C, IPMI_MD2_CHKSUM_LENGTH);
+ }
+
+ int
+-md2_finish (md2_t *ctx, void *digest, unsigned int digestlen)
++ipmi_md2_finish (ipmi_md2_t *ctx, void *digest, unsigned int digestlen)
+ {
+- if (ctx == NULL || ctx->magic != MD2_MAGIC
+- || digest == NULL || digestlen < MD2_DIGEST_LENGTH)
++ if (ctx == NULL || ctx->magic != IPMI_MD2_MAGIC
++ || digest == NULL || digestlen < IPMI_MD2_DIGEST_LENGTH)
+ {
+ errno = EINVAL;
+ return (-1);
+ }
+
+- _md2_append_padding_and_checksum (ctx);
+- memcpy (digest, X, MD2_DIGEST_LENGTH);
++ _ipmi_md2_append_padding_and_checksum (ctx);
++ memcpy (digest, X, IPMI_MD2_DIGEST_LENGTH);
+
+- ctx->magic = ~MD2_MAGIC;
+- return (MD2_DIGEST_LENGTH);
++ ctx->magic = ~IPMI_MD2_MAGIC;
++ return (IPMI_MD2_DIGEST_LENGTH);
+ }
+
+diff --git a/libfreeipmi/libcommon/ipmi-md2.h b/libfreeipmi/libcommon/ipmi-md2.h
+index c102fce2c..05328e85e 100644
+--- a/libfreeipmi/libcommon/ipmi-md2.h
++++ b/libfreeipmi/libcommon/ipmi-md2.h
+@@ -34,26 +34,26 @@
+
+ #include <stdint.h>
+
+-#define MD2_BLOCK_LENGTH 16
+-#define MD2_BUFFER_LENGTH 48
+-#define MD2_CHKSUM_LENGTH 16
+-#define MD2_DIGEST_LENGTH 16
+-#define MD2_PADDING_LENGTH 16
+-#define MD2_ROUNDS_LENGTH 18
+-
+-typedef struct __md2 {
++#define IPMI_MD2_BLOCK_LENGTH 16
++#define IPMI_MD2_BUFFER_LENGTH 48
++#define IPMI_MD2_CHKSUM_LENGTH 16
++#define IPMI_MD2_DIGEST_LENGTH 16
++#define IPMI_MD2_PADDING_LENGTH 16
++#define IPMI_MD2_ROUNDS_LENGTH 18
++
++typedef struct __ipmi_md2 {
+ uint32_t magic;
+ uint8_t l;
+ unsigned int mlen;
+- uint8_t x[MD2_BUFFER_LENGTH];
+- uint8_t c[MD2_CHKSUM_LENGTH];
+- uint8_t m[MD2_BLOCK_LENGTH];
+-} md2_t;
++ uint8_t x[IPMI_MD2_BUFFER_LENGTH];
++ uint8_t c[IPMI_MD2_CHKSUM_LENGTH];
++ uint8_t m[IPMI_MD2_BLOCK_LENGTH];
++} ipmi_md2_t;
+
+-int md2_init (md2_t *ctx);
++int ipmi_md2_init (ipmi_md2_t *ctx);
+
+-int md2_update_data (md2_t *ctx, const void *buf, unsigned int buflen);
++int ipmi_md2_update_data (ipmi_md2_t *ctx, const void *buf, unsigned int buflen);
+
+-int md2_finish (md2_t *ctx, void *digest, unsigned int digestlen);
++int ipmi_md2_finish (ipmi_md2_t *ctx, void *digest, unsigned int digestlen);
+
+ #endif /* IPMI_MD2_H */
+diff --git a/libfreeipmi/libcommon/ipmi-md5.c b/libfreeipmi/libcommon/ipmi-md5.c
+index 17073b85f..c84e350a6 100644
+--- a/libfreeipmi/libcommon/ipmi-md5.c
++++ b/libfreeipmi/libcommon/ipmi-md5.c
+@@ -92,7 +92,7 @@ static uint32_t T[64] =
+ #define D ctx->d
+ #define M ctx->m
+ #define Mlen ctx->mlen
+-#define MD5_MAGIC 0xfb0fdb0d
++#define IPMI_MD5_MAGIC 0xfb0fdb0d
+
+ #define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
+ #define G(x,y,z) (((x) & (z)) | ((y) & (~(z))))
+@@ -126,7 +126,7 @@ static uint32_t T[64] =
+ } while (0)
+
+ int
+-md5_init (md5_t *ctx)
++ipmi_md5_init (ipmi_md5_t *ctx)
+ {
+ if (ctx == NULL)
+ {
+@@ -134,13 +134,13 @@ md5_init (md5_t *ctx)
+ return (-1);
+ }
+
+- ctx->magic = MD5_MAGIC;
++ ctx->magic = IPMI_MD5_MAGIC;
+
+ Mlen = 0;
+ ctx->bytes_mod_64 = 0;
+ ctx->bit_count[0] = 0;
+ ctx->bit_count[1] = 0;
+- memset (M, '\0', MD5_BLOCK_LENGTH);
++ memset (M, '\0', IPMI_MD5_BLOCK_LENGTH);
+
+ /* initial values are listed low-order byte first */
+ A = 0x67452301;
+@@ -152,16 +152,16 @@ md5_init (md5_t *ctx)
+ }
+
+ static void
+-_md5_update_digest (md5_t *ctx)
++_ipmi_md5_update_digest (ipmi_md5_t *ctx)
+ {
+ uint32_t AA, BB, CC, DD;
+- uint32_t X[MD5_BLOCK_WORDS_LENGTH];
++ uint32_t X[IPMI_MD5_BLOCK_WORDS_LENGTH];
+ unsigned int j;
+
+ /* Note there are no endian issues here, compiler is required to
+ * handle shifts correctly
+ */
+- for (j = 0; j < MD5_BLOCK_WORDS_LENGTH; j++)
++ for (j = 0; j < IPMI_MD5_BLOCK_WORDS_LENGTH; j++)
+ X[j] = ((uint32_t)M[j*4]
+ | ((uint32_t)M[j*4+1] << 8)
+ | ((uint32_t)M[j*4+2] << 16)
+@@ -251,7 +251,7 @@ _md5_update_digest (md5_t *ctx)
+ }
+
+ static void
+-_md5_update_count (md5_t *ctx, unsigned int buflen)
++_ipmi_md5_update_count (ipmi_md5_t *ctx, unsigned int buflen)
+ {
+
+ /* Use two uint32_t integers to hold our 64 bit count.
+@@ -272,10 +272,10 @@ _md5_update_count (md5_t *ctx, unsigned int buflen)
+ }
+
+ int
+-md5_update_data (md5_t *ctx, const void *buf, unsigned int buflen)
++ipmi_md5_update_data (ipmi_md5_t *ctx, const void *buf, unsigned int buflen)
+ {
+
+- if (ctx == NULL || ctx->magic != MD5_MAGIC || buf == NULL)
++ if (ctx == NULL || ctx->magic != IPMI_MD5_MAGIC || buf == NULL)
+ {
+ errno = EINVAL;
+ return (-1);
+@@ -284,28 +284,28 @@ md5_update_data (md5_t *ctx, const void *buf, unsigned int buflen)
+ if (buflen == 0)
+ return (0);
+
+- if ((Mlen + buflen) >= MD5_BLOCK_LENGTH)
++ if ((Mlen + buflen) >= IPMI_MD5_BLOCK_LENGTH)
+ {
+ unsigned int bufcount;
+
+- bufcount = (MD5_BLOCK_LENGTH - Mlen);
++ bufcount = (IPMI_MD5_BLOCK_LENGTH - Mlen);
+ memcpy (M + Mlen, buf, bufcount);
+- _md5_update_digest (ctx);
+- _md5_update_count (ctx, bufcount);
++ _ipmi_md5_update_digest (ctx);
++ _ipmi_md5_update_count (ctx, bufcount);
+
+- while ((buflen - bufcount) >= MD5_BLOCK_LENGTH)
++ while ((buflen - bufcount) >= IPMI_MD5_BLOCK_LENGTH)
+ {
+- memcpy (M, buf + bufcount, MD5_BLOCK_LENGTH);
+- bufcount += MD5_BLOCK_LENGTH;
+- _md5_update_digest (ctx);
+- _md5_update_count (ctx, MD5_BLOCK_LENGTH);
++ memcpy (M, buf + bufcount, IPMI_MD5_BLOCK_LENGTH);
++ bufcount += IPMI_MD5_BLOCK_LENGTH;
++ _ipmi_md5_update_digest (ctx);
++ _ipmi_md5_update_count (ctx, IPMI_MD5_BLOCK_LENGTH);
+ }
+
+ Mlen = buflen - bufcount;
+ if (Mlen > 0)
+ {
+ memcpy (M, buf + bufcount, Mlen);
+- _md5_update_count (ctx, Mlen);
++ _ipmi_md5_update_count (ctx, Mlen);
+ }
+ }
+ else
+@@ -313,14 +313,14 @@ md5_update_data (md5_t *ctx, const void *buf, unsigned int buflen)
+ /* Not enough data to update digest, just copy in data */
+ memcpy (M + Mlen, buf, buflen);
+ Mlen += buflen;
+- _md5_update_count (ctx, buflen);
++ _ipmi_md5_update_count (ctx, buflen);
+ }
+
+ return (buflen);
+ }
+
+ static void
+-_md5_append_padding_and_length (md5_t *ctx)
++_ipmi_md5_append_padding_and_length (ipmi_md5_t *ctx)
+ {
+ unsigned int padlen;
+ char length[8];
+@@ -348,23 +348,23 @@ _md5_append_padding_and_length (md5_t *ctx)
+ length[6] = (ctx->bit_count[0] & 0x00ff0000) >> 16;
+ length[7] = (ctx->bit_count[0] & 0xff000000) >> 24;
+
+- md5_update_data (ctx, padding, padlen);
+- md5_update_data (ctx, length, 8);
++ ipmi_md5_update_data (ctx, padding, padlen);
++ ipmi_md5_update_data (ctx, length, 8);
+ }
+
+ int
+-md5_finish (md5_t *ctx, void *digest, unsigned int digestlen)
++ipmi_md5_finish (ipmi_md5_t *ctx, void *digest, unsigned int digestlen)
+ {
+- uint8_t buf[MD5_DIGEST_LENGTH];
++ uint8_t buf[IPMI_MD5_DIGEST_LENGTH];
+
+- if (ctx == NULL || ctx->magic != MD5_MAGIC
+- || digest == NULL || digestlen < MD5_DIGEST_LENGTH)
++ if (ctx == NULL || ctx->magic != IPMI_MD5_MAGIC
++ || digest == NULL || digestlen < IPMI_MD5_DIGEST_LENGTH)
+ {
+ errno = EINVAL;
+ return (-1);
+ }
+
+- _md5_append_padding_and_length (ctx);
++ _ipmi_md5_append_padding_and_length (ctx);
+
+ /* Note there are no endian issues here, compiler is required to
+ * handle bitmasks and shifts correctly
+@@ -387,7 +387,7 @@ md5_finish (md5_t *ctx, void *digest, unsigned int digestlen)
+ buf[14] = (D & 0x00ff0000) >> 16;
+ buf[15] = (D & 0xff000000) >> 24;
+
+- memcpy (digest, buf, MD5_DIGEST_LENGTH);
+- ctx->magic = ~MD5_MAGIC;
+- return (MD5_DIGEST_LENGTH);
++ memcpy (digest, buf, IPMI_MD5_DIGEST_LENGTH);
++ ctx->magic = ~IPMI_MD5_MAGIC;
++ return (IPMI_MD5_DIGEST_LENGTH);
+ }
+diff --git a/libfreeipmi/libcommon/ipmi-md5.h b/libfreeipmi/libcommon/ipmi-md5.h
+index 0f86f1754..6b863ef36 100644
+--- a/libfreeipmi/libcommon/ipmi-md5.h
++++ b/libfreeipmi/libcommon/ipmi-md5.h
+@@ -34,11 +34,11 @@
+
+ #include <stdint.h>
+
+-#define MD5_BLOCK_LENGTH 64
+-#define MD5_BLOCK_WORDS_LENGTH (MD5_BLOCK_LENGTH/4)
+-#define MD5_DIGEST_LENGTH 16
++#define IPMI_MD5_BLOCK_LENGTH 64
++#define IPMI_MD5_BLOCK_WORDS_LENGTH (IPMI_MD5_BLOCK_LENGTH/4)
++#define IPMI_MD5_DIGEST_LENGTH 16
+
+-typedef struct __md5 {
++typedef struct __ipmi_md5 {
+ uint32_t magic;
+ unsigned int mlen;
+ unsigned int bytes_mod_64;
+@@ -47,13 +47,13 @@ typedef struct __md5 {
+ uint32_t b;
+ uint32_t c;
+ uint32_t d;
+- uint8_t m[MD5_BLOCK_LENGTH];
+-} md5_t;
++ uint8_t m[IPMI_MD5_BLOCK_LENGTH];
++} ipmi_md5_t;
+
+-int md5_init (md5_t *ctx);
++int ipmi_md5_init (ipmi_md5_t *ctx);
+
+-int md5_update_data (md5_t *ctx, const void *buf, unsigned int buflen);
++int ipmi_md5_update_data (ipmi_md5_t *ctx, const void *buf, unsigned int buflen);
+
+-int md5_finish (md5_t *ctx, void *digest, unsigned int digestlen);
++int ipmi_md5_finish (ipmi_md5_t *ctx, void *digest, unsigned int digestlen);
+
+ #endif /* IPMI_MD5_H */
+diff --git a/libfreeipmi/util/ipmi-lan-util.c b/libfreeipmi/util/ipmi-lan-util.c
+index cd269fcb9..a374acc8d 100644
+--- a/libfreeipmi/util/ipmi-lan-util.c
++++ b/libfreeipmi/util/ipmi-lan-util.c
+@@ -281,33 +281,33 @@ ipmi_lan_check_session_authentication_code (fiid_obj_t obj_lan_session_hdr_rs,
+
+ if (authentication_type == IPMI_AUTHENTICATION_TYPE_MD2)
+ {
+- md2_t ctx;
+-
+- assert (IPMI_1_5_MAX_PASSWORD_LENGTH == MD2_DIGEST_LENGTH);
+-
+- md2_init (&ctx);
+- md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md2_update_data (&ctx, session_id_buf, session_id_len);
+- md2_update_data (&ctx, buf, len);
+- md2_update_data (&ctx, session_sequence_number_buf, session_sequence_number_len);
+- md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md2_finish (&ctx, authentication_code_calc, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md2_init (&ctx);
++ ipmi_md2_t ctx;
++
++ assert (IPMI_1_5_MAX_PASSWORD_LENGTH == IPMI_MD2_DIGEST_LENGTH);
++
++ ipmi_md2_init (&ctx);
++ ipmi_md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md2_update_data (&ctx, session_id_buf, session_id_len);
++ ipmi_md2_update_data (&ctx, buf, len);
++ ipmi_md2_update_data (&ctx, session_sequence_number_buf, session_sequence_number_len);
++ ipmi_md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md2_finish (&ctx, authentication_code_calc, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md2_init (&ctx);
+ }
+ else if (authentication_type == IPMI_AUTHENTICATION_TYPE_MD5)
+ {
+- md5_t ctx;
+-
+- assert (IPMI_1_5_MAX_PASSWORD_LENGTH == MD5_DIGEST_LENGTH);
+-
+- md5_init (&ctx);
+- md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md5_update_data (&ctx, session_id_buf, session_id_len);
+- md5_update_data (&ctx, buf, len);
+- md5_update_data (&ctx, session_sequence_number_buf, session_sequence_number_len);
+- md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md5_finish (&ctx, authentication_code_calc, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md5_init (&ctx);
++ ipmi_md5_t ctx;
++
++ assert (IPMI_1_5_MAX_PASSWORD_LENGTH == IPMI_MD5_DIGEST_LENGTH);
++
++ ipmi_md5_init (&ctx);
++ ipmi_md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md5_update_data (&ctx, session_id_buf, session_id_len);
++ ipmi_md5_update_data (&ctx, buf, len);
++ ipmi_md5_update_data (&ctx, session_sequence_number_buf, session_sequence_number_len);
++ ipmi_md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md5_finish (&ctx, authentication_code_calc, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md5_init (&ctx);
+ }
+ }
+
+@@ -451,45 +451,45 @@ ipmi_lan_check_packet_session_authentication_code (const void *pkt,
+ memcpy (pwbuf, authentication_code_data, authentication_code_data_len);
+ if (authentication_type == IPMI_AUTHENTICATION_TYPE_MD2)
+ {
+- md2_t ctx;
+-
+- assert (IPMI_1_5_MAX_PASSWORD_LENGTH == MD2_DIGEST_LENGTH);
+-
+- md2_init (&ctx);
+- md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md2_update_data (&ctx,
+- pkt + session_id_offset,
+- session_id_len);
+- md2_update_data (&ctx,
+- pkt + data_offset,
+- pkt_len - data_offset);
+- md2_update_data (&ctx,
+- pkt + session_sequence_number_offset,
+- session_sequence_number_len);
+- md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md2_finish (&ctx, authentication_code_buf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md2_init (&ctx);
++ ipmi_md2_t ctx;
++
++ assert (IPMI_1_5_MAX_PASSWORD_LENGTH == IPMI_MD2_DIGEST_LENGTH);
++
++ ipmi_md2_init (&ctx);
++ ipmi_md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md2_update_data (&ctx,
++ pkt + session_id_offset,
++ session_id_len);
++ ipmi_md2_update_data (&ctx,
++ pkt + data_offset,
++ pkt_len - data_offset);
++ ipmi_md2_update_data (&ctx,
++ pkt + session_sequence_number_offset,
++ session_sequence_number_len);
++ ipmi_md2_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md2_finish (&ctx, authentication_code_buf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md2_init (&ctx);
+ }
+ else if (authentication_type == IPMI_AUTHENTICATION_TYPE_MD5)
+ {
+- md5_t ctx;
+-
+- assert (IPMI_1_5_MAX_PASSWORD_LENGTH == MD5_DIGEST_LENGTH);
+-
+- md5_init (&ctx);
+- md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md5_update_data (&ctx,
+- pkt + session_id_offset,
+- session_id_len);
+- md5_update_data (&ctx,
+- pkt + data_offset,
+- pkt_len - data_offset);
+- md5_update_data (&ctx,
+- pkt + session_sequence_number_offset,
+- session_sequence_number_len);
+- md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md5_finish (&ctx, authentication_code_buf, IPMI_1_5_MAX_PASSWORD_LENGTH);
+- md5_init (&ctx);
++ ipmi_md5_t ctx;
++
++ assert (IPMI_1_5_MAX_PASSWORD_LENGTH == IPMI_MD5_DIGEST_LENGTH);
++
++ ipmi_md5_init (&ctx);
++ ipmi_md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md5_update_data (&ctx,
++ pkt + session_id_offset,
++ session_id_len);
++ ipmi_md5_update_data (&ctx,
++ pkt + data_offset,
++ pkt_len - data_offset);
++ ipmi_md5_update_data (&ctx,
++ pkt + session_sequence_number_offset,
++ session_sequence_number_len);
++ ipmi_md5_update_data (&ctx, pwbuf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md5_finish (&ctx, authentication_code_buf, IPMI_1_5_MAX_PASSWORD_LENGTH);
++ ipmi_md5_init (&ctx);
+ }
+ }
+ else /* authentication_type == IPMI_AUTHENTICATION_TYPE_STRAIGHT_PASSWORD_KEY
--
2.34.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [Buildroot] [PATCH 1/1] package/freeipmi: fix static build with openipmi
2022-01-29 11:07 [Buildroot] [PATCH 1/1] package/freeipmi: fix static build with openipmi Fabrice Fontaine
@ 2022-01-30 17:07 ` Thomas Petazzoni via buildroot
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Petazzoni via buildroot @ 2022-01-30 17:07 UTC (permalink / raw)
To: Fabrice Fontaine; +Cc: buildroot
On Sat, 29 Jan 2022 12:07:34 +0100
Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:
> Fix the following static build failure with openipmi raised since commit
> 8f6b346a34bdb344c4a001d8bd66f5e973013c17:
>
> /home/peko/autobuild/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-musleabihf/10.3.0/../../../../arm-buildroot-linux-musleabihf/bin/ld: /home/peko/autobuild/instance-0/output-1/host/arm-buildroot-linux-musleabihf/sysroot/usr/lib/libfreeipmi.a(libfreeipmi_la-ipmi-md5.o): in function `md5_init':
> ipmi-md5.c:(.text+0xa7c): multiple definition of `md5_init'; ../lib/.libs/libipmitool.a(md5.o):md5.c:(.text+0xab0): first defined here
>
> Fixes:
> - http://autobuild.buildroot.org/results/01b22faf08a798ecc5d5465e1c0c13fa024f1096
>
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
> ...-rename-md2-and-md5-functions-macros.patch | 695 ++++++++++++++++++
> 1 file changed, 695 insertions(+)
> create mode 100644 package/freeipmi/0001-libfreeipmi-rename-md2-and-md5-functions-macros.patch
Applied to master, thanks.
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-01-30 17:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-29 11:07 [Buildroot] [PATCH 1/1] package/freeipmi: fix static build with openipmi Fabrice Fontaine
2022-01-30 17:07 ` Thomas Petazzoni via buildroot
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.