From: Mark Hatle <mark.hatle@windriver.com>
To: <openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH V2] rpm: fix a endian incompatible error in generating tag
Date: Tue, 18 Feb 2014 11:49:11 -0600 [thread overview]
Message-ID: <53039D17.6040106@windriver.com> (raw)
In-Reply-To: <1392626895-14981-1-git-send-email-ming.liu@windriver.com>
On 2/17/14, 2:48 AM, Ming Liu wrote:
> A flaw was found in the way rpm generating arbitrary tags, which leads to a
> incorrect query result, this issue is introduced by a incompatible endianess
> when the generating process is executed on different architectures.
>
> This patch resolves it by taking the byte order that host uses.
>
> Signed-off-by: Ming Liu <ming.liu@windriver.com>
This looks reasonable to me as well.
Reviewed-by: Mark Hatle <mark.hatle@windriver.com>
> ---
> .../rpm-tag-generate-endian-conversion-fix.patch | 49 ++++++++++++++++++++
> meta/recipes-devtools/rpm/rpm_5.4.9.bb | 1 +
> 2 files changed, 50 insertions(+), 0 deletions(-)
> create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-tag-generate-endian-conversion-fix.patch
>
> diff --git a/meta/recipes-devtools/rpm/rpm/rpm-tag-generate-endian-conversion-fix.patch b/meta/recipes-devtools/rpm/rpm/rpm-tag-generate-endian-conversion-fix.patch
> new file mode 100644
> index 0000000..e487b82
> --- /dev/null
> +++ b/meta/recipes-devtools/rpm/rpm/rpm-tag-generate-endian-conversion-fix.patch
> @@ -0,0 +1,49 @@
> +fix a endian incompatible error in generating rpm tag
> +
> +A flaw was found in the way rpm generating arbitrary tags, which leads to a
> +incorrect query result, this issue is introduced by a incompatible endianess
> +when the generating process is executed on different architectures.
> +
> +This patch resolves it by taking the byte order that host uses.
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Ming Liu <ming.liu@windriver.com>
> +---
> + tagname.c | 16 ++++++++++++++++
> + 1 file changed, 16 insertions(+)
> +
> +diff -urpN a/rpmdb/tagname.c b/rpmdb/tagname.c
> +--- a/rpmdb/tagname.c
> ++++ b/rpmdb/tagname.c
> +@@ -3,6 +3,19 @@
> + */
> +
> + #include "system.h"
> ++#include <endian.h>
> ++
> ++/* Don't redefine this macro if it already exists */
> ++#ifndef le32toh
> ++#ifdef __USE_BSD
> ++#include <byteswap.h>
> ++#if __BYTE_ORDER == __LITTLE_ENDIAN
> ++#define le32toh(x) (x)
> ++#else
> ++#define le32toh(x) __bswap_32(x)
> ++#endif
> ++#endif /* __USE_BSD */
> ++#endif /* le32toh */
> +
> + #include <rpmio_internal.h> /* XXX DIGEST_CTX, xtolower, xstrcasecmp */
> + #include <rpmmacro.h>
> +@@ -152,7 +165,10 @@ static rpmTag _tagGenerate(const char *s
> + xx = rpmDigestUpdate(ctx, s, nb);
> + xx = rpmDigestFinal(ctx, &digest, &digestlen, 0);
> + if (digest && digestlen > 4) {
> ++ /* The tag is stored in a uniform byte order for cross-endian compatibility.
> ++ Swap to the host uses. */
> + memcpy(&tag, digest + (digestlen - 4), 4);
> ++ tag = le32toh(tag);
> + tag = (rpmTag) (tag & 0x3fffffff);
> + tag = (rpmTag) (tag | 0x40000000);
> + }
> diff --git a/meta/recipes-devtools/rpm/rpm_5.4.9.bb b/meta/recipes-devtools/rpm/rpm_5.4.9.bb
> index 9d376a5..7921f40 100644
> --- a/meta/recipes-devtools/rpm/rpm_5.4.9.bb
> +++ b/meta/recipes-devtools/rpm/rpm_5.4.9.bb
> @@ -89,6 +89,7 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex
> file://debugedit-valid-file-to-fix-segment-fault.patch \
> file://rpm-platform-file-fix.patch \
> file://rpm-lsb-compatibility.patch \
> + file://rpm-tag-generate-endian-conversion-fix.patch \
> "
>
> # Uncomment the following line to enable platform score debugging
>
prev parent reply other threads:[~2014-02-18 17:49 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-17 8:48 [PATCH V2] rpm: fix a endian incompatible error in generating tag Ming Liu
2014-02-18 17:49 ` Mark Hatle [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53039D17.6040106@windriver.com \
--to=mark.hatle@windriver.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.